mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-12-15 04:31:49 +08:00
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.
This commit is contained in:
parent
e62b9723fd
commit
493f652c95
@ -1,3 +1,12 @@
|
|||||||
|
2016-04-29 H.J. Lu <hongjiu.lu@intel.com>
|
||||||
|
|
||||||
|
* 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 <hongjiu.lu@intel.com>
|
2016-04-29 H.J. Lu <hongjiu.lu@intel.com>
|
||||||
|
|
||||||
* elf32-i386.c (UNDEFINED_WEAK_RESOLVED_TO_ZERO): Take GOT_RELOC
|
* elf32-i386.c (UNDEFINED_WEAK_RESOLVED_TO_ZERO): Take GOT_RELOC
|
||||||
|
@ -1066,6 +1066,17 @@ elf_i386_create_dynamic_sections (bfd *dynobj, struct bfd_link_info *info)
|
|||||||
if (htab == NULL)
|
if (htab == NULL)
|
||||||
return FALSE;
|
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");
|
htab->sdynbss = bfd_get_linker_section (dynobj, ".dynbss");
|
||||||
if (!htab->sdynbss)
|
if (!htab->sdynbss)
|
||||||
abort ();
|
abort ();
|
||||||
@ -3089,20 +3100,6 @@ elf_i386_size_dynamic_sections (bfd *output_bfd, struct bfd_link_info *info)
|
|||||||
if (dynobj == NULL)
|
if (dynobj == NULL)
|
||||||
abort ();
|
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
|
/* Set up .got offsets for local syms, and space for local dynamic
|
||||||
relocs. */
|
relocs. */
|
||||||
for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link.next)
|
for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link.next)
|
||||||
|
@ -1109,6 +1109,17 @@ elf_x86_64_create_dynamic_sections (bfd *dynobj,
|
|||||||
if (htab == NULL)
|
if (htab == NULL)
|
||||||
return FALSE;
|
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");
|
htab->sdynbss = bfd_get_linker_section (dynobj, ".dynbss");
|
||||||
if (!htab->sdynbss)
|
if (!htab->sdynbss)
|
||||||
abort ();
|
abort ();
|
||||||
@ -3446,20 +3457,6 @@ elf_x86_64_size_dynamic_sections (bfd *output_bfd,
|
|||||||
if (dynobj == NULL)
|
if (dynobj == NULL)
|
||||||
abort ();
|
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
|
/* Set up .got offsets for local syms, and space for local dynamic
|
||||||
relocs. */
|
relocs. */
|
||||||
for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link.next)
|
for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link.next)
|
||||||
|
Loading…
Reference in New Issue
Block a user