[PATCH] X86-64: Allow copy relocs for building PIE

H.J. Lu hjl.tools@gmail.com
Wed Dec 3 13:44:00 GMT 2014


On Tue, Dec 2, 2014 at 4:59 PM, H.J. Lu <hongjiu.lu@intel.com> wrote:
> On Tue, Dec 02, 2014 at 04:53:19PM -0800, H.J. Lu wrote:
>> On Tue, Dec 02, 2014 at 03:20:07PM -0800, H.J. Lu wrote:
>> > I am checking in this patch to allow copy relocs for non-GOT pc-relative
>> > relocation in PIE.  It makes bfd linker compatible with gold.
>> >
>> >
>> > H.J.
>> > ----
>> > bfd/
>> >
>> >     * elf64-x86-64.c (elf_x86_64_create_dynamic_sections): Always
>> >     allow copy relocs for building executables.
>> >     (elf_x86_64_check_relocs): Allow copy relocs for non-GOT
>> >     pc-relative relocation in shared object.
>> >     (elf_x86_64_adjust_dynamic_symbol): Allocate copy relocs for
>> >     PIE.
>> >     (elf_x86_64_relocate_section): Don't copy a pc-relative
>> >     relocation into the output file if the symbol needs copy reloc.
>> >
>>
>> This patch reverts the change in elf_x86_64_check_relocs and the partial
>> change in elf_x86_64_adjust_dynamic_symbol.  Instead, we discard space
>> in PIE for relocs against symbols which turn out to need copy relocs.
>>
>>       * elf64-x86-64.c (elf_x86_64_check_relocs): Revert the last
>>       change.
>>       (elf_x86_64_adjust_dynamic_symbol): Don't check !info->shared
>>       with ELIMINATE_COPY_RELOCS.
>>       (elf_x86_64_allocate_dynrelocs): For PIE, discard space for
>>       relocs against symbols which turn out to need copy relocs.
>> ---
>>  bfd/ChangeLog      |  9 +++++++++
>>  bfd/elf64-x86-64.c | 36 +++++++++++++++++++++---------------
>>  2 files changed, 30 insertions(+), 15 deletions(-)
>>
>> diff --git a/bfd/ChangeLog b/bfd/ChangeLog
>> index 434db31..91245b9 100644
>> --- a/bfd/ChangeLog
>> +++ b/bfd/ChangeLog
>> @@ -1,5 +1,14 @@
>>  2014-12-02  H.J. Lu  <hongjiu.lu@intel.com>
>>
>> +     * elf64-x86-64.c (elf_x86_64_check_relocs): Revert the last
>> +     change.
>> +     (elf_x86_64_adjust_dynamic_symbol): Don't check !info->shared
>> +     with ELIMINATE_COPY_RELOCS.
>> +     (elf_x86_64_allocate_dynrelocs): For PIE, discard space for
>> +     relocs against symbols which turn out to need copy relocs.
>> +
>> +2014-12-02  H.J. Lu  <hongjiu.lu@intel.com>
>> +
>>       * elf64-x86-64.c (elf_x86_64_create_dynamic_sections): Always
>>       allow copy relocs for building executables.
>>       (elf_x86_64_check_relocs): Allow copy relocs for non-GOT
>
>
> I checked in another small update.
>

I backported all 3 patches to 2.25 branch.

-- 
H.J.



More information about the Binutils mailing list