[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