mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2025-02-11 13:02:10 +08:00
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.
This commit is contained in:
parent
15131809c2
commit
8f7b22ea2a
@ -1,3 +1,8 @@
|
||||
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
|
||||
|
24
libctf/configure
vendored
24
libctf/configure
vendored
@ -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"
|
||||
|
||||
|
@ -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])
|
||||
|
Loading…
Reference in New Issue
Block a user