diff options
author | Nick Alcock <nick.alcock@oracle.com> | 2021-03-25 16:32:46 +0000 |
---|---|---|
committer | Nick Alcock <nick.alcock@oracle.com> | 2021-03-25 16:32:51 +0000 |
commit | 8f7b22ea2a95ccab6aeaddcdee7472dbdbcfb4d3 (patch) | |
tree | 99146cfc862fde4ea37024b82f971122e860414b /libctf | |
parent | 15131809c235047c94387ef9aff207117191ed0b (diff) | |
download | fsf-binutils-gdb-8f7b22ea2a95ccab6aeaddcdee7472dbdbcfb4d3.zip fsf-binutils-gdb-8f7b22ea2a95ccab6aeaddcdee7472dbdbcfb4d3.tar.gz fsf-binutils-gdb-8f7b22ea2a95ccab6aeaddcdee7472dbdbcfb4d3.tar.bz2 |
libctf: fix ELF-in-BFD checks in the presence of ASAN
The address sanitizer contains a redirector that captures dlopen calls,
so checks for dlopen with AC_SEARCH_LIBS will always conclude that
dlopen is present when the sanitizer is on. This means it won't add
-ldl to LIBS even if needed, and the immediately-following attempt to
actually link with -lbfd will fail because libbfd also needs dlsym,
which ASAN does *not* contain a redirector for.
If we check for dlsym instead of dlopen, the check works whether ASAN is
on or off. (bfd uses both in close proximity: if it needs one, it will
always need the other.)
libctf/ChangeLog
2021-03-25 Nick Alcock <nick.alcock@oracle.com>
* configure.ac: Check for dlsym, not dlopen.
* configure: Regenerate.
Diffstat (limited to 'libctf')
-rw-r--r-- | libctf/ChangeLog | 5 | ||||
-rwxr-xr-x | libctf/configure | 24 | ||||
-rw-r--r-- | libctf/configure.ac | 2 |
3 files changed, 18 insertions, 13 deletions
diff --git a/libctf/ChangeLog b/libctf/ChangeLog index d4a94bb..e66224a 100644 --- a/libctf/ChangeLog +++ b/libctf/ChangeLog @@ -1,5 +1,10 @@ 2021-03-25 Nick Alcock <nick.alcock@oracle.com> + * configure.ac: Check for dlsym, not dlopen. + * configure: Regenerate. + +2021-03-25 Nick Alcock <nick.alcock@oracle.com> + * testsuite/libctf-writable/symtypetab-nonlinker-writeout.c: Don't leak buf. diff --git a/libctf/configure b/libctf/configure index 61f4db4..82bcf13 100755 --- a/libctf/configure +++ b/libctf/configure @@ -12798,9 +12798,9 @@ fi rm -f conftest.mmap conftest.txt # Needed for BFD capability checks. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing dlopen" >&5 -$as_echo_n "checking for library containing dlopen... " >&6; } -if ${ac_cv_search_dlopen+:} false; then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing dlsym" >&5 +$as_echo_n "checking for library containing dlsym... " >&6; } +if ${ac_cv_search_dlsym+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS @@ -12813,11 +12813,11 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext #ifdef __cplusplus extern "C" #endif -char dlopen (); +char dlsym (); int main () { -return dlopen (); +return dlsym (); ; return 0; } @@ -12830,25 +12830,25 @@ for ac_lib in '' dl; do LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : - ac_cv_search_dlopen=$ac_res + ac_cv_search_dlsym=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext - if ${ac_cv_search_dlopen+:} false; then : + if ${ac_cv_search_dlsym+:} false; then : break fi done -if ${ac_cv_search_dlopen+:} false; then : +if ${ac_cv_search_dlsym+:} false; then : else - ac_cv_search_dlopen=no + ac_cv_search_dlsym=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_dlopen" >&5 -$as_echo "$ac_cv_search_dlopen" >&6; } -ac_res=$ac_cv_search_dlopen +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_dlsym" >&5 +$as_echo "$ac_cv_search_dlsym" >&6; } +ac_res=$ac_cv_search_dlsym if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" diff --git a/libctf/configure.ac b/libctf/configure.ac index ae1f10d..80644b8 100644 --- a/libctf/configure.ac +++ b/libctf/configure.ac @@ -68,7 +68,7 @@ ACX_PROG_CC_WARNING_OPTS([-Wall], [ac_libctf_warn_cflags]) AC_FUNC_MMAP # Needed for BFD capability checks. -AC_SEARCH_LIBS(dlopen, dl) +AC_SEARCH_LIBS(dlsym, dl) AM_ZLIB GCC_ENABLE([libctf-hash-debugging], [no], [], [Enable expensive debugging of CTF deduplication type hashing]) |