[PATCH] [libc++] Eliminate more symbols multiply defined between libsupc++ and libc++.
Howard Hinnant
howard.hinnant at gmail.com
Sun Oct 6 13:14:03 PDT 2013
On Oct 3, 2013, at 6:08 PM, Peter Collingbourne <peter at pcc.me.uk> wrote:
> The remaining multiple definitions were flushed out by attempting to
> link libsupc++ and libc++ into the same executable with --whole-archive,
> e.g.
>
> clang++ -I../llvm/projects/libcxx/include -nodefaultlibs -Wl,--whole-archive lib/libc++.a /usr/lib/gcc/x86_64-linux-gnu/4.6/libsupc++.a -Wl,--no-whole-archive -lgcc -lgcc_s -lc -lpthread -lrt
>
> (The same technique was used to flush out multiple definitions in
> libstdc++.)
>
> http://llvm-reviews.chandlerc.com/D1824
>
> Files:
> src/exception.cpp
> src/new.cpp
>
> Index: src/exception.cpp
> ===================================================================
> --- src/exception.cpp
> +++ src/exception.cpp
> @@ -189,10 +189,14 @@
> {
> }
>
> +#if !defined(__GLIBCXX__)
> +
> nested_exception::~nested_exception() _NOEXCEPT
> {
> }
>
> +#endif
> +
> _LIBCPP_NORETURN
> void
> nested_exception::rethrow_nested() const
> Index: src/new.cpp
> ===================================================================
> --- src/new.cpp
> +++ src/new.cpp
> @@ -30,11 +30,13 @@
> #if defined(LIBCXXRT) || __has_include(<cxxabi.h>)
> #include <cxxabi.h>
> #endif // __has_include(<cxxabi.h>)
> - #ifndef _LIBCPPABI_VERSION
> + #if !defined(_LIBCPPABI_VERSION) && !defined(__GLIBCXX__)
> static std::new_handler __new_handler;
> #endif // _LIBCPPABI_VERSION
> #endif
>
> +#ifndef __GLIBCXX__
> +
> // 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.
> @@ -143,13 +145,19 @@
> ::operator delete[](ptr);
> }
>
> +#endif // !__GLIBCXX__
> +
> namespace std
> {
>
> +#ifndef __GLIBCXX__
> const nothrow_t nothrow = {};
> +#endif
>
> #ifndef _LIBCPPABI_VERSION
>
> +#ifndef __GLIBCXX__
> +
> new_handler
> set_new_handler(new_handler handler) _NOEXCEPT
> {
> @@ -162,12 +170,16 @@
> return __sync_fetch_and_add(&__new_handler, (new_handler)0);
> }
>
> +#endif // !__GLIBCXX__
> +
> #ifndef LIBCXXRT
>
> bad_alloc::bad_alloc() _NOEXCEPT
> {
> }
>
> +#ifndef __GLIBCXX__
> +
> bad_alloc::~bad_alloc() _NOEXCEPT
> {
> }
> @@ -178,6 +190,8 @@
> return "std::bad_alloc";
> }
>
> +#endif // !__GLIBCXX__
> +
> #endif //LIBCXXRT
>
> bad_array_new_length::bad_array_new_length() _NOEXCEPT
> <D1824.1.patch>_______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
Thanks, please commit.
Howard
More information about the cfe-commits
mailing list