mirror of
https://github.com/timescale/timescaledb.git
synced 2025-05-15 01:53:41 +08:00
Change sanitizer test to run on PG12 and make it use the same infrastructure as the other linux regression tests. Co-authored-by: Sven Klemm <sven@timescale.com>
81 lines
2.7 KiB
Bash
Executable File
81 lines
2.7 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
if [ ! -x "@NM@" ];
|
|
then
|
|
echo "Cannot check export format because nm is not installed" >&2
|
|
exit 1
|
|
fi
|
|
|
|
DEFINED_ONLY="--defined-only"
|
|
EXTERN_ONLY="--extern-only"
|
|
|
|
if nm --help | grep -q llvm; then
|
|
DEFINED_ONLY="-defined-only"
|
|
EXTERN_ONLY="-extern-only"
|
|
fi
|
|
|
|
# this script outputs all symbols not starting with an allowed prefix
|
|
# exported symbols are allowed to start with
|
|
# ts_ for regular timescaledb functions
|
|
# pg_finfo for metadata defined by PG_FUNCTION_INFO_V1
|
|
# we also whitelist a couple of special symbols
|
|
# _.*_init module startup functions
|
|
# _.*_fini module shutdown functions
|
|
# Pg_magic_func used by postgres to check extension compatability
|
|
# timescaledb_hello used to test that our name collision resistance works
|
|
# loader_hello used to test that our name collision resistance works
|
|
# test_symbol_conflict used to test that our name collision resistance works
|
|
# tsl_license_update_check used to check for valid license
|
|
# __sanitizer.* __sancov.* llvm sanitizer
|
|
# _ZN11__sanitizer.* llvm sanitizer
|
|
# __asan.* __odr_asan.* address sanitizer
|
|
# __ubsan.* _ZN7__ubsan.* undefined behaviour sanitizer
|
|
# internal_sigreturn gcc
|
|
# OnPrint gcc
|
|
# backtrace_uncompress_zdebug libbacktrace
|
|
# all of these symbols start with an additional leading '_' on macos
|
|
exports=$(find @CMAKE_BINARY_DIR@ -not -path '*/\.*' -name '*.so' -print0 \
|
|
| xargs -0 @NM@ ${DEFINED_ONLY} ${EXTERN_ONLY} \
|
|
| sed -e 's:^/.*$::' -e '/^$/d' -e 's/^[a-f0-9]* [A-Za-z] //' \
|
|
| grep -v \
|
|
-e '^_\?__gcov_' \
|
|
-e '^__bss_start$' \
|
|
-e '^_edata$' \
|
|
-e '^_end$' \
|
|
-e '^_fini$' \
|
|
-e '^_init$' \
|
|
-e '^_\?flush_fn_list$' \
|
|
-e '^_\?writeout_fn_list$' \
|
|
-e '^_\?lprofDirMode$' \
|
|
-e '^_\?mangle_path$' \
|
|
-e '^_\?ts_' \
|
|
-e '^_\?tsl_license_update_check$' \
|
|
-e '^_\?pg_finfo' \
|
|
-e '^_\?_.*_init$' \
|
|
-e '^_\?_.*_fini$' \
|
|
-e '^_\?Pg_magic_func$' \
|
|
-e '^_\?timescaledb_' \
|
|
-e '^_\?loader_hello$' \
|
|
-e '^_\?test_symbol_conflict$' \
|
|
-e '^_\?__sanitizer' \
|
|
-e '^_\?__sancov' \
|
|
-e '^_\?__asan' \
|
|
-e '^_\?__odr_asan' \
|
|
-e '^_\?__ubsan' \
|
|
-e '^_\?_ZN7__ubsan' \
|
|
-e '^_\?_ZN11__sanitizer' \
|
|
-e '^_\?internal_sigreturn$' \
|
|
-e '^_\?OnPrint$' \
|
|
-e '^_\?backtrace_uncompress_zdebug$' \
|
|
)
|
|
|
|
num_exports=$(echo "${exports}" | grep -v '^$' | wc -l)
|
|
echo "${exports}"
|
|
|
|
if [ ${num_exports} -gt 0 ];
|
|
then
|
|
exit 1
|
|
else
|
|
exit 0
|
|
fi
|