Skip to content

Commit

Permalink
Travis: Run script that checks for forbidden symbols in LibC
Browse files Browse the repository at this point in the history
check-symbols.sh fails the build if undefined __cx_guard_* symbols are
found in  LibC.

This will help us catch port breakage sooner.
  • Loading branch information
itamar8910 authored and awesomekling committed Sep 6, 2020
1 parent 542f665 commit 1c20e68
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 0 deletions.
1 change: 1 addition & 0 deletions .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ script:
- cd Build
- cmake .. -DBUILD_LAGOM=1 -DALL_THE_DEBUG_MACROS=1
- make -j2
- Meta/check-symbols.sh
- CTEST_OUTPUT_ON_FAILURE=1 make test
- cd Meta/Lagom
- DISABLE_DBG_OUTPUT=1 ./test-js
Expand Down
21 changes: 21 additions & 0 deletions Meta/check-symbols.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
#!/bin/sh

script_path=$(cd -P -- "$(dirname -- "$0")" && pwd -P)
cd "$script_path/.."

# The __cxa_guard_* calls are generated for (non trivial) initialzation of local static objects.
# These symbols are OK to use within serenity code, but they are problematic in LibC because their
# existence breaks ports (the implementation of these symbols resides in libstdc++.a which we do not link against in ports).
# To eliminate the need for these symbols, avoid doing non-trivial construction of local statics in LibC.

FORBIDDEN_SYMBOLS="__cxa_guard_acquire __cxa_guard_release"
LIBC_PATH="Build/Libraries/LibC/libc.a"
for forbidden_symbol in $FORBIDDEN_SYMBOLS; do
# check if symbol is undefined
nm $LIBC_PATH | grep "U $forbidden_symbol"
if [ $? -eq 0 ]; then
echo "Forbidden undefined symbol in LibC: $forbidden_symbol"
echo "See comment in Meta/check-symbols.sh for more info"
exit 1
fi
done

0 comments on commit 1c20e68

Please sign in to comment.