This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

PING^2: [PATCH] Use dlsym to check if libdl is needed for plugin


On Wed, Feb 21, 2018 at 3:02 AM, H.J. Lu <hjl.tools@gmail.com> wrote:
> On Wed, Oct 18, 2017 at 5:25 PM, H.J. Lu <hjl.tools@gmail.com> wrote:
>> 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.
>>
>> OK for master?
>>
>> H.J.
>> ---
>> bfd/
>>
>>         PR gas/22318
>>         * configure: Regenerated.
>>
>> binutils/
>>
>>         PR gas/22318
>>         * configure: Regenerated.
>>
>> config/
>>
>>         * plugins.m4 (AC_PLUGINS): Use dlsym to check if libdl is needed.
>>
>> gas/
>>
>>         PR gas/22318
>>         * configure: Regenerated.
>>
>> gprof/
>>
>>         PR gas/22318
>>         * configure: Regenerated.
>>
>> ld/
>>
>>         PR gas/22318
>>         * configure: Regenerated.

PING.

-- 
H.J.
From 8157f3e03107e77b8306d4ab1388a63548a13470 Mon Sep 17 00:00:00 2001
From: "H.J. Lu" <hjl.tools@gmail.com>
Date: Wed, 18 Oct 2017 17:18:37 -0700
Subject: [PATCH] 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.

	* plugins.m4 (AC_PLUGINS): Use dlsym to check if libdl is needed.

diff --git a/config/plugins.m4 b/config/plugins.m4
index 513c690e1b..c6acebc1ca 100644
--- a/config/plugins.m4
+++ b/config/plugins.m4
@@ -16,6 +16,6 @@ AC_DEFUN([AC_PLUGINS],
     [plugins=$maybe_plugins]
   )
   if test "$plugins" = "yes"; then
-    AC_SEARCH_LIBS([dlopen], [dl])
+    AC_SEARCH_LIBS([dlsym], [dl])
   fi
 ])

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]