diff options
author | Alan Modra <amodra@gmail.com> | 2016-05-11 22:51:14 +0930 |
---|---|---|
committer | Alan Modra <amodra@gmail.com> | 2016-05-11 22:51:14 +0930 |
commit | a464198b013940745d43cff029330b9e7dda71c2 (patch) | |
tree | e2e4185ebd4621db9467b5b2205c2821743c017f | |
parent | 3bd43ebcb6025a8a43f119238f490e2e238697a2 (diff) | |
download | gdb-a464198b013940745d43cff029330b9e7dda71c2.zip gdb-a464198b013940745d43cff029330b9e7dda71c2.tar.gz gdb-a464198b013940745d43cff029330b9e7dda71c2.tar.bz2 |
[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.
-rw-r--r-- | bfd/ChangeLog | 8 | ||||
-rw-r--r-- | bfd/elf32-hppa.c | 39 | ||||
-rw-r--r-- | bfd/elf32-hppa.h | 3 | ||||
-rw-r--r-- | ld/ChangeLog | 5 | ||||
-rw-r--r-- | ld/emultempl/hppaelf.em | 1 |
5 files changed, 40 insertions, 16 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 595d724..25d1db6 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,5 +1,13 @@ 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> + PR 20060 * elf64-ppc.c (ppc64_elf_tls_setup): Clear forced_local. * elf32-ppc.c (ppc_elf_tls_setup): Likewise. diff --git a/bfd/elf32-hppa.c b/bfd/elf32-hppa.c index 699d02a..d67a40e 100644 --- a/bfd/elf32-hppa.c +++ b/bfd/elf32-hppa.c @@ -455,6 +455,18 @@ elf32_hppa_link_hash_table_create (bfd *abfd) 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. */ static char * @@ -1347,8 +1359,6 @@ elf32_hppa_check_relocs (bfd *abfd, relocation for this entry. */ if (htab->sgot == NULL) { - if (htab->etab.dynobj == NULL) - htab->etab.dynobj = abfd; if (!elf32_hppa_create_dynamic_sections (htab->etab.dynobj, info)) return FALSE; } @@ -1484,9 +1494,6 @@ elf32_hppa_check_relocs (bfd *abfd, this reloc. */ if (sreloc == NULL) { - if (htab->etab.dynobj == NULL) - htab->etab.dynobj = abfd; - sreloc = _bfd_elf_make_dynamic_reloc_section (sec, htab->etab.dynobj, 2, abfd, /*rela?*/ TRUE); @@ -3071,7 +3078,8 @@ elf32_hppa_size_stubs for (stub_sec = htab->stub_bfd->sections; stub_sec != NULL; stub_sec = stub_sec->next) - stub_sec->size = 0; + if ((stub_sec->flags & SEC_LINKER_CREATED) == 0) + stub_sec->size = 0; bfd_hash_traverse (&htab->bstab, hppa_size_one_stub, htab); @@ -3193,16 +3201,15 @@ elf32_hppa_build_stubs (struct bfd_link_info *info) for (stub_sec = htab->stub_bfd->sections; stub_sec != NULL; stub_sec = stub_sec->next) - { - bfd_size_type size; - - /* Allocate memory to hold the linker stubs. */ - size = stub_sec->size; - stub_sec->contents = bfd_zalloc (htab->stub_bfd, size); - if (stub_sec->contents == NULL && size != 0) - return FALSE; - stub_sec->size = 0; - } + if ((stub_sec->flags & SEC_LINKER_CREATED) == 0 + && stub_sec->size != 0) + { + /* Allocate memory to hold the linker stubs. */ + stub_sec->contents = bfd_zalloc (htab->stub_bfd, stub_sec->size); + if (stub_sec->contents == NULL) + return FALSE; + stub_sec->size = 0; + } /* Build the stubs as directed by the stub hash table. */ table = &htab->bstab; diff --git a/bfd/elf32-hppa.h b/bfd/elf32-hppa.h index 87ae5f1..ad5cb18 100644 --- a/bfd/elf32-hppa.h +++ b/bfd/elf32-hppa.h @@ -36,6 +36,9 @@ #include "libhppa.h" #include "elf/hppa.h" +void elf32_hppa_init_stub_bfd + (bfd *, struct bfd_link_info *); + int elf32_hppa_setup_section_lists (bfd *, struct bfd_link_info *); diff --git a/ld/ChangeLog b/ld/ChangeLog index 734c4b5..5c609e2 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,5 +1,10 @@ 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> + PR 20060 * testsuite/ld-powerpc/powerpc.exp: Run new tests. * testsuite/ld-powerpc/tlsdll.s: New. diff --git a/ld/emultempl/hppaelf.em b/ld/emultempl/hppaelf.em index a1d2e80..965f986 100644 --- a/ld/emultempl/hppaelf.em +++ b/ld/emultempl/hppaelf.em @@ -88,6 +88,7 @@ hppaelf_create_output_section_statements (void) stub_file->the_bfd->flags |= BFD_LINKER_CREATED; ldlang_add_file (stub_file); + elf32_hppa_init_stub_bfd (stub_file->the_bfd, &link_info); } |