diff options
author | Alan Modra <amodra@gmail.com> | 2003-01-23 11:51:35 +0000 |
---|---|---|
committer | Alan Modra <amodra@gmail.com> | 2003-01-23 11:51:35 +0000 |
commit | f0abc2a11f47c3ecdfe0b54421092d17c70fc5f2 (patch) | |
tree | 8e22fc0b8a4086a9c0f64272619db724cc6b1123 /bfd/elf64-ppc.c | |
parent | 489d0400afe4b18c94ce8b6195fa3d91978ecb08 (diff) | |
download | gdb-f0abc2a11f47c3ecdfe0b54421092d17c70fc5f2.zip gdb-f0abc2a11f47c3ecdfe0b54421092d17c70fc5f2.tar.gz gdb-f0abc2a11f47c3ecdfe0b54421092d17c70fc5f2.tar.bz2 |
include/elf/ChangeLog
* sh.h: Split out various bits to bfd/elf32-sh64.h.
include/opcode/ChangeLog
* m68hc11.h (cpu6812s): Define.
bfd/ChangeLog
* elf-bfd.h (struct bfd_elf_section_data): Remove tdata. Change
dynindx to an int. Rearrange for better packing.
* elf.c (_bfd_elf_new_section_hook): Don't alloc if already done.
* elf32-mips.c (bfd_elf32_new_section_hook): Define.
* elf32-sh64.h: New. Split out from include/elf/sh.h.
(struct _sh64_elf_section_data): New struct.
(sh64_elf_section_data): Don't dereference sh64_info (was tdata).
* elf32-sh64-com.c: Include elf32-sh64.h.
* elf32-sh64.c: Likewise.
(sh64_elf_new_section_hook): New function.
(bfd_elf32_new_section_hook): Define.
(sh64_elf_fake_sections): Adjust for sh64_elf_section_data change.
(sh64_bfd_elf_copy_private_section_data): Likewise.
(sh64_elf_final_write_processing): Likewise.
* elf32-sparc.c (struct elf32_sparc_section_data): New.
(elf32_sparc_new_section_hook): New function.
(SET_SEC_DO_RELAX, SEC_DO_RELAX): Delete.
(sec_do_relax): Define.
(elf32_sparc_relax_section): Adjust to use sec_do_relax.
(elf32_sparc_relocate_section): Likewise.
* elf64-mips.c (bfd_elf64_new_section_hook): Define.
* elf64-mmix.c (struct _mmix_elf_section_data): New.
(mmix_elf_section_data): Define. Use throughout file.
(mmix_elf_new_section_hook): New function.
(bfd_elf64_new_section_hook): Define.
* elf64-ppc.c (struct _ppc64_elf_section_data): New.
(ppc64_elf_section_data): Define. Use throughout.
(ppc64_elf_new_section_hook): New function.
(bfd_elf64_new_section_hook): Define.
* elf64-sparc.c (struct sparc64_elf_section_data): New.
(sparc64_elf_new_section_hook): New function.
(SET_SEC_DO_RELAX, SEC_DO_RELAX): Delete.
(sec_do_relax): Define.
(sparc64_elf_relax_section): Adjust to use sec_do_relax.
(sparc64_elf_relocate_section): Likewise.
(bfd_elf64_new_section_hook): Define.
* elfn32-mips.c (bfd_elf32_new_section_hook): Define.
* elfxx-mips.c (struct _mips_elf_section_data): New.
(mips_elf_section_data): Define. Use throughout.
(_bfd_mips_elf_new_section_hook): New function.
(mips_elf_create_got_section): Don't alloc used_by_bfd.
* elfxx-mips.h (_bfd_mips_elf_new_section_hook): Declare.
* elfxx-target.h (bfd_elfNN_new_section_hook): Add #ifndef.
* Makefile.am: Run "make dep-am".
* Makefile.in: Regenerate.
opcodes/ChangeLog
* sh64-dis.c: Include elf32-sh64.h.
* Makefile.am: Run "make dep-am".
* Makefile.in: Regenerate.
gas/ChangeLog
* config/tc-sh64.c (shmedia_frob_section_type): Adjust for changed
sh64_elf_section_data.
* config/tc-sh64.h: Include elf32-sh64.h.
* config/tc-m68hc11.c: Don't include stdio.h.
(md_show_usage): Fix missing continuation.
* Makefile.am: Run "make dep-am".
* Makefile.in: Regenerate.
ld/ChangeLog
* emultempl/sh64elf.em: Include elf32-sh64.h.
(sh64_elf_${EMULATION_NAME}_before_allocation): Adjust for changed
sh64_elf_section_data.
(sh64_elf_${EMULATION_NAME}_after_allocation): Likewise.
Diffstat (limited to 'bfd/elf64-ppc.c')
-rw-r--r-- | bfd/elf64-ppc.c | 48 |
1 files changed, 40 insertions, 8 deletions
diff --git a/bfd/elf64-ppc.c b/bfd/elf64-ppc.c index ec4032f..2ca139d 100644 --- a/bfd/elf64-ppc.c +++ b/bfd/elf64-ppc.c @@ -56,6 +56,8 @@ static bfd_boolean ppc64_elf_object_p PARAMS ((bfd *)); static bfd_boolean ppc64_elf_merge_private_bfd_data PARAMS ((bfd *, bfd *)); +static bfd_boolean ppc64_elf_new_section_hook + PARAMS ((bfd *, asection *)); /* The name of the dynamic interpreter. This is put in the .interp @@ -1675,6 +1677,35 @@ ppc64_elf_merge_private_bfd_data (ibfd, obfd) return TRUE; } + +struct _ppc64_elf_section_data +{ + struct bfd_elf_section_data elf; + union + { + asection **func_sec; + long *adjust; + } opd; +}; + +#define ppc64_elf_section_data(sec) \ + ((struct _ppc64_elf_section_data *) (sec)->used_by_bfd) + +static bfd_boolean +ppc64_elf_new_section_hook (abfd, sec) + bfd *abfd; + asection *sec; +{ + struct _ppc64_elf_section_data *sdata; + bfd_size_type amt = sizeof (*sdata); + + sdata = (struct _ppc64_elf_section_data *) bfd_zalloc (abfd, amt); + if (sdata == NULL) + return FALSE; + sec->used_by_bfd = (PTR) sdata; + + return _bfd_elf_new_section_hook (abfd, sec); +} /* The following functions are specific to the ELF linker, while functions above are used generally. Those named ppc64_elf_* are @@ -2564,7 +2595,7 @@ ppc64_elf_check_relocs (abfd, info, sec, relocs) opd_sym_map = (asection **) bfd_zalloc (abfd, amt); if (opd_sym_map == NULL) return FALSE; - elf_section_data (sec)->tdata = opd_sym_map; + ppc64_elf_section_data (sec)->opd.func_sec = opd_sym_map; } if (htab->elf.dynobj == NULL) @@ -2939,7 +2970,7 @@ ppc64_elf_gc_mark_hook (sec, info, rel, h, sym) sections, as all functions are referenced in .opd. */ else if ((fdh->oh != NULL && ((struct ppc_link_hash_entry *) fdh->oh)->is_entry) - || elf_section_data (sec)->tdata == NULL) + || ppc64_elf_section_data (sec)->opd.func_sec == NULL) rsec = h->root.u.def.section; break; @@ -2957,10 +2988,10 @@ ppc64_elf_gc_mark_hook (sec, info, rel, h, sym) asection **opd_sym_section; rsec = bfd_section_from_elf_index (sec->owner, sym->st_shndx); - opd_sym_section = (asection **) elf_section_data (rsec)->tdata; + opd_sym_section = ppc64_elf_section_data (rsec)->opd.func_sec; if (opd_sym_section != NULL) rsec = opd_sym_section[sym->st_value / 24]; - else if (elf_section_data (sec)->tdata != NULL) + else if (ppc64_elf_section_data (sec)->opd.func_sec != NULL) rsec = NULL; } @@ -3563,13 +3594,13 @@ ppc64_elf_edit_opd (obfd, info) continue; amt = sec->_raw_size * sizeof (long) / 24; - adjust = (long *) elf_section_data (sec)->tdata; + adjust = ppc64_elf_section_data (sec)->opd.adjust; if (adjust == NULL) { /* Must be a ld -r link. ie. check_relocs hasn't been called. */ adjust = (long *) bfd_zalloc (obfd, amt); - elf_section_data (sec)->tdata = adjust; + ppc64_elf_section_data (sec)->opd.adjust = adjust; } memset (adjust, 0, (size_t) amt); @@ -5305,7 +5336,7 @@ ppc64_elf_relocate_section (output_bfd, info, input_bfd, input_section, TOCstart = elf_gp (output_bfd); symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr; sym_hashes = elf_sym_hashes (input_bfd); - is_opd = elf_section_data (input_section)->tdata != NULL; + is_opd = ppc64_elf_section_data (input_section)->opd.adjust != NULL; rel = relocs; relend = relocs + input_section->reloc_count; @@ -5361,7 +5392,7 @@ ppc64_elf_relocate_section (output_bfd, info, input_bfd, input_section, { long *opd_sym_adjust; - opd_sym_adjust = (long *) elf_section_data (sec)->tdata; + opd_sym_adjust = ppc64_elf_section_data (sec)->opd.adjust; if (opd_sym_adjust != NULL && sym->st_value % 24 == 0) relocation += opd_sym_adjust[sym->st_value / 24]; } @@ -6338,6 +6369,7 @@ ppc64_elf_finish_dynamic_sections (output_bfd, info) #define bfd_elf64_bfd_reloc_type_lookup ppc64_elf_reloc_type_lookup #define bfd_elf64_bfd_merge_private_bfd_data ppc64_elf_merge_private_bfd_data +#define bfd_elf64_new_section_hook ppc64_elf_new_section_hook #define bfd_elf64_bfd_link_hash_table_create ppc64_elf_link_hash_table_create #define bfd_elf64_bfd_link_hash_table_free ppc64_elf_link_hash_table_free |