X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=include%2Fbfd.h;h=dd3ede9edfbf088b0e3e10865c2168acc0151ae2;hb=808566e89a9fa306dc0a4c73061eb4e89f3ff6b0;hp=01136a3a5b6a5305c03840931c5ed16aac651ed0;hpb=18fe0e9f7fedb0c42c15bc379d056fb08b75724e;p=deliverable%2Fbinutils-gdb.git diff --git a/include/bfd.h b/include/bfd.h index 01136a3a5b..dd3ede9edf 100644 --- a/include/bfd.h +++ b/include/bfd.h @@ -45,15 +45,6 @@ here. */ #include "ansidecl.h" #include "obstack.h" -/* Make it easier to declare prototypes (puts conditional here) */ -#ifndef PROTO -# if __STDC__ -# define PROTO(type, name, arglist) type name arglist -# else -# define PROTO(type, name, arglist) type name () -# endif -#endif - #define BFD_VERSION "2.0" /* forward declaration */ @@ -220,26 +211,25 @@ typedef enum bfd_error { extern bfd_ec bfd_error; struct reloc_cache_entry; -struct bfd_seclet_struct ; +struct bfd_seclet; typedef struct bfd_error_vector { - PROTO(void,(* nonrepresentable_section ),(CONST bfd *CONST abfd, - CONST char *CONST name)); - PROTO(void,(* undefined_symbol),(CONST struct reloc_cache_entry *rel, - CONST struct bfd_seclet_struct *sec - )); - PROTO(void, (* reloc_value_truncated),(CONST struct + void (* nonrepresentable_section ) PARAMS ((CONST bfd *CONST abfd, + CONST char *CONST name)); + void (* undefined_symbol) PARAMS ((CONST struct reloc_cache_entry *rel, + CONST struct bfd_seclet *sec)); + void (* reloc_value_truncated) PARAMS ((CONST struct reloc_cache_entry *rel, - struct bfd_seclet_struct *sec)); + struct bfd_seclet *sec)); - PROTO(void, (* reloc_dangerous),(CONST struct reloc_cache_entry *rel, - CONST struct bfd_seclet_struct *sec)); + void (* reloc_dangerous) PARAMS ((CONST struct reloc_cache_entry *rel, + CONST struct bfd_seclet *sec)); } bfd_error_vector_type; -PROTO (CONST char *, bfd_errmsg, (bfd_ec error_tag)); -PROTO (void, bfd_perror, (CONST char *message)); +CONST char *bfd_errmsg PARAMS ((bfd_ec error_tag)); +void bfd_perror PARAMS ((CONST char *message)); typedef enum bfd_print_symbol @@ -296,13 +286,7 @@ CAT(NAME,_bfd_debug_info_accumulate),\ CAT(NAME,_bfd_get_relocated_section_contents),\ CAT(NAME,_bfd_relax_section) -#define COFF_SWAP_TABLE \ - coff_swap_aux_in, coff_swap_sym_in, coff_swap_lineno_in, \ - coff_swap_aux_out, coff_swap_sym_out, \ - coff_swap_lineno_out, coff_swap_reloc_out, \ - coff_swap_filehdr_out, coff_swap_aouthdr_out, \ - coff_swap_scnhdr_out - +#define COFF_SWAP_TABLE (PTR) &bfd_coff_std_swap_table /* User program access to BFD facilities */ @@ -494,6 +478,11 @@ typedef struct sec #define SEC_NEVER_LOAD 0x400 + /* The section is a shared library section. The linker must leave + these completely alone, as the vma and size are used when + the executable is loaded. */ + +#define SEC_SHARED_LIBRARY 0x800 bfd_vma vma; @@ -594,8 +583,8 @@ typedef struct sec /* A symbol which points at this section only */ struct symbol_cache_entry *symbol; struct symbol_cache_entry **symbol_ptr_ptr; - struct bfd_seclet_struct *seclets_head; - struct bfd_seclet_struct *seclets_tail; + struct bfd_seclet *seclets_head; + struct bfd_seclet *seclets_tail; } asection ; @@ -712,6 +701,11 @@ typedef struct bfd_arch_info CONST struct bfd_arch_info *b)); boolean (*scan) PARAMS ((CONST struct bfd_arch_info *, CONST char *)); + /* How to disassemble an instruction, producing a printable + representation on a specified stdio stream. This isn't + defined for most processors at present, because of the size + of the additional tables it would drag in, and because gdb + wants to use a different interface. */ unsigned int (*disassemble) PARAMS ((bfd_vma addr, CONST char *data, PTR stream)); @@ -822,7 +816,7 @@ typedef CONST struct reloc_howto_struct result is to be subtracted from the data*/ int size; - /* Now obsolete */ + /* Now obsolete. But m68k-coff still uses it. */ unsigned int bitsize; /* Notes that the relocation is relative to the location in the @@ -831,11 +825,12 @@ typedef CONST struct reloc_howto_struct being relocated. */ boolean pc_relative; - /* Now obsolete */ unsigned int bitpos; +#if 1 /* Now obsolete */ boolean absolute; +#endif /* Causes the relocation routine to return an error if overflow is detected when relocating. */ @@ -986,7 +981,7 @@ typedef struct symbol_cache_entry { /* A pointer to the BFD which owns the symbol. This information is necessary so that a back end can work out what additional - (invisible to the application writer) information is carried + information (invisible to the application writer) is carried with the symbol. */ struct _bfd *the_bfd; @@ -1010,7 +1005,7 @@ typedef struct symbol_cache_entry value is the offset into the section of the data. */ #define BSF_GLOBAL 0x02 - /* Obsolete */ + /* Obsolete; should be deleted? */ #define BSF_IMPORT 0x04 /* The symbol has global scope, and is exported. The value is @@ -1018,7 +1013,7 @@ typedef struct symbol_cache_entry #define BSF_EXPORT 0x08 /* The symbol is undefined. <> in <>. The value has - no meaning. */ + no meaning. Obsolete; should be deleted? */ #define BSF_UNDEFINED_OBS 0x10 /* The symbol is common, initialized to zero; default in @@ -1033,11 +1028,11 @@ typedef struct symbol_cache_entry meaning. */ #define BSF_DEBUGGING 0x40 - /* Used by the linker */ + /* Used by the linker. Should be part of app_data now. */ #define BSF_KEEP 0x10000 #define BSF_KEEP_G 0x80000 - /* Unused */ + /* Unused; should be deleted? */ #define BSF_WEAK 0x100000 #define BSF_CTOR 0x200000 @@ -1087,7 +1082,10 @@ typedef struct symbol_cache_entry /* Back end special data. This is being phased out in favour of making this a union. */ - PTR udata; + PTR udata; + + /* Application data. */ + union { unsigned long aflags; PTR aptr; } app_data; } asymbol; #define get_symtab_upper_bound(abfd) \ @@ -1224,12 +1222,13 @@ struct _bfd struct ieee_data_struct *ieee_data; struct ieee_ar_data_struct *ieee_ar_data; struct srec_data_struct *srec_data; - struct srec_data_struct *tekhex_data; + struct tekhex_data_struct *tekhex_data; struct elf_obj_tdata *elf_obj_data; struct bout_data_struct *bout_data; struct sun_core_struct *sun_core_data; struct trad_core_struct *trad_core_data; struct hppa_data_struct *hppa_data; + struct hppa_core_struct *hppa_core_data; PTR any; } tdata; @@ -1288,39 +1287,9 @@ bfd_get_mtime PARAMS ((bfd *)); #define bfd_stat_arch_elt(abfd, stat) \ BFD_SEND (abfd, _bfd_stat_arch_elt,(abfd, stat)) -#define bfd_coff_swap_aux_in(a,e,t,c,i) \ - BFD_SEND (a, _bfd_coff_swap_aux_in, (a,e,t,c,i)) - -#define bfd_coff_swap_sym_in(a,e,i) \ - BFD_SEND (a, _bfd_coff_swap_sym_in, (a,e,i)) - -#define bfd_coff_swap_lineno_in(a,e,i) \ - BFD_SEND ( a, _bfd_coff_swap_lineno_in, (a,e,i)) - #define bfd_set_arch_mach(abfd, arch, mach)\ BFD_SEND ( abfd, _bfd_set_arch_mach, (abfd, arch, mach)) -#define bfd_coff_swap_reloc_out(abfd, i, o) \ - BFD_SEND (abfd, _bfd_coff_swap_reloc_out, (abfd, i, o)) - -#define bfd_coff_swap_lineno_out(abfd, i, o) \ - BFD_SEND (abfd, _bfd_coff_swap_lineno_out, (abfd, i, o)) - -#define bfd_coff_swap_aux_out(abfd, i, t,c,o) \ - BFD_SEND (abfd, _bfd_coff_swap_aux_out, (abfd, i,t,c, o)) - -#define bfd_coff_swap_sym_out(abfd, i,o) \ - BFD_SEND (abfd, _bfd_coff_swap_sym_out, (abfd, i, o)) - -#define bfd_coff_swap_scnhdr_out(abfd, i,o) \ - BFD_SEND (abfd, _bfd_coff_swap_scnhdr_out, (abfd, i, o)) - -#define bfd_coff_swap_filehdr_out(abfd, i,o) \ - BFD_SEND (abfd, _bfd_coff_swap_filehdr_out, (abfd, i, o)) - -#define bfd_coff_swap_aouthdr_out(abfd, i,o) \ - BFD_SEND (abfd, _bfd_coff_swap_aouthdr_out, (abfd, i, o)) - #define bfd_get_relocated_section_contents(abfd, seclet, data) \ BFD_SEND (abfd, _bfd_get_relocated_section_contents, (abfd, seclet, data)) @@ -1348,10 +1317,6 @@ boolean core_file_matches_executable_p PARAMS ((bfd *core_bfd, bfd *exec_bfd)); -#define SDEF(ret, name, arglist) \ - PROTO(ret,(*name),arglist) -#define SDEF_FMT(ret, name, arglist) \ - PROTO(ret,(*name[bfd_type_end]),arglist) #define BFD_SEND(bfd, message, arglist) \ ((*((bfd)->xvec->message)) arglist) #define BFD_SEND_FMT(bfd, message, arglist) \ @@ -1375,131 +1340,86 @@ typedef struct bfd_target flagword section_flags; char symbol_leading_char; char ar_pad_char; - unsigned short ar_max_namelen; + unsigned short ar_max_namelen; unsigned int align_power_min; - SDEF (bfd_vma, bfd_getx64, (bfd_byte *)); - SDEF (void, bfd_putx64, (bfd_vma, bfd_byte *)); - SDEF (bfd_vma, bfd_getx32, (bfd_byte *)); - SDEF (void, bfd_putx32, (bfd_vma, bfd_byte *)); - SDEF (bfd_vma, bfd_getx16, (bfd_byte *)); - SDEF (void, bfd_putx16, (bfd_vma, bfd_byte *)); - SDEF (bfd_vma, bfd_h_getx64, (bfd_byte *)); - SDEF (void, bfd_h_putx64, (bfd_vma, bfd_byte *)); - SDEF (bfd_vma, bfd_h_getx32, (bfd_byte *)); - SDEF (void, bfd_h_putx32, (bfd_vma, bfd_byte *)); - SDEF (bfd_vma, bfd_h_getx16, (bfd_byte *)); - SDEF (void, bfd_h_putx16, (bfd_vma, bfd_byte *)); - SDEF_FMT (struct bfd_target *, _bfd_check_format, (bfd *)); - SDEF_FMT (boolean, _bfd_set_format, (bfd *)); - SDEF_FMT (boolean, _bfd_write_contents, (bfd *)); - SDEF (char *, _core_file_failing_command, (bfd *)); - SDEF (int, _core_file_failing_signal, (bfd *)); - SDEF (boolean, _core_file_matches_executable_p, (bfd *, bfd *)); - SDEF (boolean, _bfd_slurp_armap, (bfd *)); - SDEF (boolean, _bfd_slurp_extended_name_table, (bfd *)); - SDEF (void, _bfd_truncate_arname, (bfd *, CONST char *, char *)); - SDEF (boolean, write_armap, (bfd *arch, + bfd_vma (*bfd_getx64) PARAMS ((bfd_byte *)); + void (*bfd_putx64) PARAMS ((bfd_vma, bfd_byte *)); + bfd_vma (*bfd_getx32) PARAMS ((bfd_byte *)); + void (*bfd_putx32) PARAMS ((bfd_vma, bfd_byte *)); + bfd_vma (*bfd_getx16) PARAMS ((bfd_byte *)); + void (*bfd_putx16) PARAMS ((bfd_vma, bfd_byte *)); + bfd_vma (*bfd_h_getx64) PARAMS ((bfd_byte *)); + void (*bfd_h_putx64) PARAMS ((bfd_vma, bfd_byte *)); + bfd_vma (*bfd_h_getx32) PARAMS ((bfd_byte *)); + void (*bfd_h_putx32) PARAMS ((bfd_vma, bfd_byte *)); + bfd_vma (*bfd_h_getx16) PARAMS ((bfd_byte *)); + void (*bfd_h_putx16) PARAMS ((bfd_vma, bfd_byte *)); + struct bfd_target * (*_bfd_check_format[bfd_type_end]) PARAMS ((bfd *)); + boolean (*_bfd_set_format[bfd_type_end]) PARAMS ((bfd *)); + boolean (*_bfd_write_contents[bfd_type_end]) PARAMS ((bfd *)); + char * (*_core_file_failing_command) PARAMS ((bfd *)); + int (*_core_file_failing_signal) PARAMS ((bfd *)); + boolean (*_core_file_matches_executable_p) PARAMS ((bfd *, bfd *)); + boolean (*_bfd_slurp_armap) PARAMS ((bfd *)); + boolean (*_bfd_slurp_extended_name_table) PARAMS ((bfd *)); + void (*_bfd_truncate_arname) PARAMS ((bfd *, CONST char *, char *)); + boolean (*write_armap) PARAMS ((bfd *arch, unsigned int elength, struct orl *map, unsigned int orl_count, int stridx)); - SDEF (boolean, _close_and_cleanup, (bfd *)); - SDEF (boolean, _bfd_set_section_contents, (bfd *, sec_ptr, PTR, + boolean (*_close_and_cleanup) PARAMS ((bfd *)); + boolean (*_bfd_set_section_contents) PARAMS ((bfd *, sec_ptr, PTR, file_ptr, bfd_size_type)); - SDEF (boolean, _bfd_get_section_contents, (bfd *, sec_ptr, PTR, + boolean (*_bfd_get_section_contents) PARAMS ((bfd *, sec_ptr, PTR, file_ptr, bfd_size_type)); - SDEF (boolean, _new_section_hook, (bfd *, sec_ptr)); - SDEF (unsigned int, _get_symtab_upper_bound, (bfd *)); - SDEF (unsigned int, _bfd_canonicalize_symtab, - (bfd *, struct symbol_cache_entry **)); - SDEF (unsigned int, _get_reloc_upper_bound, (bfd *, sec_ptr)); - SDEF (unsigned int, _bfd_canonicalize_reloc, (bfd *, sec_ptr, arelent **, - struct symbol_cache_entry**)); - SDEF (struct symbol_cache_entry *, _bfd_make_empty_symbol, (bfd *)); - SDEF (void, _bfd_print_symbol, (bfd *, PTR, struct symbol_cache_entry *, + boolean (*_new_section_hook) PARAMS ((bfd *, sec_ptr)); + unsigned int (*_get_symtab_upper_bound) PARAMS ((bfd *)); + unsigned int (*_bfd_canonicalize_symtab) PARAMS ((bfd *, + struct symbol_cache_entry **)); + unsigned int (*_get_reloc_upper_bound) PARAMS ((bfd *, sec_ptr)); + unsigned int (*_bfd_canonicalize_reloc) PARAMS ((bfd *, sec_ptr, arelent **, + struct symbol_cache_entry **)); + struct symbol_cache_entry * + (*_bfd_make_empty_symbol) PARAMS ((bfd *)); + void (*_bfd_print_symbol) PARAMS ((bfd *, PTR, + struct symbol_cache_entry *, bfd_print_symbol_type)); #define bfd_print_symbol(b,p,s,e) BFD_SEND(b, _bfd_print_symbol, (b,p,s,e)) - SDEF (alent *, _get_lineno, (bfd *, struct symbol_cache_entry *)); - - SDEF (boolean, _bfd_set_arch_mach, (bfd *, enum bfd_architecture, - unsigned long)); - - SDEF (bfd *, openr_next_archived_file, (bfd *arch, bfd *prev)); - SDEF (boolean, _bfd_find_nearest_line, - (bfd *abfd, struct sec *section, - struct symbol_cache_entry **symbols,bfd_vma offset, - CONST char **file, CONST char **func, unsigned int *line)); - SDEF (int, _bfd_stat_arch_elt, (bfd *, struct stat *)); - - SDEF (int, _bfd_sizeof_headers, (bfd *, boolean)); - - SDEF (void, _bfd_debug_info_start, (bfd *)); - SDEF (void, _bfd_debug_info_end, (bfd *)); - SDEF (void, _bfd_debug_info_accumulate, (bfd *, struct sec *)); - SDEF (bfd_byte *, _bfd_get_relocated_section_contents, (bfd*,struct bfd_seclet_struct *, bfd_byte *data)); - SDEF (boolean,_bfd_relax_section,(bfd *, struct sec *, struct symbol_cache_entry **)); - SDEF(void, _bfd_coff_swap_aux_in,( - bfd *abfd , - PTR ext, - int type, - int class , - PTR in)); - - SDEF(void, _bfd_coff_swap_sym_in,( - bfd *abfd , - PTR ext, - PTR in)); - - SDEF(void, _bfd_coff_swap_lineno_in, ( - bfd *abfd, - PTR ext, - PTR in)); - - SDEF(unsigned int, _bfd_coff_swap_aux_out,( - bfd *abfd, - PTR in, - int type, - int class, - PTR ext)); - - SDEF(unsigned int, _bfd_coff_swap_sym_out,( - bfd *abfd, - PTR in, - PTR ext)); - - SDEF(unsigned int, _bfd_coff_swap_lineno_out,( - bfd *abfd, - PTR in, - PTR ext)); - - SDEF(unsigned int, _bfd_coff_swap_reloc_out,( - bfd *abfd, - PTR src, - PTR dst)); - - SDEF(unsigned int, _bfd_coff_swap_filehdr_out,( - bfd *abfd, - PTR in, - PTR out)); - - SDEF(unsigned int, _bfd_coff_swap_aouthdr_out,( - bfd *abfd, - PTR in, - PTR out)); - - SDEF(unsigned int, _bfd_coff_swap_scnhdr_out,( - bfd *abfd, - PTR in, - PTR out)); + alent * (*_get_lineno) PARAMS ((bfd *, struct symbol_cache_entry *)); + + boolean (*_bfd_set_arch_mach) PARAMS ((bfd *, enum bfd_architecture, + unsigned long)); + + bfd * (*openr_next_archived_file) PARAMS ((bfd *arch, bfd *prev)); + + boolean (*_bfd_find_nearest_line) PARAMS ((bfd *abfd, + struct sec *section, struct symbol_cache_entry **symbols, + bfd_vma offset, CONST char **file, CONST char **func, + unsigned int *line)); + + int (*_bfd_stat_arch_elt) PARAMS ((bfd *, struct stat *)); + + int (*_bfd_sizeof_headers) PARAMS ((bfd *, boolean)); + + void (*_bfd_debug_info_start) PARAMS ((bfd *)); + void (*_bfd_debug_info_end) PARAMS ((bfd *)); + void (*_bfd_debug_info_accumulate) PARAMS ((bfd *, struct sec *)); + + bfd_byte * (*_bfd_get_relocated_section_contents) PARAMS ((bfd *, + struct bfd_seclet *, bfd_byte *data)); + boolean (*_bfd_relax_section) PARAMS ((bfd *, struct sec *, + struct symbol_cache_entry **)); /* See documentation on reloc types. */ - SDEF (CONST struct reloc_howto_struct *, - reloc_type_lookup, - (bfd *abfd, bfd_reloc_code_real_type code)); + CONST struct reloc_howto_struct * + (*reloc_type_lookup) PARAMS ((bfd *abfd, + bfd_reloc_code_real_type code)); - /* Complete and utter crock, currently used for the assembler + /* Back-door to allow format-aware applications to create debug symbols + while using BFD for everything else. Currently used by the assembler when creating COFF files. */ - SDEF (asymbol *, _bfd_make_debug_symbol, ( + asymbol * (*_bfd_make_debug_symbol) PARAMS (( bfd *abfd, void *ptr, unsigned long size));