This is the mail archive of the
mailing list for the binutils project.
Re: [PATCH] PR ld/19636: [x86] Resolve undefweak and defined symbols in executable
- From: "H.J. Lu" <hjl dot tools at gmail dot com>
- To: Michael Matz <matz at suse dot de>
- Cc: Binutils <binutils at sourceware dot org>
- Date: Wed, 24 Feb 2016 06:47:44 -0800
- Subject: Re: [PATCH] PR ld/19636: [x86] Resolve undefweak and defined symbols in executable
- Authentication-results: sourceware.org; auth=none
- References: <20160223175814 dot GA2858 at intel dot com> <alpine dot LSU dot 2 dot 20 dot 1602241541430 dot 20277 at wotan dot suse dot de>
On Wed, Feb 24, 2016 at 6:45 AM, Michael Matz <email@example.com> wrote:
> On Tue, 23 Feb 2016, H.J. Lu wrote:
>> For i386 and x86-64, undefined weak and defined symbols are resolved
>> without dynamic relocation when creating executable. Undefined weak
>> symbols aren't needed in the dynamic symbol table in executable. One
>> exception is on i386, we need undefined weak symbols in the dynamic
>> symbol table in PIE if input relocatable files contain branchs without
>> PLT so that we can branch to 0 with dynamic relocation in text section.
> Um, wait. Have you now changed it so that this program won't work anymore
> (no matter if PIC or non-PIC)?:
It never worked correctly:
> extern void undef() __attribute__((weak));
> int main()
> if (undef)
> undef ();
> return 0;
>> This makes behaviors of static excutable, dynamic excutable and position
>> independent executable consistent with references to undefined weak and
>> defined symbols, regardless if the relocatable input is compiled with
>> PIC or not.
> Because, while consistence is good, it's more important that the above
> program keeps working (and if only under PIC).
I will add
-z dynamic-undefined-weak Treat undefined weak symbol as dynamic
to enable the old behavior.