EricWF created this revision. EricWF added a reviewer: mclow.lists. EricWF added a subscriber: cfe-commits.
On OS X libc++ needs to reexport libc++abi's symbols in order for them to be provided. We explicitly list the symbols to reexport it libcxx/lib/libc++abi2.exp. This patch adds the symbols required by std::bad_array_length which have been missing for some time. However there is a problem. std::bad_array_length was add to libc++abi in September of 2013 by commit r190479, about a year after everything else. Therefore I think older OS X version have libc++abi versions without std::bad_array_length. On those systems libc++ won't build with this change because we will try and export undefined symbols. The workaround I would write to support older systems depends on the amount of people who would need it. If only a small number of developers are affected it might be sufficient to provide a CMake switch like `LIBCPP_LIBCPPABI_HAS_BAD_ARRAY_LENGTH` which is ON by default and can be disabled by those who need it. Otherwise I think we should try to automatically detect if the symbols are present in `/usr/lib/libc++abi.dylib` and configure accordingly. I would prefer the first solution because writing CMake sucks. http://reviews.llvm.org/D13445 Files: lib/CMakeLists.txt lib/libc++abi_bad_array_length.exp Index: lib/libc++abi_bad_array_length.exp =================================================================== --- /dev/null +++ lib/libc++abi_bad_array_length.exp @@ -0,0 +1,9 @@ +__ZNKSt16bad_array_length4whatEv +__ZNSt16bad_array_lengthC1Ev +__ZNSt16bad_array_lengthC2Ev +__ZNSt16bad_array_lengthD0Ev +__ZNSt16bad_array_lengthD1Ev +__ZNSt16bad_array_lengthD2Ev +__ZTISt16bad_array_length +__ZTSSt16bad_array_length +__ZTVSt16bad_array_length Index: lib/CMakeLists.txt =================================================================== --- lib/CMakeLists.txt +++ lib/CMakeLists.txt @@ -107,7 +107,8 @@ "-Wl,-reexport_library,${CMAKE_OSX_SYSROOT}/usr/lib/libc++abi.dylib") 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") + set(OSX_RE_EXPORT_LINE "/usr/lib/libc++abi.dylib -Wl,-reexported_symbols_list,${CMAKE_CURRENT_SOURCE_DIR}/libc++abi${LIBCXX_LIBCPPABI_VERSION}.exp") + set(OSX_RE_EXPORT_LINE "${OSX_RE_EXPORT_LINE} -Wl,-reexported_symbols_list,${CMAKE_CURRENT_SOURCE_DIR}/libc++abi_bad_array_length.exp") endif() add_link_flags(
Index: lib/libc++abi_bad_array_length.exp =================================================================== --- /dev/null +++ lib/libc++abi_bad_array_length.exp @@ -0,0 +1,9 @@ +__ZNKSt16bad_array_length4whatEv +__ZNSt16bad_array_lengthC1Ev +__ZNSt16bad_array_lengthC2Ev +__ZNSt16bad_array_lengthD0Ev +__ZNSt16bad_array_lengthD1Ev +__ZNSt16bad_array_lengthD2Ev +__ZTISt16bad_array_length +__ZTSSt16bad_array_length +__ZTVSt16bad_array_length Index: lib/CMakeLists.txt =================================================================== --- lib/CMakeLists.txt +++ lib/CMakeLists.txt @@ -107,7 +107,8 @@ "-Wl,-reexport_library,${CMAKE_OSX_SYSROOT}/usr/lib/libc++abi.dylib") 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") + set(OSX_RE_EXPORT_LINE "/usr/lib/libc++abi.dylib -Wl,-reexported_symbols_list,${CMAKE_CURRENT_SOURCE_DIR}/libc++abi${LIBCXX_LIBCPPABI_VERSION}.exp") + set(OSX_RE_EXPORT_LINE "${OSX_RE_EXPORT_LINE} -Wl,-reexported_symbols_list,${CMAKE_CURRENT_SOURCE_DIR}/libc++abi_bad_array_length.exp") endif() add_link_flags(
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits