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 08:13:22 -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> <CAMe9rOr2cNR0i=R9Bmen+HWBnMrf4+bejRgdiNR26O03khJUpQ at mail dot gmail dot com>
On Wed, Dec 3, 2014 at 5:44 AM, H.J. Lu <hjl.tools@gmail.com> wrote:
> 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.
I also checked this small patch into master and 2.25 branches.
--
H.J.
----
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index f7caed5..61a8b2b 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,3 +1,7 @@
+2014-12-03 H.J. Lu <hongjiu.lu@intel.com>
+
+ * elf64-x86-64.c (elf_x86_64_create_dynamic_sections): Reformat.
+
2014-12-02 H.J. Lu <hongjiu.lu@intel.com>
* elf64-x86-64.c (elf_x86_64_relocate_section): Check
diff --git a/bfd/elf64-x86-64.c b/bfd/elf64-x86-64.c
index 8b0b8bf..566502f 100644
--- a/bfd/elf64-x86-64.c
+++ b/bfd/elf64-x86-64.c
@@ -1066,8 +1066,7 @@ elf_x86_64_create_dynamic_sections (bfd *dynobj,
if (info->executable)
{
/* Always allow copy relocs for building executables. */
- asection *s;
- s = bfd_get_linker_section (dynobj, ".rela.bss");
+ asection *s = bfd_get_linker_section (dynobj, ".rela.bss");
if (s == NULL)
{
const struct elf_backend_data *bed = get_elf_backend_data (dynobj);