diff options
author | H.J. Lu <hjl.tools@gmail.com> | 2018-04-05 15:31:41 -0700 |
---|---|---|
committer | H.J. Lu <hjl.tools@gmail.com> | 2018-04-05 15:31:53 -0700 |
commit | 3cba8b6c93ab8c573ba4678255df11486de61c54 (patch) | |
tree | c761a209fa3a5917064a32f1397fd8fab830fdba /binutils/configure | |
parent | 552d4da4178cc5e8d567ee150462a28d51f08fc0 (diff) | |
download | binutils-3cba8b6c93ab8c573ba4678255df11486de61c54.zip binutils-3cba8b6c93ab8c573ba4678255df11486de61c54.tar.gz binutils-3cba8b6c93ab8c573ba4678255df11486de61c54.tar.bz2 |
Use dlsym to check if libdl is needed for plugin
config/plugins.m4 has
if test "$plugins" = "yes"; then
AC_SEARCH_LIBS([dlopen], [dl])
fi
Plugin uses dlsym, but libasan.so only intercepts dlopen, not dlsym:
[hjl@gnu-tools-1 binutils-text]$ nm -D /lib64/libasan.so.4| grep " dl"
0000000000038580 W dlclose
U dl_iterate_phdr
000000000004dc50 W dlopen
U dlsym
U dlvsym
[hjl@gnu-tools-1 binutils-text]$
Testing dlopen for libdl leads to false negative when -fsanitize=address
is used. It results in link failure:
../bfd/.libs/libbfd.a(plugin.o): undefined reference to symbol 'dlsym@@GLIBC_2.16'
dlsym should be used to check if libdl is needed for plugin.
bfd/
PR gas/22318
* configure: Regenerated.
binutils/
PR gas/22318
* configure: Regenerated.
gas/
PR gas/22318
* configure: Regenerated.
gprof/
PR gas/22318
* configure: Regenerated.
ld/
PR gas/22318
* configure: Regenerated.
Diffstat (limited to 'binutils/configure')
-rwxr-xr-x | binutils/configure | 24 |
1 files changed, 12 insertions, 12 deletions
diff --git a/binutils/configure b/binutils/configure index e11c43f..374605d 100755 --- a/binutils/configure +++ b/binutils/configure @@ -11622,9 +11622,9 @@ else fi if test "$plugins" = "yes"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing dlopen" >&5 -$as_echo_n "checking for library containing dlopen... " >&6; } -if test "${ac_cv_search_dlopen+set}" = set; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing dlsym" >&5 +$as_echo_n "checking for library containing dlsym... " >&6; } +if test "${ac_cv_search_dlsym+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS @@ -11637,11 +11637,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; } @@ -11654,25 +11654,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 test "${ac_cv_search_dlopen+set}" = set; then : + if test "${ac_cv_search_dlsym+set}" = set; then : break fi done -if test "${ac_cv_search_dlopen+set}" = set; then : +if test "${ac_cv_search_dlsym+set}" = set; 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" |