| 1 | \input texinfo | 
|---|
| 2 | @c Copyright 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1998, | 
|---|
| 3 | @c 2000, 2001 | 
|---|
| 4 | @c Free Software Foundation, Inc. | 
|---|
| 5 | @setfilename bfdint.info | 
|---|
| 6 |  | 
|---|
| 7 | @settitle BFD Internals | 
|---|
| 8 | @iftex | 
|---|
| 9 | @titlepage | 
|---|
| 10 | @title{BFD Internals} | 
|---|
| 11 | @author{Ian Lance Taylor} | 
|---|
| 12 | @author{Cygnus Solutions} | 
|---|
| 13 | @page | 
|---|
| 14 | @end iftex | 
|---|
| 15 |  | 
|---|
| 16 | @node Top | 
|---|
| 17 | @top BFD Internals | 
|---|
| 18 | @raisesections | 
|---|
| 19 | @cindex bfd internals | 
|---|
| 20 |  | 
|---|
| 21 | This document describes some BFD internal information which may be | 
|---|
| 22 | helpful when working on BFD.  It is very incomplete. | 
|---|
| 23 |  | 
|---|
| 24 | This document is not updated regularly, and may be out of date. | 
|---|
| 25 |  | 
|---|
| 26 | The initial version of this document was written by Ian Lance Taylor | 
|---|
| 27 | @email{ian@@cygnus.com}. | 
|---|
| 28 |  | 
|---|
| 29 | @menu | 
|---|
| 30 | * BFD overview::                BFD overview | 
|---|
| 31 | * BFD guidelines::              BFD programming guidelines | 
|---|
| 32 | * BFD target vector::           BFD target vector | 
|---|
| 33 | * BFD generated files::         BFD generated files | 
|---|
| 34 | * BFD multiple compilations::   Files compiled multiple times in BFD | 
|---|
| 35 | * BFD relocation handling::     BFD relocation handling | 
|---|
| 36 | * BFD ELF support::             BFD ELF support | 
|---|
| 37 | * BFD glossary::                Glossary | 
|---|
| 38 | * Index::                       Index | 
|---|
| 39 | @end menu | 
|---|
| 40 |  | 
|---|
| 41 | @node BFD overview | 
|---|
| 42 | @section BFD overview | 
|---|
| 43 |  | 
|---|
| 44 | BFD is a library which provides a single interface to read and write | 
|---|
| 45 | object files, executables, archive files, and core files in any format. | 
|---|
| 46 |  | 
|---|
| 47 | @menu | 
|---|
| 48 | * BFD library interfaces::      BFD library interfaces | 
|---|
| 49 | * BFD library users::           BFD library users | 
|---|
| 50 | * BFD view::                    The BFD view of a file | 
|---|
| 51 | * BFD blindness::               BFD loses information | 
|---|
| 52 | @end menu | 
|---|
| 53 |  | 
|---|
| 54 | @node BFD library interfaces | 
|---|
| 55 | @subsection BFD library interfaces | 
|---|
| 56 |  | 
|---|
| 57 | One way to look at the BFD library is to divide it into four parts by | 
|---|
| 58 | type of interface. | 
|---|
| 59 |  | 
|---|
| 60 | The first interface is the set of generic functions which programs using | 
|---|
| 61 | the BFD library will call.  These generic function normally translate | 
|---|
| 62 | directly or indirectly into calls to routines which are specific to a | 
|---|
| 63 | particular object file format.  Many of these generic functions are | 
|---|
| 64 | actually defined as macros in @file{bfd.h}.  These functions comprise | 
|---|
| 65 | the official BFD interface. | 
|---|
| 66 |  | 
|---|
| 67 | The second interface is the set of functions which appear in the target | 
|---|
| 68 | vectors.  This is the bulk of the code in BFD.  A target vector is a set | 
|---|
| 69 | of function pointers specific to a particular object file format.  The | 
|---|
| 70 | target vector is used to implement the generic BFD functions.  These | 
|---|
| 71 | functions are always called through the target vector, and are never | 
|---|
| 72 | called directly.  The target vector is described in detail in @ref{BFD | 
|---|
| 73 | target vector}.  The set of functions which appear in a particular | 
|---|
| 74 | target vector is often referred to as a BFD backend. | 
|---|
| 75 |  | 
|---|
| 76 | The third interface is a set of oddball functions which are typically | 
|---|
| 77 | specific to a particular object file format, are not generic functions, | 
|---|
| 78 | and are called from outside of the BFD library.  These are used as hooks | 
|---|
| 79 | by the linker and the assembler when a particular object file format | 
|---|
| 80 | requires some action which the BFD generic interface does not provide. | 
|---|
| 81 | These functions are typically declared in @file{bfd.h}, but in many | 
|---|
| 82 | cases they are only provided when BFD is configured with support for a | 
|---|
| 83 | particular object file format.  These functions live in a grey area, and | 
|---|
| 84 | are not really part of the official BFD interface. | 
|---|
| 85 |  | 
|---|
| 86 | The fourth interface is the set of BFD support functions which are | 
|---|
| 87 | called by the other BFD functions.  These manage issues like memory | 
|---|
| 88 | allocation, error handling, file access, hash tables, swapping, and the | 
|---|
| 89 | like.  These functions are never called from outside of the BFD library. | 
|---|
| 90 |  | 
|---|
| 91 | @node BFD library users | 
|---|
| 92 | @subsection BFD library users | 
|---|
| 93 |  | 
|---|
| 94 | Another way to look at the BFD library is to divide it into three parts | 
|---|
| 95 | by the manner in which it is used. | 
|---|
| 96 |  | 
|---|
| 97 | The first use is to read an object file.  The object file readers are | 
|---|
| 98 | programs like @samp{gdb}, @samp{nm}, @samp{objdump}, and @samp{objcopy}. | 
|---|
| 99 | These programs use BFD to view an object file in a generic form.  The | 
|---|
| 100 | official BFD interface is normally fully adequate for these programs. | 
|---|
| 101 |  | 
|---|
| 102 | The second use is to write an object file.  The object file writers are | 
|---|
| 103 | programs like @samp{gas} and @samp{objcopy}.  These programs use BFD to | 
|---|
| 104 | create an object file.  The official BFD interface is normally adequate | 
|---|
| 105 | for these programs, but for some object file formats the assembler needs | 
|---|
| 106 | some additional hooks in order to set particular flags or other | 
|---|
| 107 | information.  The official BFD interface includes functions to copy | 
|---|
| 108 | private information from one object file to another, and these functions | 
|---|
| 109 | are used by @samp{objcopy} to avoid information loss. | 
|---|
| 110 |  | 
|---|
| 111 | The third use is to link object files.  There is only one object file | 
|---|
| 112 | linker, @samp{ld}.  Originally, @samp{ld} was an object file reader and | 
|---|
| 113 | an object file writer, and it did the link operation using the generic | 
|---|
| 114 | BFD structures.  However, this turned out to be too slow and too memory | 
|---|
| 115 | intensive. | 
|---|
| 116 |  | 
|---|
| 117 | The official BFD linker functions were written to permit specific BFD | 
|---|
| 118 | backends to perform the link without translating through the generic | 
|---|
| 119 | structures, in the normal case where all the input files and output file | 
|---|
| 120 | have the same object file format.  Not all of the backends currently | 
|---|
| 121 | implement the new interface, and there are default linking functions | 
|---|
| 122 | within BFD which use the generic structures and which work with all | 
|---|
| 123 | backends. | 
|---|
| 124 |  | 
|---|
| 125 | For several object file formats the linker needs additional hooks which | 
|---|
| 126 | are not provided by the official BFD interface, particularly for dynamic | 
|---|
| 127 | linking support.  These functions are typically called from the linker | 
|---|
| 128 | emulation template. | 
|---|
| 129 |  | 
|---|
| 130 | @node BFD view | 
|---|
| 131 | @subsection The BFD view of a file | 
|---|
| 132 |  | 
|---|
| 133 | BFD uses generic structures to manage information.  It translates data | 
|---|
| 134 | into the generic form when reading files, and out of the generic form | 
|---|
| 135 | when writing files. | 
|---|
| 136 |  | 
|---|
| 137 | BFD describes a file as a pointer to the @samp{bfd} type.  A @samp{bfd} | 
|---|
| 138 | is composed of the following elements.  The BFD information can be | 
|---|
| 139 | displayed using the @samp{objdump} program with various options. | 
|---|
| 140 |  | 
|---|
| 141 | @table @asis | 
|---|
| 142 | @item general information | 
|---|
| 143 | The object file format, a few general flags, the start address. | 
|---|
| 144 | @item architecture | 
|---|
| 145 | The architecture, including both a general processor type (m68k, MIPS | 
|---|
| 146 | etc.) and a specific machine number (m68000, R4000, etc.). | 
|---|
| 147 | @item sections | 
|---|
| 148 | A list of sections. | 
|---|
| 149 | @item symbols | 
|---|
| 150 | A symbol table. | 
|---|
| 151 | @end table | 
|---|
| 152 |  | 
|---|
| 153 | BFD represents a section as a pointer to the @samp{asection} type.  Each | 
|---|
| 154 | section has a name and a size.  Most sections also have an associated | 
|---|
| 155 | block of data, known as the section contents.  Sections also have | 
|---|
| 156 | associated flags, a virtual memory address, a load memory address, a | 
|---|
| 157 | required alignment, a list of relocations, and other miscellaneous | 
|---|
| 158 | information. | 
|---|
| 159 |  | 
|---|
| 160 | BFD represents a relocation as a pointer to the @samp{arelent} type.  A | 
|---|
| 161 | relocation describes an action which the linker must take to modify the | 
|---|
| 162 | section contents.  Relocations have a symbol, an address, an addend, and | 
|---|
| 163 | a pointer to a howto structure which describes how to perform the | 
|---|
| 164 | relocation.  For more information, see @ref{BFD relocation handling}. | 
|---|
| 165 |  | 
|---|
| 166 | BFD represents a symbol as a pointer to the @samp{asymbol} type.  A | 
|---|
| 167 | symbol has a name, a pointer to a section, an offset within that | 
|---|
| 168 | section, and some flags. | 
|---|
| 169 |  | 
|---|
| 170 | Archive files do not have any sections or symbols.  Instead, BFD | 
|---|
| 171 | represents an archive file as a file which contains a list of | 
|---|
| 172 | @samp{bfd}s.  BFD also provides access to the archive symbol map, as a | 
|---|
| 173 | list of symbol names.  BFD provides a function to return the @samp{bfd} | 
|---|
| 174 | within the archive which corresponds to a particular entry in the | 
|---|
| 175 | archive symbol map. | 
|---|
| 176 |  | 
|---|
| 177 | @node BFD blindness | 
|---|
| 178 | @subsection BFD loses information | 
|---|
| 179 |  | 
|---|
| 180 | Most object file formats have information which BFD can not represent in | 
|---|
| 181 | its generic form, at least as currently defined. | 
|---|
| 182 |  | 
|---|
| 183 | There is often explicit information which BFD can not represent.  For | 
|---|
| 184 | example, the COFF version stamp, or the ELF program segments.  BFD | 
|---|
| 185 | provides special hooks to handle this information when copying, | 
|---|
| 186 | printing, or linking an object file.  The BFD support for a particular | 
|---|
| 187 | object file format will normally store this information in private data | 
|---|
| 188 | and handle it using the special hooks. | 
|---|
| 189 |  | 
|---|
| 190 | In some cases there is also implicit information which BFD can not | 
|---|
| 191 | represent.  For example, the MIPS processor distinguishes small and | 
|---|
| 192 | large symbols, and requires that all small symbls be within 32K of the | 
|---|
| 193 | GP register.  This means that the MIPS assembler must be able to mark | 
|---|
| 194 | variables as either small or large, and the MIPS linker must know to put | 
|---|
| 195 | small symbols within range of the GP register.  Since BFD can not | 
|---|
| 196 | represent this information, this means that the assembler and linker | 
|---|
| 197 | must have information that is specific to a particular object file | 
|---|
| 198 | format which is outside of the BFD library. | 
|---|
| 199 |  | 
|---|
| 200 | This loss of information indicates areas where the BFD paradigm breaks | 
|---|
| 201 | down.  It is not actually possible to represent the myriad differences | 
|---|
| 202 | among object file formats using a single generic interface, at least not | 
|---|
| 203 | in the manner which BFD does it today. | 
|---|
| 204 |  | 
|---|
| 205 | Nevertheless, the BFD library does greatly simplify the task of dealing | 
|---|
| 206 | with object files, and particular problems caused by information loss | 
|---|
| 207 | can normally be solved using some sort of relatively constrained hook | 
|---|
| 208 | into the library. | 
|---|
| 209 |  | 
|---|
| 210 |  | 
|---|
| 211 |  | 
|---|
| 212 | @node BFD guidelines | 
|---|
| 213 | @section BFD programming guidelines | 
|---|
| 214 | @cindex bfd programming guidelines | 
|---|
| 215 | @cindex programming guidelines for bfd | 
|---|
| 216 | @cindex guidelines, bfd programming | 
|---|
| 217 |  | 
|---|
| 218 | There is a lot of poorly written and confusing code in BFD.  New BFD | 
|---|
| 219 | code should be written to a higher standard.  Merely because some BFD | 
|---|
| 220 | code is written in a particular manner does not mean that you should | 
|---|
| 221 | emulate it. | 
|---|
| 222 |  | 
|---|
| 223 | Here are some general BFD programming guidelines: | 
|---|
| 224 |  | 
|---|
| 225 | @itemize @bullet | 
|---|
| 226 | @item | 
|---|
| 227 | Follow the GNU coding standards. | 
|---|
| 228 |  | 
|---|
| 229 | @item | 
|---|
| 230 | Avoid global variables.  We ideally want BFD to be fully reentrant, so | 
|---|
| 231 | that it can be used in multiple threads.  All uses of global or static | 
|---|
| 232 | variables interfere with that.  Initialized constant variables are OK, | 
|---|
| 233 | and they should be explicitly marked with const.  Instead of global | 
|---|
| 234 | variables, use data attached to a BFD or to a linker hash table. | 
|---|
| 235 |  | 
|---|
| 236 | @item | 
|---|
| 237 | All externally visible functions should have names which start with | 
|---|
| 238 | @samp{bfd_}.  All such functions should be declared in some header file, | 
|---|
| 239 | typically @file{bfd.h}.  See, for example, the various declarations near | 
|---|
| 240 | the end of @file{bfd-in.h}, which mostly declare functions required by | 
|---|
| 241 | specific linker emulations. | 
|---|
| 242 |  | 
|---|
| 243 | @item | 
|---|
| 244 | All functions which need to be visible from one file to another within | 
|---|
| 245 | BFD, but should not be visible outside of BFD, should start with | 
|---|
| 246 | @samp{_bfd_}.  Although external names beginning with @samp{_} are | 
|---|
| 247 | prohibited by the ANSI standard, in practice this usage will always | 
|---|
| 248 | work, and it is required by the GNU coding standards. | 
|---|
| 249 |  | 
|---|
| 250 | @item | 
|---|
| 251 | Always remember that people can compile using @samp{--enable-targets} to | 
|---|
| 252 | build several, or all, targets at once.  It must be possible to link | 
|---|
| 253 | together the files for all targets. | 
|---|
| 254 |  | 
|---|
| 255 | @item | 
|---|
| 256 | BFD code should compile with few or no warnings using @samp{gcc -Wall}. | 
|---|
| 257 | Some warnings are OK, like the absence of certain function declarations | 
|---|
| 258 | which may or may not be declared in system header files.  Warnings about | 
|---|
| 259 | ambiguous expressions and the like should always be fixed. | 
|---|
| 260 | @end itemize | 
|---|
| 261 |  | 
|---|
| 262 | @node BFD target vector | 
|---|
| 263 | @section BFD target vector | 
|---|
| 264 | @cindex bfd target vector | 
|---|
| 265 | @cindex target vector in bfd | 
|---|
| 266 |  | 
|---|
| 267 | BFD supports multiple object file formats by using the @dfn{target | 
|---|
| 268 | vector}.  This is simply a set of function pointers which implement | 
|---|
| 269 | behaviour that is specific to a particular object file format. | 
|---|
| 270 |  | 
|---|
| 271 | In this section I list all of the entries in the target vector and | 
|---|
| 272 | describe what they do. | 
|---|
| 273 |  | 
|---|
| 274 | @menu | 
|---|
| 275 | * BFD target vector miscellaneous::     Miscellaneous constants | 
|---|
| 276 | * BFD target vector swap::              Swapping functions | 
|---|
| 277 | * BFD target vector format::            Format type dependent functions | 
|---|
| 278 | * BFD_JUMP_TABLE macros::               BFD_JUMP_TABLE macros | 
|---|
| 279 | * BFD target vector generic::           Generic functions | 
|---|
| 280 | * BFD target vector copy::              Copy functions | 
|---|
| 281 | * BFD target vector core::              Core file support functions | 
|---|
| 282 | * BFD target vector archive::           Archive functions | 
|---|
| 283 | * BFD target vector symbols::           Symbol table functions | 
|---|
| 284 | * BFD target vector relocs::            Relocation support | 
|---|
| 285 | * BFD target vector write::             Output functions | 
|---|
| 286 | * BFD target vector link::              Linker functions | 
|---|
| 287 | * BFD target vector dynamic::           Dynamic linking information functions | 
|---|
| 288 | @end menu | 
|---|
| 289 |  | 
|---|
| 290 | @node BFD target vector miscellaneous | 
|---|
| 291 | @subsection Miscellaneous constants | 
|---|
| 292 |  | 
|---|
| 293 | The target vector starts with a set of constants. | 
|---|
| 294 |  | 
|---|
| 295 | @table @samp | 
|---|
| 296 | @item name | 
|---|
| 297 | The name of the target vector.  This is an arbitrary string.  This is | 
|---|
| 298 | how the target vector is named in command line options for tools which | 
|---|
| 299 | use BFD, such as the @samp{--oformat} linker option. | 
|---|
| 300 |  | 
|---|
| 301 | @item flavour | 
|---|
| 302 | A general description of the type of target.  The following flavours are | 
|---|
| 303 | currently defined: | 
|---|
| 304 |  | 
|---|
| 305 | @table @samp | 
|---|
| 306 | @item bfd_target_unknown_flavour | 
|---|
| 307 | Undefined or unknown. | 
|---|
| 308 | @item bfd_target_aout_flavour | 
|---|
| 309 | a.out. | 
|---|
| 310 | @item bfd_target_coff_flavour | 
|---|
| 311 | COFF. | 
|---|
| 312 | @item bfd_target_ecoff_flavour | 
|---|
| 313 | ECOFF. | 
|---|
| 314 | @item bfd_target_elf_flavour | 
|---|
| 315 | ELF. | 
|---|
| 316 | @item bfd_target_ieee_flavour | 
|---|
| 317 | IEEE-695. | 
|---|
| 318 | @item bfd_target_nlm_flavour | 
|---|
| 319 | NLM. | 
|---|
| 320 | @item bfd_target_oasys_flavour | 
|---|
| 321 | OASYS. | 
|---|
| 322 | @item bfd_target_tekhex_flavour | 
|---|
| 323 | Tektronix hex format. | 
|---|
| 324 | @item bfd_target_srec_flavour | 
|---|
| 325 | Motorola S-record format. | 
|---|
| 326 | @item bfd_target_ihex_flavour | 
|---|
| 327 | Intel hex format. | 
|---|
| 328 | @item bfd_target_som_flavour | 
|---|
| 329 | SOM (used on HP/UX). | 
|---|
| 330 | @item bfd_target_os9k_flavour | 
|---|
| 331 | os9000. | 
|---|
| 332 | @item bfd_target_versados_flavour | 
|---|
| 333 | VERSAdos. | 
|---|
| 334 | @item bfd_target_msdos_flavour | 
|---|
| 335 | MS-DOS. | 
|---|
| 336 | @item bfd_target_evax_flavour | 
|---|
| 337 | openVMS. | 
|---|
| 338 | @item bfd_target_mmo_flavour | 
|---|
| 339 | Donald Knuth's MMIXware object format. | 
|---|
| 340 | @end table | 
|---|
| 341 |  | 
|---|
| 342 | @item byteorder | 
|---|
| 343 | The byte order of data in the object file.  One of | 
|---|
| 344 | @samp{BFD_ENDIAN_BIG}, @samp{BFD_ENDIAN_LITTLE}, or | 
|---|
| 345 | @samp{BFD_ENDIAN_UNKNOWN}.  The latter would be used for a format such | 
|---|
| 346 | as S-records which do not record the architecture of the data. | 
|---|
| 347 |  | 
|---|
| 348 | @item header_byteorder | 
|---|
| 349 | The byte order of header information in the object file.  Normally the | 
|---|
| 350 | same as the @samp{byteorder} field, but there are certain cases where it | 
|---|
| 351 | may be different. | 
|---|
| 352 |  | 
|---|
| 353 | @item object_flags | 
|---|
| 354 | Flags which may appear in the @samp{flags} field of a BFD with this | 
|---|
| 355 | format. | 
|---|
| 356 |  | 
|---|
| 357 | @item section_flags | 
|---|
| 358 | Flags which may appear in the @samp{flags} field of a section within a | 
|---|
| 359 | BFD with this format. | 
|---|
| 360 |  | 
|---|
| 361 | @item symbol_leading_char | 
|---|
| 362 | A character which the C compiler normally puts before a symbol.  For | 
|---|
| 363 | example, an a.out compiler will typically generate the symbol | 
|---|
| 364 | @samp{_foo} for a function named @samp{foo} in the C source, in which | 
|---|
| 365 | case this field would be @samp{_}.  If there is no such character, this | 
|---|
| 366 | field will be @samp{0}. | 
|---|
| 367 |  | 
|---|
| 368 | @item ar_pad_char | 
|---|
| 369 | The padding character to use at the end of an archive name.  Normally | 
|---|
| 370 | @samp{/}. | 
|---|
| 371 |  | 
|---|
| 372 | @item ar_max_namelen | 
|---|
| 373 | The maximum length of a short name in an archive.  Normally @samp{14}. | 
|---|
| 374 |  | 
|---|
| 375 | @item backend_data | 
|---|
| 376 | A pointer to constant backend data.  This is used by backends to store | 
|---|
| 377 | whatever additional information they need to distinguish similar target | 
|---|
| 378 | vectors which use the same sets of functions. | 
|---|
| 379 | @end table | 
|---|
| 380 |  | 
|---|
| 381 | @node BFD target vector swap | 
|---|
| 382 | @subsection Swapping functions | 
|---|
| 383 |  | 
|---|
| 384 | Every target vector has function pointers used for swapping information | 
|---|
| 385 | in and out of the target representation.  There are two sets of | 
|---|
| 386 | functions: one for data information, and one for header information. | 
|---|
| 387 | Each set has three sizes: 64-bit, 32-bit, and 16-bit.  Each size has | 
|---|
| 388 | three actual functions: put, get unsigned, and get signed. | 
|---|
| 389 |  | 
|---|
| 390 | These 18 functions are used to convert data between the host and target | 
|---|
| 391 | representations. | 
|---|
| 392 |  | 
|---|
| 393 | @node BFD target vector format | 
|---|
| 394 | @subsection Format type dependent functions | 
|---|
| 395 |  | 
|---|
| 396 | Every target vector has three arrays of function pointers which are | 
|---|
| 397 | indexed by the BFD format type.  The BFD format types are as follows: | 
|---|
| 398 |  | 
|---|
| 399 | @table @samp | 
|---|
| 400 | @item bfd_unknown | 
|---|
| 401 | Unknown format.  Not used for anything useful. | 
|---|
| 402 | @item bfd_object | 
|---|
| 403 | Object file. | 
|---|
| 404 | @item bfd_archive | 
|---|
| 405 | Archive file. | 
|---|
| 406 | @item bfd_core | 
|---|
| 407 | Core file. | 
|---|
| 408 | @end table | 
|---|
| 409 |  | 
|---|
| 410 | The three arrays of function pointers are as follows: | 
|---|
| 411 |  | 
|---|
| 412 | @table @samp | 
|---|
| 413 | @item bfd_check_format | 
|---|
| 414 | Check whether the BFD is of a particular format (object file, archive | 
|---|
| 415 | file, or core file) corresponding to this target vector.  This is called | 
|---|
| 416 | by the @samp{bfd_check_format} function when examining an existing BFD. | 
|---|
| 417 | If the BFD matches the desired format, this function will initialize any | 
|---|
| 418 | format specific information such as the @samp{tdata} field of the BFD. | 
|---|
| 419 | This function must be called before any other BFD target vector function | 
|---|
| 420 | on a file opened for reading. | 
|---|
| 421 |  | 
|---|
| 422 | @item bfd_set_format | 
|---|
| 423 | Set the format of a BFD which was created for output.  This is called by | 
|---|
| 424 | the @samp{bfd_set_format} function after creating the BFD with a | 
|---|
| 425 | function such as @samp{bfd_openw}.  This function will initialize format | 
|---|
| 426 | specific information required to write out an object file or whatever of | 
|---|
| 427 | the given format.  This function must be called before any other BFD | 
|---|
| 428 | target vector function on a file opened for writing. | 
|---|
| 429 |  | 
|---|
| 430 | @item bfd_write_contents | 
|---|
| 431 | Write out the contents of the BFD in the given format.  This is called | 
|---|
| 432 | by @samp{bfd_close} function for a BFD opened for writing.  This really | 
|---|
| 433 | should not be an array selected by format type, as the | 
|---|
| 434 | @samp{bfd_set_format} function provides all the required information. | 
|---|
| 435 | In fact, BFD will fail if a different format is used when calling | 
|---|
| 436 | through the @samp{bfd_set_format} and the @samp{bfd_write_contents} | 
|---|
| 437 | arrays; fortunately, since @samp{bfd_close} gets it right, this is a | 
|---|
| 438 | difficult error to make. | 
|---|
| 439 | @end table | 
|---|
| 440 |  | 
|---|
| 441 | @node BFD_JUMP_TABLE macros | 
|---|
| 442 | @subsection @samp{BFD_JUMP_TABLE} macros | 
|---|
| 443 | @cindex @samp{BFD_JUMP_TABLE} | 
|---|
| 444 |  | 
|---|
| 445 | Most target vectors are defined using @samp{BFD_JUMP_TABLE} macros. | 
|---|
| 446 | These macros take a single argument, which is a prefix applied to a set | 
|---|
| 447 | of functions.  The macros are then used to initialize the fields in the | 
|---|
| 448 | target vector. | 
|---|
| 449 |  | 
|---|
| 450 | For example, the @samp{BFD_JUMP_TABLE_RELOCS} macro defines three | 
|---|
| 451 | functions: @samp{_get_reloc_upper_bound}, @samp{_canonicalize_reloc}, | 
|---|
| 452 | and @samp{_bfd_reloc_type_lookup}.  A reference like | 
|---|
| 453 | @samp{BFD_JUMP_TABLE_RELOCS (foo)} will expand into three functions | 
|---|
| 454 | prefixed with @samp{foo}: @samp{foo_get_reloc_upper_bound}, etc.  The | 
|---|
| 455 | @samp{BFD_JUMP_TABLE_RELOCS} macro will be placed such that those three | 
|---|
| 456 | functions initialize the appropriate fields in the BFD target vector. | 
|---|
| 457 |  | 
|---|
| 458 | This is done because it turns out that many different target vectors can | 
|---|
| 459 | share certain classes of functions.  For example, archives are similar | 
|---|
| 460 | on most platforms, so most target vectors can use the same archive | 
|---|
| 461 | functions.  Those target vectors all use @samp{BFD_JUMP_TABLE_ARCHIVE} | 
|---|
| 462 | with the same argument, calling a set of functions which is defined in | 
|---|
| 463 | @file{archive.c}. | 
|---|
| 464 |  | 
|---|
| 465 | Each of the @samp{BFD_JUMP_TABLE} macros is mentioned below along with | 
|---|
| 466 | the description of the function pointers which it defines.  The function | 
|---|
| 467 | pointers will be described using the name without the prefix which the | 
|---|
| 468 | @samp{BFD_JUMP_TABLE} macro defines.  This name is normally the same as | 
|---|
| 469 | the name of the field in the target vector structure.  Any differences | 
|---|
| 470 | will be noted. | 
|---|
| 471 |  | 
|---|
| 472 | @node BFD target vector generic | 
|---|
| 473 | @subsection Generic functions | 
|---|
| 474 | @cindex @samp{BFD_JUMP_TABLE_GENERIC} | 
|---|
| 475 |  | 
|---|
| 476 | The @samp{BFD_JUMP_TABLE_GENERIC} macro is used for some catch all | 
|---|
| 477 | functions which don't easily fit into other categories. | 
|---|
| 478 |  | 
|---|
| 479 | @table @samp | 
|---|
| 480 | @item _close_and_cleanup | 
|---|
| 481 | Free any target specific information associated with the BFD.  This is | 
|---|
| 482 | called when any BFD is closed (the @samp{bfd_write_contents} function | 
|---|
| 483 | mentioned earlier is only called for a BFD opened for writing).  Most | 
|---|
| 484 | targets use @samp{bfd_alloc} to allocate all target specific | 
|---|
| 485 | information, and therefore don't have to do anything in this function. | 
|---|
| 486 | This function pointer is typically set to | 
|---|
| 487 | @samp{_bfd_generic_close_and_cleanup}, which simply returns true. | 
|---|
| 488 |  | 
|---|
| 489 | @item _bfd_free_cached_info | 
|---|
| 490 | Free any cached information associated with the BFD which can be | 
|---|
| 491 | recreated later if necessary.  This is used to reduce the memory | 
|---|
| 492 | consumption required by programs using BFD.  This is normally called via | 
|---|
| 493 | the @samp{bfd_free_cached_info} macro.  It is used by the default | 
|---|
| 494 | archive routines when computing the archive map.  Most targets do not | 
|---|
| 495 | do anything special for this entry point, and just set it to | 
|---|
| 496 | @samp{_bfd_generic_free_cached_info}, which simply returns true. | 
|---|
| 497 |  | 
|---|
| 498 | @item _new_section_hook | 
|---|
| 499 | This is called from @samp{bfd_make_section_anyway} whenever a new | 
|---|
| 500 | section is created.  Most targets use it to initialize section specific | 
|---|
| 501 | information.  This function is called whether or not the section | 
|---|
| 502 | corresponds to an actual section in an actual BFD. | 
|---|
| 503 |  | 
|---|
| 504 | @item _get_section_contents | 
|---|
| 505 | Get the contents of a section.  This is called from | 
|---|
| 506 | @samp{bfd_get_section_contents}.  Most targets set this to | 
|---|
| 507 | @samp{_bfd_generic_get_section_contents}, which does a @samp{bfd_seek} | 
|---|
| 508 | based on the section's @samp{filepos} field and a @samp{bfd_bread}.  The | 
|---|
| 509 | corresponding field in the target vector is named | 
|---|
| 510 | @samp{_bfd_get_section_contents}. | 
|---|
| 511 |  | 
|---|
| 512 | @item _get_section_contents_in_window | 
|---|
| 513 | Set a @samp{bfd_window} to hold the contents of a section.  This is | 
|---|
| 514 | called from @samp{bfd_get_section_contents_in_window}.  The | 
|---|
| 515 | @samp{bfd_window} idea never really caught on, and I don't think this is | 
|---|
| 516 | ever called.  Pretty much all targets implement this as | 
|---|
| 517 | @samp{bfd_generic_get_section_contents_in_window}, which uses | 
|---|
| 518 | @samp{bfd_get_section_contents} to do the right thing.  The | 
|---|
| 519 | corresponding field in the target vector is named | 
|---|
| 520 | @samp{_bfd_get_section_contents_in_window}. | 
|---|
| 521 | @end table | 
|---|
| 522 |  | 
|---|
| 523 | @node BFD target vector copy | 
|---|
| 524 | @subsection Copy functions | 
|---|
| 525 | @cindex @samp{BFD_JUMP_TABLE_COPY} | 
|---|
| 526 |  | 
|---|
| 527 | The @samp{BFD_JUMP_TABLE_COPY} macro is used for functions which are | 
|---|
| 528 | called when copying BFDs, and for a couple of functions which deal with | 
|---|
| 529 | internal BFD information. | 
|---|
| 530 |  | 
|---|
| 531 | @table @samp | 
|---|
| 532 | @item _bfd_copy_private_bfd_data | 
|---|
| 533 | This is called when copying a BFD, via @samp{bfd_copy_private_bfd_data}. | 
|---|
| 534 | If the input and output BFDs have the same format, this will copy any | 
|---|
| 535 | private information over.  This is called after all the section contents | 
|---|
| 536 | have been written to the output file.  Only a few targets do anything in | 
|---|
| 537 | this function. | 
|---|
| 538 |  | 
|---|
| 539 | @item _bfd_merge_private_bfd_data | 
|---|
| 540 | This is called when linking, via @samp{bfd_merge_private_bfd_data}.  It | 
|---|
| 541 | gives the backend linker code a chance to set any special flags in the | 
|---|
| 542 | output file based on the contents of the input file.  Only a few targets | 
|---|
| 543 | do anything in this function. | 
|---|
| 544 |  | 
|---|
| 545 | @item _bfd_copy_private_section_data | 
|---|
| 546 | This is similar to @samp{_bfd_copy_private_bfd_data}, but it is called | 
|---|
| 547 | for each section, via @samp{bfd_copy_private_section_data}.  This | 
|---|
| 548 | function is called before any section contents have been written.  Only | 
|---|
| 549 | a few targets do anything in this function. | 
|---|
| 550 |  | 
|---|
| 551 | @item _bfd_copy_private_symbol_data | 
|---|
| 552 | This is called via @samp{bfd_copy_private_symbol_data}, but I don't | 
|---|
| 553 | think anything actually calls it.  If it were defined, it could be used | 
|---|
| 554 | to copy private symbol data from one BFD to another.  However, most BFDs | 
|---|
| 555 | store extra symbol information by allocating space which is larger than | 
|---|
| 556 | the @samp{asymbol} structure and storing private information in the | 
|---|
| 557 | extra space.  Since @samp{objcopy} and other programs copy symbol | 
|---|
| 558 | information by copying pointers to @samp{asymbol} structures, the | 
|---|
| 559 | private symbol information is automatically copied as well.  Most | 
|---|
| 560 | targets do not do anything in this function. | 
|---|
| 561 |  | 
|---|
| 562 | @item _bfd_set_private_flags | 
|---|
| 563 | This is called via @samp{bfd_set_private_flags}.  It is basically a hook | 
|---|
| 564 | for the assembler to set magic information.  For example, the PowerPC | 
|---|
| 565 | ELF assembler uses it to set flags which appear in the e_flags field of | 
|---|
| 566 | the ELF header.  Most targets do not do anything in this function. | 
|---|
| 567 |  | 
|---|
| 568 | @item _bfd_print_private_bfd_data | 
|---|
| 569 | This is called by @samp{objdump} when the @samp{-p} option is used.  It | 
|---|
| 570 | is called via @samp{bfd_print_private_data}.  It prints any interesting | 
|---|
| 571 | information about the BFD which can not be otherwise represented by BFD | 
|---|
| 572 | and thus can not be printed by @samp{objdump}.  Most targets do not do | 
|---|
| 573 | anything in this function. | 
|---|
| 574 | @end table | 
|---|
| 575 |  | 
|---|
| 576 | @node BFD target vector core | 
|---|
| 577 | @subsection Core file support functions | 
|---|
| 578 | @cindex @samp{BFD_JUMP_TABLE_CORE} | 
|---|
| 579 |  | 
|---|
| 580 | The @samp{BFD_JUMP_TABLE_CORE} macro is used for functions which deal | 
|---|
| 581 | with core files.  Obviously, these functions only do something | 
|---|
| 582 | interesting for targets which have core file support. | 
|---|
| 583 |  | 
|---|
| 584 | @table @samp | 
|---|
| 585 | @item _core_file_failing_command | 
|---|
| 586 | Given a core file, this returns the command which was run to produce the | 
|---|
| 587 | core file. | 
|---|
| 588 |  | 
|---|
| 589 | @item _core_file_failing_signal | 
|---|
| 590 | Given a core file, this returns the signal number which produced the | 
|---|
| 591 | core file. | 
|---|
| 592 |  | 
|---|
| 593 | @item _core_file_matches_executable_p | 
|---|
| 594 | Given a core file and a BFD for an executable, this returns whether the | 
|---|
| 595 | core file was generated by the executable. | 
|---|
| 596 | @end table | 
|---|
| 597 |  | 
|---|
| 598 | @node BFD target vector archive | 
|---|
| 599 | @subsection Archive functions | 
|---|
| 600 | @cindex @samp{BFD_JUMP_TABLE_ARCHIVE} | 
|---|
| 601 |  | 
|---|
| 602 | The @samp{BFD_JUMP_TABLE_ARCHIVE} macro is used for functions which deal | 
|---|
| 603 | with archive files.  Most targets use COFF style archive files | 
|---|
| 604 | (including ELF targets), and these use @samp{_bfd_archive_coff} as the | 
|---|
| 605 | argument to @samp{BFD_JUMP_TABLE_ARCHIVE}.  Some targets use BSD/a.out | 
|---|
| 606 | style archives, and these use @samp{_bfd_archive_bsd}.  (The main | 
|---|
| 607 | difference between BSD and COFF archives is the format of the archive | 
|---|
| 608 | symbol table).  Targets with no archive support use | 
|---|
| 609 | @samp{_bfd_noarchive}.  Finally, a few targets have unusual archive | 
|---|
| 610 | handling. | 
|---|
| 611 |  | 
|---|
| 612 | @table @samp | 
|---|
| 613 | @item _slurp_armap | 
|---|
| 614 | Read in the archive symbol table, storing it in private BFD data.  This | 
|---|
| 615 | is normally called from the archive @samp{check_format} routine.  The | 
|---|
| 616 | corresponding field in the target vector is named | 
|---|
| 617 | @samp{_bfd_slurp_armap}. | 
|---|
| 618 |  | 
|---|
| 619 | @item _slurp_extended_name_table | 
|---|
| 620 | Read in the extended name table from the archive, if there is one, | 
|---|
| 621 | storing it in private BFD data.  This is normally called from the | 
|---|
| 622 | archive @samp{check_format} routine.  The corresponding field in the | 
|---|
| 623 | target vector is named @samp{_bfd_slurp_extended_name_table}. | 
|---|
| 624 |  | 
|---|
| 625 | @item construct_extended_name_table | 
|---|
| 626 | Build and return an extended name table if one is needed to write out | 
|---|
| 627 | the archive.  This also adjusts the archive headers to refer to the | 
|---|
| 628 | extended name table appropriately.  This is normally called from the | 
|---|
| 629 | archive @samp{write_contents} routine.  The corresponding field in the | 
|---|
| 630 | target vector is named @samp{_bfd_construct_extended_name_table}. | 
|---|
| 631 |  | 
|---|
| 632 | @item _truncate_arname | 
|---|
| 633 | This copies a file name into an archive header, truncating it as | 
|---|
| 634 | required.  It is normally called from the archive @samp{write_contents} | 
|---|
| 635 | routine.  This function is more interesting in targets which do not | 
|---|
| 636 | support extended name tables, but I think the GNU @samp{ar} program | 
|---|
| 637 | always uses extended name tables anyhow.  The corresponding field in the | 
|---|
| 638 | target vector is named @samp{_bfd_truncate_arname}. | 
|---|
| 639 |  | 
|---|
| 640 | @item _write_armap | 
|---|
| 641 | Write out the archive symbol table using calls to @samp{bfd_bwrite}. | 
|---|
| 642 | This is normally called from the archive @samp{write_contents} routine. | 
|---|
| 643 | The corresponding field in the target vector is named @samp{write_armap} | 
|---|
| 644 | (no leading underscore). | 
|---|
| 645 |  | 
|---|
| 646 | @item _read_ar_hdr | 
|---|
| 647 | Read and parse an archive header.  This handles expanding the archive | 
|---|
| 648 | header name into the real file name using the extended name table.  This | 
|---|
| 649 | is called by routines which read the archive symbol table or the archive | 
|---|
| 650 | itself.  The corresponding field in the target vector is named | 
|---|
| 651 | @samp{_bfd_read_ar_hdr_fn}. | 
|---|
| 652 |  | 
|---|
| 653 | @item _openr_next_archived_file | 
|---|
| 654 | Given an archive and a BFD representing a file stored within the | 
|---|
| 655 | archive, return a BFD for the next file in the archive.  This is called | 
|---|
| 656 | via @samp{bfd_openr_next_archived_file}.  The corresponding field in the | 
|---|
| 657 | target vector is named @samp{openr_next_archived_file} (no leading | 
|---|
| 658 | underscore). | 
|---|
| 659 |  | 
|---|
| 660 | @item _get_elt_at_index | 
|---|
| 661 | Given an archive and an index, return a BFD for the file in the archive | 
|---|
| 662 | corresponding to that entry in the archive symbol table.  This is called | 
|---|
| 663 | via @samp{bfd_get_elt_at_index}.  The corresponding field in the target | 
|---|
| 664 | vector is named @samp{_bfd_get_elt_at_index}. | 
|---|
| 665 |  | 
|---|
| 666 | @item _generic_stat_arch_elt | 
|---|
| 667 | Do a stat on an element of an archive, returning information read from | 
|---|
| 668 | the archive header (modification time, uid, gid, file mode, size).  This | 
|---|
| 669 | is called via @samp{bfd_stat_arch_elt}.  The corresponding field in the | 
|---|
| 670 | target vector is named @samp{_bfd_stat_arch_elt}. | 
|---|
| 671 |  | 
|---|
| 672 | @item _update_armap_timestamp | 
|---|
| 673 | After the entire contents of an archive have been written out, update | 
|---|
| 674 | the timestamp of the archive symbol table to be newer than that of the | 
|---|
| 675 | file.  This is required for a.out style archives.  This is normally | 
|---|
| 676 | called by the archive @samp{write_contents} routine.  The corresponding | 
|---|
| 677 | field in the target vector is named @samp{_bfd_update_armap_timestamp}. | 
|---|
| 678 | @end table | 
|---|
| 679 |  | 
|---|
| 680 | @node BFD target vector symbols | 
|---|
| 681 | @subsection Symbol table functions | 
|---|
| 682 | @cindex @samp{BFD_JUMP_TABLE_SYMBOLS} | 
|---|
| 683 |  | 
|---|
| 684 | The @samp{BFD_JUMP_TABLE_SYMBOLS} macro is used for functions which deal | 
|---|
| 685 | with symbols. | 
|---|
| 686 |  | 
|---|
| 687 | @table @samp | 
|---|
| 688 | @item _get_symtab_upper_bound | 
|---|
| 689 | Return a sensible upper bound on the amount of memory which will be | 
|---|
| 690 | required to read the symbol table.  In practice most targets return the | 
|---|
| 691 | amount of memory required to hold @samp{asymbol} pointers for all the | 
|---|
| 692 | symbols plus a trailing @samp{NULL} entry, and store the actual symbol | 
|---|
| 693 | information in BFD private data.  This is called via | 
|---|
| 694 | @samp{bfd_get_symtab_upper_bound}.  The corresponding field in the | 
|---|
| 695 | target vector is named @samp{_bfd_get_symtab_upper_bound}. | 
|---|
| 696 |  | 
|---|
| 697 | @item _get_symtab | 
|---|
| 698 | Read in the symbol table.  This is called via | 
|---|
| 699 | @samp{bfd_canonicalize_symtab}.  The corresponding field in the target | 
|---|
| 700 | vector is named @samp{_bfd_canonicalize_symtab}. | 
|---|
| 701 |  | 
|---|
| 702 | @item _make_empty_symbol | 
|---|
| 703 | Create an empty symbol for the BFD.  This is needed because most targets | 
|---|
| 704 | store extra information with each symbol by allocating a structure | 
|---|
| 705 | larger than an @samp{asymbol} and storing the extra information at the | 
|---|
| 706 | end.  This function will allocate the right amount of memory, and return | 
|---|
| 707 | what looks like a pointer to an empty @samp{asymbol}.  This is called | 
|---|
| 708 | via @samp{bfd_make_empty_symbol}.  The corresponding field in the target | 
|---|
| 709 | vector is named @samp{_bfd_make_empty_symbol}. | 
|---|
| 710 |  | 
|---|
| 711 | @item _print_symbol | 
|---|
| 712 | Print information about the symbol.  This is called via | 
|---|
| 713 | @samp{bfd_print_symbol}.  One of the arguments indicates what sort of | 
|---|
| 714 | information should be printed: | 
|---|
| 715 |  | 
|---|
| 716 | @table @samp | 
|---|
| 717 | @item bfd_print_symbol_name | 
|---|
| 718 | Just print the symbol name. | 
|---|
| 719 | @item bfd_print_symbol_more | 
|---|
| 720 | Print the symbol name and some interesting flags.  I don't think | 
|---|
| 721 | anything actually uses this. | 
|---|
| 722 | @item bfd_print_symbol_all | 
|---|
| 723 | Print all information about the symbol.  This is used by @samp{objdump} | 
|---|
| 724 | when run with the @samp{-t} option. | 
|---|
| 725 | @end table | 
|---|
| 726 | The corresponding field in the target vector is named | 
|---|
| 727 | @samp{_bfd_print_symbol}. | 
|---|
| 728 |  | 
|---|
| 729 | @item _get_symbol_info | 
|---|
| 730 | Return a standard set of information about the symbol.  This is called | 
|---|
| 731 | via @samp{bfd_symbol_info}.  The corresponding field in the target | 
|---|
| 732 | vector is named @samp{_bfd_get_symbol_info}. | 
|---|
| 733 |  | 
|---|
| 734 | @item _bfd_is_local_label_name | 
|---|
| 735 | Return whether the given string would normally represent the name of a | 
|---|
| 736 | local label.  This is called via @samp{bfd_is_local_label} and | 
|---|
| 737 | @samp{bfd_is_local_label_name}.  Local labels are normally discarded by | 
|---|
| 738 | the assembler.  In the linker, this defines the difference between the | 
|---|
| 739 | @samp{-x} and @samp{-X} options. | 
|---|
| 740 |  | 
|---|
| 741 | @item _get_lineno | 
|---|
| 742 | Return line number information for a symbol.  This is only meaningful | 
|---|
| 743 | for a COFF target.  This is called when writing out COFF line numbers. | 
|---|
| 744 |  | 
|---|
| 745 | @item _find_nearest_line | 
|---|
| 746 | Given an address within a section, use the debugging information to find | 
|---|
| 747 | the matching file name, function name, and line number, if any.  This is | 
|---|
| 748 | called via @samp{bfd_find_nearest_line}.  The corresponding field in the | 
|---|
| 749 | target vector is named @samp{_bfd_find_nearest_line}. | 
|---|
| 750 |  | 
|---|
| 751 | @item _bfd_make_debug_symbol | 
|---|
| 752 | Make a debugging symbol.  This is only meaningful for a COFF target, | 
|---|
| 753 | where it simply returns a symbol which will be placed in the | 
|---|
| 754 | @samp{N_DEBUG} section when it is written out.  This is called via | 
|---|
| 755 | @samp{bfd_make_debug_symbol}. | 
|---|
| 756 |  | 
|---|
| 757 | @item _read_minisymbols | 
|---|
| 758 | Minisymbols are used to reduce the memory requirements of programs like | 
|---|
| 759 | @samp{nm}.  A minisymbol is a cookie pointing to internal symbol | 
|---|
| 760 | information which the caller can use to extract complete symbol | 
|---|
| 761 | information.  This permits BFD to not convert all the symbols into | 
|---|
| 762 | generic form, but to instead convert them one at a time.  This is called | 
|---|
| 763 | via @samp{bfd_read_minisymbols}.  Most targets do not implement this, | 
|---|
| 764 | and just use generic support which is based on using standard | 
|---|
| 765 | @samp{asymbol} structures. | 
|---|
| 766 |  | 
|---|
| 767 | @item _minisymbol_to_symbol | 
|---|
| 768 | Convert a minisymbol to a standard @samp{asymbol}.  This is called via | 
|---|
| 769 | @samp{bfd_minisymbol_to_symbol}. | 
|---|
| 770 | @end table | 
|---|
| 771 |  | 
|---|
| 772 | @node BFD target vector relocs | 
|---|
| 773 | @subsection Relocation support | 
|---|
| 774 | @cindex @samp{BFD_JUMP_TABLE_RELOCS} | 
|---|
| 775 |  | 
|---|
| 776 | The @samp{BFD_JUMP_TABLE_RELOCS} macro is used for functions which deal | 
|---|
| 777 | with relocations. | 
|---|
| 778 |  | 
|---|
| 779 | @table @samp | 
|---|
| 780 | @item _get_reloc_upper_bound | 
|---|
| 781 | Return a sensible upper bound on the amount of memory which will be | 
|---|
| 782 | required to read the relocations for a section.  In practice most | 
|---|
| 783 | targets return the amount of memory required to hold @samp{arelent} | 
|---|
| 784 | pointers for all the relocations plus a trailing @samp{NULL} entry, and | 
|---|
| 785 | store the actual relocation information in BFD private data.  This is | 
|---|
| 786 | called via @samp{bfd_get_reloc_upper_bound}. | 
|---|
| 787 |  | 
|---|
| 788 | @item _canonicalize_reloc | 
|---|
| 789 | Return the relocation information for a section.  This is called via | 
|---|
| 790 | @samp{bfd_canonicalize_reloc}.  The corresponding field in the target | 
|---|
| 791 | vector is named @samp{_bfd_canonicalize_reloc}. | 
|---|
| 792 |  | 
|---|
| 793 | @item _bfd_reloc_type_lookup | 
|---|
| 794 | Given a relocation code, return the corresponding howto structure | 
|---|
| 795 | (@pxref{BFD relocation codes}).  This is called via | 
|---|
| 796 | @samp{bfd_reloc_type_lookup}.  The corresponding field in the target | 
|---|
| 797 | vector is named @samp{reloc_type_lookup}. | 
|---|
| 798 | @end table | 
|---|
| 799 |  | 
|---|
| 800 | @node BFD target vector write | 
|---|
| 801 | @subsection Output functions | 
|---|
| 802 | @cindex @samp{BFD_JUMP_TABLE_WRITE} | 
|---|
| 803 |  | 
|---|
| 804 | The @samp{BFD_JUMP_TABLE_WRITE} macro is used for functions which deal | 
|---|
| 805 | with writing out a BFD. | 
|---|
| 806 |  | 
|---|
| 807 | @table @samp | 
|---|
| 808 | @item _set_arch_mach | 
|---|
| 809 | Set the architecture and machine number for a BFD.  This is called via | 
|---|
| 810 | @samp{bfd_set_arch_mach}.  Most targets implement this by calling | 
|---|
| 811 | @samp{bfd_default_set_arch_mach}.  The corresponding field in the target | 
|---|
| 812 | vector is named @samp{_bfd_set_arch_mach}. | 
|---|
| 813 |  | 
|---|
| 814 | @item _set_section_contents | 
|---|
| 815 | Write out the contents of a section.  This is called via | 
|---|
| 816 | @samp{bfd_set_section_contents}.  The corresponding field in the target | 
|---|
| 817 | vector is named @samp{_bfd_set_section_contents}. | 
|---|
| 818 | @end table | 
|---|
| 819 |  | 
|---|
| 820 | @node BFD target vector link | 
|---|
| 821 | @subsection Linker functions | 
|---|
| 822 | @cindex @samp{BFD_JUMP_TABLE_LINK} | 
|---|
| 823 |  | 
|---|
| 824 | The @samp{BFD_JUMP_TABLE_LINK} macro is used for functions called by the | 
|---|
| 825 | linker. | 
|---|
| 826 |  | 
|---|
| 827 | @table @samp | 
|---|
| 828 | @item _sizeof_headers | 
|---|
| 829 | Return the size of the header information required for a BFD.  This is | 
|---|
| 830 | used to implement the @samp{SIZEOF_HEADERS} linker script function.  It | 
|---|
| 831 | is normally used to align the first section at an efficient position on | 
|---|
| 832 | the page.  This is called via @samp{bfd_sizeof_headers}.  The | 
|---|
| 833 | corresponding field in the target vector is named | 
|---|
| 834 | @samp{_bfd_sizeof_headers}. | 
|---|
| 835 |  | 
|---|
| 836 | @item _bfd_get_relocated_section_contents | 
|---|
| 837 | Read the contents of a section and apply the relocation information. | 
|---|
| 838 | This handles both a final link and a relocateable link; in the latter | 
|---|
| 839 | case, it adjust the relocation information as well.  This is called via | 
|---|
| 840 | @samp{bfd_get_relocated_section_contents}.  Most targets implement it by | 
|---|
| 841 | calling @samp{bfd_generic_get_relocated_section_contents}. | 
|---|
| 842 |  | 
|---|
| 843 | @item _bfd_relax_section | 
|---|
| 844 | Try to use relaxation to shrink the size of a section.  This is called | 
|---|
| 845 | by the linker when the @samp{-relax} option is used.  This is called via | 
|---|
| 846 | @samp{bfd_relax_section}.  Most targets do not support any sort of | 
|---|
| 847 | relaxation. | 
|---|
| 848 |  | 
|---|
| 849 | @item _bfd_link_hash_table_create | 
|---|
| 850 | Create the symbol hash table to use for the linker.  This linker hook | 
|---|
| 851 | permits the backend to control the size and information of the elements | 
|---|
| 852 | in the linker symbol hash table.  This is called via | 
|---|
| 853 | @samp{bfd_link_hash_table_create}. | 
|---|
| 854 |  | 
|---|
| 855 | @item _bfd_link_add_symbols | 
|---|
| 856 | Given an object file or an archive, add all symbols into the linker | 
|---|
| 857 | symbol hash table.  Use callbacks to the linker to include archive | 
|---|
| 858 | elements in the link.  This is called via @samp{bfd_link_add_symbols}. | 
|---|
| 859 |  | 
|---|
| 860 | @item _bfd_final_link | 
|---|
| 861 | Finish the linking process.  The linker calls this hook after all of the | 
|---|
| 862 | input files have been read, when it is ready to finish the link and | 
|---|
| 863 | generate the output file.  This is called via @samp{bfd_final_link}. | 
|---|
| 864 |  | 
|---|
| 865 | @item _bfd_link_split_section | 
|---|
| 866 | I don't know what this is for.  Nothing seems to call it.  The only | 
|---|
| 867 | non-trivial definition is in @file{som.c}. | 
|---|
| 868 | @end table | 
|---|
| 869 |  | 
|---|
| 870 | @node BFD target vector dynamic | 
|---|
| 871 | @subsection Dynamic linking information functions | 
|---|
| 872 | @cindex @samp{BFD_JUMP_TABLE_DYNAMIC} | 
|---|
| 873 |  | 
|---|
| 874 | The @samp{BFD_JUMP_TABLE_DYNAMIC} macro is used for functions which read | 
|---|
| 875 | dynamic linking information. | 
|---|
| 876 |  | 
|---|
| 877 | @table @samp | 
|---|
| 878 | @item _get_dynamic_symtab_upper_bound | 
|---|
| 879 | Return a sensible upper bound on the amount of memory which will be | 
|---|
| 880 | required to read the dynamic symbol table.  In practice most targets | 
|---|
| 881 | return the amount of memory required to hold @samp{asymbol} pointers for | 
|---|
| 882 | all the symbols plus a trailing @samp{NULL} entry, and store the actual | 
|---|
| 883 | symbol information in BFD private data.  This is called via | 
|---|
| 884 | @samp{bfd_get_dynamic_symtab_upper_bound}.  The corresponding field in | 
|---|
| 885 | the target vector is named @samp{_bfd_get_dynamic_symtab_upper_bound}. | 
|---|
| 886 |  | 
|---|
| 887 | @item _canonicalize_dynamic_symtab | 
|---|
| 888 | Read the dynamic symbol table.  This is called via | 
|---|
| 889 | @samp{bfd_canonicalize_dynamic_symtab}.  The corresponding field in the | 
|---|
| 890 | target vector is named @samp{_bfd_canonicalize_dynamic_symtab}. | 
|---|
| 891 |  | 
|---|
| 892 | @item _get_dynamic_reloc_upper_bound | 
|---|
| 893 | Return a sensible upper bound on the amount of memory which will be | 
|---|
| 894 | required to read the dynamic relocations.  In practice most targets | 
|---|
| 895 | return the amount of memory required to hold @samp{arelent} pointers for | 
|---|
| 896 | all the relocations plus a trailing @samp{NULL} entry, and store the | 
|---|
| 897 | actual relocation information in BFD private data.  This is called via | 
|---|
| 898 | @samp{bfd_get_dynamic_reloc_upper_bound}.  The corresponding field in | 
|---|
| 899 | the target vector is named @samp{_bfd_get_dynamic_reloc_upper_bound}. | 
|---|
| 900 |  | 
|---|
| 901 | @item _canonicalize_dynamic_reloc | 
|---|
| 902 | Read the dynamic relocations.  This is called via | 
|---|
| 903 | @samp{bfd_canonicalize_dynamic_reloc}.  The corresponding field in the | 
|---|
| 904 | target vector is named @samp{_bfd_canonicalize_dynamic_reloc}. | 
|---|
| 905 | @end table | 
|---|
| 906 |  | 
|---|
| 907 | @node BFD generated files | 
|---|
| 908 | @section BFD generated files | 
|---|
| 909 | @cindex generated files in bfd | 
|---|
| 910 | @cindex bfd generated files | 
|---|
| 911 |  | 
|---|
| 912 | BFD contains several automatically generated files.  This section | 
|---|
| 913 | describes them.  Some files are created at configure time, when you | 
|---|
| 914 | configure BFD.  Some files are created at make time, when you build | 
|---|
| 915 | BFD.  Some files are automatically rebuilt at make time, but only if | 
|---|
| 916 | you configure with the @samp{--enable-maintainer-mode} option.  Some | 
|---|
| 917 | files live in the object directory---the directory from which you run | 
|---|
| 918 | configure---and some live in the source directory.  All files that live | 
|---|
| 919 | in the source directory are checked into the CVS repository. | 
|---|
| 920 |  | 
|---|
| 921 | @table @file | 
|---|
| 922 | @item bfd.h | 
|---|
| 923 | @cindex @file{bfd.h} | 
|---|
| 924 | @cindex @file{bfd-in3.h} | 
|---|
| 925 | Lives in the object directory.  Created at make time from | 
|---|
| 926 | @file{bfd-in2.h} via @file{bfd-in3.h}.  @file{bfd-in3.h} is created at | 
|---|
| 927 | configure time from @file{bfd-in2.h}.  There are automatic dependencies | 
|---|
| 928 | to rebuild @file{bfd-in3.h} and hence @file{bfd.h} if @file{bfd-in2.h} | 
|---|
| 929 | changes, so you can normally ignore @file{bfd-in3.h}, and just think | 
|---|
| 930 | about @file{bfd-in2.h} and @file{bfd.h}. | 
|---|
| 931 |  | 
|---|
| 932 | @file{bfd.h} is built by replacing a few strings in @file{bfd-in2.h}. | 
|---|
| 933 | To see them, search for @samp{@@} in @file{bfd-in2.h}.  They mainly | 
|---|
| 934 | control whether BFD is built for a 32 bit target or a 64 bit target. | 
|---|
| 935 |  | 
|---|
| 936 | @item bfd-in2.h | 
|---|
| 937 | @cindex @file{bfd-in2.h} | 
|---|
| 938 | Lives in the source directory.  Created from @file{bfd-in.h} and several | 
|---|
| 939 | other BFD source files.  If you configure with the | 
|---|
| 940 | @samp{--enable-maintainer-mode} option, @file{bfd-in2.h} is rebuilt | 
|---|
| 941 | automatically when a source file changes. | 
|---|
| 942 |  | 
|---|
| 943 | @item elf32-target.h | 
|---|
| 944 | @itemx elf64-target.h | 
|---|
| 945 | @cindex @file{elf32-target.h} | 
|---|
| 946 | @cindex @file{elf64-target.h} | 
|---|
| 947 | Live in the object directory.  Created from @file{elfxx-target.h}. | 
|---|
| 948 | These files are versions of @file{elfxx-target.h} customized for either | 
|---|
| 949 | a 32 bit ELF target or a 64 bit ELF target. | 
|---|
| 950 |  | 
|---|
| 951 | @item libbfd.h | 
|---|
| 952 | @cindex @file{libbfd.h} | 
|---|
| 953 | Lives in the source directory.  Created from @file{libbfd-in.h} and | 
|---|
| 954 | several other BFD source files.  If you configure with the | 
|---|
| 955 | @samp{--enable-maintainer-mode} option, @file{libbfd.h} is rebuilt | 
|---|
| 956 | automatically when a source file changes. | 
|---|
| 957 |  | 
|---|
| 958 | @item libcoff.h | 
|---|
| 959 | @cindex @file{libcoff.h} | 
|---|
| 960 | Lives in the source directory.  Created from @file{libcoff-in.h} and | 
|---|
| 961 | @file{coffcode.h}.  If you configure with the | 
|---|
| 962 | @samp{--enable-maintainer-mode} option, @file{libcoff.h} is rebuilt | 
|---|
| 963 | automatically when a source file changes. | 
|---|
| 964 |  | 
|---|
| 965 | @item targmatch.h | 
|---|
| 966 | @cindex @file{targmatch.h} | 
|---|
| 967 | Lives in the object directory.  Created at make time from | 
|---|
| 968 | @file{config.bfd}.  This file is used to map configuration triplets into | 
|---|
| 969 | BFD target vector variable names at run time. | 
|---|
| 970 | @end table | 
|---|
| 971 |  | 
|---|
| 972 | @node BFD multiple compilations | 
|---|
| 973 | @section Files compiled multiple times in BFD | 
|---|
| 974 | Several files in BFD are compiled multiple times.  By this I mean that | 
|---|
| 975 | there are header files which contain function definitions.  These header | 
|---|
| 976 | files are included by other files, and thus the functions are compiled | 
|---|
| 977 | once per file which includes them. | 
|---|
| 978 |  | 
|---|
| 979 | Preprocessor macros are used to control the compilation, so that each | 
|---|
| 980 | time the files are compiled the resulting functions are slightly | 
|---|
| 981 | different.  Naturally, if they weren't different, there would be no | 
|---|
| 982 | reason to compile them multiple times. | 
|---|
| 983 |  | 
|---|
| 984 | This is a not a particularly good programming technique, and future BFD | 
|---|
| 985 | work should avoid it. | 
|---|
| 986 |  | 
|---|
| 987 | @itemize @bullet | 
|---|
| 988 | @item | 
|---|
| 989 | Since this technique is rarely used, even experienced C programmers find | 
|---|
| 990 | it confusing. | 
|---|
| 991 |  | 
|---|
| 992 | @item | 
|---|
| 993 | It is difficult to debug programs which use BFD, since there is no way | 
|---|
| 994 | to describe which version of a particular function you are looking at. | 
|---|
| 995 |  | 
|---|
| 996 | @item | 
|---|
| 997 | Programs which use BFD wind up incorporating two or more slightly | 
|---|
| 998 | different versions of the same function, which wastes space in the | 
|---|
| 999 | executable. | 
|---|
| 1000 |  | 
|---|
| 1001 | @item | 
|---|
| 1002 | This technique is never required nor is it especially efficient.  It is | 
|---|
| 1003 | always possible to use statically initialized structures holding | 
|---|
| 1004 | function pointers and magic constants instead. | 
|---|
| 1005 | @end itemize | 
|---|
| 1006 |  | 
|---|
| 1007 | The following is a list of the files which are compiled multiple times. | 
|---|
| 1008 |  | 
|---|
| 1009 | @table @file | 
|---|
| 1010 | @item aout-target.h | 
|---|
| 1011 | @cindex @file{aout-target.h} | 
|---|
| 1012 | Describes a few functions and the target vector for a.out targets.  This | 
|---|
| 1013 | is used by individual a.out targets with different definitions of | 
|---|
| 1014 | @samp{N_TXTADDR} and similar a.out macros. | 
|---|
| 1015 |  | 
|---|
| 1016 | @item aoutf1.h | 
|---|
| 1017 | @cindex @file{aoutf1.h} | 
|---|
| 1018 | Implements standard SunOS a.out files.  In principle it supports 64 bit | 
|---|
| 1019 | a.out targets based on the preprocessor macro @samp{ARCH_SIZE}, but | 
|---|
| 1020 | since all known a.out targets are 32 bits, this code may or may not | 
|---|
| 1021 | work.  This file is only included by a few other files, and it is | 
|---|
| 1022 | difficult to justify its existence. | 
|---|
| 1023 |  | 
|---|
| 1024 | @item aoutx.h | 
|---|
| 1025 | @cindex @file{aoutx.h} | 
|---|
| 1026 | Implements basic a.out support routines.  This file can be compiled for | 
|---|
| 1027 | either 32 or 64 bit support.  Since all known a.out targets are 32 bits, | 
|---|
| 1028 | the 64 bit support may or may not work.  I believe the original | 
|---|
| 1029 | intention was that this file would only be included by @samp{aout32.c} | 
|---|
| 1030 | and @samp{aout64.c}, and that other a.out targets would simply refer to | 
|---|
| 1031 | the functions it defined.  Unfortunately, some other a.out targets | 
|---|
| 1032 | started including it directly, leading to a somewhat confused state of | 
|---|
| 1033 | affairs. | 
|---|
| 1034 |  | 
|---|
| 1035 | @item coffcode.h | 
|---|
| 1036 | @cindex @file{coffcode.h} | 
|---|
| 1037 | Implements basic COFF support routines.  This file is included by every | 
|---|
| 1038 | COFF target.  It implements code which handles COFF magic numbers as | 
|---|
| 1039 | well as various hook functions called by the generic COFF functions in | 
|---|
| 1040 | @file{coffgen.c}.  This file is controlled by a number of different | 
|---|
| 1041 | macros, and more are added regularly. | 
|---|
| 1042 |  | 
|---|
| 1043 | @item coffswap.h | 
|---|
| 1044 | @cindex @file{coffswap.h} | 
|---|
| 1045 | Implements COFF swapping routines.  This file is included by | 
|---|
| 1046 | @file{coffcode.h}, and thus by every COFF target.  It implements the | 
|---|
| 1047 | routines which swap COFF structures between internal and external | 
|---|
| 1048 | format.  The main control for this file is the external structure | 
|---|
| 1049 | definitions in the files in the @file{include/coff} directory.  A COFF | 
|---|
| 1050 | target file will include one of those files before including | 
|---|
| 1051 | @file{coffcode.h} and thus @file{coffswap.h}.  There are a few other | 
|---|
| 1052 | macros which affect @file{coffswap.h} as well, mostly describing whether | 
|---|
| 1053 | certain fields are present in the external structures. | 
|---|
| 1054 |  | 
|---|
| 1055 | @item ecoffswap.h | 
|---|
| 1056 | @cindex @file{ecoffswap.h} | 
|---|
| 1057 | Implements ECOFF swapping routines.  This is like @file{coffswap.h}, but | 
|---|
| 1058 | for ECOFF.  It is included by the ECOFF target files (of which there are | 
|---|
| 1059 | only two).  The control is the preprocessor macro @samp{ECOFF_32} or | 
|---|
| 1060 | @samp{ECOFF_64}. | 
|---|
| 1061 |  | 
|---|
| 1062 | @item elfcode.h | 
|---|
| 1063 | @cindex @file{elfcode.h} | 
|---|
| 1064 | Implements ELF functions that use external structure definitions.  This | 
|---|
| 1065 | file is included by two other files: @file{elf32.c} and @file{elf64.c}. | 
|---|
| 1066 | It is controlled by the @samp{ARCH_SIZE} macro which is defined to be | 
|---|
| 1067 | @samp{32} or @samp{64} before including it.  The @samp{NAME} macro is | 
|---|
| 1068 | used internally to give the functions different names for the two target | 
|---|
| 1069 | sizes. | 
|---|
| 1070 |  | 
|---|
| 1071 | @item elfcore.h | 
|---|
| 1072 | @cindex @file{elfcore.h} | 
|---|
| 1073 | Like @file{elfcode.h}, but for functions that are specific to ELF core | 
|---|
| 1074 | files.  This is included only by @file{elfcode.h}. | 
|---|
| 1075 |  | 
|---|
| 1076 | @item elflink.h | 
|---|
| 1077 | @cindex @file{elflink.h} | 
|---|
| 1078 | Like @file{elfcode.h}, but for functions used by the ELF linker.  This | 
|---|
| 1079 | is included only by @file{elfcode.h}. | 
|---|
| 1080 |  | 
|---|
| 1081 | @item elfxx-target.h | 
|---|
| 1082 | @cindex @file{elfxx-target.h} | 
|---|
| 1083 | This file is the source for the generated files @file{elf32-target.h} | 
|---|
| 1084 | and @file{elf64-target.h}, one of which is included by every ELF target. | 
|---|
| 1085 | It defines the ELF target vector. | 
|---|
| 1086 |  | 
|---|
| 1087 | @item freebsd.h | 
|---|
| 1088 | @cindex @file{freebsd.h} | 
|---|
| 1089 | Presumably intended to be included by all FreeBSD targets, but in fact | 
|---|
| 1090 | there is only one such target, @samp{i386-freebsd}.  This defines a | 
|---|
| 1091 | function used to set the right magic number for FreeBSD, as well as | 
|---|
| 1092 | various macros, and includes @file{aout-target.h}. | 
|---|
| 1093 |  | 
|---|
| 1094 | @item netbsd.h | 
|---|
| 1095 | @cindex @file{netbsd.h} | 
|---|
| 1096 | Like @file{freebsd.h}, except that there are several files which include | 
|---|
| 1097 | it. | 
|---|
| 1098 |  | 
|---|
| 1099 | @item nlm-target.h | 
|---|
| 1100 | @cindex @file{nlm-target.h} | 
|---|
| 1101 | Defines the target vector for a standard NLM target. | 
|---|
| 1102 |  | 
|---|
| 1103 | @item nlmcode.h | 
|---|
| 1104 | @cindex @file{nlmcode.h} | 
|---|
| 1105 | Like @file{elfcode.h}, but for NLM targets.  This is only included by | 
|---|
| 1106 | @file{nlm32.c} and @file{nlm64.c}, both of which define the macro | 
|---|
| 1107 | @samp{ARCH_SIZE} to an appropriate value.  There are no 64 bit NLM | 
|---|
| 1108 | targets anyhow, so this is sort of useless. | 
|---|
| 1109 |  | 
|---|
| 1110 | @item nlmswap.h | 
|---|
| 1111 | @cindex @file{nlmswap.h} | 
|---|
| 1112 | Like @file{coffswap.h}, but for NLM targets.  This is included by each | 
|---|
| 1113 | NLM target, but I think it winds up compiling to the exact same code for | 
|---|
| 1114 | every target, and as such is fairly useless. | 
|---|
| 1115 |  | 
|---|
| 1116 | @item peicode.h | 
|---|
| 1117 | @cindex @file{peicode.h} | 
|---|
| 1118 | Provides swapping routines and other hooks for PE targets. | 
|---|
| 1119 | @file{coffcode.h} will include this rather than @file{coffswap.h} for a | 
|---|
| 1120 | PE target.  This defines PE specific versions of the COFF swapping | 
|---|
| 1121 | routines, and also defines some macros which control @file{coffcode.h} | 
|---|
| 1122 | itself. | 
|---|
| 1123 | @end table | 
|---|
| 1124 |  | 
|---|
| 1125 | @node BFD relocation handling | 
|---|
| 1126 | @section BFD relocation handling | 
|---|
| 1127 | @cindex bfd relocation handling | 
|---|
| 1128 | @cindex relocations in bfd | 
|---|
| 1129 |  | 
|---|
| 1130 | The handling of relocations is one of the more confusing aspects of BFD. | 
|---|
| 1131 | Relocation handling has been implemented in various different ways, all | 
|---|
| 1132 | somewhat incompatible, none perfect. | 
|---|
| 1133 |  | 
|---|
| 1134 | @menu | 
|---|
| 1135 | * BFD relocation concepts::     BFD relocation concepts | 
|---|
| 1136 | * BFD relocation functions::    BFD relocation functions | 
|---|
| 1137 | * BFD relocation codes::        BFD relocation codes | 
|---|
| 1138 | * BFD relocation future::       BFD relocation future | 
|---|
| 1139 | @end menu | 
|---|
| 1140 |  | 
|---|
| 1141 | @node BFD relocation concepts | 
|---|
| 1142 | @subsection BFD relocation concepts | 
|---|
| 1143 |  | 
|---|
| 1144 | A relocation is an action which the linker must take when linking.  It | 
|---|
| 1145 | describes a change to the contents of a section.  The change is normally | 
|---|
| 1146 | based on the final value of one or more symbols.  Relocations are | 
|---|
| 1147 | created by the assembler when it creates an object file. | 
|---|
| 1148 |  | 
|---|
| 1149 | Most relocations are simple.  A typical simple relocation is to set 32 | 
|---|
| 1150 | bits at a given offset in a section to the value of a symbol.  This type | 
|---|
| 1151 | of relocation would be generated for code like @code{int *p = &i;} where | 
|---|
| 1152 | @samp{p} and @samp{i} are global variables.  A relocation for the symbol | 
|---|
| 1153 | @samp{i} would be generated such that the linker would initialize the | 
|---|
| 1154 | area of memory which holds the value of @samp{p} to the value of the | 
|---|
| 1155 | symbol @samp{i}. | 
|---|
| 1156 |  | 
|---|
| 1157 | Slightly more complex relocations may include an addend, which is a | 
|---|
| 1158 | constant to add to the symbol value before using it.  In some cases a | 
|---|
| 1159 | relocation will require adding the symbol value to the existing contents | 
|---|
| 1160 | of the section in the object file.  In others the relocation will simply | 
|---|
| 1161 | replace the contents of the section with the symbol value.  Some | 
|---|
| 1162 | relocations are PC relative, so that the value to be stored in the | 
|---|
| 1163 | section is the difference between the value of a symbol and the final | 
|---|
| 1164 | address of the section contents. | 
|---|
| 1165 |  | 
|---|
| 1166 | In general, relocations can be arbitrarily complex.  For example, | 
|---|
| 1167 | relocations used in dynamic linking systems often require the linker to | 
|---|
| 1168 | allocate space in a different section and use the offset within that | 
|---|
| 1169 | section as the value to store.  In the IEEE object file format, | 
|---|
| 1170 | relocations may involve arbitrary expressions. | 
|---|
| 1171 |  | 
|---|
| 1172 | When doing a relocateable link, the linker may or may not have to do | 
|---|
| 1173 | anything with a relocation, depending upon the definition of the | 
|---|
| 1174 | relocation.  Simple relocations generally do not require any special | 
|---|
| 1175 | action. | 
|---|
| 1176 |  | 
|---|
| 1177 | @node BFD relocation functions | 
|---|
| 1178 | @subsection BFD relocation functions | 
|---|
| 1179 |  | 
|---|
| 1180 | In BFD, each section has an array of @samp{arelent} structures.  Each | 
|---|
| 1181 | structure has a pointer to a symbol, an address within the section, an | 
|---|
| 1182 | addend, and a pointer to a @samp{reloc_howto_struct} structure.  The | 
|---|
| 1183 | howto structure has a bunch of fields describing the reloc, including a | 
|---|
| 1184 | type field.  The type field is specific to the object file format | 
|---|
| 1185 | backend; none of the generic code in BFD examines it. | 
|---|
| 1186 |  | 
|---|
| 1187 | Originally, the function @samp{bfd_perform_relocation} was supposed to | 
|---|
| 1188 | handle all relocations.  In theory, many relocations would be simple | 
|---|
| 1189 | enough to be described by the fields in the howto structure.  For those | 
|---|
| 1190 | that weren't, the howto structure included a @samp{special_function} | 
|---|
| 1191 | field to use as an escape. | 
|---|
| 1192 |  | 
|---|
| 1193 | While this seems plausible, a look at @samp{bfd_perform_relocation} | 
|---|
| 1194 | shows that it failed.  The function has odd special cases.  Some of the | 
|---|
| 1195 | fields in the howto structure, such as @samp{pcrel_offset}, were not | 
|---|
| 1196 | adequately documented. | 
|---|
| 1197 |  | 
|---|
| 1198 | The linker uses @samp{bfd_perform_relocation} to do all relocations when | 
|---|
| 1199 | the input and output file have different formats (e.g., when generating | 
|---|
| 1200 | S-records).  The generic linker code, which is used by all targets which | 
|---|
| 1201 | do not define their own special purpose linker, uses | 
|---|
| 1202 | @samp{bfd_get_relocated_section_contents}, which for most targets turns | 
|---|
| 1203 | into a call to @samp{bfd_generic_get_relocated_section_contents}, which | 
|---|
| 1204 | calls @samp{bfd_perform_relocation}.  So @samp{bfd_perform_relocation} | 
|---|
| 1205 | is still widely used, which makes it difficult to change, since it is | 
|---|
| 1206 | difficult to test all possible cases. | 
|---|
| 1207 |  | 
|---|
| 1208 | The assembler used @samp{bfd_perform_relocation} for a while.  This | 
|---|
| 1209 | turned out to be the wrong thing to do, since | 
|---|
| 1210 | @samp{bfd_perform_relocation} was written to handle relocations on an | 
|---|
| 1211 | existing object file, while the assembler needed to create relocations | 
|---|
| 1212 | in a new object file.  The assembler was changed to use the new function | 
|---|
| 1213 | @samp{bfd_install_relocation} instead, and @samp{bfd_install_relocation} | 
|---|
| 1214 | was created as a copy of @samp{bfd_perform_relocation}. | 
|---|
| 1215 |  | 
|---|
| 1216 | Unfortunately, the work did not progress any farther, so | 
|---|
| 1217 | @samp{bfd_install_relocation} remains a simple copy of | 
|---|
| 1218 | @samp{bfd_perform_relocation}, with all the odd special cases and | 
|---|
| 1219 | confusing code.  This again is difficult to change, because again any | 
|---|
| 1220 | change can affect any assembler target, and so is difficult to test. | 
|---|
| 1221 |  | 
|---|
| 1222 | The new linker, when using the same object file format for all input | 
|---|
| 1223 | files and the output file, does not convert relocations into | 
|---|
| 1224 | @samp{arelent} structures, so it can not use | 
|---|
| 1225 | @samp{bfd_perform_relocation} at all.  Instead, users of the new linker | 
|---|
| 1226 | are expected to write a @samp{relocate_section} function which will | 
|---|
| 1227 | handle relocations in a target specific fashion. | 
|---|
| 1228 |  | 
|---|
| 1229 | There are two helper functions for target specific relocation: | 
|---|
| 1230 | @samp{_bfd_final_link_relocate} and @samp{_bfd_relocate_contents}. | 
|---|
| 1231 | These functions use a howto structure, but they @emph{do not} use the | 
|---|
| 1232 | @samp{special_function} field.  Since the functions are normally called | 
|---|
| 1233 | from target specific code, the @samp{special_function} field adds | 
|---|
| 1234 | little; any relocations which require special handling can be handled | 
|---|
| 1235 | without calling those functions. | 
|---|
| 1236 |  | 
|---|
| 1237 | So, if you want to add a new target, or add a new relocation to an | 
|---|
| 1238 | existing target, you need to do the following: | 
|---|
| 1239 |  | 
|---|
| 1240 | @itemize @bullet | 
|---|
| 1241 | @item | 
|---|
| 1242 | Make sure you clearly understand what the contents of the section should | 
|---|
| 1243 | look like after assembly, after a relocateable link, and after a final | 
|---|
| 1244 | link.  Make sure you clearly understand the operations the linker must | 
|---|
| 1245 | perform during a relocateable link and during a final link. | 
|---|
| 1246 |  | 
|---|
| 1247 | @item | 
|---|
| 1248 | Write a howto structure for the relocation.  The howto structure is | 
|---|
| 1249 | flexible enough to represent any relocation which should be handled by | 
|---|
| 1250 | setting a contiguous bitfield in the destination to the value of a | 
|---|
| 1251 | symbol, possibly with an addend, possibly adding the symbol value to the | 
|---|
| 1252 | value already present in the destination. | 
|---|
| 1253 |  | 
|---|
| 1254 | @item | 
|---|
| 1255 | Change the assembler to generate your relocation.  The assembler will | 
|---|
| 1256 | call @samp{bfd_install_relocation}, so your howto structure has to be | 
|---|
| 1257 | able to handle that.  You may need to set the @samp{special_function} | 
|---|
| 1258 | field to handle assembly correctly.  Be careful to ensure that any code | 
|---|
| 1259 | you write to handle the assembler will also work correctly when doing a | 
|---|
| 1260 | relocateable link.  For example, see @samp{bfd_elf_generic_reloc}. | 
|---|
| 1261 |  | 
|---|
| 1262 | @item | 
|---|
| 1263 | Test the assembler.  Consider the cases of relocation against an | 
|---|
| 1264 | undefined symbol, a common symbol, a symbol defined in the object file | 
|---|
| 1265 | in the same section, and a symbol defined in the object file in a | 
|---|
| 1266 | different section.  These cases may not all be applicable for your | 
|---|
| 1267 | reloc. | 
|---|
| 1268 |  | 
|---|
| 1269 | @item | 
|---|
| 1270 | If your target uses the new linker, which is recommended, add any | 
|---|
| 1271 | required handling to the target specific relocation function.  In simple | 
|---|
| 1272 | cases this will just involve a call to @samp{_bfd_final_link_relocate} | 
|---|
| 1273 | or @samp{_bfd_relocate_contents}, depending upon the definition of the | 
|---|
| 1274 | relocation and whether the link is relocateable or not. | 
|---|
| 1275 |  | 
|---|
| 1276 | @item | 
|---|
| 1277 | Test the linker.  Test the case of a final link.  If the relocation can | 
|---|
| 1278 | overflow, use a linker script to force an overflow and make sure the | 
|---|
| 1279 | error is reported correctly.  Test a relocateable link, whether the | 
|---|
| 1280 | symbol is defined or undefined in the relocateable output.  For both the | 
|---|
| 1281 | final and relocateable link, test the case when the symbol is a common | 
|---|
| 1282 | symbol, when the symbol looked like a common symbol but became a defined | 
|---|
| 1283 | symbol, when the symbol is defined in a different object file, and when | 
|---|
| 1284 | the symbol is defined in the same object file. | 
|---|
| 1285 |  | 
|---|
| 1286 | @item | 
|---|
| 1287 | In order for linking to another object file format, such as S-records, | 
|---|
| 1288 | to work correctly, @samp{bfd_perform_relocation} has to do the right | 
|---|
| 1289 | thing for the relocation.  You may need to set the | 
|---|
| 1290 | @samp{special_function} field to handle this correctly.  Test this by | 
|---|
| 1291 | doing a link in which the output object file format is S-records. | 
|---|
| 1292 |  | 
|---|
| 1293 | @item | 
|---|
| 1294 | Using the linker to generate relocateable output in a different object | 
|---|
| 1295 | file format is impossible in the general case, so you generally don't | 
|---|
| 1296 | have to worry about that.  The GNU linker makes sure to stop that from | 
|---|
| 1297 | happening when an input file in a different format has relocations. | 
|---|
| 1298 |  | 
|---|
| 1299 | Linking input files of different object file formats together is quite | 
|---|
| 1300 | unusual, but if you're really dedicated you may want to consider testing | 
|---|
| 1301 | this case, both when the output object file format is the same as your | 
|---|
| 1302 | format, and when it is different. | 
|---|
| 1303 | @end itemize | 
|---|
| 1304 |  | 
|---|
| 1305 | @node BFD relocation codes | 
|---|
| 1306 | @subsection BFD relocation codes | 
|---|
| 1307 |  | 
|---|
| 1308 | BFD has another way of describing relocations besides the howto | 
|---|
| 1309 | structures described above: the enum @samp{bfd_reloc_code_real_type}. | 
|---|
| 1310 |  | 
|---|
| 1311 | Every known relocation type can be described as a value in this | 
|---|
| 1312 | enumeration.  The enumeration contains many target specific relocations, | 
|---|
| 1313 | but where two or more targets have the same relocation, a single code is | 
|---|
| 1314 | used.  For example, the single value @samp{BFD_RELOC_32} is used for all | 
|---|
| 1315 | simple 32 bit relocation types. | 
|---|
| 1316 |  | 
|---|
| 1317 | The main purpose of this relocation code is to give the assembler some | 
|---|
| 1318 | mechanism to create @samp{arelent} structures.  In order for the | 
|---|
| 1319 | assembler to create an @samp{arelent} structure, it has to be able to | 
|---|
| 1320 | obtain a howto structure.  The function @samp{bfd_reloc_type_lookup}, | 
|---|
| 1321 | which simply calls the target vector entry point | 
|---|
| 1322 | @samp{reloc_type_lookup}, takes a relocation code and returns a howto | 
|---|
| 1323 | structure. | 
|---|
| 1324 |  | 
|---|
| 1325 | The function @samp{bfd_get_reloc_code_name} returns the name of a | 
|---|
| 1326 | relocation code.  This is mainly used in error messages. | 
|---|
| 1327 |  | 
|---|
| 1328 | Using both howto structures and relocation codes can be somewhat | 
|---|
| 1329 | confusing.  There are many processor specific relocation codes. | 
|---|
| 1330 | However, the relocation is only fully defined by the howto structure. | 
|---|
| 1331 | The same relocation code will map to different howto structures in | 
|---|
| 1332 | different object file formats.  For example, the addend handling may be | 
|---|
| 1333 | different. | 
|---|
| 1334 |  | 
|---|
| 1335 | Most of the relocation codes are not really general.  The assembler can | 
|---|
| 1336 | not use them without already understanding what sorts of relocations can | 
|---|
| 1337 | be used for a particular target.  It might be possible to replace the | 
|---|
| 1338 | relocation codes with something simpler. | 
|---|
| 1339 |  | 
|---|
| 1340 | @node BFD relocation future | 
|---|
| 1341 | @subsection BFD relocation future | 
|---|
| 1342 |  | 
|---|
| 1343 | Clearly the current BFD relocation support is in bad shape.  A | 
|---|
| 1344 | wholescale rewrite would be very difficult, because it would require | 
|---|
| 1345 | thorough testing of every BFD target.  So some sort of incremental | 
|---|
| 1346 | change is required. | 
|---|
| 1347 |  | 
|---|
| 1348 | My vague thoughts on this would involve defining a new, clearly defined, | 
|---|
| 1349 | howto structure.  Some mechanism would be used to determine which type | 
|---|
| 1350 | of howto structure was being used by a particular format. | 
|---|
| 1351 |  | 
|---|
| 1352 | The new howto structure would clearly define the relocation behaviour in | 
|---|
| 1353 | the case of an assembly, a relocateable link, and a final link.  At | 
|---|
| 1354 | least one special function would be defined as an escape, and it might | 
|---|
| 1355 | make sense to define more. | 
|---|
| 1356 |  | 
|---|
| 1357 | One or more generic functions similar to @samp{bfd_perform_relocation} | 
|---|
| 1358 | would be written to handle the new howto structure. | 
|---|
| 1359 |  | 
|---|
| 1360 | This should make it possible to write a generic version of the relocate | 
|---|
| 1361 | section functions used by the new linker.  The target specific code | 
|---|
| 1362 | would provide some mechanism (a function pointer or an initial | 
|---|
| 1363 | conversion) to convert target specific relocations into howto | 
|---|
| 1364 | structures. | 
|---|
| 1365 |  | 
|---|
| 1366 | Ideally it would be possible to use this generic relocate section | 
|---|
| 1367 | function for the generic linker as well.  That is, it would replace the | 
|---|
| 1368 | @samp{bfd_generic_get_relocated_section_contents} function which is | 
|---|
| 1369 | currently normally used. | 
|---|
| 1370 |  | 
|---|
| 1371 | For the special case of ELF dynamic linking, more consideration needs to | 
|---|
| 1372 | be given to writing ELF specific but ELF target generic code to handle | 
|---|
| 1373 | special relocation types such as GOT and PLT. | 
|---|
| 1374 |  | 
|---|
| 1375 | @node BFD ELF support | 
|---|
| 1376 | @section BFD ELF support | 
|---|
| 1377 | @cindex elf support in bfd | 
|---|
| 1378 | @cindex bfd elf support | 
|---|
| 1379 |  | 
|---|
| 1380 | The ELF object file format is defined in two parts: a generic ABI and a | 
|---|
| 1381 | processor specific supplement.  The ELF support in BFD is split in a | 
|---|
| 1382 | similar fashion.  The processor specific support is largely kept within | 
|---|
| 1383 | a single file.  The generic support is provided by several other files. | 
|---|
| 1384 | The processor specific support provides a set of function pointers and | 
|---|
| 1385 | constants used by the generic support. | 
|---|
| 1386 |  | 
|---|
| 1387 | @menu | 
|---|
| 1388 | * BFD ELF sections and segments::       ELF sections and segments | 
|---|
| 1389 | * BFD ELF generic support::             BFD ELF generic support | 
|---|
| 1390 | * BFD ELF processor specific support::  BFD ELF processor specific support | 
|---|
| 1391 | * BFD ELF core files::                  BFD ELF core files | 
|---|
| 1392 | * BFD ELF future::                      BFD ELF future | 
|---|
| 1393 | @end menu | 
|---|
| 1394 |  | 
|---|
| 1395 | @node BFD ELF sections and segments | 
|---|
| 1396 | @subsection ELF sections and segments | 
|---|
| 1397 |  | 
|---|
| 1398 | The ELF ABI permits a file to have either sections or segments or both. | 
|---|
| 1399 | Relocateable object files conventionally have only sections. | 
|---|
| 1400 | Executables conventionally have both.  Core files conventionally have | 
|---|
| 1401 | only program segments. | 
|---|
| 1402 |  | 
|---|
| 1403 | ELF sections are similar to sections in other object file formats: they | 
|---|
| 1404 | have a name, a VMA, file contents, flags, and other miscellaneous | 
|---|
| 1405 | information.  ELF relocations are stored in sections of a particular | 
|---|
| 1406 | type; BFD automatically converts these sections into internal relocation | 
|---|
| 1407 | information. | 
|---|
| 1408 |  | 
|---|
| 1409 | ELF program segments are intended for fast interpretation by a system | 
|---|
| 1410 | loader.  They have a type, a VMA, an LMA, file contents, and a couple of | 
|---|
| 1411 | other fields.  When an ELF executable is run on a Unix system, the | 
|---|
| 1412 | system loader will examine the program segments to decide how to load | 
|---|
| 1413 | it.  The loader will ignore the section information.  Loadable program | 
|---|
| 1414 | segments (type @samp{PT_LOAD}) are directly loaded into memory.  Other | 
|---|
| 1415 | program segments are interpreted by the loader, and generally provide | 
|---|
| 1416 | dynamic linking information. | 
|---|
| 1417 |  | 
|---|
| 1418 | When an ELF file has both program segments and sections, an ELF program | 
|---|
| 1419 | segment may encompass one or more ELF sections, in the sense that the | 
|---|
| 1420 | portion of the file which corresponds to the program segment may include | 
|---|
| 1421 | the portions of the file corresponding to one or more sections.  When | 
|---|
| 1422 | there is more than one section in a loadable program segment, the | 
|---|
| 1423 | relative positions of the section contents in the file must correspond | 
|---|
| 1424 | to the relative positions they should hold when the program segment is | 
|---|
| 1425 | loaded.  This requirement should be obvious if you consider that the | 
|---|
| 1426 | system loader will load an entire program segment at a time. | 
|---|
| 1427 |  | 
|---|
| 1428 | On a system which supports dynamic paging, such as any native Unix | 
|---|
| 1429 | system, the contents of a loadable program segment must be at the same | 
|---|
| 1430 | offset in the file as in memory, modulo the memory page size used on the | 
|---|
| 1431 | system.  This is because the system loader will map the file into memory | 
|---|
| 1432 | starting at the start of a page.  The system loader can easily remap | 
|---|
| 1433 | entire pages to the correct load address.  However, if the contents of | 
|---|
| 1434 | the file were not correctly aligned within the page, the system loader | 
|---|
| 1435 | would have to shift the contents around within the page, which is too | 
|---|
| 1436 | expensive.  For example, if the LMA of a loadable program segment is | 
|---|
| 1437 | @samp{0x40080} and the page size is @samp{0x1000}, then the position of | 
|---|
| 1438 | the segment contents within the file must equal @samp{0x80} modulo | 
|---|
| 1439 | @samp{0x1000}. | 
|---|
| 1440 |  | 
|---|
| 1441 | BFD has only a single set of sections.  It does not provide any generic | 
|---|
| 1442 | way to examine both sections and segments.  When BFD is used to open an | 
|---|
| 1443 | object file or executable, the BFD sections will represent ELF sections. | 
|---|
| 1444 | When BFD is used to open a core file, the BFD sections will represent | 
|---|
| 1445 | ELF program segments. | 
|---|
| 1446 |  | 
|---|
| 1447 | When BFD is used to examine an object file or executable, any program | 
|---|
| 1448 | segments will be read to set the LMA of the sections.  This is because | 
|---|
| 1449 | ELF sections only have a VMA, while ELF program segments have both a VMA | 
|---|
| 1450 | and an LMA.  Any program segments will be copied by the | 
|---|
| 1451 | @samp{copy_private} entry points.  They will be printed by the | 
|---|
| 1452 | @samp{print_private} entry point.  Otherwise, the program segments are | 
|---|
| 1453 | ignored.  In particular, programs which use BFD currently have no direct | 
|---|
| 1454 | access to the program segments. | 
|---|
| 1455 |  | 
|---|
| 1456 | When BFD is used to create an executable, the program segments will be | 
|---|
| 1457 | created automatically based on the section information.  This is done in | 
|---|
| 1458 | the function @samp{assign_file_positions_for_segments} in @file{elf.c}. | 
|---|
| 1459 | This function has been tweaked many times, and probably still has | 
|---|
| 1460 | problems that arise in particular cases. | 
|---|
| 1461 |  | 
|---|
| 1462 | There is a hook which may be used to explicitly define the program | 
|---|
| 1463 | segments when creating an executable: the @samp{bfd_record_phdr} | 
|---|
| 1464 | function in @file{bfd.c}.  If this function is called, BFD will not | 
|---|
| 1465 | create program segments itself, but will only create the program | 
|---|
| 1466 | segments specified by the caller.  The linker uses this function to | 
|---|
| 1467 | implement the @samp{PHDRS} linker script command. | 
|---|
| 1468 |  | 
|---|
| 1469 | @node BFD ELF generic support | 
|---|
| 1470 | @subsection BFD ELF generic support | 
|---|
| 1471 |  | 
|---|
| 1472 | In general, functions which do not read external data from the ELF file | 
|---|
| 1473 | are found in @file{elf.c}.  They operate on the internal forms of the | 
|---|
| 1474 | ELF structures, which are defined in @file{include/elf/internal.h}.  The | 
|---|
| 1475 | internal structures are defined in terms of @samp{bfd_vma}, and so may | 
|---|
| 1476 | be used for both 32 bit and 64 bit ELF targets. | 
|---|
| 1477 |  | 
|---|
| 1478 | The file @file{elfcode.h} contains functions which operate on the | 
|---|
| 1479 | external data.  @file{elfcode.h} is compiled twice, once via | 
|---|
| 1480 | @file{elf32.c} with @samp{ARCH_SIZE} defined as @samp{32}, and once via | 
|---|
| 1481 | @file{elf64.c} with @samp{ARCH_SIZE} defined as @samp{64}. | 
|---|
| 1482 | @file{elfcode.h} includes functions to swap the ELF structures in and | 
|---|
| 1483 | out of external form, as well as a few more complex functions. | 
|---|
| 1484 |  | 
|---|
| 1485 | Linker support is found in @file{elflink.c} and @file{elflink.h}.  The | 
|---|
| 1486 | latter file is compiled twice, for both 32 and 64 bit support.  The | 
|---|
| 1487 | linker support is only used if the processor specific file defines | 
|---|
| 1488 | @samp{elf_backend_relocate_section}, which is required to relocate the | 
|---|
| 1489 | section contents.  If that macro is not defined, the generic linker code | 
|---|
| 1490 | is used, and relocations are handled via @samp{bfd_perform_relocation}. | 
|---|
| 1491 |  | 
|---|
| 1492 | The core file support is in @file{elfcore.h}, which is compiled twice, | 
|---|
| 1493 | for both 32 and 64 bit support.  The more interesting cases of core file | 
|---|
| 1494 | support only work on a native system which has the @file{sys/procfs.h} | 
|---|
| 1495 | header file.  Without that file, the core file support does little more | 
|---|
| 1496 | than read the ELF program segments as BFD sections. | 
|---|
| 1497 |  | 
|---|
| 1498 | The BFD internal header file @file{elf-bfd.h} is used for communication | 
|---|
| 1499 | among these files and the processor specific files. | 
|---|
| 1500 |  | 
|---|
| 1501 | The default entries for the BFD ELF target vector are found mainly in | 
|---|
| 1502 | @file{elf.c}.  Some functions are found in @file{elfcode.h}. | 
|---|
| 1503 |  | 
|---|
| 1504 | The processor specific files may override particular entries in the | 
|---|
| 1505 | target vector, but most do not, with one exception: the | 
|---|
| 1506 | @samp{bfd_reloc_type_lookup} entry point is always processor specific. | 
|---|
| 1507 |  | 
|---|
| 1508 | @node BFD ELF processor specific support | 
|---|
| 1509 | @subsection BFD ELF processor specific support | 
|---|
| 1510 |  | 
|---|
| 1511 | By convention, the processor specific support for a particular processor | 
|---|
| 1512 | will be found in @file{elf@var{nn}-@var{cpu}.c}, where @var{nn} is | 
|---|
| 1513 | either 32 or 64, and @var{cpu} is the name of the processor. | 
|---|
| 1514 |  | 
|---|
| 1515 | @menu | 
|---|
| 1516 | * BFD ELF processor required::  Required processor specific support | 
|---|
| 1517 | * BFD ELF processor linker::    Processor specific linker support | 
|---|
| 1518 | * BFD ELF processor other::     Other processor specific support options | 
|---|
| 1519 | @end menu | 
|---|
| 1520 |  | 
|---|
| 1521 | @node BFD ELF processor required | 
|---|
| 1522 | @subsubsection Required processor specific support | 
|---|
| 1523 |  | 
|---|
| 1524 | When writing a @file{elf@var{nn}-@var{cpu}.c} file, you must do the | 
|---|
| 1525 | following: | 
|---|
| 1526 |  | 
|---|
| 1527 | @itemize @bullet | 
|---|
| 1528 | @item | 
|---|
| 1529 | Define either @samp{TARGET_BIG_SYM} or @samp{TARGET_LITTLE_SYM}, or | 
|---|
| 1530 | both, to a unique C name to use for the target vector.  This name should | 
|---|
| 1531 | appear in the list of target vectors in @file{targets.c}, and will also | 
|---|
| 1532 | have to appear in @file{config.bfd} and @file{configure.in}.  Define | 
|---|
| 1533 | @samp{TARGET_BIG_SYM} for a big-endian processor, | 
|---|
| 1534 | @samp{TARGET_LITTLE_SYM} for a little-endian processor, and define both | 
|---|
| 1535 | for a bi-endian processor. | 
|---|
| 1536 | @item | 
|---|
| 1537 | Define either @samp{TARGET_BIG_NAME} or @samp{TARGET_LITTLE_NAME}, or | 
|---|
| 1538 | both, to a string used as the name of the target vector.  This is the | 
|---|
| 1539 | name which a user of the BFD tool would use to specify the object file | 
|---|
| 1540 | format.  It would normally appear in a linker emulation parameters | 
|---|
| 1541 | file. | 
|---|
| 1542 | @item | 
|---|
| 1543 | Define @samp{ELF_ARCH} to the BFD architecture (an element of the | 
|---|
| 1544 | @samp{bfd_architecture} enum, typically @samp{bfd_arch_@var{cpu}}). | 
|---|
| 1545 | @item | 
|---|
| 1546 | Define @samp{ELF_MACHINE_CODE} to the magic number which should appear | 
|---|
| 1547 | in the @samp{e_machine} field of the ELF header.  As of this writing, | 
|---|
| 1548 | these magic numbers are assigned by Caldera; if you want to get a magic | 
|---|
| 1549 | number for a particular processor, try sending a note to | 
|---|
| 1550 | @email{registry@@caldera.com}.  In the BFD sources, the magic numbers are | 
|---|
| 1551 | found in @file{include/elf/common.h}; they have names beginning with | 
|---|
| 1552 | @samp{EM_}. | 
|---|
| 1553 | @item | 
|---|
| 1554 | Define @samp{ELF_MAXPAGESIZE} to the maximum size of a virtual page in | 
|---|
| 1555 | memory.  This can normally be found at the start of chapter 5 in the | 
|---|
| 1556 | processor specific supplement.  For a processor which will only be used | 
|---|
| 1557 | in an embedded system, or which has no memory management hardware, this | 
|---|
| 1558 | can simply be @samp{1}. | 
|---|
| 1559 | @item | 
|---|
| 1560 | If the format should use @samp{Rel} rather than @samp{Rela} relocations, | 
|---|
| 1561 | define @samp{USE_REL}.  This is normally defined in chapter 4 of the | 
|---|
| 1562 | processor specific supplement. | 
|---|
| 1563 |  | 
|---|
| 1564 | In the absence of a supplement, it's easier to work with @samp{Rela} | 
|---|
| 1565 | relocations.  @samp{Rela} relocations will require more space in object | 
|---|
| 1566 | files (but not in executables, except when using dynamic linking). | 
|---|
| 1567 | However, this is outweighed by the simplicity of addend handling when | 
|---|
| 1568 | using @samp{Rela} relocations.  With @samp{Rel} relocations, the addend | 
|---|
| 1569 | must be stored in the section contents, which makes relocateable links | 
|---|
| 1570 | more complex. | 
|---|
| 1571 |  | 
|---|
| 1572 | For example, consider C code like @code{i = a[1000];} where @samp{a} is | 
|---|
| 1573 | a global array.  The instructions which load the value of @samp{a[1000]} | 
|---|
| 1574 | will most likely use a relocation which refers to the symbol | 
|---|
| 1575 | representing @samp{a}, with an addend that gives the offset from the | 
|---|
| 1576 | start of @samp{a} to element @samp{1000}.  When using @samp{Rel} | 
|---|
| 1577 | relocations, that addend must be stored in the instructions themselves. | 
|---|
| 1578 | If you are adding support for a RISC chip which uses two or more | 
|---|
| 1579 | instructions to load an address, then the addend may not fit in a single | 
|---|
| 1580 | instruction, and will have to be somehow split among the instructions. | 
|---|
| 1581 | This makes linking awkward, particularly when doing a relocateable link | 
|---|
| 1582 | in which the addend may have to be updated.  It can be done---the MIPS | 
|---|
| 1583 | ELF support does it---but it should be avoided when possible. | 
|---|
| 1584 |  | 
|---|
| 1585 | It is possible, though somewhat awkward, to support both @samp{Rel} and | 
|---|
| 1586 | @samp{Rela} relocations for a single target; @file{elf64-mips.c} does it | 
|---|
| 1587 | by overriding the relocation reading and writing routines. | 
|---|
| 1588 | @item | 
|---|
| 1589 | Define howto structures for all the relocation types. | 
|---|
| 1590 | @item | 
|---|
| 1591 | Define a @samp{bfd_reloc_type_lookup} routine.  This must be named | 
|---|
| 1592 | @samp{bfd_elf@var{nn}_bfd_reloc_type_lookup}, and may be either a | 
|---|
| 1593 | function or a macro.  It must translate a BFD relocation code into a | 
|---|
| 1594 | howto structure.  This is normally a table lookup or a simple switch. | 
|---|
| 1595 | @item | 
|---|
| 1596 | If using @samp{Rel} relocations, define @samp{elf_info_to_howto_rel}. | 
|---|
| 1597 | If using @samp{Rela} relocations, define @samp{elf_info_to_howto}. | 
|---|
| 1598 | Either way, this is a macro defined as the name of a function which | 
|---|
| 1599 | takes an @samp{arelent} and a @samp{Rel} or @samp{Rela} structure, and | 
|---|
| 1600 | sets the @samp{howto} field of the @samp{arelent} based on the | 
|---|
| 1601 | @samp{Rel} or @samp{Rela} structure.  This is normally uses | 
|---|
| 1602 | @samp{ELF@var{nn}_R_TYPE} to get the ELF relocation type and uses it as | 
|---|
| 1603 | an index into a table of howto structures. | 
|---|
| 1604 | @end itemize | 
|---|
| 1605 |  | 
|---|
| 1606 | You must also add the magic number for this processor to the | 
|---|
| 1607 | @samp{prep_headers} function in @file{elf.c}. | 
|---|
| 1608 |  | 
|---|
| 1609 | You must also create a header file in the @file{include/elf} directory | 
|---|
| 1610 | called @file{@var{cpu}.h}.  This file should define any target specific | 
|---|
| 1611 | information which may be needed outside of the BFD code.  In particular | 
|---|
| 1612 | it should use the @samp{START_RELOC_NUMBERS}, @samp{RELOC_NUMBER}, | 
|---|
| 1613 | @samp{FAKE_RELOC}, @samp{EMPTY_RELOC} and @samp{END_RELOC_NUMBERS} | 
|---|
| 1614 | macros to create a table mapping the number used to identify a | 
|---|
| 1615 | relocation to a name describing that relocation. | 
|---|
| 1616 |  | 
|---|
| 1617 | While not a BFD component, you probably also want to make the binutils | 
|---|
| 1618 | program @samp{readelf} parse your ELF objects.  For this, you need to add | 
|---|
| 1619 | code for @code{EM_@var{cpu}} as appropriate in @file{binutils/readelf.c}. | 
|---|
| 1620 |  | 
|---|
| 1621 | @node BFD ELF processor linker | 
|---|
| 1622 | @subsubsection Processor specific linker support | 
|---|
| 1623 |  | 
|---|
| 1624 | The linker will be much more efficient if you define a relocate section | 
|---|
| 1625 | function.  This will permit BFD to use the ELF specific linker support. | 
|---|
| 1626 |  | 
|---|
| 1627 | If you do not define a relocate section function, BFD must use the | 
|---|
| 1628 | generic linker support, which requires converting all symbols and | 
|---|
| 1629 | relocations into BFD @samp{asymbol} and @samp{arelent} structures.  In | 
|---|
| 1630 | this case, relocations will be handled by calling | 
|---|
| 1631 | @samp{bfd_perform_relocation}, which will use the howto structures you | 
|---|
| 1632 | have defined.  @xref{BFD relocation handling}. | 
|---|
| 1633 |  | 
|---|
| 1634 | In order to support linking into a different object file format, such as | 
|---|
| 1635 | S-records, @samp{bfd_perform_relocation} must work correctly with your | 
|---|
| 1636 | howto structures, so you can't skip that step.  However, if you define | 
|---|
| 1637 | the relocate section function, then in the normal case of linking into | 
|---|
| 1638 | an ELF file the linker will not need to convert symbols and relocations, | 
|---|
| 1639 | and will be much more efficient. | 
|---|
| 1640 |  | 
|---|
| 1641 | To use a relocation section function, define the macro | 
|---|
| 1642 | @samp{elf_backend_relocate_section} as the name of a function which will | 
|---|
| 1643 | take the contents of a section, as well as relocation, symbol, and other | 
|---|
| 1644 | information, and modify the section contents according to the relocation | 
|---|
| 1645 | information.  In simple cases, this is little more than a loop over the | 
|---|
| 1646 | relocations which computes the value of each relocation and calls | 
|---|
| 1647 | @samp{_bfd_final_link_relocate}.  The function must check for a | 
|---|
| 1648 | relocateable link, and in that case normally needs to do nothing other | 
|---|
| 1649 | than adjust the addend for relocations against a section symbol. | 
|---|
| 1650 |  | 
|---|
| 1651 | The complex cases generally have to do with dynamic linker support.  GOT | 
|---|
| 1652 | and PLT relocations must be handled specially, and the linker normally | 
|---|
| 1653 | arranges to set up the GOT and PLT sections while handling relocations. | 
|---|
| 1654 | When generating a shared library, random relocations must normally be | 
|---|
| 1655 | copied into the shared library, or converted to RELATIVE relocations | 
|---|
| 1656 | when possible. | 
|---|
| 1657 |  | 
|---|
| 1658 | @node BFD ELF processor other | 
|---|
| 1659 | @subsubsection Other processor specific support options | 
|---|
| 1660 |  | 
|---|
| 1661 | There are many other macros which may be defined in | 
|---|
| 1662 | @file{elf@var{nn}-@var{cpu}.c}.  These macros may be found in | 
|---|
| 1663 | @file{elfxx-target.h}. | 
|---|
| 1664 |  | 
|---|
| 1665 | Macros may be used to override some of the generic ELF target vector | 
|---|
| 1666 | functions. | 
|---|
| 1667 |  | 
|---|
| 1668 | Several processor specific hook functions which may be defined as | 
|---|
| 1669 | macros.  These functions are found as function pointers in the | 
|---|
| 1670 | @samp{elf_backend_data} structure defined in @file{elf-bfd.h}.  In | 
|---|
| 1671 | general, a hook function is set by defining a macro | 
|---|
| 1672 | @samp{elf_backend_@var{name}}. | 
|---|
| 1673 |  | 
|---|
| 1674 | There are a few processor specific constants which may also be defined. | 
|---|
| 1675 | These are again found in the @samp{elf_backend_data} structure. | 
|---|
| 1676 |  | 
|---|
| 1677 | I will not define the various functions and constants here; see the | 
|---|
| 1678 | comments in @file{elf-bfd.h}. | 
|---|
| 1679 |  | 
|---|
| 1680 | Normally any odd characteristic of a particular ELF processor is handled | 
|---|
| 1681 | via a hook function.  For example, the special @samp{SHN_MIPS_SCOMMON} | 
|---|
| 1682 | section number found in MIPS ELF is handled via the hooks | 
|---|
| 1683 | @samp{section_from_bfd_section}, @samp{symbol_processing}, | 
|---|
| 1684 | @samp{add_symbol_hook}, and @samp{output_symbol_hook}. | 
|---|
| 1685 |  | 
|---|
| 1686 | Dynamic linking support, which involves processor specific relocations | 
|---|
| 1687 | requiring special handling, is also implemented via hook functions. | 
|---|
| 1688 |  | 
|---|
| 1689 | @node BFD ELF core files | 
|---|
| 1690 | @subsection BFD ELF core files | 
|---|
| 1691 | @cindex elf core files | 
|---|
| 1692 |  | 
|---|
| 1693 | On native ELF Unix systems, core files are generated without any | 
|---|
| 1694 | sections.  Instead, they only have program segments. | 
|---|
| 1695 |  | 
|---|
| 1696 | When BFD is used to read an ELF core file, the BFD sections will | 
|---|
| 1697 | actually represent program segments.  Since ELF program segments do not | 
|---|
| 1698 | have names, BFD will invent names like @samp{segment@var{n}} where | 
|---|
| 1699 | @var{n} is a number. | 
|---|
| 1700 |  | 
|---|
| 1701 | A single ELF program segment may include both an initialized part and an | 
|---|
| 1702 | uninitialized part.  The size of the initialized part is given by the | 
|---|
| 1703 | @samp{p_filesz} field.  The total size of the segment is given by the | 
|---|
| 1704 | @samp{p_memsz} field.  If @samp{p_memsz} is larger than @samp{p_filesz}, | 
|---|
| 1705 | then the extra space is uninitialized, or, more precisely, initialized | 
|---|
| 1706 | to zero. | 
|---|
| 1707 |  | 
|---|
| 1708 | BFD will represent such a program segment as two different sections. | 
|---|
| 1709 | The first, named @samp{segment@var{n}a}, will represent the initialized | 
|---|
| 1710 | part of the program segment.  The second, named @samp{segment@var{n}b}, | 
|---|
| 1711 | will represent the uninitialized part. | 
|---|
| 1712 |  | 
|---|
| 1713 | ELF core files store special information such as register values in | 
|---|
| 1714 | program segments with the type @samp{PT_NOTE}.  BFD will attempt to | 
|---|
| 1715 | interpret the information in these segments, and will create additional | 
|---|
| 1716 | sections holding the information.  Some of this interpretation requires | 
|---|
| 1717 | information found in the host header file @file{sys/procfs.h}, and so | 
|---|
| 1718 | will only work when BFD is built on a native system. | 
|---|
| 1719 |  | 
|---|
| 1720 | BFD does not currently provide any way to create an ELF core file.  In | 
|---|
| 1721 | general, BFD does not provide a way to create core files.  The way to | 
|---|
| 1722 | implement this would be to write @samp{bfd_set_format} and | 
|---|
| 1723 | @samp{bfd_write_contents} routines for the @samp{bfd_core} type; see | 
|---|
| 1724 | @ref{BFD target vector format}. | 
|---|
| 1725 |  | 
|---|
| 1726 | @node BFD ELF future | 
|---|
| 1727 | @subsection BFD ELF future | 
|---|
| 1728 |  | 
|---|
| 1729 | The current dynamic linking support has too much code duplication. | 
|---|
| 1730 | While each processor has particular differences, much of the dynamic | 
|---|
| 1731 | linking support is quite similar for each processor.  The GOT and PLT | 
|---|
| 1732 | are handled in fairly similar ways, the details of -Bsymbolic linking | 
|---|
| 1733 | are generally similar, etc.  This code should be reworked to use more | 
|---|
| 1734 | generic functions, eliminating the duplication. | 
|---|
| 1735 |  | 
|---|
| 1736 | Similarly, the relocation handling has too much duplication.  Many of | 
|---|
| 1737 | the @samp{reloc_type_lookup} and @samp{info_to_howto} functions are | 
|---|
| 1738 | quite similar.  The relocate section functions are also often quite | 
|---|
| 1739 | similar, both in the standard linker handling and the dynamic linker | 
|---|
| 1740 | handling.  Many of the COFF processor specific backends share a single | 
|---|
| 1741 | relocate section function (@samp{_bfd_coff_generic_relocate_section}), | 
|---|
| 1742 | and it should be possible to do something like this for the ELF targets | 
|---|
| 1743 | as well. | 
|---|
| 1744 |  | 
|---|
| 1745 | The appearance of the processor specific magic number in | 
|---|
| 1746 | @samp{prep_headers} in @file{elf.c} is somewhat bogus.  It should be | 
|---|
| 1747 | possible to add support for a new processor without changing the generic | 
|---|
| 1748 | support. | 
|---|
| 1749 |  | 
|---|
| 1750 | The processor function hooks and constants are ad hoc and need better | 
|---|
| 1751 | documentation. | 
|---|
| 1752 |  | 
|---|
| 1753 | When a linker script uses @samp{SIZEOF_HEADERS}, the ELF backend must | 
|---|
| 1754 | guess at the number of program segments which will be required, in | 
|---|
| 1755 | @samp{get_program_header_size}.  This is because the linker calls | 
|---|
| 1756 | @samp{bfd_sizeof_headers} before it knows all the section addresses and | 
|---|
| 1757 | sizes.  The ELF backend may later discover, when creating program | 
|---|
| 1758 | segments, that more program segments are required.  This is currently | 
|---|
| 1759 | reported as an error in @samp{assign_file_positions_for_segments}. | 
|---|
| 1760 |  | 
|---|
| 1761 | In practice this makes it difficult to use @samp{SIZEOF_HEADERS} except | 
|---|
| 1762 | with a carefully defined linker script.  Unfortunately, | 
|---|
| 1763 | @samp{SIZEOF_HEADERS} is required for fast program loading on a native | 
|---|
| 1764 | system, since it permits the initial code section to appear on the same | 
|---|
| 1765 | page as the program segments, saving a page read when the program starts | 
|---|
| 1766 | running.  Fortunately, native systems permit careful definition of the | 
|---|
| 1767 | linker script.  Still, ideally it would be possible to use relaxation to | 
|---|
| 1768 | compute the number of program segments. | 
|---|
| 1769 |  | 
|---|
| 1770 | @node BFD glossary | 
|---|
| 1771 | @section BFD glossary | 
|---|
| 1772 | @cindex glossary for bfd | 
|---|
| 1773 | @cindex bfd glossary | 
|---|
| 1774 |  | 
|---|
| 1775 | This is a short glossary of some BFD terms. | 
|---|
| 1776 |  | 
|---|
| 1777 | @table @asis | 
|---|
| 1778 | @item a.out | 
|---|
| 1779 | The a.out object file format.  The original Unix object file format. | 
|---|
| 1780 | Still used on SunOS, though not Solaris.  Supports only three sections. | 
|---|
| 1781 |  | 
|---|
| 1782 | @item archive | 
|---|
| 1783 | A collection of object files produced and manipulated by the @samp{ar} | 
|---|
| 1784 | program. | 
|---|
| 1785 |  | 
|---|
| 1786 | @item backend | 
|---|
| 1787 | The implementation within BFD of a particular object file format.  The | 
|---|
| 1788 | set of functions which appear in a particular target vector. | 
|---|
| 1789 |  | 
|---|
| 1790 | @item BFD | 
|---|
| 1791 | The BFD library itself.  Also, each object file, archive, or executable | 
|---|
| 1792 | opened by the BFD library has the type @samp{bfd *}, and is sometimes | 
|---|
| 1793 | referred to as a bfd. | 
|---|
| 1794 |  | 
|---|
| 1795 | @item COFF | 
|---|
| 1796 | The Common Object File Format.  Used on Unix SVR3.  Used by some | 
|---|
| 1797 | embedded targets, although ELF is normally better. | 
|---|
| 1798 |  | 
|---|
| 1799 | @item DLL | 
|---|
| 1800 | A shared library on Windows. | 
|---|
| 1801 |  | 
|---|
| 1802 | @item dynamic linker | 
|---|
| 1803 | When a program linked against a shared library is run, the dynamic | 
|---|
| 1804 | linker will locate the appropriate shared library and arrange to somehow | 
|---|
| 1805 | include it in the running image. | 
|---|
| 1806 |  | 
|---|
| 1807 | @item dynamic object | 
|---|
| 1808 | Another name for an ELF shared library. | 
|---|
| 1809 |  | 
|---|
| 1810 | @item ECOFF | 
|---|
| 1811 | The Extended Common Object File Format.  Used on Alpha Digital Unix | 
|---|
| 1812 | (formerly OSF/1), as well as Ultrix and Irix 4.  A variant of COFF. | 
|---|
| 1813 |  | 
|---|
| 1814 | @item ELF | 
|---|
| 1815 | The Executable and Linking Format.  The object file format used on most | 
|---|
| 1816 | modern Unix systems, including GNU/Linux, Solaris, Irix, and SVR4.  Also | 
|---|
| 1817 | used on many embedded systems. | 
|---|
| 1818 |  | 
|---|
| 1819 | @item executable | 
|---|
| 1820 | A program, with instructions and symbols, and perhaps dynamic linking | 
|---|
| 1821 | information.  Normally produced by a linker. | 
|---|
| 1822 |  | 
|---|
| 1823 | @item LMA | 
|---|
| 1824 | Load Memory Address.  This is the address at which a section will be | 
|---|
| 1825 | loaded.  Compare with VMA, below. | 
|---|
| 1826 |  | 
|---|
| 1827 | @item NLM | 
|---|
| 1828 | NetWare Loadable Module.  Used to describe the format of an object which | 
|---|
| 1829 | be loaded into NetWare, which is some kind of PC based network server | 
|---|
| 1830 | program. | 
|---|
| 1831 |  | 
|---|
| 1832 | @item object file | 
|---|
| 1833 | A binary file including machine instructions, symbols, and relocation | 
|---|
| 1834 | information.  Normally produced by an assembler. | 
|---|
| 1835 |  | 
|---|
| 1836 | @item object file format | 
|---|
| 1837 | The format of an object file.  Typically object files and executables | 
|---|
| 1838 | for a particular system are in the same format, although executables | 
|---|
| 1839 | will not contain any relocation information. | 
|---|
| 1840 |  | 
|---|
| 1841 | @item PE | 
|---|
| 1842 | The Portable Executable format.  This is the object file format used for | 
|---|
| 1843 | Windows (specifically, Win32) object files.  It is based closely on | 
|---|
| 1844 | COFF, but has a few significant differences. | 
|---|
| 1845 |  | 
|---|
| 1846 | @item PEI | 
|---|
| 1847 | The Portable Executable Image format.  This is the object file format | 
|---|
| 1848 | used for Windows (specifically, Win32) executables.  It is very similar | 
|---|
| 1849 | to PE, but includes some additional header information. | 
|---|
| 1850 |  | 
|---|
| 1851 | @item relocations | 
|---|
| 1852 | Information used by the linker to adjust section contents.  Also called | 
|---|
| 1853 | relocs. | 
|---|
| 1854 |  | 
|---|
| 1855 | @item section | 
|---|
| 1856 | Object files and executable are composed of sections.  Sections have | 
|---|
| 1857 | optional data and optional relocation information. | 
|---|
| 1858 |  | 
|---|
| 1859 | @item shared library | 
|---|
| 1860 | A library of functions which may be used by many executables without | 
|---|
| 1861 | actually being linked into each executable.  There are several different | 
|---|
| 1862 | implementations of shared libraries, each having slightly different | 
|---|
| 1863 | features. | 
|---|
| 1864 |  | 
|---|
| 1865 | @item symbol | 
|---|
| 1866 | Each object file and executable may have a list of symbols, often | 
|---|
| 1867 | referred to as the symbol table.  A symbol is basically a name and an | 
|---|
| 1868 | address.  There may also be some additional information like the type of | 
|---|
| 1869 | symbol, although the type of a symbol is normally something simple like | 
|---|
| 1870 | function or object, and should be confused with the more complex C | 
|---|
| 1871 | notion of type.  Typically every global function and variable in a C | 
|---|
| 1872 | program will have an associated symbol. | 
|---|
| 1873 |  | 
|---|
| 1874 | @item target vector | 
|---|
| 1875 | A set of functions which implement support for a particular object file | 
|---|
| 1876 | format.  The @samp{bfd_target} structure. | 
|---|
| 1877 |  | 
|---|
| 1878 | @item Win32 | 
|---|
| 1879 | The current Windows API, implemented by Windows 95 and later and Windows | 
|---|
| 1880 | NT 3.51 and later, but not by Windows 3.1. | 
|---|
| 1881 |  | 
|---|
| 1882 | @item XCOFF | 
|---|
| 1883 | The eXtended Common Object File Format.  Used on AIX.  A variant of | 
|---|
| 1884 | COFF, with a completely different symbol table implementation. | 
|---|
| 1885 |  | 
|---|
| 1886 | @item VMA | 
|---|
| 1887 | Virtual Memory Address.  This is the address a section will have when | 
|---|
| 1888 | an executable is run.  Compare with LMA, above. | 
|---|
| 1889 | @end table | 
|---|
| 1890 |  | 
|---|
| 1891 | @node Index | 
|---|
| 1892 | @unnumberedsec Index | 
|---|
| 1893 | @printindex cp | 
|---|
| 1894 |  | 
|---|
| 1895 | @contents | 
|---|
| 1896 | @bye | 
|---|