EricWF created this revision. Herald added a subscriber: mgorny. Recent commits broke the check-cxx-abilist by changing the default OS X to use `-rexport_library` instead of `-reexport_symbol_list`. Apparently `-reexport_library` doesn't export the symbols into `libc++.dylib`s symbol table, whereas `-reexport_symbol_list` does.
This means the change removed ~500 symbols from the symbol table. I've been told this change is non ABI breaking, but it does make it harder to maintain the ABI lists, and hence the ABI. This patch fixes the issue by switching back to `-reexport_symbol_list`. It still avoid the issues fixed in r299052 by putting the new/delete symbols in a different symbol list file, which is only exported when LIBCXX_ENABLE_NEW_DELETE_DEFINITIONS in OFF. https://reviews.llvm.org/D31644 Files: lib/CMakeLists.txt lib/libc++abi-new-delete.exp lib/libc++abi2.exp Index: lib/libc++abi2.exp =================================================================== --- lib/libc++abi2.exp +++ lib/libc++abi2.exp @@ -209,14 +209,14 @@ __ZNSt20bad_array_new_lengthD0Ev __ZNSt20bad_array_new_lengthD2Ev __ZSt10unexpectedv -__ZdaPv -__ZdlPv -__ZdlPvRKSt9nothrow_t -__Znam -__ZdaPvRKSt9nothrow_t -__Znwm -__ZnwmRKSt9nothrow_t -__ZnamRKSt9nothrow_t +# __ZdaPv +# __ZdlPv +# __ZdlPvRKSt9nothrow_t +# __Znam +# __ZdaPvRKSt9nothrow_t +# __Znwm +# __ZnwmRKSt9nothrow_t +# __ZnamRKSt9nothrow_t __ZTISt10bad_typeid __ZTISt8bad_cast ___cxa_bad_typeid Index: lib/libc++abi-new-delete.exp =================================================================== --- /dev/null +++ lib/libc++abi-new-delete.exp @@ -0,0 +1,8 @@ +__ZdaPv +__ZdlPv +__ZdlPvRKSt9nothrow_t +__Znam +__ZdaPvRKSt9nothrow_t +__Znwm +__ZnwmRKSt9nothrow_t +__ZnamRKSt9nothrow_t Index: lib/CMakeLists.txt =================================================================== --- lib/CMakeLists.txt +++ lib/CMakeLists.txt @@ -150,11 +150,7 @@ "-Wl,-unexported_symbols_list,${CMAKE_CURRENT_SOURCE_DIR}/libc++unexp.exp" "/usr/lib/libSystem.B.dylib") else() - if (LIBCXX_ENABLE_NEW_DELETE_DEFINITIONS) - # We can't use the "-reexported_symbols_list" when we build the - # new/delete operators as part of the dylib: the linker would fail. - set(OSX_RE_EXPORT_LINE "-Wl,-reexport_library,${CMAKE_OSX_SYSROOT}/usr/lib/libc++abi.dylib") - elseif (DEFINED CMAKE_OSX_SYSROOT AND NOT CMAKE_OSX_SYSROOT STREQUAL "") + if (DEFINED CMAKE_OSX_SYSROOT AND NOT CMAKE_OSX_SYSROOT STREQUAL "") list(FIND CMAKE_OSX_ARCHITECTURES "armv7" OSX_HAS_ARMV7) if (NOT OSX_HAS_ARMV7 EQUAL -1) set(OSX_RE_EXPORT_LINE @@ -166,8 +162,10 @@ endif() else() set(OSX_RE_EXPORT_LINE "/usr/lib/libc++abi.dylib -Wl,-reexported_symbols_list,${CMAKE_CURRENT_SOURCE_DIR}/libc++abi${LIBCXX_LIBCPPABI_VERSION}.exp") + if (NOT LIBCXX_ENABLE_NEW_DELETE_DEFINITIONS) + add_link_flags("/usr/lib/libc++abi.dylib -Wl,-reexported_symbols_list,${CMAKE_CURRENT_SOURCE_DIR}/libc++abi-new-delete.exp") + endif() endif() - add_link_flags( "-compatibility_version 1" "-install_name /usr/lib/libc++.1.dylib"
Index: lib/libc++abi2.exp =================================================================== --- lib/libc++abi2.exp +++ lib/libc++abi2.exp @@ -209,14 +209,14 @@ __ZNSt20bad_array_new_lengthD0Ev __ZNSt20bad_array_new_lengthD2Ev __ZSt10unexpectedv -__ZdaPv -__ZdlPv -__ZdlPvRKSt9nothrow_t -__Znam -__ZdaPvRKSt9nothrow_t -__Znwm -__ZnwmRKSt9nothrow_t -__ZnamRKSt9nothrow_t +# __ZdaPv +# __ZdlPv +# __ZdlPvRKSt9nothrow_t +# __Znam +# __ZdaPvRKSt9nothrow_t +# __Znwm +# __ZnwmRKSt9nothrow_t +# __ZnamRKSt9nothrow_t __ZTISt10bad_typeid __ZTISt8bad_cast ___cxa_bad_typeid Index: lib/libc++abi-new-delete.exp =================================================================== --- /dev/null +++ lib/libc++abi-new-delete.exp @@ -0,0 +1,8 @@ +__ZdaPv +__ZdlPv +__ZdlPvRKSt9nothrow_t +__Znam +__ZdaPvRKSt9nothrow_t +__Znwm +__ZnwmRKSt9nothrow_t +__ZnamRKSt9nothrow_t Index: lib/CMakeLists.txt =================================================================== --- lib/CMakeLists.txt +++ lib/CMakeLists.txt @@ -150,11 +150,7 @@ "-Wl,-unexported_symbols_list,${CMAKE_CURRENT_SOURCE_DIR}/libc++unexp.exp" "/usr/lib/libSystem.B.dylib") else() - if (LIBCXX_ENABLE_NEW_DELETE_DEFINITIONS) - # We can't use the "-reexported_symbols_list" when we build the - # new/delete operators as part of the dylib: the linker would fail. - set(OSX_RE_EXPORT_LINE "-Wl,-reexport_library,${CMAKE_OSX_SYSROOT}/usr/lib/libc++abi.dylib") - elseif (DEFINED CMAKE_OSX_SYSROOT AND NOT CMAKE_OSX_SYSROOT STREQUAL "") + if (DEFINED CMAKE_OSX_SYSROOT AND NOT CMAKE_OSX_SYSROOT STREQUAL "") list(FIND CMAKE_OSX_ARCHITECTURES "armv7" OSX_HAS_ARMV7) if (NOT OSX_HAS_ARMV7 EQUAL -1) set(OSX_RE_EXPORT_LINE @@ -166,8 +162,10 @@ endif() else() set(OSX_RE_EXPORT_LINE "/usr/lib/libc++abi.dylib -Wl,-reexported_symbols_list,${CMAKE_CURRENT_SOURCE_DIR}/libc++abi${LIBCXX_LIBCPPABI_VERSION}.exp") + if (NOT LIBCXX_ENABLE_NEW_DELETE_DEFINITIONS) + add_link_flags("/usr/lib/libc++abi.dylib -Wl,-reexported_symbols_list,${CMAKE_CURRENT_SOURCE_DIR}/libc++abi-new-delete.exp") + endif() endif() - add_link_flags( "-compatibility_version 1" "-install_name /usr/lib/libc++.1.dylib"
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits