[PATCH] Always clear h->verinfo.verdef when overriding a dynamic definition

H.J. Lu hjl.tools@gmail.com
Fri Aug 10 19:23:00 GMT 2018


On Fri, Aug 10, 2018 at 12:15 AM, Alan Modra <amodra@gmail.com> wrote:
> On Thu, Aug 09, 2018 at 08:36:29PM -0700, H.J. Lu wrote:
>> On Thu, Aug 9, 2018 at 8:06 PM, Alan Modra <amodra@gmail.com> wrote:
>> > On Thu, Aug 09, 2018 at 04:09:14PM -0700, H.J. Lu wrote:
>> >> When linker defines a symbol to override a definition, which came from
>> >> a dynamic object before, we should always clear h->verinfo.verdef so
>> >> that the symbol won't be associated with the version information from
>> >> the dynamic object.  This happened to the symbol "_edata" when creating
>> >> an unversioned dynamic object linking against libQt5Core.so.5.11.1,
>> >> which was created by gold, with 2 entries of "_edata@Qt_5" in its dynamic
>> >> symbol table:
>> >>
>> >>   4822: 00000000004e36ed     0 NOTYPE  GLOBAL DEFAULT   21 _edata@Qt_5
>> >>   4823: 00000000004e36ed     0 NOTYPE  GLOBAL DEFAULT   21 _edata@Qt_5
>> >>
>> >> Ld created the dynamic object with "_edata" in its dynamic symbol table
>> >> which was linker defined and associated with the version information
>> >> from libQt5Core.so.5.11.1.
>> >
>> > How did _edata come to have version info?  A non-default versioned
>> > _edata (with one '@') shouldn't make _edata defined.  I think we
>> > probably have another bug here to fix.
>>
>> That dynamic object is created against:
>>
>> /usr/lib64/libKF5ConfigCore.so.5.49.0
>> /usr/lib64/libKF5CoreAddons.so.5.49.0 /usr/lib64/libKF5I18n.so.5.49.0
>> /usr/lib64/libKF5DBusAddons.so.5.49.0 /usr/lib64/libQt5Xml.so.5.11.1
>>    /usr/lib64/libQt5DBus.so.5.11.1 /usr/lib64/libQt5Core.so.5.11.1
>>
>> Among them
>>
>> /usr/lib64/libQt5Xml.so.5.11.1
>>    299: 000000000003e000     0 NOTYPE  GLOBAL DEFAULT   18 _edata@@Qt_5
>
> Ah, so this would define _edata.
>
>> /usr/lib64/libQt5DBus.so.5.11.1
>>    597: 0000000000092018     0 NOTYPE  GLOBAL DEFAULT   18 _edata@@Qt_5
>> /usr/lib64/libQt5Core.so.5.11.1
>>   2292: 00000000004df640     0 NOTYPE  GLOBAL DEFAULT   21 _edata@Qt_5
>>   2293: 00000000004df640     0 NOTYPE  GLOBAL DEFAULT   21 _edata@Qt_5
>>
>> The problem is triggered by the last 2 duplicated entries.   The code
>> in question was
>> there when the binutils source was imported to sourceware.org.   I
>> couldn't think of
>> a reason why it shouldn't clear h->verinfo.verdef when provide is TRUE.
>
> I too, but I was worried there was some way _edata@Qt_5 was defining
> _edata.  Patch OK but please do run the testsuite over lots of targets.
>

This is what I checked in after tested with many ELF targets.

-- 
H.J.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0001-Always-clear-h-verinfo.verdef-when-overriding-a-dyna.patch
Type: text/x-patch
Size: 2909 bytes
Desc: not available
URL: <https://sourceware.org/pipermail/binutils/attachments/20180810/45cfa5d9/attachment.bin>


More information about the Binutils mailing list