From 493f652c956f2037c1c638c1887b634d67da0835 Mon Sep 17 00:00:00 2001 From: "H.J. Lu" Date: Fri, 29 Apr 2016 08:27:13 -0700 Subject: Set interpreter in x86 create_dynamic_sections Set interpreter in x86 create_dynamic_sections to make this information available to x86 check_relocs. * elf32-i386.c (elf_i386_size_dynamic_sections): Move interp setting to ... (elf_i386_create_dynamic_sections): Here. * elf64-x86-64.c (elf_x86_64_size_dynamic_sections): Move interp setting to ... (elf_x86_64_create_dynamic_sections): Here. --- bfd/ChangeLog | 9 +++++++++ bfd/elf32-i386.c | 25 +++++++++++-------------- bfd/elf64-x86-64.c | 25 +++++++++++-------------- 3 files changed, 31 insertions(+), 28 deletions(-) diff --git a/bfd/ChangeLog b/bfd/ChangeLog index ae512f71e61..394e83c9617 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,12 @@ +2016-04-29 H.J. Lu + + * elf32-i386.c (elf_i386_size_dynamic_sections): Move interp + setting to ... + (elf_i386_create_dynamic_sections): Here. + * elf64-x86-64.c (elf_x86_64_size_dynamic_sections): Move + interp setting to ... + (elf_x86_64_create_dynamic_sections): Here. + 2016-04-29 H.J. Lu * elf32-i386.c (UNDEFINED_WEAK_RESOLVED_TO_ZERO): Take GOT_RELOC diff --git a/bfd/elf32-i386.c b/bfd/elf32-i386.c index 38b1d3b63ad..c45697c0db2 100644 --- a/bfd/elf32-i386.c +++ b/bfd/elf32-i386.c @@ -1066,6 +1066,17 @@ elf_i386_create_dynamic_sections (bfd *dynobj, struct bfd_link_info *info) if (htab == NULL) return FALSE; + /* Set the contents of the .interp section to the interpreter. */ + if (bfd_link_executable (info) && !info->nointerp) + { + asection *s = bfd_get_linker_section (dynobj, ".interp"); + if (s == NULL) + abort (); + s->size = sizeof ELF_DYNAMIC_INTERPRETER; + s->contents = (unsigned char *) ELF_DYNAMIC_INTERPRETER; + htab->interp = s; + } + htab->sdynbss = bfd_get_linker_section (dynobj, ".dynbss"); if (!htab->sdynbss) abort (); @@ -3089,20 +3100,6 @@ elf_i386_size_dynamic_sections (bfd *output_bfd, struct bfd_link_info *info) if (dynobj == NULL) abort (); - if (htab->elf.dynamic_sections_created) - { - /* Set the contents of the .interp section to the interpreter. */ - if (bfd_link_executable (info) && !info->nointerp) - { - s = bfd_get_linker_section (dynobj, ".interp"); - if (s == NULL) - abort (); - s->size = sizeof ELF_DYNAMIC_INTERPRETER; - s->contents = (unsigned char *) ELF_DYNAMIC_INTERPRETER; - htab->interp = s; - } - } - /* Set up .got offsets for local syms, and space for local dynamic relocs. */ for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link.next) diff --git a/bfd/elf64-x86-64.c b/bfd/elf64-x86-64.c index 3775853d43f..364379aa701 100644 --- a/bfd/elf64-x86-64.c +++ b/bfd/elf64-x86-64.c @@ -1109,6 +1109,17 @@ elf_x86_64_create_dynamic_sections (bfd *dynobj, if (htab == NULL) return FALSE; + /* Set the contents of the .interp section to the interpreter. */ + if (bfd_link_executable (info) && !info->nointerp) + { + asection *s = bfd_get_linker_section (dynobj, ".interp"); + if (s == NULL) + abort (); + s->size = htab->dynamic_interpreter_size; + s->contents = (unsigned char *) htab->dynamic_interpreter; + htab->interp = s; + } + htab->sdynbss = bfd_get_linker_section (dynobj, ".dynbss"); if (!htab->sdynbss) abort (); @@ -3446,20 +3457,6 @@ elf_x86_64_size_dynamic_sections (bfd *output_bfd, if (dynobj == NULL) abort (); - if (htab->elf.dynamic_sections_created) - { - /* Set the contents of the .interp section to the interpreter. */ - if (bfd_link_executable (info) && !info->nointerp) - { - s = bfd_get_linker_section (dynobj, ".interp"); - if (s == NULL) - abort (); - s->size = htab->dynamic_interpreter_size; - s->contents = (unsigned char *) htab->dynamic_interpreter; - htab->interp = s; - } - } - /* Set up .got offsets for local syms, and space for local dynamic relocs. */ for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link.next) -- cgit v1.2.1