diff --git a/CMakeLists.txt b/CMakeLists.txt index 0043f55..5bb2f9d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -295,18 +295,25 @@ if(BUILD_TESTING) add_test(NAME conflict_set_cxx_api_test COMMAND conflict_set_cxx_api_test) # symbol visibility tests - if(NOT WASM - AND NOT APPLE - AND NOT CMAKE_BUILD_TYPE STREQUAL Debug) + if(NOT WASM AND NOT CMAKE_BUILD_TYPE STREQUAL Debug) + if(APPLE) + set(symbol_exports ${CMAKE_SOURCE_DIR}/apple-symbol-exports.txt) + set(symbol_imports ${CMAKE_SOURCE_DIR}/apple-symbol-imports.txt) + else() + set(symbol_exports ${CMAKE_SOURCE_DIR}/symbol-exports.txt) + set(symbol_imports ${CMAKE_SOURCE_DIR}/symbol-imports.txt) + endif() add_test( NAME conflict_set_shared_symbols - COMMAND ${CMAKE_SOURCE_DIR}/test_symbols.sh - $ ${CMAKE_SOURCE_DIR}/symbols.txt) + COMMAND + ${CMAKE_SOURCE_DIR}/test_symbols.sh $ + ${symbol_exports} ${symbol_imports}) add_test( NAME conflict_set_static_symbols COMMAND ${CMAKE_SOURCE_DIR}/test_symbols.sh - $ ${CMAKE_SOURCE_DIR}/symbols.txt) + $ ${symbol_exports} + ${symbol_imports}) endif() # bench diff --git a/apple-symbol-exports.txt b/apple-symbol-exports.txt new file mode 100644 index 0000000..3ed1c91 --- /dev/null +++ b/apple-symbol-exports.txt @@ -0,0 +1,17 @@ +_ConflictSet_addWrites +_ConflictSet_check +_ConflictSet_create +_ConflictSet_destroy +_ConflictSet_getBytes +_ConflictSet_setOldestVersion +__ZN8weaselab11ConflictSet16setOldestVersionEx +__ZN8weaselab11ConflictSet9addWritesEPKNS0_10WriteRangeEix +__ZN8weaselab11ConflictSetC1EOS0_ +__ZN8weaselab11ConflictSetC1Ex +__ZN8weaselab11ConflictSetC2EOS0_ +__ZN8weaselab11ConflictSetC2Ex +__ZN8weaselab11ConflictSetD1Ev +__ZN8weaselab11ConflictSetD2Ev +__ZN8weaselab11ConflictSetaSEOS0_ +__ZNK8weaselab11ConflictSet5checkEPKNS0_9ReadRangeEPNS0_6ResultEi +__ZNK8weaselab11ConflictSet8getBytesEv diff --git a/apple-symbol-imports.txt b/apple-symbol-imports.txt new file mode 100644 index 0000000..a7d4e8b --- /dev/null +++ b/apple-symbol-imports.txt @@ -0,0 +1,7 @@ +__tlv_bootstrap +_abort +_bzero +_free +_malloc +_memcpy +_memmove \ No newline at end of file diff --git a/symbols.txt b/symbol-exports.txt similarity index 100% rename from symbols.txt rename to symbol-exports.txt diff --git a/test_symbols.sh b/test_symbols.sh index 40fd9f6..117cd2c 100755 --- a/test_symbols.sh +++ b/test_symbols.sh @@ -2,5 +2,15 @@ set -euo pipefail +# ./test_symbols.sh + diff -u <(sort < "$2") <(nm "$1" | grep " T " | cut -f3 -d " " | sort) -nm "$1" | grep " U " | (! grep -Pv 'abort|free|malloc|mem[a-z]*|__ashlti3|__stack_chk_[a-z]*|__tls_get_addr|_GLOBAL_OFFSET_TABLE_') +ec=0 +for symbol in $(nm "$1" | grep " U " | sed 's/ U //') ; do + if ! grep "$symbol" "$3" > /dev/null ; then + echo "Imported symbol $symbol not present in $3" + ec=1 + fi +done + +exit $ec \ No newline at end of file