[PATCH] PR ld/19636: [x86] Resolve undefweak and defined symbols in executable

Jiong Wang jiong.wang@foss.arm.com
Wed Mar 2 12:28:00 GMT 2016



On 02/03/16 12:22, H.J. Lu wrote:
> On Wed, Mar 2, 2016 at 4:03 AM, Jiong Wang <jiong.wang@foss.arm.com> wrote:
>>
>> On 01/03/16 14:37, H.J. Lu wrote:
>>> On Tue, Mar 1, 2016 at 6:02 AM, Kyrill Tkachov
>>> <kyrylo.tkachov@foss.arm.com> wrote:
>>>> Hi HJ,
>>>>
>>>> On 26/02/16 12:51, H.J. Lu wrote:
>>>>> On Thu, Feb 25, 2016 at 10:59 AM, H.J. Lu <hjl.tools@gmail.com> wrote:
>>>>>> Here is the updated patch I am testing.  The linker behavior is changed
>>>>>> in 2 cases when creating executable:
>>>>>>
>>>>>> 1. When there are mixed PIC and non-PIC references to undefined
>>>>>> weak symbols, undefined weak symbols are resolved to 0 at link-time.
>>>>>> 2. If all references to undefined weak symbols are PIC, dynamic
>>>>>> relocations against undefined weak symbols will be generated unless
>>>>>> -z nodynamic-undefined-weak is passed to linker.
>>>>>>
>>>>>> BTW,  We have to resolve R_X86_64_32/R_X86_64_PC32 relocations
>>>>>> against undefined weak symbols to zero.  Otherwise, we will get
>>>>>> run-time
>>>>>> relocation overflow for dynamic R_X86_64_32/R_X86_64_PC32 relocations.
>>>>>>
>>>>> This is what I am checking in.
>>>>>
>>>>>
>>>> I'm seeing:
>>>>
>>>> NA->FAIL: Mixing PIC and non-PIC
>>>> on aarch64-none-linux-gnu.
>>> You can either fix aarch64 backend or skip the test for aarch64.
>>
>> H.J,
>>
>>    For your testcase, AArch64 is not generating dynamic relocation for
>>    weak undefined symbol referenced from non-pic code when linking
>>    exectuable, instead, it's resolved to zero during static linking stage.
>>    As far as I know, this behavior is exactly what's described here at
>>
>>      https://sourceware.org/ml/binutils/2008-04/msg00269.html
>>
>>    And reading those historical discussions,
>>
>>     https://sourceware.org/ml/binutils/2008-04/msg00032.html
>>     https://sourceware.org/ml/binutils/2008-02/msg00264.html
>>
>>    Looks to me the ld behavior changes introduced by your patch is quite
>>    sensitive and there still be lack of consensus.
> What linker change were you referring to?  I only added a testcase.

I mean those linker changes added together with this testcase.

commit aec6b87e0b66d707ead62ca40d220ee78b4cf5a5
Author: H.J. Lu <hjl.tools@gmail.com>
Date:   Fri Feb 26 04:16:15 2016 -0800

     [x86] Resolve non-PIC undefweak symbols in executable

>
>>    Therefore, instead of skipping this testcase on AArch64 (I guess a few
>>    other targets will fail on native tests as well), can you please only
>>    enable this testcase on x86 arches firstly?
> These backends are also broken.
>



More information about the Binutils mailing list