Do not choose a non-ELF format input file to hold the linker created GOT sections.

PR 21884
	* elf32-i386.c (elf_i386_link_setup_gnu_properties): If the dynobj
	has not been set then use the bfd returned by
	_bfd_elf_link_setup_gnu_properties.  If that is null then search
	through all the input bfds selecting the first normal, ELF format
	one.
	* elf64-x86-64.c (elf_x86_64_link_setup_gnu_properties): Likewise.
This commit is contained in:
Nick Clifton 2017-08-07 10:09:51 +01:00
parent 2010d1a3f8
commit b7a18930e3
3 changed files with 36 additions and 16 deletions

View File

@ -1,3 +1,13 @@
2017-08-07 Nick Clifton <nickc@redhat.com>
PR 21884
* elf32-i386.c (elf_i386_link_setup_gnu_properties): If the dynobj
has not been set then use the bfd returned by
_bfd_elf_link_setup_gnu_properties. If that is null then search
through all the input bfds selecting the first normal, ELF format
one.
* elf64-x86-64.c (elf_x86_64_link_setup_gnu_properties): Likewise.
2017-08-06 H.J. Lu <hongjiu.lu@intel.com> 2017-08-06 H.J. Lu <hongjiu.lu@intel.com>
* elf32-i386.c (elf_i386_link_hash_entry): Change tls_get_addr * elf32-i386.c (elf_i386_link_hash_entry): Change tls_get_addr

View File

@ -6886,20 +6886,29 @@ elf_i386_link_setup_gnu_properties (struct bfd_link_info *info)
set it in check_relocs. */ set it in check_relocs. */
if (dynobj == NULL) if (dynobj == NULL)
{ {
bfd *abfd; if (pbfd != NULL)
{
htab->elf.dynobj = pbfd;
dynobj = pbfd;
}
else
{
bfd *abfd;
/* Find a normal input file to hold linker created /* Find a normal input file to hold linker created
sections. */ sections. */
for (abfd = info->input_bfds; for (abfd = info->input_bfds;
abfd != NULL; abfd != NULL;
abfd = abfd->link.next) abfd = abfd->link.next)
if ((abfd->flags if (bfd_get_flavour (abfd) == bfd_target_elf_flavour
& (DYNAMIC | BFD_LINKER_CREATED | BFD_PLUGIN)) == 0) && (abfd->flags
{ & (DYNAMIC | BFD_LINKER_CREATED | BFD_PLUGIN)) == 0)
htab->elf.dynobj = abfd; {
dynobj = abfd; htab->elf.dynobj = abfd;
break; dynobj = abfd;
} break;
}
}
} }
/* Even when lazy binding is disabled by "-z now", the PLT0 entry may /* Even when lazy binding is disabled by "-z now", the PLT0 entry may
@ -6991,7 +7000,7 @@ elf_i386_link_setup_gnu_properties (struct bfd_link_info *info)
return pbfd; return pbfd;
/* Since create_dynamic_sections isn't always called, but GOT /* Since create_dynamic_sections isn't always called, but GOT
relocations need GOT relocations, create them here so that we relocations need GOT sections, create them here so that we
don't need to do it in check_relocs. */ don't need to do it in check_relocs. */
if (htab->elf.sgot == NULL if (htab->elf.sgot == NULL
&& !_bfd_elf_create_got_section (dynobj, info)) && !_bfd_elf_create_got_section (dynobj, info))

View File

@ -7427,8 +7427,9 @@ error_alignment:
for (abfd = info->input_bfds; for (abfd = info->input_bfds;
abfd != NULL; abfd != NULL;
abfd = abfd->link.next) abfd = abfd->link.next)
if ((abfd->flags if (bfd_get_flavour (abfd) == bfd_target_elf_flavour
& (DYNAMIC | BFD_LINKER_CREATED | BFD_PLUGIN)) == 0) && (abfd->flags
& (DYNAMIC | BFD_LINKER_CREATED | BFD_PLUGIN)) == 0)
{ {
htab->elf.dynobj = abfd; htab->elf.dynobj = abfd;
dynobj = abfd; dynobj = abfd;