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

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



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.

   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?



More information about the Binutils mailing list