X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=bfd%2Felf-bfd.h;h=05e17c8f5b0206b6f5c9dcd680625d6a9ac81897;hb=6f8bcf84a1bc7412dfee32328b370b6c4599a103;hp=3f2d52864b4e55d057a9891d7495e39330b62006;hpb=18e04883d03f67a6b9ec701089494d92841b92fd;p=deliverable%2Fbinutils-gdb.git diff --git a/bfd/elf-bfd.h b/bfd/elf-bfd.h index 3f2d52864b..05e17c8f5b 100644 --- a/bfd/elf-bfd.h +++ b/bfd/elf-bfd.h @@ -1,6 +1,6 @@ /* BFD back-end data structures for ELF files. Copyright 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, - 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 + 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. Written by Cygnus Support. @@ -396,12 +396,51 @@ struct eh_frame_hdr_info bfd_boolean table; }; +/* Enum used to identify target specific extensions to the elf_obj_tdata + and elf_link_hash_table structures. Note the enums deliberately start + from 1 so that we can detect an uninitialized field. The generic value + is last so that additions to this enum do not need to modify more than + one line. */ +enum elf_target_id +{ + ALPHA_ELF_DATA = 1, + ARM_ELF_DATA, + AVR_ELF_DATA, + BFIN_ELF_DATA, + CRIS_ELF_DATA, + FRV_ELF_DATA, + HPPA32_ELF_DATA, + HPPA64_ELF_DATA, + I386_ELF_DATA, + IA64_ELF_DATA, + LM32_ELF_DATA, + M32R_ELF_DATA, + M68HC11_ELF_DATA, + M68K_ELF_DATA, + MICROBLAZE_ELF_DATA, + MIPS_ELF_DATA, + MN10300_ELF_DATA, + PPC32_ELF_DATA, + PPC64_ELF_DATA, + S390_ELF_DATA, + SH_ELF_DATA, + SPARC_ELF_DATA, + SPU_ELF_DATA, + X86_64_ELF_DATA, + XTENSA_ELF_DATA, + GENERIC_ELF_DATA +}; + /* ELF linker hash table. */ struct elf_link_hash_table { struct bfd_link_hash_table root; + /* An identifier used to distinguish different target + specific extensions to this structure. */ + enum elf_target_id hash_table_id; + /* Whether we have created the special dynamic sections required when linking against or generating a shared object. */ bfd_boolean dynamic_sections_created; @@ -509,6 +548,8 @@ struct elf_link_hash_table #define elf_hash_table(p) ((struct elf_link_hash_table *) ((p)->hash)) +#define elf_hash_table_id(table) ((table) -> hash_table_id) + /* Returns TRUE if the hash table is a struct elf_link_hash_table. */ #define is_elf_hash_table(htab) \ (((struct bfd_link_hash_table *) (htab))->type == bfd_link_elf_hash_table) @@ -1418,27 +1459,6 @@ enum Tag_compatibility = 32 }; -/* Enum used to identify target specific extensions to the elf_obj_tdata - structure. Note the enums deliberately start from 1 so that we can - detect an uninitialized field. The generic value is last so that - additions to this enum do not need to modify more than one line. */ -enum elf_object_id -{ - ALPHA_ELF_TDATA = 1, - ARM_ELF_TDATA, - HPPA_ELF_TDATA, - I386_ELF_TDATA, - MIPS_ELF_TDATA, - PPC32_ELF_TDATA, - PPC64_ELF_TDATA, - S390_ELF_TDATA, - SH_ELF_TDATA, - SPARC_ELF_TDATA, - X86_64_ELF_TDATA, - XTENSA_ELF_TDATA, - GENERIC_ELF_TDATA -}; - /* Some private data is stashed away for future use using the tdata pointer in the bfd structure. */ @@ -1503,6 +1523,10 @@ struct elf_obj_tdata one. */ const char *dt_name; + /* The linker emulation needs to know what audit libs + are used by a dynamic object. */ + const char *dt_audit; + /* Records the result of `get_program_header_size'. */ bfd_size_type program_header_size; @@ -1599,7 +1623,7 @@ struct elf_obj_tdata /* An identifier used to distinguish different target specific extensions to this structure. */ - enum elf_object_id object_id; + enum elf_target_id object_id; }; #define elf_tdata(bfd) ((bfd) -> tdata.elf_obj_data) @@ -1632,6 +1656,7 @@ struct elf_obj_tdata #define elf_local_got_offsets(bfd) (elf_tdata(bfd) -> local_got.offsets) #define elf_local_got_ents(bfd) (elf_tdata(bfd) -> local_got.ents) #define elf_dt_name(bfd) (elf_tdata(bfd) -> dt_name) +#define elf_dt_audit(bfd) (elf_tdata(bfd) -> dt_audit) #define elf_dyn_lib_class(bfd) (elf_tdata(bfd) -> dyn_lib_class) #define elf_bad_symtab(bfd) (elf_tdata(bfd) -> bad_symtab) #define elf_flags_init(bfd) (elf_tdata(bfd) -> flags_init) @@ -1705,7 +1730,7 @@ extern unsigned long bfd_elf_gnu_hash extern bfd_reloc_status_type bfd_elf_generic_reloc (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **); extern bfd_boolean bfd_elf_allocate_object - (bfd *, size_t, enum elf_object_id); + (bfd *, size_t, enum elf_target_id); extern bfd_boolean bfd_elf_make_generic_object (bfd *); extern bfd_boolean bfd_elf_mkcorefile @@ -1729,7 +1754,7 @@ extern bfd_boolean _bfd_elf_link_hash_table_init (struct elf_link_hash_table *, bfd *, struct bfd_hash_entry *(*) (struct bfd_hash_entry *, struct bfd_hash_table *, const char *), - unsigned int); + unsigned int, enum elf_target_id); extern bfd_boolean _bfd_elf_slurp_version_tables (bfd *, bfd_boolean); extern bfd_boolean _bfd_elf_merge_sections @@ -1746,6 +1771,12 @@ extern asection *_bfd_elf_check_kept_section (asection *, struct bfd_link_info *); extern void _bfd_elf_link_just_syms (asection *, struct bfd_link_info *); +extern void _bfd_elf_copy_link_hash_symbol_type + (bfd *, struct bfd_link_hash_entry *, struct bfd_link_hash_entry *); +extern bfd_boolean _bfd_elf_size_group_sections + (struct bfd_link_info *); +extern bfd_boolean _bfd_elf_fixup_group_sections +(bfd *, asection *); extern bfd_boolean _bfd_elf_copy_private_header_data (bfd *, bfd *); extern bfd_boolean _bfd_elf_copy_private_symbol_data @@ -2142,10 +2173,22 @@ extern char *elfcore_write_prfpreg (bfd *, char *, int *, const void *, int); extern char *elfcore_write_prxfpreg (bfd *, char *, int *, const void *, int); +extern char *elfcore_write_xstatereg + (bfd *, char *, int *, const void *, int); extern char *elfcore_write_ppc_vmx (bfd *, char *, int *, const void *, int); extern char *elfcore_write_ppc_vsx (bfd *, char *, int *, const void *, int); +extern char *elfcore_write_s390_timer + (bfd *, char *, int *, const void *, int); +extern char *elfcore_write_s390_todcmp + (bfd *, char *, int *, const void *, int); +extern char *elfcore_write_s390_todpreg + (bfd *, char *, int *, const void *, int); +extern char *elfcore_write_s390_ctrs + (bfd *, char *, int *, const void *, int); +extern char *elfcore_write_s390_prefix + (bfd *, char *, int *, const void *, int); extern char *elfcore_write_lwpstatus (bfd *, char *, int *, long, int, const void *); extern char *elfcore_write_register_note @@ -2285,8 +2328,9 @@ extern asection _bfd_elf_large_com_section; while (0) /* Will a symbol be bound to the the definition within the shared - library, if any. */ + library, if any. A unique symbol can never be bound locally. */ #define SYMBOLIC_BIND(INFO, H) \ - ((INFO)->symbolic || ((INFO)->dynamic && !(H)->dynamic)) + (!(H)->unique_global \ + && ((INFO)->symbolic || ((INFO)->dynamic && !(H)->dynamic))) #endif /* _LIBELF_H_ */