Use dlsym to check if libdl is needed for plugin
authorH.J. Lu <hjl.tools@gmail.com>
Thu, 5 Apr 2018 22:31:41 +0000 (15:31 -0700)
committerH.J. Lu <hjl.tools@gmail.com>
Thu, 5 Apr 2018 22:31:53 +0000 (15:31 -0700)
commit3cba8b6c93ab8c573ba4678255df11486de61c54
treec761a209fa3a5917064a32f1397fd8fab830fdba
parent552d4da4178cc5e8d567ee150462a28d51f08fc0
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.
bfd/ChangeLog
bfd/configure
binutils/ChangeLog
binutils/configure
gas/ChangeLog
gas/configure
gprof/ChangeLog
gprof/configure
ld/ChangeLog
ld/configure