summaryrefslogtreecommitdiff
path: root/libctf
diff options
context:
space:
mode:
authorNick Alcock <nick.alcock@oracle.com>2021-03-25 16:32:46 +0000
committerNick Alcock <nick.alcock@oracle.com>2021-03-25 16:32:51 +0000
commit8f7b22ea2a95ccab6aeaddcdee7472dbdbcfb4d3 (patch)
tree99146cfc862fde4ea37024b82f971122e860414b /libctf
parent15131809c235047c94387ef9aff207117191ed0b (diff)
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/ChangeLog5
-rwxr-xr-xlibctf/configure24
-rw-r--r--libctf/configure.ac2
3 files changed, 18 insertions, 13 deletions
diff --git a/libctf/ChangeLog b/libctf/ChangeLog
index d4a94bb27c..e66224a4fd 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 61f4db4767..82bcf13a60 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 ae1f10d1f2..80644b89d6 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])