From c4862fee9b107735c614b6df74e89e85f304fd63 Mon Sep 17 00:00:00 2001 From: Andrew Noyes Date: Wed, 3 Apr 2024 12:15:08 -0700 Subject: [PATCH] Add symbol tests for apple closes #21 --- CMakeLists.txt | 19 +++++++++++++------ apple-symbol-exports.txt | 17 +++++++++++++++++ apple-symbol-imports.txt | 7 +++++++ symbols.txt => symbol-exports.txt | 0 test_symbols.sh | 12 +++++++++++- 5 files changed, 48 insertions(+), 7 deletions(-) create mode 100644 apple-symbol-exports.txt create mode 100644 apple-symbol-imports.txt rename symbols.txt => symbol-exports.txt (100%) 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