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

Reply via email to