aboutsummaryrefslogtreecommitdiff
path: root/bfd/elf-bfd.h
diff options
context:
space:
mode:
authorBernd Schmidt <bernds@codesourcery.com>2010-10-04 14:13:10 +0000
committerBernd Schmidt <bernds@codesourcery.com>2010-10-04 14:13:10 +0000
commitd4730f921aed32ae4f01e10b8dc399f09b64435b (patch)
tree4d10a4db81d39d7fb5d2269a97485bba3b64cedc /bfd/elf-bfd.h
parent83e3a93c83891799c35d89a0de89c2d2b8bb556a (diff)
downloadgdb-d4730f921aed32ae4f01e10b8dc399f09b64435b.zip
gdb-d4730f921aed32ae4f01e10b8dc399f09b64435b.tar.gz
gdb-d4730f921aed32ae4f01e10b8dc399f09b64435b.tar.bz2
bfd/
* elf-bfd.h (struct bfd_elf_section_reloc_data): New structure. (struct bfd_elf_section_data): New members REL and RELA; delete members REL_HDR, REL_HDR2, REL_COUNT, REL_COUNT2, REL_IDX, REL_IDX2, REL_HASHES. (_bfd_elf_init_reloc_shdr): Adjust declaration. (_bfd_elf_single_rel_hdr): Declare. (RELOC_AGAINST_DISCARDED_SECTION): Use it. * elf.c (bfd_section_from_shdr): Adjusted to match changes in data structures. (_bfd_elf_init_reloc_shdr): New arg RELDATA. Remove arg REL_HDR. All callers changed. Allocate memory for the Elf_Internal_Shdr structure. (_bfd_elf_single_rel_hdr): New function. (struct fake_section_arg): New structure. (elf_fake_section): Expect to see a pointer to it in the third argument. If doing a relocatable link, allocate both REL and RELA sections as needed. (assign_section_numbers): Adjusted to match changes in data structures. (_bfd_elf_compute_section_file_positions): Call elf_fake_sections with a struct fake_section_args argument. * elfcode.h (elf_write_relocs): Adjusted to match changes in data structures. (elf_slurp_reloc_table): Likewise. * elflink.c (_bfd_elf_link_read_relocs): Likewise. (_bfd_elf_link_size_reloc_section): Remove arg REL_HDR, replace with RELDATA. Remove argument O. All callers changed. Remove code to discover the right rel_hdr and count. (_bfd_elf_link_output_relocs): Adjusted to match changes in data structures. (elf_link_adjust_relocs): Remove args REL_HDR, COUNT and REL_HASH; replace with RELDATA. All callers changed. (elf_link_input_bfd): Correctly generate rel_hash data when both REL and RELA sections are present. (elf_reloc_link_order): Adjusted to match changes in data structures. (bfd_elf_final_link): Simplify code to count relocs. Free the hashes array for both REL and RELA. (get_dynamic_reloc_section_name): Use _bfd_elf_single_reloc_hdr * elf32-m32r.c (m32r_elf_fake_sections, elf_backend_fake_sections): Delete. * elf32-tic6x.c (elf32_tic6x_fake_sections, elf_backend_fake_sections): Delete. (elf32_tic6x_rel_relocation_p): Adjusted to match changes in data structures. * elf32-microblaze.c (microblaze_elf_check_relocs): Use _bfd_elf_single_rel_hdr. * elf32-ppc.c (ppc_elf_relax_section): Likewise. * elf32-spu.c (spu_elf_relocate_section): Likewise. * elf64-alpha.c (elf64_alpha_relocate_section): Likewise. * elf64-hppa.c (get_reloc_section): Likewise. * elf64-mips.c (mips_elf64_slurp_reloc_table): Adjusted to match changes in data structures. (mips_elf64_write_relocs): Use _bfd_elf_single_rel_hdr. * elf64-ppc.c (ppc64_elf_edit_opd): Likewise. (ppc64_elf_edit_toc): Likewise. (get_relocs): Adjusted to match changes in data structures. Allocate an Elf_Internal_Shdr structure if necessary. (ppc64_elf_finish_dynamic_sections): Use _bfd_elf_single_rel_hdr. * elf64-sparc.c (elf64_sparc_slurp_reloc_table): Adjusted to match changes in data structures. * elfxx-ia64.c (get_reloc_section): Use _bfd_elf_single_rel_hdr. * elfxx-mips.c (MIPS_RELOC_RELA_P): Remove macro. (mips_elf_rel_relocation_p): Adjusted to match changes in data structures. (_bfd_mips_elf_relocate_section): Use mips_elf_rel_relocation_p rather than MIPS_RELOC_RELOCA_P. * elfxx-sparc.c (_bfd_sparc_elf_check_relocs): Use _bfd_elf_single_rel_hdr. (_bfd_sparc_elf_relocate_section): Likewise. ld/ * emultempl/xtensaelf.em (replace_insn_sec_with_prop_sec): Use _bfd_elf_single_rel_hdr.
Diffstat (limited to 'bfd/elf-bfd.h')
-rw-r--r--bfd/elf-bfd.h52
1 files changed, 24 insertions, 28 deletions
diff --git a/bfd/elf-bfd.h b/bfd/elf-bfd.h
index dbcebd2..66dcbcd 100644
--- a/bfd/elf-bfd.h
+++ b/bfd/elf-bfd.h
@@ -1319,6 +1319,23 @@ struct elf_backend_data
unsigned default_execstack : 1;
};
+/* Information about reloc sections associated with a bfd_elf_section_data
+ structure. */
+struct bfd_elf_section_reloc_data
+{
+ /* The ELF header for the reloc section associated with this
+ section, if any. */
+ Elf_Internal_Shdr *hdr;
+ /* The number of relocations currently assigned to HDR. */
+ unsigned int count;
+ /* The ELF section number of the reloc section. Only used for an
+ output file. */
+ int idx;
+ /* Used by the backend linker to store the symbol hash table entries
+ associated with relocs against global symbols. */
+ struct elf_link_hash_entry **hashes;
+};
+
/* Information stored for each BFD section in an ELF file. This
structure is allocated by elf_new_section_hook. */
@@ -1327,31 +1344,13 @@ struct bfd_elf_section_data
/* The ELF header for this section. */
Elf_Internal_Shdr this_hdr;
- /* The ELF header for the reloc section associated with this
- section, if any. */
- Elf_Internal_Shdr rel_hdr;
-
- /* If there is a second reloc section associated with this section,
- as can happen on Irix 6, this field points to the header. */
- Elf_Internal_Shdr *rel_hdr2;
-
- /* The number of relocations currently assigned to REL_HDR. */
- unsigned int rel_count;
-
- /* The number of relocations currently assigned to REL_HDR2. */
- unsigned int rel_count2;
+ /* Information about the REL and RELA reloc sections associated
+ with this section, if any. */
+ struct bfd_elf_section_reloc_data rel, rela;
/* The ELF section number of this section. */
int this_idx;
- /* The ELF section number of the reloc section indicated by
- REL_HDR if any. Only used for an output file. */
- int rel_idx;
-
- /* The ELF section number of the reloc section indicated by
- REL_HDR2 if any. Only used for an output file. */
- int rel_idx2;
-
/* Used by the backend linker when generating a shared library to
record the dynamic symbol index for a section symbol
corresponding to this section. A value of 0 means that there is
@@ -1361,10 +1360,6 @@ struct bfd_elf_section_data
/* A pointer to the linked-to section for SHF_LINK_ORDER. */
asection *linked_to;
- /* Used by the backend linker to store the symbol hash table entries
- associated with relocs against global symbols. */
- struct elf_link_hash_entry **rel_hashes;
-
/* A pointer to the swapped relocs. If the section uses REL relocs,
rather than RELA, all the r_addend fields will be zero. This
pointer may be NULL. It is used by the backend linker. */
@@ -1852,7 +1847,7 @@ extern int _bfd_elf_sizeof_headers
extern bfd_boolean _bfd_elf_new_section_hook
(bfd *, asection *);
extern bfd_boolean _bfd_elf_init_reloc_shdr
- (bfd *, Elf_Internal_Shdr *, asection *, bfd_boolean);
+ (bfd *, struct bfd_elf_section_reloc_data *, asection *, bfd_boolean);
extern const struct bfd_elf_special_section *_bfd_elf_get_special_section
(const char *, const struct bfd_elf_special_section *, unsigned int);
extern const struct bfd_elf_special_section *_bfd_elf_get_sec_type_attr
@@ -2237,6 +2232,7 @@ extern void _bfd_elf_copy_obj_attributes (bfd *, bfd *);
extern int _bfd_elf_obj_attrs_arg_type (bfd *, int, int);
extern void _bfd_elf_parse_attributes (bfd *, Elf_Internal_Shdr *);
extern bfd_boolean _bfd_elf_merge_object_attributes (bfd *, bfd *);
+extern Elf_Internal_Shdr *_bfd_elf_single_rel_hdr (asection *sec);
/* The linker may needs to keep track of the number of relocs that it
decides to copy as dynamic relocs in check_relocs for each symbol.
@@ -2363,13 +2359,13 @@ extern asection _bfd_elf_large_com_section;
sections may require relocations. */ \
Elf_Internal_Shdr *rel_hdr; \
\
- rel_hdr = &elf_section_data (input_section->output_section)->rel_hdr; \
+ rel_hdr = _bfd_elf_single_rel_hdr (input_section->output_section); \
\
/* Avoid empty output section. */ \
if (rel_hdr->sh_size > rel_hdr->sh_entsize) \
{ \
rel_hdr->sh_size -= rel_hdr->sh_entsize; \
- rel_hdr = &elf_section_data (input_section)->rel_hdr; \
+ rel_hdr = _bfd_elf_single_rel_hdr (input_section); \
rel_hdr->sh_size -= rel_hdr->sh_entsize; \
\
memmove (rel, rel + 1, (relend - rel) * sizeof (*rel)); \