This is the mail archive of the
binutils@sourceware.org
mailing list for the binutils project.
Re: [PATCH] X86-64: Allow copy relocs for building PIE
- From: "H.J. Lu" <hjl dot tools at gmail dot com>
- Cc: Binutils <binutils at sourceware dot org>
- Date: Wed, 3 Dec 2014 05:44:49 -0800
- Subject: Re: [PATCH] X86-64: Allow copy relocs for building PIE
- Authentication-results: sourceware.org; auth=none
- References: <20141202232007 dot GA24631 at intel dot com> <20141203005319 dot GA25360 at intel dot com> <20141203005914 dot GA24250 at intel dot com>
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.