diff options
| author | David Chisnall <theraven@FreeBSD.org> | 2012-03-13 14:09:15 +0000 | 
|---|---|---|
| committer | David Chisnall <theraven@FreeBSD.org> | 2012-03-13 14:09:15 +0000 | 
| commit | 362d815b81e2b4b66c33b99203d821b8928607e1 (patch) | |
| tree | 491848d33dbdf1751fd52f321d3fbf70a8e616f2 /src/new.cpp | |
| parent | 1828c5696f7bf5850943ea6c660a493a5e648669 (diff) | |
Notes
Diffstat (limited to 'src/new.cpp')
| -rw-r--r-- | src/new.cpp | 24 | 
1 files changed, 19 insertions, 5 deletions
diff --git a/src/new.cpp b/src/new.cpp index 1e8ed88dc4c1..1c171a871b9b 100644 --- a/src/new.cpp +++ b/src/new.cpp @@ -13,14 +13,19 @@  #if __APPLE__      #include <cxxabi.h> -    // On Darwin, there are two STL shared libraries and a lower level ABI -    // shared libray.  The global holding the current new handler is -    // in the ABI library and named __cxa_new_handler. -    #define __new_handler __cxxabiapple::__cxa_new_handler + +    #ifndef _LIBCPPABI_VERSION +        // On Darwin, there are two STL shared libraries and a lower level ABI +        // shared libray.  The global holding the current new handler is +        // in the ABI library and named __cxa_new_handler. +        #define __new_handler __cxxabiapple::__cxa_new_handler +    #endif  #else  // __APPLE__      static std::new_handler __new_handler;  #endif +#if !defined (LIBCXXRT) // && !defined(_LIBCPPABI_VERSION) +  // Implement all new and delete operators as weak definitions  // in this shared library, so that they can be overriden by programs  // that define non-weak copies of the functions. @@ -83,7 +88,7 @@ operator new[](size_t size)  __attribute__((__weak__, __visibility__("default")))  void* -operator new[](size_t size, const std::nothrow_t& nothrow) _NOEXCEPT +operator new[](size_t size, const std::nothrow_t&) _NOEXCEPT  {      void* p = 0;  #ifndef _LIBCPP_NO_EXCEPTIONS @@ -129,11 +134,15 @@ operator delete[] (void* ptr, const std::nothrow_t&) _NOEXCEPT      ::operator delete[](ptr);  } +#endif  // !_LIBCPPABI_VERSION && !LIBCXXRT +  namespace std  {  const nothrow_t nothrow = {}; +#ifndef _LIBCPPABI_VERSION +  new_handler  set_new_handler(new_handler handler) _NOEXCEPT  { @@ -146,6 +155,8 @@ get_new_handler() _NOEXCEPT      return __sync_fetch_and_add(&__new_handler, (new_handler)0);  } +#ifndef LIBCXXRT +  bad_alloc::bad_alloc() _NOEXCEPT  {  } @@ -174,6 +185,9 @@ bad_array_new_length::what() const _NOEXCEPT      return "bad_array_new_length";  } +#endif +#endif //LIBCXXRT +  void  __throw_bad_alloc()  {  | 
