OSDN Git Service

* config/os/bsd/darwin/os_defines.h
authoraaronwl <aaronwl@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 3 Nov 2004 03:00:00 +0000 (03:00 +0000)
committeraaronwl <aaronwl@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 3 Nov 2004 03:00:00 +0000 (03:00 +0000)
(_GLIBCXX_WEAK_DEFINITION): Define.
* include/bits/c++config (_GLIBCXX_WEAK_DEFINITION): Define.
* libsupc++/del_op.cc (operator delete(void *)): Use
_GLIBCXX_WEAK_DEFINITION.
* libsupc++/del_opnt.cc
(operator delete(void *, const std::nothrow_t&)): Same.
* libsupc++/del_opv.cc (operator delete[](void *)): Same.
* libsupc++/del_opvnt.cc
(operator delete[](void *, const std::nothrow_t&)): Same.
* libsupc++/new_op.cc (operator new(std::size_t)): Same.
* libsupc++/new_opnt.cc
(operator new(std::size_t, const std::nothrow_t&)): Same
* libsupc++/new_opv.cc (operator new[](std::size_t)): Same.
* libsupc++/new_opvnt.cc
(operator new[](std::size_t, const std::nothrow_t&)): Same.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@90017 138bc75d-0d04-0410-961f-82ee72b054a4

libstdc++-v3/ChangeLog
libstdc++-v3/config/os/bsd/darwin/os_defines.h
libstdc++-v3/include/bits/c++config
libstdc++-v3/libsupc++/del_op.cc
libstdc++-v3/libsupc++/del_opnt.cc
libstdc++-v3/libsupc++/del_opv.cc
libstdc++-v3/libsupc++/del_opvnt.cc
libstdc++-v3/libsupc++/new_op.cc
libstdc++-v3/libsupc++/new_opnt.cc
libstdc++-v3/libsupc++/new_opv.cc
libstdc++-v3/libsupc++/new_opvnt.cc

index 9063603..cb3ab69 100644 (file)
@@ -1,3 +1,22 @@
+2004-11-03  Aaron W. LaFramboise  <aaronavay62@aaronwl.com>
+
+       * config/os/bsd/darwin/os_defines.h
+       (_GLIBCXX_WEAK_DEFINITION): Define.
+       * include/bits/c++config (_GLIBCXX_WEAK_DEFINITION): Define.
+       * libsupc++/del_op.cc (operator delete(void *)): Use
+       _GLIBCXX_WEAK_DEFINITION.
+       * libsupc++/del_opnt.cc
+       (operator delete(void *, const std::nothrow_t&)): Same.
+       * libsupc++/del_opv.cc (operator delete[](void *)): Same.
+       * libsupc++/del_opvnt.cc
+       (operator delete[](void *, const std::nothrow_t&)): Same.
+       * libsupc++/new_op.cc (operator new(std::size_t)): Same.
+       * libsupc++/new_opnt.cc
+       (operator new(std::size_t, const std::nothrow_t&)): Same
+       * libsupc++/new_opv.cc (operator new[](std::size_t)): Same.
+       * libsupc++/new_opvnt.cc
+       (operator new[](std::size_t, const std::nothrow_t&)): Same.
+
 2004-11-02  Paolo Carlini  <pcarlini@suse.de>
 
        * include/bits/locale_facets.tcc (num_get<>::_M_extract_int):
index 9b68110..07fb55b 100644 (file)
    links to, so there's no need for weak-ness for that.  */
 #define _GLIBCXX_GTHREAD_USE_WEAK 0
 
+// On Darwin, in order to enable overriding of operator new and delete,
+// GCC makes the definition of these functions weak, relies on the
+// loader to implement weak semantics properly, and uses
+// -flat_namespace to work around the way that it doesn't.
+#define _GLIBCXX_WEAK_DEFINITION __attribute__ ((weak))
+
 #endif
index 0c7b44c..064280b 100644 (file)
 # define _GLIBCXX_EXTERN_TEMPLATE 1
 #endif
 
+// Certain function definitions that are meant to be overridable
+// from user code are decorated with this macro.  For some targets,
+// this macro causes these definitions to be weak.
+#ifndef _GLIBCXX_WEAK_DEFINITION
+#define _GLIBCXX_WEAK_DEFINITION
+#endif
+
 // Debug mode support. Debug mode basic_string is not allowed to be
 // associated with std, because of locale and exception link
 // dependence.
index 32ccdb6..388f508 100644 (file)
@@ -39,7 +39,7 @@ using std::free;
 extern "C" void free(void *);
 #endif
 
-__attribute__((weak)) void
+_GLIBCXX_WEAK_DEFINITION void
 operator delete (void *ptr) throw ()
 {
   if (ptr)
index 6cfb077..76b7d69 100644 (file)
@@ -32,7 +32,7 @@
 
 extern "C" void free (void *);
 
-__attribute__((weak)) void
+_GLIBCXX_WEAK_DEFINITION void
 operator delete (void *ptr, const std::nothrow_t&) throw ()
 {
   if (ptr)
index 03e1612..94cdfde 100644 (file)
@@ -30,7 +30,7 @@
 
 #include "new"
 
-__attribute__((weak)) void
+_GLIBCXX_WEAK_DEFINITION void
 operator delete[] (void *ptr) throw ()
 {
   ::operator delete (ptr);
index 5b55cda..180b08f 100644 (file)
@@ -30,7 +30,7 @@
 
 #include "new"
 
-__attribute__((weak)) void
+_GLIBCXX_WEAK_DEFINITION void
 operator delete[] (void *ptr, const std::nothrow_t&) throw ()
 {
   ::operator delete (ptr);
index 656b9f4..0ebec1c 100644 (file)
@@ -43,7 +43,7 @@ extern "C" void *malloc (std::size_t);
 
 extern new_handler __new_handler;
 
-__attribute__((weak)) void *
+_GLIBCXX_WEAK_DEFINITION void *
 operator new (std::size_t sz) throw (std::bad_alloc)
 {
   void *p;
index ff550b7..1b29c1a 100644 (file)
@@ -36,7 +36,7 @@ using std::bad_alloc;
 extern "C" void *malloc (std::size_t);
 extern new_handler __new_handler;
 
-__attribute__((weak)) void *
+_GLIBCXX_WEAK_DEFINITION void *
 operator new (std::size_t sz, const std::nothrow_t&) throw()
 {
   void *p;
index de3bc4e..9fa7d19 100644 (file)
@@ -30,7 +30,7 @@
 
 #include "new"
 
-__attribute__((weak)) void *
+_GLIBCXX_WEAK_DEFINITION void *
 operator new[] (std::size_t sz) throw (std::bad_alloc)
 {
   return ::operator new(sz);
index 1dbf991..79b8cdc 100644 (file)
@@ -30,7 +30,7 @@
 
 #include "new"
 
-__attribute__((weak)) void *
+_GLIBCXX_WEAK_DEFINITION void *
 operator new[] (std::size_t sz, const std::nothrow_t& nothrow) throw()
 {
   return ::operator new(sz, nothrow);