]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
* config/os/bsd/darwin/os_defines.h
authorAaron W. LaFramboise <aaronavay62@aaronwl.com>
Wed, 3 Nov 2004 03:00:00 +0000 (21:00 -0600)
committerAaron W. LaFramboise <aaronwl@gcc.gnu.org>
Wed, 3 Nov 2004 03:00:00 +0000 (21:00 -0600)
(_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.

From-SVN: r90017

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 9063603c0a29c997241a156c84aefee7b477be46..cb3ab699f21fb2efb10c29b242622205f0cccf6b 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 9b68110d46aaa75dcfc8d947832ecbac01b43632..07fb55b61259d3945d5e576c269c3f43e5065439 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 0c7b44c62175650950c762d0a8732db81194db44..064280b67564f8ce38e7ae38de7db989b8d7b833 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 32ccdb6808b9c4c9895ce465779e3d5354fead33..388f50863b12b996eaa436423743fbb40d9ff179 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 6cfb0775e4fb9f0ab81369add106b9015fdaed6d..76b7d69e002638203ab02ae342207c4e182480c8 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 03e1612c47fa666bd1693e2d61bf75fe35c61fbe..94cdfde32ca3e32b83b9b7d0b7a29841d14ee31b 100644 (file)
@@ -30,7 +30,7 @@
 
 #include "new"
 
-__attribute__((weak)) void
+_GLIBCXX_WEAK_DEFINITION void
 operator delete[] (void *ptr) throw ()
 {
   ::operator delete (ptr);
index 5b55cda66e624b9acd2141cb8e4b952c723b95e5..180b08f63d4650d8e380a7b5d9894feb7b6c61f2 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 656b9f42d558b4f724ad5edc237f03e79ec0e9dd..0ebec1cd36f7fe6e5953633a0fe486266fa5b258 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 ff550b706ab7bca9e2efe497890325b69ace491e..1b29c1a5f12cada9b1cf08ee81b24b6231d26ed1 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 de3bc4ebd7c71c2ddceec17bb796404010b65b0f..9fa7d19ecc49b54526637260736b948302717bcf 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 1dbf991d83848dfa7e213cf84da96e5f1554e3d5..79b8cdc1077ce6aa1759a2e63caf53cda728d74a 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);