📄 coffcode.texi
字号:
PARAMS ((bfd *, PTR, PTR)); unsigned int (*_bfd_coff_swap_reloc_out) PARAMS ((bfd *, PTR, PTR)); unsigned int (*_bfd_coff_swap_filehdr_out) PARAMS ((bfd *, PTR, PTR)); unsigned int (*_bfd_coff_swap_aouthdr_out) PARAMS ((bfd *, PTR, PTR)); unsigned int (*_bfd_coff_swap_scnhdr_out) PARAMS ((bfd *, PTR, PTR)); unsigned int _bfd_filhsz; unsigned int _bfd_aoutsz; unsigned int _bfd_scnhsz; unsigned int _bfd_symesz; unsigned int _bfd_auxesz; unsigned int _bfd_relsz; unsigned int _bfd_linesz; unsigned int _bfd_filnmlen; bfd_boolean _bfd_coff_long_filenames; bfd_boolean _bfd_coff_long_section_names; unsigned int _bfd_coff_default_section_alignment_power; bfd_boolean _bfd_coff_force_symnames_in_strings; unsigned int _bfd_coff_debug_string_prefix_length; void (*_bfd_coff_swap_filehdr_in) PARAMS ((bfd *, PTR, PTR)); void (*_bfd_coff_swap_aouthdr_in) PARAMS ((bfd *, PTR, PTR)); void (*_bfd_coff_swap_scnhdr_in) PARAMS ((bfd *, PTR, PTR)); void (*_bfd_coff_swap_reloc_in) PARAMS ((bfd *abfd, PTR, PTR)); bfd_boolean (*_bfd_coff_bad_format_hook) PARAMS ((bfd *, PTR)); bfd_boolean (*_bfd_coff_set_arch_mach_hook) PARAMS ((bfd *, PTR)); PTR (*_bfd_coff_mkobject_hook) PARAMS ((bfd *, PTR, PTR)); bfd_boolean (*_bfd_styp_to_sec_flags_hook) PARAMS ((bfd *, PTR, const char *, asection *, flagword *)); void (*_bfd_set_alignment_hook) PARAMS ((bfd *, asection *, PTR)); bfd_boolean (*_bfd_coff_slurp_symbol_table) PARAMS ((bfd *)); bfd_boolean (*_bfd_coff_symname_in_debug) PARAMS ((bfd *, struct internal_syment *)); bfd_boolean (*_bfd_coff_pointerize_aux_hook) PARAMS ((bfd *, combined_entry_type *, combined_entry_type *, unsigned int, combined_entry_type *)); bfd_boolean (*_bfd_coff_print_aux) PARAMS ((bfd *, FILE *, combined_entry_type *, combined_entry_type *, combined_entry_type *, unsigned int)); void (*_bfd_coff_reloc16_extra_cases) PARAMS ((bfd *, struct bfd_link_info *, struct bfd_link_order *, arelent *, bfd_byte *, unsigned int *, unsigned int *)); int (*_bfd_coff_reloc16_estimate) PARAMS ((bfd *, asection *, arelent *, unsigned int, struct bfd_link_info *)); enum coff_symbol_classification (*_bfd_coff_classify_symbol) PARAMS ((bfd *, struct internal_syment *)); bfd_boolean (*_bfd_coff_compute_section_file_positions) PARAMS ((bfd *)); bfd_boolean (*_bfd_coff_start_final_link) PARAMS ((bfd *, struct bfd_link_info *)); bfd_boolean (*_bfd_coff_relocate_section) PARAMS ((bfd *, struct bfd_link_info *, bfd *, asection *, bfd_byte *, struct internal_reloc *, struct internal_syment *, asection **)); reloc_howto_type *(*_bfd_coff_rtype_to_howto) PARAMS ((bfd *, asection *, struct internal_reloc *, struct coff_link_hash_entry *, struct internal_syment *, bfd_vma *)); bfd_boolean (*_bfd_coff_adjust_symndx) PARAMS ((bfd *, struct bfd_link_info *, bfd *, asection *, struct internal_reloc *, bfd_boolean *)); bfd_boolean (*_bfd_coff_link_add_one_symbol) PARAMS ((struct bfd_link_info *, bfd *, const char *, flagword, asection *, bfd_vma, const char *, bfd_boolean, bfd_boolean, struct bfd_link_hash_entry **)); bfd_boolean (*_bfd_coff_link_output_has_begun) PARAMS ((bfd *, struct coff_final_link_info *)); bfd_boolean (*_bfd_coff_final_link_postscript) PARAMS ((bfd *, struct coff_final_link_info *));@} bfd_coff_backend_data;#define coff_backend_info(abfd) \ ((bfd_coff_backend_data *) (abfd)->xvec->backend_data)#define bfd_coff_swap_aux_in(a,e,t,c,ind,num,i) \ ((coff_backend_info (a)->_bfd_coff_swap_aux_in) (a,e,t,c,ind,num,i))#define bfd_coff_swap_sym_in(a,e,i) \ ((coff_backend_info (a)->_bfd_coff_swap_sym_in) (a,e,i))#define bfd_coff_swap_lineno_in(a,e,i) \ ((coff_backend_info ( a)->_bfd_coff_swap_lineno_in) (a,e,i))#define bfd_coff_swap_reloc_out(abfd, i, o) \ ((coff_backend_info (abfd)->_bfd_coff_swap_reloc_out) (abfd, i, o))#define bfd_coff_swap_lineno_out(abfd, i, o) \ ((coff_backend_info (abfd)->_bfd_coff_swap_lineno_out) (abfd, i, o))#define bfd_coff_swap_aux_out(a,i,t,c,ind,num,o) \ ((coff_backend_info (a)->_bfd_coff_swap_aux_out) (a,i,t,c,ind,num,o))#define bfd_coff_swap_sym_out(abfd, i,o) \ ((coff_backend_info (abfd)->_bfd_coff_swap_sym_out) (abfd, i, o))#define bfd_coff_swap_scnhdr_out(abfd, i,o) \ ((coff_backend_info (abfd)->_bfd_coff_swap_scnhdr_out) (abfd, i, o))#define bfd_coff_swap_filehdr_out(abfd, i,o) \ ((coff_backend_info (abfd)->_bfd_coff_swap_filehdr_out) (abfd, i, o))#define bfd_coff_swap_aouthdr_out(abfd, i,o) \ ((coff_backend_info (abfd)->_bfd_coff_swap_aouthdr_out) (abfd, i, o))#define bfd_coff_filhsz(abfd) (coff_backend_info (abfd)->_bfd_filhsz)#define bfd_coff_aoutsz(abfd) (coff_backend_info (abfd)->_bfd_aoutsz)#define bfd_coff_scnhsz(abfd) (coff_backend_info (abfd)->_bfd_scnhsz)#define bfd_coff_symesz(abfd) (coff_backend_info (abfd)->_bfd_symesz)#define bfd_coff_auxesz(abfd) (coff_backend_info (abfd)->_bfd_auxesz)#define bfd_coff_relsz(abfd) (coff_backend_info (abfd)->_bfd_relsz)#define bfd_coff_linesz(abfd) (coff_backend_info (abfd)->_bfd_linesz)#define bfd_coff_filnmlen(abfd) (coff_backend_info (abfd)->_bfd_filnmlen)#define bfd_coff_long_filenames(abfd) \ (coff_backend_info (abfd)->_bfd_coff_long_filenames)#define bfd_coff_long_section_names(abfd) \ (coff_backend_info (abfd)->_bfd_coff_long_section_names)#define bfd_coff_default_section_alignment_power(abfd) \ (coff_backend_info (abfd)->_bfd_coff_default_section_alignment_power)#define bfd_coff_swap_filehdr_in(abfd, i,o) \ ((coff_backend_info (abfd)->_bfd_coff_swap_filehdr_in) (abfd, i, o))#define bfd_coff_swap_aouthdr_in(abfd, i,o) \ ((coff_backend_info (abfd)->_bfd_coff_swap_aouthdr_in) (abfd, i, o))#define bfd_coff_swap_scnhdr_in(abfd, i,o) \ ((coff_backend_info (abfd)->_bfd_coff_swap_scnhdr_in) (abfd, i, o))#define bfd_coff_swap_reloc_in(abfd, i, o) \ ((coff_backend_info (abfd)->_bfd_coff_swap_reloc_in) (abfd, i, o))#define bfd_coff_bad_format_hook(abfd, filehdr) \ ((coff_backend_info (abfd)->_bfd_coff_bad_format_hook) (abfd, filehdr))#define bfd_coff_set_arch_mach_hook(abfd, filehdr)\ ((coff_backend_info (abfd)->_bfd_coff_set_arch_mach_hook) (abfd, filehdr))#define bfd_coff_mkobject_hook(abfd, filehdr, aouthdr)\ ((coff_backend_info (abfd)->_bfd_coff_mkobject_hook)\ (abfd, filehdr, aouthdr))#define bfd_coff_styp_to_sec_flags_hook(abfd, scnhdr, name, section, flags_ptr)\ ((coff_backend_info (abfd)->_bfd_styp_to_sec_flags_hook)\ (abfd, scnhdr, name, section, flags_ptr))#define bfd_coff_set_alignment_hook(abfd, sec, scnhdr)\ ((coff_backend_info (abfd)->_bfd_set_alignment_hook) (abfd, sec, scnhdr))#define bfd_coff_slurp_symbol_table(abfd)\ ((coff_backend_info (abfd)->_bfd_coff_slurp_symbol_table) (abfd))#define bfd_coff_symname_in_debug(abfd, sym)\ ((coff_backend_info (abfd)->_bfd_coff_symname_in_debug) (abfd, sym))#define bfd_coff_force_symnames_in_strings(abfd)\ (coff_backend_info (abfd)->_bfd_coff_force_symnames_in_strings)#define bfd_coff_debug_string_prefix_length(abfd)\ (coff_backend_info (abfd)->_bfd_coff_debug_string_prefix_length)#define bfd_coff_print_aux(abfd, file, base, symbol, aux, indaux)\ ((coff_backend_info (abfd)->_bfd_coff_print_aux)\ (abfd, file, base, symbol, aux, indaux))#define bfd_coff_reloc16_extra_cases(abfd, link_info, link_order,\ reloc, data, src_ptr, dst_ptr)\ ((coff_backend_info (abfd)->_bfd_coff_reloc16_extra_cases)\ (abfd, link_info, link_order, reloc, data, src_ptr, dst_ptr))#define bfd_coff_reloc16_estimate(abfd, section, reloc, shrink, link_info)\ ((coff_backend_info (abfd)->_bfd_coff_reloc16_estimate)\ (abfd, section, reloc, shrink, link_info))#define bfd_coff_classify_symbol(abfd, sym)\ ((coff_backend_info (abfd)->_bfd_coff_classify_symbol)\ (abfd, sym))#define bfd_coff_compute_section_file_positions(abfd)\ ((coff_backend_info (abfd)->_bfd_coff_compute_section_file_positions)\ (abfd))#define bfd_coff_start_final_link(obfd, info)\ ((coff_backend_info (obfd)->_bfd_coff_start_final_link)\ (obfd, info))#define bfd_coff_relocate_section(obfd,info,ibfd,o,con,rel,isyms,secs)\ ((coff_backend_info (ibfd)->_bfd_coff_relocate_section)\ (obfd, info, ibfd, o, con, rel, isyms, secs))#define bfd_coff_rtype_to_howto(abfd, sec, rel, h, sym, addendp)\ ((coff_backend_info (abfd)->_bfd_coff_rtype_to_howto)\ (abfd, sec, rel, h, sym, addendp))#define bfd_coff_adjust_symndx(obfd, info, ibfd, sec, rel, adjustedp)\ ((coff_backend_info (abfd)->_bfd_coff_adjust_symndx)\ (obfd, info, ibfd, sec, rel, adjustedp))#define bfd_coff_link_add_one_symbol(info, abfd, name, flags, section,\ value, string, cp, coll, hashp)\ ((coff_backend_info (abfd)->_bfd_coff_link_add_one_symbol)\ (info, abfd, name, flags, section, value, string, cp, coll, hashp))#define bfd_coff_link_output_has_begun(a,p) \ ((coff_backend_info (a)->_bfd_coff_link_output_has_begun) (a,p))#define bfd_coff_final_link_postscript(a,p) \ ((coff_backend_info (a)->_bfd_coff_final_link_postscript) (a,p))@end example@subsubsection Writing relocationsTo write relocations, the back end steps though thecanonical relocation table and create an@code{internal_reloc}. The symbol index to use is removed fromthe @code{offset} field in the symbol table supplied. Theaddress comes directly from the sum of the section baseaddress and the relocation offset; the type is dug directlyfrom the howto field. Then the @code{internal_reloc} isswapped into the shape of an @code{external_reloc} and writtenout to disk.@subsubsection Reading linenumbersCreating the linenumber table is done by reading in the entirecoff linenumber table, and creating another table for internal use.A coff linenumber table is structured so that each functionis marked as having a line number of 0. Each line within thefunction is an offset from the first line in the function. Thebase of the line number information for the table is stored inthe symbol associated with the function.Note: The PE format uses line number 0 for a flag indicating anew source file.The information is copied from the external to the internaltable, and each symbol which marks a function is marked bypointing its...How does this work ?@subsubsection Reading relocationsCoff relocations are easily transformed into the internal BFD form(@code{arelent}).Reading a coff relocation table is done in the following stages:@itemize @bullet@itemRead the entire coff relocation table into memory.@itemProcess each relocation in turn; first swap it from theexternal to the internal form.@itemTurn the symbol referenced in the relocation's symbol indexinto a pointer into the canonical symbol table.This table is the same as the one returned by a call to@code{bfd_canonicalize_symtab}. The back end will call thatroutine and save the result if a canonicalization hasn't been done.@itemThe reloc index is turned into a pointer to a howtostructure, in a back end specific way. For instance, the 386and 960 use the @code{r_type} to directly produce an indexinto a howto table vector; the 88k subtracts a number from the@code{r_type} field and creates an addend field.@end itemize
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -