URL
https://opencores.org/ocsvn/or1k/or1k/trunk
Subversion Repositories or1k
[/] [or1k/] [trunk/] [insight/] [bfd/] [doc/] [bfd.info-6] - Rev 1774
Go to most recent revision | Compare with Previous | Blame | View Log
This is bfd.info, produced by makeinfo version 4.0 from bfd.texinfo.START-INFO-DIR-ENTRY* Bfd: (bfd). The Binary File Descriptor library.END-INFO-DIR-ENTRYThis file documents the BFD library.Copyright (C) 1991, 2000 Free Software Foundation, Inc.Permission is granted to copy, distribute and/or modify this documentunder the terms of the GNU Free Documentation License, Version 1.1or any later version published by the Free Software Foundation;with no Invariant Sections, with no Front-Cover Texts, and with noBack-Cover Texts. A copy of the license is included in thesection entitled "GNU Free Documentation License".File: bfd.info, Node: coff, Next: elf, Prev: aout, Up: BFD back endscoff backends=============BFD supports a number of different flavours of coff format. Themajor differences between formats are the sizes and alignments offields in structures on disk, and the occasional extra field.Coff in all its varieties is implemented with a few common files anda number of implementation specific files. For example, The 88k bcscoff format is implemented in the file `coff-m88k.c'. This file`#include's `coff/m88k.h' which defines the external structure of thecoff format for the 88k, and `coff/internal.h' which defines theinternal structure. `coff-m88k.c' also defines the relocations used bythe 88k format *Note Relocations::.The Intel i960 processor version of coff is implemented in`coff-i960.c'. This file has the same structure as `coff-m88k.c',except that it includes `coff/i960.h' rather than `coff-m88k.h'.Porting to a new version of coff--------------------------------The recommended method is to select from the existingimplementations the version of coff which is most like the one you wantto use. For example, we'll say that i386 coff is the one you select,and that your coff flavour is called foo. Copy `i386coff.c' to`foocoff.c', copy `../include/coff/i386.h' to `../include/coff/foo.h',and add the lines to `targets.c' and `Makefile.in' so that your newback end is used. Alter the shapes of the structures in`../include/coff/foo.h' so that they match what you need. You willprobably also have to add `#ifdef's to the code in `coff/internal.h' and`coffcode.h' if your version of coff is too wild.You can verify that your new BFD backend works quite simply bybuilding `objdump' from the `binutils' directory, and making sure thatits version of what's going on and your host system's idea (assuming ithas the pretty standard coff dump utility, usually called `att-dump' orjust `dump') are the same. Then clean up your code, and send whatyou've done to Cygnus. Then your stuff will be in the next release, andyou won't have to keep integrating it.How the coff backend works--------------------------File layout...........The Coff backend is split into generic routines that are applicableto any Coff target and routines that are specific to a particulartarget. The target-specific routines are further split into ones whichare basically the same for all Coff targets except that they use theexternal symbol format or use different values for certain constants.The generic routines are in `coffgen.c'. These routines work forany Coff target. They use some hooks into the target specific code;the hooks are in a `bfd_coff_backend_data' structure, one of whichexists for each target.The essentially similar target-specific routines are in`coffcode.h'. This header file includes executable C code. Thevarious Coff targets first include the appropriate Coff header file,make any special defines that are needed, and then include `coffcode.h'.Some of the Coff targets then also have additional routines in thetarget source file itself.For example, `coff-i960.c' includes `coff/internal.h' and`coff/i960.h'. It then defines a few constants, such as `I960', andincludes `coffcode.h'. Since the i960 has complex relocation types,`coff-i960.c' also includes some code to manipulate the i960 relocs.This code is not in `coffcode.h' because it would not be used by anyother target.Bit twiddling.............Each flavour of coff supported in BFD has its own header filedescribing the external layout of the structures. There is also aninternal description of the coff layout, in `coff/internal.h'. A majorfunction of the coff backend is swapping the bytes and twiddling thebits to translate the external form of the structures into the normalinternal form. This is all performed in the `bfd_swap'_thing_directionroutines. Some elements are different sizes between different versionsof coff; it is the duty of the coff version specific include file tooverride the definitions of various packing routines in `coffcode.h'.E.g., the size of line number entry in coff is sometimes 16 bits, andsometimes 32 bits. `#define'ing `PUT_LNSZ_LNNO' and `GET_LNSZ_LNNO'will select the correct one. No doubt, some day someone will find aversion of coff which has a varying field size not catered to at themoment. To port BFD, that person will have to add more `#defines'.Three of the bit twiddling routines are exported to `gdb';`coff_swap_aux_in', `coff_swap_sym_in' and `coff_swap_lineno_in'. `GDB'reads the symbol table on its own, but uses BFD to fix things up. Moreof the bit twiddlers are exported for `gas'; `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'. `Gas' currently keeps track of all the symboltable and reloc drudgery itself, thereby saving the internal BFDoverhead, but uses BFD to swap things on the way out, making crossports much safer. Doing so also allows BFD (and thus the linker) touse the same header files as `gas', which makes one avenue to disasterdisappear.Symbol reading..............The simple canonical form for symbols used by BFD is not rich enoughto keep all the information available in a coff symbol table. The backend gets around this problem by keeping the original symbol tablearound, "behind the scenes".When a symbol table is requested (through a call to`bfd_canonicalize_symtab'), a request gets through to`coff_get_normalized_symtab'. This reads the symbol table from the cofffile and swaps all the structures inside into the internal form. Italso fixes up all the pointers in the table (represented in the file byoffsets from the first symbol in the table) into physical pointers toelements in the new internal table. This involves some work since themeanings of fields change depending upon context: a field that is apointer to another structure in the symbol table at one moment may bethe size in bytes of a structure at the next. Another pass is madeover the table. All symbols which mark file names (`C_FILE' symbols)are modified so that the internal string points to the value in theauxent (the real filename) rather than the normal text associated withthe symbol (`".file"').At this time the symbol names are moved around. Coff stores allsymbols less than nine characters long physically within the symboltable; longer strings are kept at the end of the file in the stringtable. This pass moves all strings into memory and replaces them withpointers to the strings.The symbol table is massaged once again, this time to create thecanonical table used by the BFD application. Each symbol is inspectedin turn, and a decision made (using the `sclass' field) about thevarious flags to set in the `asymbol'. *Note Symbols::. The generatedcanonical table shares strings with the hidden internal symbol table.Any linenumbers are read from the coff file too, and attached to thesymbols which own the functions the linenumbers belong to.Symbol writing..............Writing a symbol to a coff file which didn't come from a coff filewill lose any debugging information. The `asymbol' structure remembersthe BFD from which the symbol was taken, and on output the back endmakes sure that the same destination target as source target is present.When the symbols have come from a coff file then all the debugginginformation is preserved.Symbol tables are provided for writing to the back end in a vectorof pointers to pointers. This allows applications like the linker toaccumulate and output large symbol tables without having to do too muchbyte copying.This function runs through the provided symbol table and patcheseach symbol marked as a file place holder (`C_FILE') to point to thenext file place holder in the list. It also marks each `offset' fieldin the list with the offset from the first symbol of the current symbol.Another function of this procedure is to turn the canonical valueform of BFD into the form used by coff. Internally, BFD expects symbolvalues to be offsets from a section base; so a symbol physically at0x120, but in a section starting at 0x100, would have the value 0x20.Coff expects symbols to contain their final value, so symbols havetheir values changed at this point to reflect their sum with theirowning section. This transformation uses the `output_section' field ofthe `asymbol''s `asection' *Note Sections::.* `coff_mangle_symbols'This routine runs though the provided symbol table and uses theoffsets generated by the previous pass and the pointers generated whenthe symbol table was read in to create the structured hierachy requiredby coff. It changes each pointer to a symbol into the index into thesymbol table of the asymbol.* `coff_write_symbols'This routine runs through the symbol table and patches up thesymbols from their internal form into the coff way, calls the bittwiddlers, and writes out the table to the file.`coff_symbol_type'..................*Description*The hidden information for an `asymbol' is described in a`combined_entry_type':typedef struct coff_ptr_struct{/* Remembers the offset from the first symbol in the file forthis symbol. Generated by coff_renumber_symbols. */unsigned int offset;/* Should the value of this symbol be renumbered. Used forXCOFF C_BSTAT symbols. Set by coff_slurp_symbol_table. */unsigned int fix_value : 1;/* Should the tag field of this symbol be renumbered.Created by coff_pointerize_aux. */unsigned int fix_tag : 1;/* Should the endidx field of this symbol be renumbered.Created by coff_pointerize_aux. */unsigned int fix_end : 1;/* Should the x_csect.x_scnlen field be renumbered.Created by coff_pointerize_aux. */unsigned int fix_scnlen : 1;/* Fix up an XCOFF C_BINCL/C_EINCL symbol. The value is theindex into the line number entries. Set bycoff_slurp_symbol_table. */unsigned int fix_line : 1;/* The container for the symbol structure as read and translatedfrom the file. */union {union internal_auxent auxent;struct internal_syment syment;} u;} combined_entry_type;/* Each canonical asymbol really looks like this: */typedef struct coff_symbol_struct{/* The actual symbol which the rest of BFD works with */asymbol symbol;/* A pointer to the hidden information for this symbol */combined_entry_type *native;/* A pointer to the linenumber information for this symbol */struct lineno_cache_entry *lineno;/* Have the line numbers been relocated yet ? */boolean done_lineno;} coff_symbol_type;`bfd_coff_backend_data'......................./* COFF symbol classifications. */enum coff_symbol_classification{/* Global symbol. */COFF_SYMBOL_GLOBAL,/* Common symbol. */COFF_SYMBOL_COMMON,/* Undefined symbol. */COFF_SYMBOL_UNDEFINED,/* Local symbol. */COFF_SYMBOL_LOCAL,/* PE section symbol. */COFF_SYMBOL_PE_SECTION};Special entry points for gdb to swap in coff symbol table parts:typedef struct{void (*_bfd_coff_swap_aux_in) PARAMS ((bfd *abfd,PTR ext,int type,int class,int indaux,int numaux,PTR in));void (*_bfd_coff_swap_sym_in) PARAMS ((bfd *abfd ,PTR ext,PTR in));void (*_bfd_coff_swap_lineno_in) PARAMS ((bfd *abfd,PTR ext,PTR in));Special entry points for gas to swap out coff parts:unsigned int (*_bfd_coff_swap_aux_out) PARAMS ((bfd *abfd,PTR in,int type,int class,int indaux,int numaux,PTR ext));unsigned int (*_bfd_coff_swap_sym_out) PARAMS ((bfd *abfd,PTR in,PTR ext));unsigned int (*_bfd_coff_swap_lineno_out) PARAMS ((bfd *abfd,PTR in,PTR ext));unsigned int (*_bfd_coff_swap_reloc_out) PARAMS ((bfd *abfd,PTR src,PTR dst));unsigned int (*_bfd_coff_swap_filehdr_out) PARAMS ((bfd *abfd,PTR in,PTR out));unsigned int (*_bfd_coff_swap_aouthdr_out) PARAMS ((bfd *abfd,PTR in,PTR out));unsigned int (*_bfd_coff_swap_scnhdr_out) PARAMS ((bfd *abfd,PTR in,PTR out));Special entry points for generic COFF routines to call targetdependent COFF routines: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;boolean _bfd_coff_long_filenames;boolean _bfd_coff_long_section_names;unsigned int _bfd_coff_default_section_alignment_power;boolean _bfd_coff_force_symnames_in_strings;unsigned int _bfd_coff_debug_string_prefix_length;void (*_bfd_coff_swap_filehdr_in) PARAMS ((bfd *abfd,PTR ext,PTR in));void (*_bfd_coff_swap_aouthdr_in) PARAMS ((bfd *abfd,PTR ext,PTR in));void (*_bfd_coff_swap_scnhdr_in) PARAMS ((bfd *abfd,PTR ext,PTR in));void (*_bfd_coff_swap_reloc_in) PARAMS ((bfd *abfd,PTR ext,PTR in));boolean (*_bfd_coff_bad_format_hook) PARAMS ((bfd *abfd,PTR internal_filehdr));boolean (*_bfd_coff_set_arch_mach_hook) PARAMS ((bfd *abfd,PTR internal_filehdr));PTR (*_bfd_coff_mkobject_hook) PARAMS ((bfd *abfd,PTR internal_filehdr,PTR internal_aouthdr));boolean (*_bfd_styp_to_sec_flags_hook) PARAMS ((bfd *abfd,PTR internal_scnhdr,const char *name,asection *section,flagword *flags_ptr));void (*_bfd_set_alignment_hook) PARAMS ((bfd *abfd,asection *sec,PTR internal_scnhdr));boolean (*_bfd_coff_slurp_symbol_table) PARAMS ((bfd *abfd));boolean (*_bfd_coff_symname_in_debug) PARAMS ((bfd *abfd,struct internal_syment *sym));boolean (*_bfd_coff_pointerize_aux_hook) PARAMS ((bfd *abfd,combined_entry_type *table_base,combined_entry_type *symbol,unsigned int indaux,combined_entry_type *aux));boolean (*_bfd_coff_print_aux) PARAMS ((bfd *abfd,FILE *file,combined_entry_type *table_base,combined_entry_type *symbol,combined_entry_type *aux,unsigned int indaux));void (*_bfd_coff_reloc16_extra_cases) PARAMS ((bfd *abfd,struct bfd_link_info *link_info,struct bfd_link_order *link_order,arelent *reloc,bfd_byte *data,unsigned int *src_ptr,unsigned int *dst_ptr));int (*_bfd_coff_reloc16_estimate) PARAMS ((bfd *abfd,asection *input_section,arelent *r,unsigned int shrink,struct bfd_link_info *link_info));enum coff_symbol_classification (*_bfd_coff_classify_symbol) PARAMS ((bfd *abfd,struct internal_syment *));boolean (*_bfd_coff_compute_section_file_positions) PARAMS ((bfd *abfd));boolean (*_bfd_coff_start_final_link) PARAMS ((bfd *output_bfd,struct bfd_link_info *info));boolean (*_bfd_coff_relocate_section) PARAMS ((bfd *output_bfd,struct bfd_link_info *info,bfd *input_bfd,asection *input_section,bfd_byte *contents,struct internal_reloc *relocs,struct internal_syment *syms,asection **sections));reloc_howto_type *(*_bfd_coff_rtype_to_howto) PARAMS ((bfd *abfd,asection *sec,struct internal_reloc *rel,struct coff_link_hash_entry *h,struct internal_syment *sym,bfd_vma *addendp));boolean (*_bfd_coff_adjust_symndx) PARAMS ((bfd *obfd,struct bfd_link_info *info,bfd *ibfd,asection *sec,struct internal_reloc *reloc,boolean *adjustedp));boolean (*_bfd_coff_link_add_one_symbol) PARAMS ((struct bfd_link_info *info,bfd *abfd,const char *name,flagword flags,asection *section,bfd_vma value,const char *string,boolean copy,boolean collect,struct bfd_link_hash_entry **hashp));boolean (*_bfd_coff_link_output_has_begun) PARAMS ((bfd * abfd,struct coff_final_link_info * pfinfo));boolean (*_bfd_coff_final_link_postscript) PARAMS ((bfd * abfd,struct coff_final_link_info * pfinfo));} 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))Writing relocations...................To write relocations, the back end steps though the canonicalrelocation table and create an `internal_reloc'. The symbol index touse is removed from the `offset' field in the symbol table supplied.The address comes directly from the sum of the section base address andthe relocation offset; the type is dug directly from the howto field.Then the `internal_reloc' is swapped into the shape of an`external_reloc' and written out to disk.Reading linenumbers...................Creating the linenumber table is done by reading in the entire cofflinenumber table, and creating another table for internal use.A coff linenumber table is structured so that each function ismarked as having a line number of 0. Each line within the function isan offset from the first line in the function. The base of the linenumber information for the table is stored in the symbol associatedwith the function.Note: The PE format uses line number 0 for a flag indicating a newsource file.The information is copied from the external to the internal table,and each symbol which marks a function is marked by pointing its...How does this work ?Reading relocations...................Coff relocations are easily transformed into the internal BFD form(`arelent').Reading a coff relocation table is done in the following stages:* Read the entire coff relocation table into memory.* Process each relocation in turn; first swap it from the externalto the internal form.* Turn the symbol referenced in the relocation's symbol index into apointer into the canonical symbol table. This table is the sameas the one returned by a call to `bfd_canonicalize_symtab'. Theback end will call that routine and save the result if acanonicalization hasn't been done.* The reloc index is turned into a pointer to a howto structure, ina back end specific way. For instance, the 386 and 960 use the`r_type' to directly produce an index into a howto table vector;the 88k subtracts a number from the `r_type' field and creates anaddend field.File: bfd.info, Node: elf, Prev: coff, Up: BFD back endsELF backends============BFD support for ELF formats is being worked on. Currently, the bestsupported back ends are for sparc and i386 (running svr4 or Solaris 2).Documentation of the internals of the support code still needs to bewritten. The code is changing quickly enough that we haven't botheredyet.`bfd_elf_find_section'......................*Synopsis*struct elf_internal_shdr *bfd_elf_find_section (bfd *abfd, char *name);*Description*Helper functions for GDB to locate the string tables. Since BFD hidesstring tables from callers, GDB needs to use an internal hook to findthem. Sun's .stabstr, in particular, isn't even pointed to by the.stab section, so ordinary mechanisms wouldn't work to find it, even ifwe had some.File: bfd.info, Node: GNU Free Documentation License, Next: Index, Prev: BFD back ends, Up: TopGNU Free Documentation License******************************GNU Free Documentation LicenseVersion 1.1, March 2000Copyright (C) 2000 Free Software Foundation, Inc. 59 TemplePlace, Suite 330, Boston, MA 02111-1307 USAEveryone is permitted to copy and distribute verbatim copies ofthis license document, but changing it is not allowed.0. PREAMBLEThe purpose of this License is to make a manual, textbook, or otherwritten document "free" in the sense of freedom: to assure everyone theeffective freedom to copy and redistribute it, with or withoutmodifying it, either commercially or noncommercially. Secondarily,this License preserves for the author and publisher a way to get creditfor their work, while not being considered responsible formodifications made by others.This License is a kind of "copyleft", which means that derivativeworks of the document must themselves be free in the same sense. Itcomplements the GNU General Public License, which is a copyleft licensedesigned for free software.We have designed this License in order to use it for manuals for freesoftware, because free software needs free documentation: a freeprogram should come with manuals providing the same freedoms that thesoftware does. But this License is not limited to software manuals; itcan be used for any textual work, regardless of subject matter orwhether it is published as a printed book. We recommend this Licenseprincipally for works whose purpose is instruction or reference.1. APPLICABILITY AND DEFINITIONSThis License applies to any manual or other work that contains anotice placed by the copyright holder saying it can be distributedunder the terms of this License. The "Document", below, refers to anysuch manual or work. Any member of the public is a licensee, and isaddressed as "you".A "Modified Version" of the Document means any work containing theDocument or a portion of it, either copied verbatim, or withmodifications and/or translated into another language.A "Secondary Section" is a named appendix or a front-matter sectionof the Document that deals exclusively with the relationship of thepublishers or authors of the Document to the Document's overall subject(or to related matters) and contains nothing that could fall directlywithin that overall subject. (For example, if the Document is in part atextbook of mathematics, a Secondary Section may not explain anymathematics.) The relationship could be a matter of historicalconnection with the subject or with related matters, or of legal,commercial, philosophical, ethical or political position regarding them.The "Invariant Sections" are certain Secondary Sections whose titlesare designated, as being those of Invariant Sections, in the noticethat says that the Document is released under this License.The "Cover Texts" are certain short passages of text that are listed,as Front-Cover Texts or Back-Cover Texts, in the notice that says thatthe Document is released under this License.A "Transparent" copy of the Document means a machine-readable copy,represented in a format whose specification is available to the generalpublic, whose contents can be viewed and edited directly andstraightforwardly with generic text editors or (for images composed ofpixels) generic paint programs or (for drawings) some widely availabledrawing editor, and that is suitable for input to text formatters orfor automatic translation to a variety of formats suitable for input totext formatters. A copy made in an otherwise Transparent file formatwhose markup has been designed to thwart or discourage subsequentmodification by readers is not Transparent. A copy that is not"Transparent" is called "Opaque".Examples of suitable formats for Transparent copies include plainASCII without markup, Texinfo input format, LaTeX input format, SGML orXML using a publicly available DTD, and standard-conforming simple HTMLdesigned for human modification. Opaque formats include PostScript,PDF, proprietary formats that can be read and edited only byproprietary word processors, SGML or XML for which the DTD and/orprocessing tools are not generally available, and the machine-generatedHTML produced by some word processors for output purposes only.The "Title Page" means, for a printed book, the title page itself,plus such following pages as are needed to hold, legibly, the materialthis License requires to appear in the title page. For works informats which do not have any title page as such, "Title Page" meansthe text near the most prominent appearance of the work's title,preceding the beginning of the body of the text.2. VERBATIM COPYINGYou may copy and distribute the Document in any medium, eithercommercially or noncommercially, provided that this License, thecopyright notices, and the license notice saying this License appliesto the Document are reproduced in all copies, and that you add no otherconditions whatsoever to those of this License. You may not usetechnical measures to obstruct or control the reading or furthercopying of the copies you make or distribute. However, you may acceptcompensation in exchange for copies. If you distribute a large enoughnumber of copies you must also follow the conditions in section 3.You may also lend copies, under the same conditions stated above, andyou may publicly display copies.3. COPYING IN QUANTITYIf you publish printed copies of the Document numbering more than100, and the Document's license notice requires Cover Texts, you mustenclose the copies in covers that carry, clearly and legibly, all theseCover Texts: Front-Cover Texts on the front cover, and Back-Cover Textson the back cover. Both covers must also clearly and legibly identifyyou as the publisher of these copies. The front cover must present thefull title with all words of the title equally prominent and visible.You may add other material on the covers in addition. Copying withchanges limited to the covers, as long as they preserve the title ofthe Document and satisfy these conditions, can be treated as verbatimcopying in other respects.If the required texts for either cover are too voluminous to fitlegibly, you should put the first ones listed (as many as fitreasonably) on the actual cover, and continue the rest onto adjacentpages.If you publish or distribute Opaque copies of the Document numberingmore than 100, you must either include a machine-readable Transparentcopy along with each Opaque copy, or state in or with each Opaque copya publicly-accessible computer-network location containing a completeTransparent copy of the Document, free of added material, which thegeneral network-using public has access to download anonymously at nocharge using public-standard network protocols. If you use the latteroption, you must take reasonably prudent steps, when you begindistribution of Opaque copies in quantity, to ensure that thisTransparent copy will remain thus accessible at the stated locationuntil at least one year after the last time you distribute an Opaquecopy (directly or through your agents or retailers) of that edition tothe public.It is requested, but not required, that you contact the authors ofthe Document well before redistributing any large number of copies, togive them a chance to provide you with an updated version of theDocument.4. MODIFICATIONSYou may copy and distribute a Modified Version of the Document underthe conditions of sections 2 and 3 above, provided that you release theModified Version under precisely this License, with the ModifiedVersion filling the role of the Document, thus licensing distributionand modification of the Modified Version to whoever possesses a copy ofit. In addition, you must do these things in the Modified Version:A. Use in the Title Page (and on the covers, if any) a title distinctfrom that of the Document, and from those of previous versions(which should, if there were any, be listed in the History sectionof the Document). You may use the same title as a previous versionif the original publisher of that version gives permission. B. List onthe Title Page, as authors, one or more persons or entitiesresponsible for authorship of the modifications in the ModifiedVersion, together with at least five of the principal authors of theDocument (all of its principal authors, if it has less than five). C.State on the Title page the name of the publisher of the ModifiedVersion, as the publisher. D. Preserve all the copyright notices ofthe Document. E. Add an appropriate copyright notice for yourmodifications adjacent to the other copyright notices. F. Include,immediately after the copyright notices, a license notice giving thepublic permission to use the Modified Version under the terms ofthis License, in the form shown in the Addendum below. G. Preserve inthat license notice the full lists of Invariant Sections andrequired Cover Texts given in the Document's license notice. H.Include an unaltered copy of this License. I. Preserve the sectionentitled "History", and its title, and add to it an item stating atleast the title, year, new authors, and publisher of the ModifiedVersion as given on the Title Page. If there is no section entitled"History" in the Document, create one stating the title, year,authors, and publisher of the Document as given on its Title Page,then add an item describing the Modified Version as stated in theprevious sentence. J. Preserve the network location, if any, given inthe Document for public access to a Transparent copy of theDocument, and likewise the network locations given in the Documentfor previous versions it was based on. These may be placed in the"History" section. You may omit a network location for a work thatwas published at least four years before the Document itself, or ifthe original publisher of the version it refers to gives permission.K. In any section entitled "Acknowledgements" or "Dedications",preserve the section's title, and preserve in the section all thesubstance and tone of each of the contributor acknowledgementsand/or dedications given therein. L. Preserve all the InvariantSections of the Document, unaltered in their text and in theirtitles. Section numbers or the equivalent are not considered partof the section titles. M. Delete any section entitled "Endorsements".Such a section may not be included in the Modified Version. N. Donot retitle any existing section as "Endorsements" or to conflict intitle with any Invariant Section.If the Modified Version includes new front-matter sections orappendices that qualify as Secondary Sections and contain no materialcopied from the Document, you may at your option designate some or allof these sections as invariant. To do this, add their titles to thelist of Invariant Sections in the Modified Version's license notice.These titles must be distinct from any other section titles.You may add a section entitled "Endorsements", provided it containsnothing but endorsements of your Modified Version by variousparties-for example, statements of peer review or that the text hasbeen approved by an organization as the authoritative definition of astandard.You may add a passage of up to five words as a Front-Cover Text, anda passage of up to 25 words as a Back-Cover Text, to the end of the listof Cover Texts in the Modified Version. Only one passage ofFront-Cover Text and one of Back-Cover Text may be added by (or througharrangements made by) any one entity. If the Document already includesa cover text for the same cover, previously added by you or byarrangement made by the same entity you are acting on behalf of, youmay not add another; but you may replace the old one, on explicitpermission from the previous publisher that added the old one.The author(s) and publisher(s) of the Document do not by this Licensegive permission to use their names for publicity for or to assert orimply endorsement of any Modified Version.5. COMBINING DOCUMENTSYou may combine the Document with other documents released under thisLicense, under the terms defined in section 4 above for modifiedversions, provided that you include in the combination all of theInvariant Sections of all of the original documents, unmodified, andlist them all as Invariant Sections of your combined work in itslicense notice.The combined work need only contain one copy of this License, andmultiple identical Invariant Sections may be replaced with a singlecopy. If there are multiple Invariant Sections with the same name butdifferent contents, make the title of each such section unique byadding at the end of it, in parentheses, the name of the originalauthor or publisher of that section if known, or else a unique number.Make the same adjustment to the section titles in the list of InvariantSections in the license notice of the combined work.In the combination, you must combine any sections entitled "History"in the various original documents, forming one section entitled"History"; likewise combine any sections entitled "Acknowledgements",and any sections entitled "Dedications". You must delete all sectionsentitled "Endorsements."6. COLLECTIONS OF DOCUMENTSYou may make a collection consisting of the Document and otherdocuments released under this License, and replace the individualcopies of this License in the various documents with a single copy thatis included in the collection, provided that you follow the rules ofthis License for verbatim copying of each of the documents in all otherrespects.You may extract a single document from such a collection, anddistribute it individually under this License, provided you insert acopy of this License into the extracted document, and follow thisLicense in all other respects regarding verbatim copying of thatdocument.7. AGGREGATION WITH INDEPENDENT WORKSA compilation of the Document or its derivatives with other separateand independent documents or works, in or on a volume of a storage ordistribution medium, does not as a whole count as a Modified Version ofthe Document, provided no compilation copyright is claimed for thecompilation. Such a compilation is called an "aggregate", and thisLicense does not apply to the other self-contained works thus compiledwith the Document, on account of their being thus compiled, if they arenot themselves derivative works of the Document.If the Cover Text requirement of section 3 is applicable to thesecopies of the Document, then if the Document is less than one quarterof the entire aggregate, the Document's Cover Texts may be placed oncovers that surround only the Document within the aggregate. Otherwisethey must appear on covers around the whole aggregate.8. TRANSLATIONTranslation is considered a kind of modification, so you maydistribute translations of the Document under the terms of section 4.Replacing Invariant Sections with translations requires specialpermission from their copyright holders, but you may includetranslations of some or all Invariant Sections in addition to theoriginal versions of these Invariant Sections. You may include atranslation of this License provided that you also include the originalEnglish version of this License. In case of a disagreement between thetranslation and the original English version of this License, theoriginal English version will prevail.9. TERMINATIONYou may not copy, modify, sublicense, or distribute the Documentexcept as expressly provided for under this License. Any other attemptto copy, modify, sublicense or distribute the Document is void, and willautomatically terminate your rights under this License. However,parties who have received copies, or rights, from you under thisLicense will not have their licenses terminated so long as such partiesremain in full compliance.10. FUTURE REVISIONS OF THIS LICENSEThe Free Software Foundation may publish new, revised versions ofthe GNU Free Documentation License from time to time. Such newversions will be similar in spirit to the present version, but maydiffer in detail to address new problems or concerns. Seehttp://www.gnu.org/copyleft/.Each version of the License is given a distinguishing version number.If the Document specifies that a particular numbered version of thisLicense "or any later version" applies to it, you have the option offollowing the terms and conditions either of that specified version orof any later version that has been published (not as a draft) by theFree Software Foundation. If the Document does not specify a versionnumber of this License, you may choose any version ever published (notas a draft) by the Free Software Foundation.ADDENDUM: How to use this License for your documentsTo use this License in a document you have written, include a copy ofthe License in the document and put the following copyright and licensenotices just after the title page:Copyright (c) YEAR YOUR NAME.Permission is granted to copy, distribute and/or modify this documentunder the terms of the GNU Free Documentation License, Version 1.1or any later version published by the Free Software Foundation;with the Invariant Sections being LIST THEIR TITLES, with theFront-Cover Texts being LIST, and with the Back-Cover Texts being LIST.A copy of the license is included in the section entitled "GNUFree Documentation License".If you have no Invariant Sections, write "with no Invariant Sections"instead of saying which ones are invariant. If you have no Front-CoverTexts, write "no Front-Cover Texts" instead of "Front-Cover Texts beingLIST"; likewise for Back-Cover Texts.If your document contains nontrivial examples of program code, werecommend releasing these examples in parallel under your choice offree software license, such as the GNU General Public License, topermit their use in free software.
Go to most recent revision | Compare with Previous | Blame | View Log
