mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-28 07:08:01 +08:00
[HPPA] Attach linker created dynamic sections to stub bfd
bfd/ * elf32-hppa.c (elf32_hppa_init_stub_bfd): New function. (elf32_hppa_check_relocs): Don't set dynobj. (elf32_hppa_size_stubs): Test !SEC_LINKER_CREATED for stub sections. (elf32_hppa_build_stubs): Likewise. * elf32-hppa.h (elf32_hppa_init_stub_bfd): Declare. ld/ * emultempl/hppaelf.em (hppaelf_create_output_section_statements): Call elf32_hppa_init_stub_bfd.
This commit is contained in:
@ -1,3 +1,11 @@
|
|||||||
|
2016-05-11 Alan Modra <amodra@gmail.com>
|
||||||
|
|
||||||
|
* elf32-hppa.c (elf32_hppa_init_stub_bfd): New function.
|
||||||
|
(elf32_hppa_check_relocs): Don't set dynobj.
|
||||||
|
(elf32_hppa_size_stubs): Test !SEC_LINKER_CREATED for stub sections.
|
||||||
|
(elf32_hppa_build_stubs): Likewise.
|
||||||
|
* elf32-hppa.h (elf32_hppa_init_stub_bfd): Declare.
|
||||||
|
|
||||||
2016-05-11 Alan Modra <amodra@gmail.com>
|
2016-05-11 Alan Modra <amodra@gmail.com>
|
||||||
|
|
||||||
PR 20060
|
PR 20060
|
||||||
|
@ -455,6 +455,18 @@ elf32_hppa_link_hash_table_create (bfd *abfd)
|
|||||||
return &htab->etab.root;
|
return &htab->etab.root;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Initialize the linker stubs BFD so that we can use it for linker
|
||||||
|
created dynamic sections. */
|
||||||
|
|
||||||
|
void
|
||||||
|
elf32_hppa_init_stub_bfd (bfd *abfd, struct bfd_link_info *info)
|
||||||
|
{
|
||||||
|
struct elf32_hppa_link_hash_table *htab = hppa_link_hash_table (info);
|
||||||
|
|
||||||
|
elf_elfheader (abfd)->e_ident[EI_CLASS] = ELFCLASS32;
|
||||||
|
htab->etab.dynobj = abfd;
|
||||||
|
}
|
||||||
|
|
||||||
/* Build a name for an entry in the stub hash table. */
|
/* Build a name for an entry in the stub hash table. */
|
||||||
|
|
||||||
static char *
|
static char *
|
||||||
@ -1347,8 +1359,6 @@ elf32_hppa_check_relocs (bfd *abfd,
|
|||||||
relocation for this entry. */
|
relocation for this entry. */
|
||||||
if (htab->sgot == NULL)
|
if (htab->sgot == NULL)
|
||||||
{
|
{
|
||||||
if (htab->etab.dynobj == NULL)
|
|
||||||
htab->etab.dynobj = abfd;
|
|
||||||
if (!elf32_hppa_create_dynamic_sections (htab->etab.dynobj, info))
|
if (!elf32_hppa_create_dynamic_sections (htab->etab.dynobj, info))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
@ -1484,9 +1494,6 @@ elf32_hppa_check_relocs (bfd *abfd,
|
|||||||
this reloc. */
|
this reloc. */
|
||||||
if (sreloc == NULL)
|
if (sreloc == NULL)
|
||||||
{
|
{
|
||||||
if (htab->etab.dynobj == NULL)
|
|
||||||
htab->etab.dynobj = abfd;
|
|
||||||
|
|
||||||
sreloc = _bfd_elf_make_dynamic_reloc_section
|
sreloc = _bfd_elf_make_dynamic_reloc_section
|
||||||
(sec, htab->etab.dynobj, 2, abfd, /*rela?*/ TRUE);
|
(sec, htab->etab.dynobj, 2, abfd, /*rela?*/ TRUE);
|
||||||
|
|
||||||
@ -3071,6 +3078,7 @@ elf32_hppa_size_stubs
|
|||||||
for (stub_sec = htab->stub_bfd->sections;
|
for (stub_sec = htab->stub_bfd->sections;
|
||||||
stub_sec != NULL;
|
stub_sec != NULL;
|
||||||
stub_sec = stub_sec->next)
|
stub_sec = stub_sec->next)
|
||||||
|
if ((stub_sec->flags & SEC_LINKER_CREATED) == 0)
|
||||||
stub_sec->size = 0;
|
stub_sec->size = 0;
|
||||||
|
|
||||||
bfd_hash_traverse (&htab->bstab, hppa_size_one_stub, htab);
|
bfd_hash_traverse (&htab->bstab, hppa_size_one_stub, htab);
|
||||||
@ -3193,13 +3201,12 @@ elf32_hppa_build_stubs (struct bfd_link_info *info)
|
|||||||
for (stub_sec = htab->stub_bfd->sections;
|
for (stub_sec = htab->stub_bfd->sections;
|
||||||
stub_sec != NULL;
|
stub_sec != NULL;
|
||||||
stub_sec = stub_sec->next)
|
stub_sec = stub_sec->next)
|
||||||
|
if ((stub_sec->flags & SEC_LINKER_CREATED) == 0
|
||||||
|
&& stub_sec->size != 0)
|
||||||
{
|
{
|
||||||
bfd_size_type size;
|
|
||||||
|
|
||||||
/* Allocate memory to hold the linker stubs. */
|
/* Allocate memory to hold the linker stubs. */
|
||||||
size = stub_sec->size;
|
stub_sec->contents = bfd_zalloc (htab->stub_bfd, stub_sec->size);
|
||||||
stub_sec->contents = bfd_zalloc (htab->stub_bfd, size);
|
if (stub_sec->contents == NULL)
|
||||||
if (stub_sec->contents == NULL && size != 0)
|
|
||||||
return FALSE;
|
return FALSE;
|
||||||
stub_sec->size = 0;
|
stub_sec->size = 0;
|
||||||
}
|
}
|
||||||
|
@ -36,6 +36,9 @@
|
|||||||
#include "libhppa.h"
|
#include "libhppa.h"
|
||||||
#include "elf/hppa.h"
|
#include "elf/hppa.h"
|
||||||
|
|
||||||
|
void elf32_hppa_init_stub_bfd
|
||||||
|
(bfd *, struct bfd_link_info *);
|
||||||
|
|
||||||
int elf32_hppa_setup_section_lists
|
int elf32_hppa_setup_section_lists
|
||||||
(bfd *, struct bfd_link_info *);
|
(bfd *, struct bfd_link_info *);
|
||||||
|
|
||||||
|
@ -1,3 +1,8 @@
|
|||||||
|
2016-05-11 Alan Modra <amodra@gmail.com>
|
||||||
|
|
||||||
|
* emultempl/hppaelf.em (hppaelf_create_output_section_statements):
|
||||||
|
Call elf32_hppa_init_stub_bfd.
|
||||||
|
|
||||||
2016-05-11 Alan Modra <amodra@gmail.com>
|
2016-05-11 Alan Modra <amodra@gmail.com>
|
||||||
|
|
||||||
PR 20060
|
PR 20060
|
||||||
|
@ -88,6 +88,7 @@ hppaelf_create_output_section_statements (void)
|
|||||||
|
|
||||||
stub_file->the_bfd->flags |= BFD_LINKER_CREATED;
|
stub_file->the_bfd->flags |= BFD_LINKER_CREATED;
|
||||||
ldlang_add_file (stub_file);
|
ldlang_add_file (stub_file);
|
||||||
|
elf32_hppa_init_stub_bfd (stub_file->the_bfd, &link_info);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user