X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=bfd%2Flibecoff.h;h=84349f0bd221c3875ba894b1aa6788ec21716530;hb=aac6b32f3129e8a9b2856fd3fb80c4613bddd455;hp=f413837df0c5cb5152fd9379c82d031a3b2038f0;hpb=326e32d7ce8a83f59192657c48c9b9980466b939;p=binutils-gdb.git diff --git a/bfd/libecoff.h b/bfd/libecoff.h index f413837df0c..84349f0bd22 100644 --- a/bfd/libecoff.h +++ b/bfd/libecoff.h @@ -121,6 +121,9 @@ typedef struct ecoff_tdata linking. */ asection **symndx_to_section; + /* True if this BFD was written by the backend linker. */ + boolean linker; + } ecoff_data_type; /* Each canonical asymbol really looks like this. */ @@ -172,16 +175,19 @@ struct ecoff_section_tdata bfd_byte *contents; /* Offset adjustments for PC relative branches. A number other than - 1 is an addend for a PC relative branch; this addend arises because - it crosses one or more branches which were expanded into a larger - code sequence. A 1 means that this branch was itself expanded into - a larger code sequence. 1 is not a possible offset, since all - offsets must be multiples of the instruction size, which is 4; - also, the only relocs with non-zero offsets will be PC relative - branches within the same object file. If this field is NULL, no - branches were expanded and no offsets are required. Otherwise - there are as many entries as there are relocs in the section, and - the entry for any reloc that is not PC relative is zero. */ + 1 is an addend for a PC relative branch, or a switch table entry + which is the difference of two .text locations; this addend + arises because the branch or difference crosses one or more + branches which were expanded into a larger code sequence. A 1 + means that this branch was itself expanded into a larger code + sequence. 1 is not a possible offset, since all offsets must be + multiples of the instruction size, which is 4; also, the only + relocs with non-zero offsets will be PC relative branches or + switch table entries within the same object file. If this field + is NULL, no branches were expanded and no offsets are required. + Otherwise there are as many entries as there are relocs in the + section, and the entry for any reloc that is not PC relative is + zero. */ long *offsets; }; @@ -200,6 +206,10 @@ struct ecoff_link_hash_entry bfd *abfd; /* ECOFF external symbol information. */ EXTR esym; + /* Nonzero if this symbol has been written out. */ + char written; + /* Nonzero if this symbol was referred to as small undefined. */ + char small; }; /* ECOFF linker hash table. */ @@ -213,22 +223,49 @@ struct ecoff_link_hash_table extern boolean ecoff_mkobject PARAMS ((bfd *)); /* Read in the ECOFF symbolic debugging information. */ -extern boolean ecoff_slurp_symbolic_info PARAMS ((bfd *)); +extern boolean ecoff_slurp_symbolic_info PARAMS ((bfd *, asection *, + struct ecoff_debug_info *)); /* Generic ECOFF BFD backend vectors. */ -extern asymbol *ecoff_make_empty_symbol PARAMS ((bfd *abfd)); + +extern boolean ecoff_write_object_contents PARAMS ((bfd *abfd)); +extern bfd_target *ecoff_archive_p PARAMS ((bfd *abfd)); + +#define ecoff_close_and_cleanup _bfd_generic_close_and_cleanup +#define ecoff_bfd_free_cached_info _bfd_generic_bfd_free_cached_info +extern boolean ecoff_new_section_hook PARAMS ((bfd *abfd, + asection *section)); +extern boolean ecoff_get_section_contents PARAMS ((bfd *abfd, + asection *section, + PTR location, + file_ptr offset, + bfd_size_type count)); + +extern boolean ecoff_bfd_copy_private_bfd_data PARAMS ((bfd *, bfd *)); +#define ecoff_bfd_copy_private_section_data \ + _bfd_generic_bfd_copy_private_section_data + +extern boolean ecoff_slurp_armap PARAMS ((bfd *abfd)); +#define ecoff_slurp_extended_name_table _bfd_slurp_extended_name_table +#define ecoff_truncate_arname bfd_dont_truncate_arname +extern boolean ecoff_write_armap PARAMS ((bfd *abfd, unsigned int elength, + struct orl *map, + unsigned int orl_count, + int stridx)); +#define ecoff_openr_next_archived_file bfd_generic_openr_next_archived_file +#define ecoff_generic_stat_arch_elt bfd_generic_stat_arch_elt + extern long ecoff_get_symtab_upper_bound PARAMS ((bfd *abfd)); extern long ecoff_get_symtab PARAMS ((bfd *abfd, asymbol **alocation)); -extern void ecoff_get_symbol_info PARAMS ((bfd *abfd, - asymbol *symbol, - symbol_info *ret)); +extern asymbol *ecoff_make_empty_symbol PARAMS ((bfd *abfd)); extern void ecoff_print_symbol PARAMS ((bfd *abfd, PTR filep, asymbol *symbol, bfd_print_symbol_type how)); -extern long ecoff_canonicalize_reloc PARAMS ((bfd *abfd, - asection *section, - arelent **relptr, - asymbol **symbols)); +extern void ecoff_get_symbol_info PARAMS ((bfd *abfd, + asymbol *symbol, + symbol_info *ret)); +#define ecoff_bfd_is_local_label bfd_generic_is_local_label +#define ecoff_get_lineno _bfd_nosymbols_get_lineno extern boolean ecoff_find_nearest_line PARAMS ((bfd *abfd, asection *section, asymbol **symbols, @@ -236,64 +273,37 @@ extern boolean ecoff_find_nearest_line PARAMS ((bfd *abfd, CONST char **filename_ptr, CONST char **fnname_ptr, unsigned int *retline_ptr)); +#define ecoff_bfd_make_debug_symbol _bfd_nosymbols_bfd_make_debug_symbol + +#define ecoff_get_reloc_upper_bound coff_get_reloc_upper_bound +extern long ecoff_canonicalize_reloc PARAMS ((bfd *abfd, + asection *section, + arelent **relptr, + asymbol **symbols)); +/* ecoff_bfd_reloc_type_lookup defined by backend. */ + extern boolean ecoff_set_arch_mach PARAMS ((bfd *abfd, enum bfd_architecture arch, unsigned long machine)); -extern int ecoff_sizeof_headers PARAMS ((bfd *abfd, boolean reloc)); extern boolean ecoff_set_section_contents PARAMS ((bfd *abfd, asection *section, PTR location, file_ptr offset, bfd_size_type count)); -extern boolean ecoff_get_section_contents PARAMS ((bfd *abfd, - asection *section, - PTR location, - file_ptr offset, - bfd_size_type count)); -extern boolean ecoff_write_object_contents PARAMS ((bfd *abfd)); -extern boolean ecoff_slurp_armap PARAMS ((bfd *abfd)); -extern boolean ecoff_write_armap PARAMS ((bfd *abfd, unsigned int elength, - struct orl *map, - unsigned int orl_count, - int stridx)); -#define ecoff_slurp_extended_name_table _bfd_slurp_extended_name_table -extern bfd_target *ecoff_archive_p PARAMS ((bfd *abfd)); -#define ecoff_get_lineno \ - ((alent *(*) PARAMS ((bfd *, asymbol *))) bfd_nullvoidptr) -#define ecoff_truncate_arname bfd_dont_truncate_arname -#define ecoff_openr_next_archived_file bfd_generic_openr_next_archived_file -#define ecoff_generic_stat_arch_elt bfd_generic_stat_arch_elt -#define ecoff_get_reloc_upper_bound coff_get_reloc_upper_bound -#define ecoff_close_and_cleanup bfd_generic_close_and_cleanup -#define ecoff_bfd_debug_info_start bfd_void -#define ecoff_bfd_debug_info_end bfd_void -#define ecoff_bfd_debug_info_accumulate \ - ((void (*) PARAMS ((bfd *, struct sec *))) bfd_void) -#define ecoff_bfd_make_debug_symbol \ - ((asymbol *(*) PARAMS ((bfd *, void *, unsigned long))) bfd_nullvoidptr) + +extern int ecoff_sizeof_headers PARAMS ((bfd *abfd, boolean reloc)); +/* ecoff_bfd_get_relocated_section_contents defined by backend. */ +/* ecoff_bfd_relax_section defined by backend. */ extern struct bfd_link_hash_table *ecoff_bfd_link_hash_table_create PARAMS ((bfd *)); extern boolean ecoff_bfd_link_add_symbols PARAMS ((bfd *, struct bfd_link_info *)); extern boolean ecoff_bfd_final_link PARAMS ((bfd *, struct bfd_link_info *)); -#ifndef ecoff_bfd_copy_private_section_data -#define ecoff_bfd_copy_private_section_data \ - ((boolean (*) PARAMS ((bfd *, asection *, bfd *, asection *))) bfd_true) -#endif -#ifndef ecoff_bfd_copy_private_bfd_data -#define ecoff_bfd_copy_private_bfd_data \ - ((boolean (*) PARAMS ((bfd *, bfd *))) bfd_true) -#endif -#ifndef ecoff_bfd_is_local_label -#define ecoff_bfd_is_local_label bfd_generic_is_local_label -#endif - /* Hook functions for the generic COFF section reading code. */ + extern PTR ecoff_mkobject_hook PARAMS ((bfd *, PTR filehdr, PTR aouthdr)); extern asection *ecoff_make_section_hook PARAMS ((bfd *abfd, char *name)); -extern boolean ecoff_new_section_hook PARAMS ((bfd *abfd, - asection *section)); #define ecoff_set_alignment_hook \ ((void (*) PARAMS ((bfd *, asection *, PTR))) bfd_void) extern boolean ecoff_set_arch_mach_hook PARAMS ((bfd *abfd, PTR filehdr));