| 1 | This is bfd.info, produced by makeinfo version 4.3 from bfd.texinfo. | 
|---|
| 2 |  | 
|---|
| 3 | START-INFO-DIR-ENTRY | 
|---|
| 4 | * Bfd: (bfd).                   The Binary File Descriptor library. | 
|---|
| 5 | END-INFO-DIR-ENTRY | 
|---|
| 6 |  | 
|---|
| 7 | This file documents the BFD library. | 
|---|
| 8 |  | 
|---|
| 9 | Copyright (C) 1991, 2000, 2001, 2003 Free Software Foundation, Inc. | 
|---|
| 10 |  | 
|---|
| 11 | Permission is granted to copy, distribute and/or modify this document | 
|---|
| 12 | under the terms of the GNU Free Documentation License, Version 1.1 | 
|---|
| 13 | or any later version published by the Free Software Foundation; | 
|---|
| 14 | with no Invariant Sections, with no Front-Cover Texts, and with no | 
|---|
| 15 | Back-Cover Texts.  A copy of the license is included in the | 
|---|
| 16 | section entitled "GNU Free Documentation License". | 
|---|
| 17 |  | 
|---|
| 18 |  | 
|---|
| 19 | File: bfd.info,  Node: Internal,  Next: File Caching,  Prev: Opening and Closing,  Up: BFD front end | 
|---|
| 20 |  | 
|---|
| 21 | Internal functions | 
|---|
| 22 | ================== | 
|---|
| 23 |  | 
|---|
| 24 | *Description* | 
|---|
| 25 | These routines are used within BFD.  They are not intended for export, | 
|---|
| 26 | but are documented here for completeness. | 
|---|
| 27 |  | 
|---|
| 28 | `bfd_write_bigendian_4byte_int' | 
|---|
| 29 | ............................... | 
|---|
| 30 |  | 
|---|
| 31 | *Synopsis* | 
|---|
| 32 | bfd_boolean bfd_write_bigendian_4byte_int (bfd *, unsigned int); | 
|---|
| 33 | *Description* | 
|---|
| 34 | Write a 4 byte integer I to the output BFD ABFD, in big endian order | 
|---|
| 35 | regardless of what else is going on.  This is useful in archives. | 
|---|
| 36 |  | 
|---|
| 37 | `bfd_put_size' | 
|---|
| 38 | .............. | 
|---|
| 39 |  | 
|---|
| 40 | `bfd_get_size' | 
|---|
| 41 | .............. | 
|---|
| 42 |  | 
|---|
| 43 | *Description* | 
|---|
| 44 | These macros as used for reading and writing raw data in sections; each | 
|---|
| 45 | access (except for bytes) is vectored through the target format of the | 
|---|
| 46 | BFD and mangled accordingly. The mangling performs any necessary endian | 
|---|
| 47 | translations and removes alignment restrictions.  Note that types | 
|---|
| 48 | accepted and returned by these macros are identical so they can be | 
|---|
| 49 | swapped around in macros--for example, `libaout.h' defines `GET_WORD' | 
|---|
| 50 | to either `bfd_get_32' or `bfd_get_64'. | 
|---|
| 51 |  | 
|---|
| 52 | In the put routines, VAL must be a `bfd_vma'.  If we are on a system | 
|---|
| 53 | without prototypes, the caller is responsible for making sure that is | 
|---|
| 54 | true, with a cast if necessary.  We don't cast them in the macro | 
|---|
| 55 | definitions because that would prevent `lint' or `gcc -Wall' from | 
|---|
| 56 | detecting sins such as passing a pointer.  To detect calling these with | 
|---|
| 57 | less than a `bfd_vma', use `gcc -Wconversion' on a host with 64 bit | 
|---|
| 58 | `bfd_vma''s. | 
|---|
| 59 |  | 
|---|
| 60 | /* Byte swapping macros for user section data.  */ | 
|---|
| 61 |  | 
|---|
| 62 | #define bfd_put_8(abfd, val, ptr) \ | 
|---|
| 63 | ((void) (*((unsigned char *) (ptr)) = (unsigned char) (val))) | 
|---|
| 64 | #define bfd_put_signed_8 \ | 
|---|
| 65 | bfd_put_8 | 
|---|
| 66 | #define bfd_get_8(abfd, ptr) \ | 
|---|
| 67 | (*(unsigned char *) (ptr) & 0xff) | 
|---|
| 68 | #define bfd_get_signed_8(abfd, ptr) \ | 
|---|
| 69 | (((*(unsigned char *) (ptr) & 0xff) ^ 0x80) - 0x80) | 
|---|
| 70 |  | 
|---|
| 71 | #define bfd_put_16(abfd, val, ptr) \ | 
|---|
| 72 | BFD_SEND(abfd, bfd_putx16, ((val),(ptr))) | 
|---|
| 73 | #define bfd_put_signed_16 \ | 
|---|
| 74 | bfd_put_16 | 
|---|
| 75 | #define bfd_get_16(abfd, ptr) \ | 
|---|
| 76 | BFD_SEND(abfd, bfd_getx16, (ptr)) | 
|---|
| 77 | #define bfd_get_signed_16(abfd, ptr) \ | 
|---|
| 78 | BFD_SEND (abfd, bfd_getx_signed_16, (ptr)) | 
|---|
| 79 |  | 
|---|
| 80 | #define bfd_put_32(abfd, val, ptr) \ | 
|---|
| 81 | BFD_SEND(abfd, bfd_putx32, ((val),(ptr))) | 
|---|
| 82 | #define bfd_put_signed_32 \ | 
|---|
| 83 | bfd_put_32 | 
|---|
| 84 | #define bfd_get_32(abfd, ptr) \ | 
|---|
| 85 | BFD_SEND(abfd, bfd_getx32, (ptr)) | 
|---|
| 86 | #define bfd_get_signed_32(abfd, ptr) \ | 
|---|
| 87 | BFD_SEND(abfd, bfd_getx_signed_32, (ptr)) | 
|---|
| 88 |  | 
|---|
| 89 | #define bfd_put_64(abfd, val, ptr) \ | 
|---|
| 90 | BFD_SEND(abfd, bfd_putx64, ((val), (ptr))) | 
|---|
| 91 | #define bfd_put_signed_64 \ | 
|---|
| 92 | bfd_put_64 | 
|---|
| 93 | #define bfd_get_64(abfd, ptr) \ | 
|---|
| 94 | BFD_SEND(abfd, bfd_getx64, (ptr)) | 
|---|
| 95 | #define bfd_get_signed_64(abfd, ptr) \ | 
|---|
| 96 | BFD_SEND(abfd, bfd_getx_signed_64, (ptr)) | 
|---|
| 97 |  | 
|---|
| 98 | #define bfd_get(bits, abfd, ptr)                               \ | 
|---|
| 99 | ( (bits) ==  8 ? (bfd_vma) bfd_get_8 (abfd, ptr)       \ | 
|---|
| 100 | : (bits) == 16 ? bfd_get_16 (abfd, ptr)        \ | 
|---|
| 101 | : (bits) == 32 ? bfd_get_32 (abfd, ptr)        \ | 
|---|
| 102 | : (bits) == 64 ? bfd_get_64 (abfd, ptr)        \ | 
|---|
| 103 | : (abort (), (bfd_vma) - 1)) | 
|---|
| 104 |  | 
|---|
| 105 | #define bfd_put(bits, abfd, val, ptr)                          \ | 
|---|
| 106 | ( (bits) ==  8 ? bfd_put_8  (abfd, val, ptr)   \ | 
|---|
| 107 | : (bits) == 16 ? bfd_put_16 (abfd, val, ptr)   \ | 
|---|
| 108 | : (bits) == 32 ? bfd_put_32 (abfd, val, ptr)   \ | 
|---|
| 109 | : (bits) == 64 ? bfd_put_64 (abfd, val, ptr)   \ | 
|---|
| 110 | : (abort (), (void) 0)) | 
|---|
| 111 |  | 
|---|
| 112 | `bfd_h_put_size' | 
|---|
| 113 | ................ | 
|---|
| 114 |  | 
|---|
| 115 | *Description* | 
|---|
| 116 | These macros have the same function as their `bfd_get_x' brethren, | 
|---|
| 117 | except that they are used for removing information for the header | 
|---|
| 118 | records of object files. Believe it or not, some object files keep | 
|---|
| 119 | their header records in big endian order and their data in little | 
|---|
| 120 | endian order. | 
|---|
| 121 |  | 
|---|
| 122 | /* Byte swapping macros for file header data.  */ | 
|---|
| 123 |  | 
|---|
| 124 | #define bfd_h_put_8(abfd, val, ptr) \ | 
|---|
| 125 | bfd_put_8 (abfd, val, ptr) | 
|---|
| 126 | #define bfd_h_put_signed_8(abfd, val, ptr) \ | 
|---|
| 127 | bfd_put_8 (abfd, val, ptr) | 
|---|
| 128 | #define bfd_h_get_8(abfd, ptr) \ | 
|---|
| 129 | bfd_get_8 (abfd, ptr) | 
|---|
| 130 | #define bfd_h_get_signed_8(abfd, ptr) \ | 
|---|
| 131 | bfd_get_signed_8 (abfd, ptr) | 
|---|
| 132 |  | 
|---|
| 133 | #define bfd_h_put_16(abfd, val, ptr) \ | 
|---|
| 134 | BFD_SEND (abfd, bfd_h_putx16, (val, ptr)) | 
|---|
| 135 | #define bfd_h_put_signed_16 \ | 
|---|
| 136 | bfd_h_put_16 | 
|---|
| 137 | #define bfd_h_get_16(abfd, ptr) \ | 
|---|
| 138 | BFD_SEND (abfd, bfd_h_getx16, (ptr)) | 
|---|
| 139 | #define bfd_h_get_signed_16(abfd, ptr) \ | 
|---|
| 140 | BFD_SEND (abfd, bfd_h_getx_signed_16, (ptr)) | 
|---|
| 141 |  | 
|---|
| 142 | #define bfd_h_put_32(abfd, val, ptr) \ | 
|---|
| 143 | BFD_SEND (abfd, bfd_h_putx32, (val, ptr)) | 
|---|
| 144 | #define bfd_h_put_signed_32 \ | 
|---|
| 145 | bfd_h_put_32 | 
|---|
| 146 | #define bfd_h_get_32(abfd, ptr) \ | 
|---|
| 147 | BFD_SEND (abfd, bfd_h_getx32, (ptr)) | 
|---|
| 148 | #define bfd_h_get_signed_32(abfd, ptr) \ | 
|---|
| 149 | BFD_SEND (abfd, bfd_h_getx_signed_32, (ptr)) | 
|---|
| 150 |  | 
|---|
| 151 | #define bfd_h_put_64(abfd, val, ptr) \ | 
|---|
| 152 | BFD_SEND (abfd, bfd_h_putx64, (val, ptr)) | 
|---|
| 153 | #define bfd_h_put_signed_64 \ | 
|---|
| 154 | bfd_h_put_64 | 
|---|
| 155 | #define bfd_h_get_64(abfd, ptr) \ | 
|---|
| 156 | BFD_SEND (abfd, bfd_h_getx64, (ptr)) | 
|---|
| 157 | #define bfd_h_get_signed_64(abfd, ptr) \ | 
|---|
| 158 | BFD_SEND (abfd, bfd_h_getx_signed_64, (ptr)) | 
|---|
| 159 |  | 
|---|
| 160 | /* Refinements on the above, which should eventually go away.  Save | 
|---|
| 161 | cluttering the source with (bfd_vma) and (bfd_byte *) casts.  */ | 
|---|
| 162 |  | 
|---|
| 163 | #define H_PUT_64(abfd, val, where) \ | 
|---|
| 164 | bfd_h_put_64 ((abfd), (bfd_vma) (val), (bfd_byte *) (where)) | 
|---|
| 165 |  | 
|---|
| 166 | #define H_PUT_32(abfd, val, where) \ | 
|---|
| 167 | bfd_h_put_32 ((abfd), (bfd_vma) (val), (bfd_byte *) (where)) | 
|---|
| 168 |  | 
|---|
| 169 | #define H_PUT_16(abfd, val, where) \ | 
|---|
| 170 | bfd_h_put_16 ((abfd), (bfd_vma) (val), (bfd_byte *) (where)) | 
|---|
| 171 |  | 
|---|
| 172 | #define H_PUT_8 bfd_h_put_8 | 
|---|
| 173 |  | 
|---|
| 174 | #define H_PUT_S64(abfd, val, where) \ | 
|---|
| 175 | bfd_h_put_signed_64 ((abfd), (bfd_vma) (val), (bfd_byte *) (where)) | 
|---|
| 176 |  | 
|---|
| 177 | #define H_PUT_S32(abfd, val, where) \ | 
|---|
| 178 | bfd_h_put_signed_32 ((abfd), (bfd_vma) (val), (bfd_byte *) (where)) | 
|---|
| 179 |  | 
|---|
| 180 | #define H_PUT_S16(abfd, val, where) \ | 
|---|
| 181 | bfd_h_put_signed_16 ((abfd), (bfd_vma) (val), (bfd_byte *) (where)) | 
|---|
| 182 |  | 
|---|
| 183 | #define H_PUT_S8 bfd_h_put_signed_8 | 
|---|
| 184 |  | 
|---|
| 185 | #define H_GET_64(abfd, where) \ | 
|---|
| 186 | bfd_h_get_64 ((abfd), (bfd_byte *) (where)) | 
|---|
| 187 |  | 
|---|
| 188 | #define H_GET_32(abfd, where) \ | 
|---|
| 189 | bfd_h_get_32 ((abfd), (bfd_byte *) (where)) | 
|---|
| 190 |  | 
|---|
| 191 | #define H_GET_16(abfd, where) \ | 
|---|
| 192 | bfd_h_get_16 ((abfd), (bfd_byte *) (where)) | 
|---|
| 193 |  | 
|---|
| 194 | #define H_GET_8 bfd_h_get_8 | 
|---|
| 195 |  | 
|---|
| 196 | #define H_GET_S64(abfd, where) \ | 
|---|
| 197 | bfd_h_get_signed_64 ((abfd), (bfd_byte *) (where)) | 
|---|
| 198 |  | 
|---|
| 199 | #define H_GET_S32(abfd, where) \ | 
|---|
| 200 | bfd_h_get_signed_32 ((abfd), (bfd_byte *) (where)) | 
|---|
| 201 |  | 
|---|
| 202 | #define H_GET_S16(abfd, where) \ | 
|---|
| 203 | bfd_h_get_signed_16 ((abfd), (bfd_byte *) (where)) | 
|---|
| 204 |  | 
|---|
| 205 | #define H_GET_S8 bfd_h_get_signed_8 | 
|---|
| 206 |  | 
|---|
| 207 | `bfd_log2' | 
|---|
| 208 | .......... | 
|---|
| 209 |  | 
|---|
| 210 | *Synopsis* | 
|---|
| 211 | unsigned int bfd_log2 (bfd_vma x); | 
|---|
| 212 | *Description* | 
|---|
| 213 | Return the log base 2 of the value supplied, rounded up.  E.g., an X of | 
|---|
| 214 | 1025 returns 11.  A X of 0 returns 0. | 
|---|
| 215 |  | 
|---|
| 216 |  | 
|---|
| 217 | File: bfd.info,  Node: File Caching,  Next: Linker Functions,  Prev: Internal,  Up: BFD front end | 
|---|
| 218 |  | 
|---|
| 219 | File caching | 
|---|
| 220 | ============ | 
|---|
| 221 |  | 
|---|
| 222 | The file caching mechanism is embedded within BFD and allows the | 
|---|
| 223 | application to open as many BFDs as it wants without regard to the | 
|---|
| 224 | underlying operating system's file descriptor limit (often as low as 20 | 
|---|
| 225 | open files).  The module in `cache.c' maintains a least recently used | 
|---|
| 226 | list of `BFD_CACHE_MAX_OPEN' files, and exports the name | 
|---|
| 227 | `bfd_cache_lookup', which runs around and makes sure that the required | 
|---|
| 228 | BFD is open. If not, then it chooses a file to close, closes it and | 
|---|
| 229 | opens the one wanted, returning its file handle. | 
|---|
| 230 |  | 
|---|
| 231 | `BFD_CACHE_MAX_OPEN macro' | 
|---|
| 232 | .......................... | 
|---|
| 233 |  | 
|---|
| 234 | *Description* | 
|---|
| 235 | The maximum number of files which the cache will keep open at one time. | 
|---|
| 236 | #define BFD_CACHE_MAX_OPEN 10 | 
|---|
| 237 |  | 
|---|
| 238 | `bfd_last_cache' | 
|---|
| 239 | ................ | 
|---|
| 240 |  | 
|---|
| 241 | *Synopsis* | 
|---|
| 242 | extern bfd *bfd_last_cache; | 
|---|
| 243 | *Description* | 
|---|
| 244 | Zero, or a pointer to the topmost BFD on the chain.  This is used by | 
|---|
| 245 | the `bfd_cache_lookup' macro in `libbfd.h' to determine when it can | 
|---|
| 246 | avoid a function call. | 
|---|
| 247 |  | 
|---|
| 248 | `bfd_cache_lookup' | 
|---|
| 249 | .................. | 
|---|
| 250 |  | 
|---|
| 251 | *Description* | 
|---|
| 252 | Check to see if the required BFD is the same as the last one looked up. | 
|---|
| 253 | If so, then it can use the stream in the BFD with impunity, since it | 
|---|
| 254 | can't have changed since the last lookup; otherwise, it has to perform | 
|---|
| 255 | the complicated lookup function. | 
|---|
| 256 | #define bfd_cache_lookup(x) \ | 
|---|
| 257 | ((x)==bfd_last_cache? \ | 
|---|
| 258 | (FILE*) (bfd_last_cache->iostream): \ | 
|---|
| 259 | bfd_cache_lookup_worker(x)) | 
|---|
| 260 |  | 
|---|
| 261 | `bfd_cache_init' | 
|---|
| 262 | ................ | 
|---|
| 263 |  | 
|---|
| 264 | *Synopsis* | 
|---|
| 265 | bfd_boolean bfd_cache_init (bfd *abfd); | 
|---|
| 266 | *Description* | 
|---|
| 267 | Add a newly opened BFD to the cache. | 
|---|
| 268 |  | 
|---|
| 269 | `bfd_cache_close' | 
|---|
| 270 | ................. | 
|---|
| 271 |  | 
|---|
| 272 | *Synopsis* | 
|---|
| 273 | bfd_boolean bfd_cache_close (bfd *abfd); | 
|---|
| 274 | *Description* | 
|---|
| 275 | Remove the BFD ABFD from the cache. If the attached file is open, then | 
|---|
| 276 | close it too. | 
|---|
| 277 |  | 
|---|
| 278 | *Returns* | 
|---|
| 279 | `FALSE' is returned if closing the file fails, `TRUE' is returned if | 
|---|
| 280 | all is well. | 
|---|
| 281 |  | 
|---|
| 282 | `bfd_open_file' | 
|---|
| 283 | ............... | 
|---|
| 284 |  | 
|---|
| 285 | *Synopsis* | 
|---|
| 286 | FILE* bfd_open_file(bfd *abfd); | 
|---|
| 287 | *Description* | 
|---|
| 288 | Call the OS to open a file for ABFD.  Return the `FILE *' (possibly | 
|---|
| 289 | `NULL') that results from this operation.  Set up the BFD so that | 
|---|
| 290 | future accesses know the file is open. If the `FILE *' returned is | 
|---|
| 291 | `NULL', then it won't have been put in the cache, so it won't have to | 
|---|
| 292 | be removed from it. | 
|---|
| 293 |  | 
|---|
| 294 | `bfd_cache_lookup_worker' | 
|---|
| 295 | ......................... | 
|---|
| 296 |  | 
|---|
| 297 | *Synopsis* | 
|---|
| 298 | FILE *bfd_cache_lookup_worker(bfd *abfd); | 
|---|
| 299 | *Description* | 
|---|
| 300 | Called when the macro `bfd_cache_lookup' fails to find a quick answer. | 
|---|
| 301 | Find a file descriptor for ABFD.  If necessary, it open it.  If there | 
|---|
| 302 | are already more than `BFD_CACHE_MAX_OPEN' files open, it tries to | 
|---|
| 303 | close one first, to avoid running out of file descriptors. | 
|---|
| 304 |  | 
|---|
| 305 |  | 
|---|
| 306 | File: bfd.info,  Node: Linker Functions,  Next: Hash Tables,  Prev: File Caching,  Up: BFD front end | 
|---|
| 307 |  | 
|---|
| 308 | Linker Functions | 
|---|
| 309 | ================ | 
|---|
| 310 |  | 
|---|
| 311 | The linker uses three special entry points in the BFD target vector. | 
|---|
| 312 | It is not necessary to write special routines for these entry points | 
|---|
| 313 | when creating a new BFD back end, since generic versions are provided. | 
|---|
| 314 | However, writing them can speed up linking and make it use | 
|---|
| 315 | significantly less runtime memory. | 
|---|
| 316 |  | 
|---|
| 317 | The first routine creates a hash table used by the other routines. | 
|---|
| 318 | The second routine adds the symbols from an object file to the hash | 
|---|
| 319 | table.  The third routine takes all the object files and links them | 
|---|
| 320 | together to create the output file.  These routines are designed so | 
|---|
| 321 | that the linker proper does not need to know anything about the symbols | 
|---|
| 322 | in the object files that it is linking.  The linker merely arranges the | 
|---|
| 323 | sections as directed by the linker script and lets BFD handle the | 
|---|
| 324 | details of symbols and relocs. | 
|---|
| 325 |  | 
|---|
| 326 | The second routine and third routines are passed a pointer to a | 
|---|
| 327 | `struct bfd_link_info' structure (defined in `bfdlink.h') which holds | 
|---|
| 328 | information relevant to the link, including the linker hash table | 
|---|
| 329 | (which was created by the first routine) and a set of callback | 
|---|
| 330 | functions to the linker proper. | 
|---|
| 331 |  | 
|---|
| 332 | The generic linker routines are in `linker.c', and use the header | 
|---|
| 333 | file `genlink.h'.  As of this writing, the only back ends which have | 
|---|
| 334 | implemented versions of these routines are a.out (in `aoutx.h') and | 
|---|
| 335 | ECOFF (in `ecoff.c').  The a.out routines are used as examples | 
|---|
| 336 | throughout this section. | 
|---|
| 337 |  | 
|---|
| 338 | * Menu: | 
|---|
| 339 |  | 
|---|
| 340 | * Creating a Linker Hash Table:: | 
|---|
| 341 | * Adding Symbols to the Hash Table:: | 
|---|
| 342 | * Performing the Final Link:: | 
|---|
| 343 |  | 
|---|
| 344 |  | 
|---|
| 345 | File: bfd.info,  Node: Creating a Linker Hash Table,  Next: Adding Symbols to the Hash Table,  Prev: Linker Functions,  Up: Linker Functions | 
|---|
| 346 |  | 
|---|
| 347 | Creating a linker hash table | 
|---|
| 348 | ---------------------------- | 
|---|
| 349 |  | 
|---|
| 350 | The linker routines must create a hash table, which must be derived | 
|---|
| 351 | from `struct bfd_link_hash_table' described in `bfdlink.c'.  *Note Hash | 
|---|
| 352 | Tables::, for information on how to create a derived hash table.  This | 
|---|
| 353 | entry point is called using the target vector of the linker output file. | 
|---|
| 354 |  | 
|---|
| 355 | The `_bfd_link_hash_table_create' entry point must allocate and | 
|---|
| 356 | initialize an instance of the desired hash table.  If the back end does | 
|---|
| 357 | not require any additional information to be stored with the entries in | 
|---|
| 358 | the hash table, the entry point may simply create a `struct | 
|---|
| 359 | bfd_link_hash_table'.  Most likely, however, some additional | 
|---|
| 360 | information will be needed. | 
|---|
| 361 |  | 
|---|
| 362 | For example, with each entry in the hash table the a.out linker | 
|---|
| 363 | keeps the index the symbol has in the final output file (this index | 
|---|
| 364 | number is used so that when doing a relocateable link the symbol index | 
|---|
| 365 | used in the output file can be quickly filled in when copying over a | 
|---|
| 366 | reloc).  The a.out linker code defines the required structures and | 
|---|
| 367 | functions for a hash table derived from `struct bfd_link_hash_table'. | 
|---|
| 368 | The a.out linker hash table is created by the function | 
|---|
| 369 | `NAME(aout,link_hash_table_create)'; it simply allocates space for the | 
|---|
| 370 | hash table, initializes it, and returns a pointer to it. | 
|---|
| 371 |  | 
|---|
| 372 | When writing the linker routines for a new back end, you will | 
|---|
| 373 | generally not know exactly which fields will be required until you have | 
|---|
| 374 | finished.  You should simply create a new hash table which defines no | 
|---|
| 375 | additional fields, and then simply add fields as they become necessary. | 
|---|
| 376 |  | 
|---|
| 377 |  | 
|---|
| 378 | File: bfd.info,  Node: Adding Symbols to the Hash Table,  Next: Performing the Final Link,  Prev: Creating a Linker Hash Table,  Up: Linker Functions | 
|---|
| 379 |  | 
|---|
| 380 | Adding symbols to the hash table | 
|---|
| 381 | -------------------------------- | 
|---|
| 382 |  | 
|---|
| 383 | The linker proper will call the `_bfd_link_add_symbols' entry point | 
|---|
| 384 | for each object file or archive which is to be linked (typically these | 
|---|
| 385 | are the files named on the command line, but some may also come from | 
|---|
| 386 | the linker script).  The entry point is responsible for examining the | 
|---|
| 387 | file.  For an object file, BFD must add any relevant symbol information | 
|---|
| 388 | to the hash table.  For an archive, BFD must determine which elements | 
|---|
| 389 | of the archive should be used and adding them to the link. | 
|---|
| 390 |  | 
|---|
| 391 | The a.out version of this entry point is | 
|---|
| 392 | `NAME(aout,link_add_symbols)'. | 
|---|
| 393 |  | 
|---|
| 394 | * Menu: | 
|---|
| 395 |  | 
|---|
| 396 | * Differing file formats:: | 
|---|
| 397 | * Adding symbols from an object file:: | 
|---|
| 398 | * Adding symbols from an archive:: | 
|---|
| 399 |  | 
|---|
| 400 |  | 
|---|
| 401 | File: bfd.info,  Node: Differing file formats,  Next: Adding symbols from an object file,  Prev: Adding Symbols to the Hash Table,  Up: Adding Symbols to the Hash Table | 
|---|
| 402 |  | 
|---|
| 403 | Differing file formats | 
|---|
| 404 | ...................... | 
|---|
| 405 |  | 
|---|
| 406 | Normally all the files involved in a link will be of the same | 
|---|
| 407 | format, but it is also possible to link together different format | 
|---|
| 408 | object files, and the back end must support that.  The | 
|---|
| 409 | `_bfd_link_add_symbols' entry point is called via the target vector of | 
|---|
| 410 | the file to be added.  This has an important consequence: the function | 
|---|
| 411 | may not assume that the hash table is the type created by the | 
|---|
| 412 | corresponding `_bfd_link_hash_table_create' vector.  All the | 
|---|
| 413 | `_bfd_link_add_symbols' function can assume about the hash table is | 
|---|
| 414 | that it is derived from `struct bfd_link_hash_table'. | 
|---|
| 415 |  | 
|---|
| 416 | Sometimes the `_bfd_link_add_symbols' function must store some | 
|---|
| 417 | information in the hash table entry to be used by the `_bfd_final_link' | 
|---|
| 418 | function.  In such a case the `creator' field of the hash table must be | 
|---|
| 419 | checked to make sure that the hash table was created by an object file | 
|---|
| 420 | of the same format. | 
|---|
| 421 |  | 
|---|
| 422 | The `_bfd_final_link' routine must be prepared to handle a hash | 
|---|
| 423 | entry without any extra information added by the | 
|---|
| 424 | `_bfd_link_add_symbols' function.  A hash entry without extra | 
|---|
| 425 | information will also occur when the linker script directs the linker | 
|---|
| 426 | to create a symbol.  Note that, regardless of how a hash table entry is | 
|---|
| 427 | added, all the fields will be initialized to some sort of null value by | 
|---|
| 428 | the hash table entry initialization function. | 
|---|
| 429 |  | 
|---|
| 430 | See `ecoff_link_add_externals' for an example of how to check the | 
|---|
| 431 | `creator' field before saving information (in this case, the ECOFF | 
|---|
| 432 | external symbol debugging information) in a hash table entry. | 
|---|
| 433 |  | 
|---|
| 434 |  | 
|---|
| 435 | File: bfd.info,  Node: Adding symbols from an object file,  Next: Adding symbols from an archive,  Prev: Differing file formats,  Up: Adding Symbols to the Hash Table | 
|---|
| 436 |  | 
|---|
| 437 | Adding symbols from an object file | 
|---|
| 438 | .................................. | 
|---|
| 439 |  | 
|---|
| 440 | When the `_bfd_link_add_symbols' routine is passed an object file, | 
|---|
| 441 | it must add all externally visible symbols in that object file to the | 
|---|
| 442 | hash table.  The actual work of adding the symbol to the hash table is | 
|---|
| 443 | normally handled by the function `_bfd_generic_link_add_one_symbol'. | 
|---|
| 444 | The `_bfd_link_add_symbols' routine is responsible for reading all the | 
|---|
| 445 | symbols from the object file and passing the correct information to | 
|---|
| 446 | `_bfd_generic_link_add_one_symbol'. | 
|---|
| 447 |  | 
|---|
| 448 | The `_bfd_link_add_symbols' routine should not use | 
|---|
| 449 | `bfd_canonicalize_symtab' to read the symbols.  The point of providing | 
|---|
| 450 | this routine is to avoid the overhead of converting the symbols into | 
|---|
| 451 | generic `asymbol' structures. | 
|---|
| 452 |  | 
|---|
| 453 | `_bfd_generic_link_add_one_symbol' handles the details of combining | 
|---|
| 454 | common symbols, warning about multiple definitions, and so forth.  It | 
|---|
| 455 | takes arguments which describe the symbol to add, notably symbol flags, | 
|---|
| 456 | a section, and an offset.  The symbol flags include such things as | 
|---|
| 457 | `BSF_WEAK' or `BSF_INDIRECT'.  The section is a section in the object | 
|---|
| 458 | file, or something like `bfd_und_section_ptr' for an undefined symbol | 
|---|
| 459 | or `bfd_com_section_ptr' for a common symbol. | 
|---|
| 460 |  | 
|---|
| 461 | If the `_bfd_final_link' routine is also going to need to read the | 
|---|
| 462 | symbol information, the `_bfd_link_add_symbols' routine should save it | 
|---|
| 463 | somewhere attached to the object file BFD.  However, the information | 
|---|
| 464 | should only be saved if the `keep_memory' field of the `info' argument | 
|---|
| 465 | is TRUE, so that the `-no-keep-memory' linker switch is effective. | 
|---|
| 466 |  | 
|---|
| 467 | The a.out function which adds symbols from an object file is | 
|---|
| 468 | `aout_link_add_object_symbols', and most of the interesting work is in | 
|---|
| 469 | `aout_link_add_symbols'.  The latter saves pointers to the hash tables | 
|---|
| 470 | entries created by `_bfd_generic_link_add_one_symbol' indexed by symbol | 
|---|
| 471 | number, so that the `_bfd_final_link' routine does not have to call the | 
|---|
| 472 | hash table lookup routine to locate the entry. | 
|---|
| 473 |  | 
|---|
| 474 |  | 
|---|
| 475 | File: bfd.info,  Node: Adding symbols from an archive,  Prev: Adding symbols from an object file,  Up: Adding Symbols to the Hash Table | 
|---|
| 476 |  | 
|---|
| 477 | Adding symbols from an archive | 
|---|
| 478 | .............................. | 
|---|
| 479 |  | 
|---|
| 480 | When the `_bfd_link_add_symbols' routine is passed an archive, it | 
|---|
| 481 | must look through the symbols defined by the archive and decide which | 
|---|
| 482 | elements of the archive should be included in the link.  For each such | 
|---|
| 483 | element it must call the `add_archive_element' linker callback, and it | 
|---|
| 484 | must add the symbols from the object file to the linker hash table. | 
|---|
| 485 |  | 
|---|
| 486 | In most cases the work of looking through the symbols in the archive | 
|---|
| 487 | should be done by the `_bfd_generic_link_add_archive_symbols' function. | 
|---|
| 488 | This function builds a hash table from the archive symbol table and | 
|---|
| 489 | looks through the list of undefined symbols to see which elements | 
|---|
| 490 | should be included.  `_bfd_generic_link_add_archive_symbols' is passed | 
|---|
| 491 | a function to call to make the final decision about adding an archive | 
|---|
| 492 | element to the link and to do the actual work of adding the symbols to | 
|---|
| 493 | the linker hash table. | 
|---|
| 494 |  | 
|---|
| 495 | The function passed to `_bfd_generic_link_add_archive_symbols' must | 
|---|
| 496 | read the symbols of the archive element and decide whether the archive | 
|---|
| 497 | element should be included in the link.  If the element is to be | 
|---|
| 498 | included, the `add_archive_element' linker callback routine must be | 
|---|
| 499 | called with the element as an argument, and the elements symbols must | 
|---|
| 500 | be added to the linker hash table just as though the element had itself | 
|---|
| 501 | been passed to the `_bfd_link_add_symbols' function. | 
|---|
| 502 |  | 
|---|
| 503 | When the a.out `_bfd_link_add_symbols' function receives an archive, | 
|---|
| 504 | it calls `_bfd_generic_link_add_archive_symbols' passing | 
|---|
| 505 | `aout_link_check_archive_element' as the function argument. | 
|---|
| 506 | `aout_link_check_archive_element' calls `aout_link_check_ar_symbols'. | 
|---|
| 507 | If the latter decides to add the element (an element is only added if | 
|---|
| 508 | it provides a real, non-common, definition for a previously undefined | 
|---|
| 509 | or common symbol) it calls the `add_archive_element' callback and then | 
|---|
| 510 | `aout_link_check_archive_element' calls `aout_link_add_symbols' to | 
|---|
| 511 | actually add the symbols to the linker hash table. | 
|---|
| 512 |  | 
|---|
| 513 | The ECOFF back end is unusual in that it does not normally call | 
|---|
| 514 | `_bfd_generic_link_add_archive_symbols', because ECOFF archives already | 
|---|
| 515 | contain a hash table of symbols.  The ECOFF back end searches the | 
|---|
| 516 | archive itself to avoid the overhead of creating a new hash table. | 
|---|
| 517 |  | 
|---|
| 518 |  | 
|---|
| 519 | File: bfd.info,  Node: Performing the Final Link,  Prev: Adding Symbols to the Hash Table,  Up: Linker Functions | 
|---|
| 520 |  | 
|---|
| 521 | Performing the final link | 
|---|
| 522 | ------------------------- | 
|---|
| 523 |  | 
|---|
| 524 | When all the input files have been processed, the linker calls the | 
|---|
| 525 | `_bfd_final_link' entry point of the output BFD.  This routine is | 
|---|
| 526 | responsible for producing the final output file, which has several | 
|---|
| 527 | aspects.  It must relocate the contents of the input sections and copy | 
|---|
| 528 | the data into the output sections.  It must build an output symbol | 
|---|
| 529 | table including any local symbols from the input files and the global | 
|---|
| 530 | symbols from the hash table.  When producing relocateable output, it | 
|---|
| 531 | must modify the input relocs and write them into the output file. | 
|---|
| 532 | There may also be object format dependent work to be done. | 
|---|
| 533 |  | 
|---|
| 534 | The linker will also call the `write_object_contents' entry point | 
|---|
| 535 | when the BFD is closed.  The two entry points must work together in | 
|---|
| 536 | order to produce the correct output file. | 
|---|
| 537 |  | 
|---|
| 538 | The details of how this works are inevitably dependent upon the | 
|---|
| 539 | specific object file format.  The a.out `_bfd_final_link' routine is | 
|---|
| 540 | `NAME(aout,final_link)'. | 
|---|
| 541 |  | 
|---|
| 542 | * Menu: | 
|---|
| 543 |  | 
|---|
| 544 | * Information provided by the linker:: | 
|---|
| 545 | * Relocating the section contents:: | 
|---|
| 546 | * Writing the symbol table:: | 
|---|
| 547 |  | 
|---|
| 548 |  | 
|---|
| 549 | File: bfd.info,  Node: Information provided by the linker,  Next: Relocating the section contents,  Prev: Performing the Final Link,  Up: Performing the Final Link | 
|---|
| 550 |  | 
|---|
| 551 | Information provided by the linker | 
|---|
| 552 | .................................. | 
|---|
| 553 |  | 
|---|
| 554 | Before the linker calls the `_bfd_final_link' entry point, it sets | 
|---|
| 555 | up some data structures for the function to use. | 
|---|
| 556 |  | 
|---|
| 557 | The `input_bfds' field of the `bfd_link_info' structure will point | 
|---|
| 558 | to a list of all the input files included in the link.  These files are | 
|---|
| 559 | linked through the `link_next' field of the `bfd' structure. | 
|---|
| 560 |  | 
|---|
| 561 | Each section in the output file will have a list of `link_order' | 
|---|
| 562 | structures attached to the `link_order_head' field (the `link_order' | 
|---|
| 563 | structure is defined in `bfdlink.h').  These structures describe how to | 
|---|
| 564 | create the contents of the output section in terms of the contents of | 
|---|
| 565 | various input sections, fill constants, and, eventually, other types of | 
|---|
| 566 | information.  They also describe relocs that must be created by the BFD | 
|---|
| 567 | backend, but do not correspond to any input file; this is used to | 
|---|
| 568 | support -Ur, which builds constructors while generating a relocateable | 
|---|
| 569 | object file. | 
|---|
| 570 |  | 
|---|
| 571 |  | 
|---|
| 572 | File: bfd.info,  Node: Relocating the section contents,  Next: Writing the symbol table,  Prev: Information provided by the linker,  Up: Performing the Final Link | 
|---|
| 573 |  | 
|---|
| 574 | Relocating the section contents | 
|---|
| 575 | ............................... | 
|---|
| 576 |  | 
|---|
| 577 | The `_bfd_final_link' function should look through the `link_order' | 
|---|
| 578 | structures attached to each section of the output file.  Each | 
|---|
| 579 | `link_order' structure should either be handled specially, or it should | 
|---|
| 580 | be passed to the function `_bfd_default_link_order' which will do the | 
|---|
| 581 | right thing (`_bfd_default_link_order' is defined in `linker.c'). | 
|---|
| 582 |  | 
|---|
| 583 | For efficiency, a `link_order' of type `bfd_indirect_link_order' | 
|---|
| 584 | whose associated section belongs to a BFD of the same format as the | 
|---|
| 585 | output BFD must be handled specially.  This type of `link_order' | 
|---|
| 586 | describes part of an output section in terms of a section belonging to | 
|---|
| 587 | one of the input files.  The `_bfd_final_link' function should read the | 
|---|
| 588 | contents of the section and any associated relocs, apply the relocs to | 
|---|
| 589 | the section contents, and write out the modified section contents.  If | 
|---|
| 590 | performing a relocateable link, the relocs themselves must also be | 
|---|
| 591 | modified and written out. | 
|---|
| 592 |  | 
|---|
| 593 | The functions `_bfd_relocate_contents' and | 
|---|
| 594 | `_bfd_final_link_relocate' provide some general support for performing | 
|---|
| 595 | the actual relocations, notably overflow checking.  Their arguments | 
|---|
| 596 | include information about the symbol the relocation is against and a | 
|---|
| 597 | `reloc_howto_type' argument which describes the relocation to perform. | 
|---|
| 598 | These functions are defined in `reloc.c'. | 
|---|
| 599 |  | 
|---|
| 600 | The a.out function which handles reading, relocating, and writing | 
|---|
| 601 | section contents is `aout_link_input_section'.  The actual relocation | 
|---|
| 602 | is done in `aout_link_input_section_std' and | 
|---|
| 603 | `aout_link_input_section_ext'. | 
|---|
| 604 |  | 
|---|
| 605 |  | 
|---|
| 606 | File: bfd.info,  Node: Writing the symbol table,  Prev: Relocating the section contents,  Up: Performing the Final Link | 
|---|
| 607 |  | 
|---|
| 608 | Writing the symbol table | 
|---|
| 609 | ........................ | 
|---|
| 610 |  | 
|---|
| 611 | The `_bfd_final_link' function must gather all the symbols in the | 
|---|
| 612 | input files and write them out.  It must also write out all the symbols | 
|---|
| 613 | in the global hash table.  This must be controlled by the `strip' and | 
|---|
| 614 | `discard' fields of the `bfd_link_info' structure. | 
|---|
| 615 |  | 
|---|
| 616 | The local symbols of the input files will not have been entered into | 
|---|
| 617 | the linker hash table.  The `_bfd_final_link' routine must consider | 
|---|
| 618 | each input file and include the symbols in the output file.  It may be | 
|---|
| 619 | convenient to do this when looking through the `link_order' structures, | 
|---|
| 620 | or it may be done by stepping through the `input_bfds' list. | 
|---|
| 621 |  | 
|---|
| 622 | The `_bfd_final_link' routine must also traverse the global hash | 
|---|
| 623 | table to gather all the externally visible symbols.  It is possible | 
|---|
| 624 | that most of the externally visible symbols may be written out when | 
|---|
| 625 | considering the symbols of each input file, but it is still necessary | 
|---|
| 626 | to traverse the hash table since the linker script may have defined | 
|---|
| 627 | some symbols that are not in any of the input files. | 
|---|
| 628 |  | 
|---|
| 629 | The `strip' field of the `bfd_link_info' structure controls which | 
|---|
| 630 | symbols are written out.  The possible values are listed in | 
|---|
| 631 | `bfdlink.h'.  If the value is `strip_some', then the `keep_hash' field | 
|---|
| 632 | of the `bfd_link_info' structure is a hash table of symbols to keep; | 
|---|
| 633 | each symbol should be looked up in this hash table, and only symbols | 
|---|
| 634 | which are present should be included in the output file. | 
|---|
| 635 |  | 
|---|
| 636 | If the `strip' field of the `bfd_link_info' structure permits local | 
|---|
| 637 | symbols to be written out, the `discard' field is used to further | 
|---|
| 638 | controls which local symbols are included in the output file.  If the | 
|---|
| 639 | value is `discard_l', then all local symbols which begin with a certain | 
|---|
| 640 | prefix are discarded; this is controlled by the | 
|---|
| 641 | `bfd_is_local_label_name' entry point. | 
|---|
| 642 |  | 
|---|
| 643 | The a.out backend handles symbols by calling | 
|---|
| 644 | `aout_link_write_symbols' on each input BFD and then traversing the | 
|---|
| 645 | global hash table with the function `aout_link_write_other_symbol'.  It | 
|---|
| 646 | builds a string table while writing out the symbols, which is written | 
|---|
| 647 | to the output file at the end of `NAME(aout,final_link)'. | 
|---|
| 648 |  | 
|---|
| 649 | `bfd_link_split_section' | 
|---|
| 650 | ........................ | 
|---|
| 651 |  | 
|---|
| 652 | *Synopsis* | 
|---|
| 653 | bfd_boolean bfd_link_split_section(bfd *abfd, asection *sec); | 
|---|
| 654 | *Description* | 
|---|
| 655 | Return nonzero if SEC should be split during a reloceatable or final | 
|---|
| 656 | link. | 
|---|
| 657 | #define bfd_link_split_section(abfd, sec) \ | 
|---|
| 658 | BFD_SEND (abfd, _bfd_link_split_section, (abfd, sec)) | 
|---|
| 659 |  | 
|---|
| 660 |  | 
|---|
| 661 | File: bfd.info,  Node: Hash Tables,  Prev: Linker Functions,  Up: BFD front end | 
|---|
| 662 |  | 
|---|
| 663 | Hash Tables | 
|---|
| 664 | =========== | 
|---|
| 665 |  | 
|---|
| 666 | BFD provides a simple set of hash table functions.  Routines are | 
|---|
| 667 | provided to initialize a hash table, to free a hash table, to look up a | 
|---|
| 668 | string in a hash table and optionally create an entry for it, and to | 
|---|
| 669 | traverse a hash table.  There is currently no routine to delete an | 
|---|
| 670 | string from a hash table. | 
|---|
| 671 |  | 
|---|
| 672 | The basic hash table does not permit any data to be stored with a | 
|---|
| 673 | string.  However, a hash table is designed to present a base class from | 
|---|
| 674 | which other types of hash tables may be derived.  These derived types | 
|---|
| 675 | may store additional information with the string.  Hash tables were | 
|---|
| 676 | implemented in this way, rather than simply providing a data pointer in | 
|---|
| 677 | a hash table entry, because they were designed for use by the linker | 
|---|
| 678 | back ends.  The linker may create thousands of hash table entries, and | 
|---|
| 679 | the overhead of allocating private data and storing and following | 
|---|
| 680 | pointers becomes noticeable. | 
|---|
| 681 |  | 
|---|
| 682 | The basic hash table code is in `hash.c'. | 
|---|
| 683 |  | 
|---|
| 684 | * Menu: | 
|---|
| 685 |  | 
|---|
| 686 | * Creating and Freeing a Hash Table:: | 
|---|
| 687 | * Looking Up or Entering a String:: | 
|---|
| 688 | * Traversing a Hash Table:: | 
|---|
| 689 | * Deriving a New Hash Table Type:: | 
|---|
| 690 |  | 
|---|
| 691 |  | 
|---|
| 692 | File: bfd.info,  Node: Creating and Freeing a Hash Table,  Next: Looking Up or Entering a String,  Prev: Hash Tables,  Up: Hash Tables | 
|---|
| 693 |  | 
|---|
| 694 | Creating and freeing a hash table | 
|---|
| 695 | --------------------------------- | 
|---|
| 696 |  | 
|---|
| 697 | To create a hash table, create an instance of a `struct | 
|---|
| 698 | bfd_hash_table' (defined in `bfd.h') and call `bfd_hash_table_init' (if | 
|---|
| 699 | you know approximately how many entries you will need, the function | 
|---|
| 700 | `bfd_hash_table_init_n', which takes a SIZE argument, may be used). | 
|---|
| 701 | `bfd_hash_table_init' returns `FALSE' if some sort of error occurs. | 
|---|
| 702 |  | 
|---|
| 703 | The function `bfd_hash_table_init' take as an argument a function to | 
|---|
| 704 | use to create new entries.  For a basic hash table, use the function | 
|---|
| 705 | `bfd_hash_newfunc'.  *Note Deriving a New Hash Table Type::, for why | 
|---|
| 706 | you would want to use a different value for this argument. | 
|---|
| 707 |  | 
|---|
| 708 | `bfd_hash_table_init' will create an objalloc which will be used to | 
|---|
| 709 | allocate new entries.  You may allocate memory on this objalloc using | 
|---|
| 710 | `bfd_hash_allocate'. | 
|---|
| 711 |  | 
|---|
| 712 | Use `bfd_hash_table_free' to free up all the memory that has been | 
|---|
| 713 | allocated for a hash table.  This will not free up the `struct | 
|---|
| 714 | bfd_hash_table' itself, which you must provide. | 
|---|
| 715 |  | 
|---|
| 716 |  | 
|---|
| 717 | File: bfd.info,  Node: Looking Up or Entering a String,  Next: Traversing a Hash Table,  Prev: Creating and Freeing a Hash Table,  Up: Hash Tables | 
|---|
| 718 |  | 
|---|
| 719 | Looking up or entering a string | 
|---|
| 720 | ------------------------------- | 
|---|
| 721 |  | 
|---|
| 722 | The function `bfd_hash_lookup' is used both to look up a string in | 
|---|
| 723 | the hash table and to create a new entry. | 
|---|
| 724 |  | 
|---|
| 725 | If the CREATE argument is `FALSE', `bfd_hash_lookup' will look up a | 
|---|
| 726 | string.  If the string is found, it will returns a pointer to a `struct | 
|---|
| 727 | bfd_hash_entry'.  If the string is not found in the table | 
|---|
| 728 | `bfd_hash_lookup' will return `NULL'.  You should not modify any of the | 
|---|
| 729 | fields in the returns `struct bfd_hash_entry'. | 
|---|
| 730 |  | 
|---|
| 731 | If the CREATE argument is `TRUE', the string will be entered into | 
|---|
| 732 | the hash table if it is not already there.  Either way a pointer to a | 
|---|
| 733 | `struct bfd_hash_entry' will be returned, either to the existing | 
|---|
| 734 | structure or to a newly created one.  In this case, a `NULL' return | 
|---|
| 735 | means that an error occurred. | 
|---|
| 736 |  | 
|---|
| 737 | If the CREATE argument is `TRUE', and a new entry is created, the | 
|---|
| 738 | COPY argument is used to decide whether to copy the string onto the | 
|---|
| 739 | hash table objalloc or not.  If COPY is passed as `FALSE', you must be | 
|---|
| 740 | careful not to deallocate or modify the string as long as the hash table | 
|---|
| 741 | exists. | 
|---|
| 742 |  | 
|---|
| 743 |  | 
|---|
| 744 | File: bfd.info,  Node: Traversing a Hash Table,  Next: Deriving a New Hash Table Type,  Prev: Looking Up or Entering a String,  Up: Hash Tables | 
|---|
| 745 |  | 
|---|
| 746 | Traversing a hash table | 
|---|
| 747 | ----------------------- | 
|---|
| 748 |  | 
|---|
| 749 | The function `bfd_hash_traverse' may be used to traverse a hash | 
|---|
| 750 | table, calling a function on each element.  The traversal is done in a | 
|---|
| 751 | random order. | 
|---|
| 752 |  | 
|---|
| 753 | `bfd_hash_traverse' takes as arguments a function and a generic | 
|---|
| 754 | `void *' pointer.  The function is called with a hash table entry (a | 
|---|
| 755 | `struct bfd_hash_entry *') and the generic pointer passed to | 
|---|
| 756 | `bfd_hash_traverse'.  The function must return a `boolean' value, which | 
|---|
| 757 | indicates whether to continue traversing the hash table.  If the | 
|---|
| 758 | function returns `FALSE', `bfd_hash_traverse' will stop the traversal | 
|---|
| 759 | and return immediately. | 
|---|
| 760 |  | 
|---|
| 761 |  | 
|---|
| 762 | File: bfd.info,  Node: Deriving a New Hash Table Type,  Prev: Traversing a Hash Table,  Up: Hash Tables | 
|---|
| 763 |  | 
|---|
| 764 | Deriving a new hash table type | 
|---|
| 765 | ------------------------------ | 
|---|
| 766 |  | 
|---|
| 767 | Many uses of hash tables want to store additional information which | 
|---|
| 768 | each entry in the hash table.  Some also find it convenient to store | 
|---|
| 769 | additional information with the hash table itself.  This may be done | 
|---|
| 770 | using a derived hash table. | 
|---|
| 771 |  | 
|---|
| 772 | Since C is not an object oriented language, creating a derived hash | 
|---|
| 773 | table requires sticking together some boilerplate routines with a few | 
|---|
| 774 | differences specific to the type of hash table you want to create. | 
|---|
| 775 |  | 
|---|
| 776 | An example of a derived hash table is the linker hash table.  The | 
|---|
| 777 | structures for this are defined in `bfdlink.h'.  The functions are in | 
|---|
| 778 | `linker.c'. | 
|---|
| 779 |  | 
|---|
| 780 | You may also derive a hash table from an already derived hash table. | 
|---|
| 781 | For example, the a.out linker backend code uses a hash table derived | 
|---|
| 782 | from the linker hash table. | 
|---|
| 783 |  | 
|---|
| 784 | * Menu: | 
|---|
| 785 |  | 
|---|
| 786 | * Define the Derived Structures:: | 
|---|
| 787 | * Write the Derived Creation Routine:: | 
|---|
| 788 | * Write Other Derived Routines:: | 
|---|
| 789 |  | 
|---|
| 790 |  | 
|---|
| 791 | File: bfd.info,  Node: Define the Derived Structures,  Next: Write the Derived Creation Routine,  Prev: Deriving a New Hash Table Type,  Up: Deriving a New Hash Table Type | 
|---|
| 792 |  | 
|---|
| 793 | Define the derived structures | 
|---|
| 794 | ............................. | 
|---|
| 795 |  | 
|---|
| 796 | You must define a structure for an entry in the hash table, and a | 
|---|
| 797 | structure for the hash table itself. | 
|---|
| 798 |  | 
|---|
| 799 | The first field in the structure for an entry in the hash table must | 
|---|
| 800 | be of the type used for an entry in the hash table you are deriving | 
|---|
| 801 | from.  If you are deriving from a basic hash table this is `struct | 
|---|
| 802 | bfd_hash_entry', which is defined in `bfd.h'.  The first field in the | 
|---|
| 803 | structure for the hash table itself must be of the type of the hash | 
|---|
| 804 | table you are deriving from itself.  If you are deriving from a basic | 
|---|
| 805 | hash table, this is `struct bfd_hash_table'. | 
|---|
| 806 |  | 
|---|
| 807 | For example, the linker hash table defines `struct | 
|---|
| 808 | bfd_link_hash_entry' (in `bfdlink.h').  The first field, `root', is of | 
|---|
| 809 | type `struct bfd_hash_entry'.  Similarly, the first field in `struct | 
|---|
| 810 | bfd_link_hash_table', `table', is of type `struct bfd_hash_table'. | 
|---|
| 811 |  | 
|---|
| 812 |  | 
|---|
| 813 | File: bfd.info,  Node: Write the Derived Creation Routine,  Next: Write Other Derived Routines,  Prev: Define the Derived Structures,  Up: Deriving a New Hash Table Type | 
|---|
| 814 |  | 
|---|
| 815 | Write the derived creation routine | 
|---|
| 816 | .................................. | 
|---|
| 817 |  | 
|---|
| 818 | You must write a routine which will create and initialize an entry | 
|---|
| 819 | in the hash table.  This routine is passed as the function argument to | 
|---|
| 820 | `bfd_hash_table_init'. | 
|---|
| 821 |  | 
|---|
| 822 | In order to permit other hash tables to be derived from the hash | 
|---|
| 823 | table you are creating, this routine must be written in a standard way. | 
|---|
| 824 |  | 
|---|
| 825 | The first argument to the creation routine is a pointer to a hash | 
|---|
| 826 | table entry.  This may be `NULL', in which case the routine should | 
|---|
| 827 | allocate the right amount of space.  Otherwise the space has already | 
|---|
| 828 | been allocated by a hash table type derived from this one. | 
|---|
| 829 |  | 
|---|
| 830 | After allocating space, the creation routine must call the creation | 
|---|
| 831 | routine of the hash table type it is derived from, passing in a pointer | 
|---|
| 832 | to the space it just allocated.  This will initialize any fields used | 
|---|
| 833 | by the base hash table. | 
|---|
| 834 |  | 
|---|
| 835 | Finally the creation routine must initialize any local fields for | 
|---|
| 836 | the new hash table type. | 
|---|
| 837 |  | 
|---|
| 838 | Here is a boilerplate example of a creation routine.  FUNCTION_NAME | 
|---|
| 839 | is the name of the routine.  ENTRY_TYPE is the type of an entry in the | 
|---|
| 840 | hash table you are creating.  BASE_NEWFUNC is the name of the creation | 
|---|
| 841 | routine of the hash table type your hash table is derived from. | 
|---|
| 842 |  | 
|---|
| 843 | struct bfd_hash_entry * | 
|---|
| 844 | FUNCTION_NAME (entry, table, string) | 
|---|
| 845 | struct bfd_hash_entry *entry; | 
|---|
| 846 | struct bfd_hash_table *table; | 
|---|
| 847 | const char *string; | 
|---|
| 848 | { | 
|---|
| 849 | struct ENTRY_TYPE *ret = (ENTRY_TYPE *) entry; | 
|---|
| 850 |  | 
|---|
| 851 | /* Allocate the structure if it has not already been allocated by a | 
|---|
| 852 | derived class.  */ | 
|---|
| 853 | if (ret == (ENTRY_TYPE *) NULL) | 
|---|
| 854 | { | 
|---|
| 855 | ret = ((ENTRY_TYPE *) | 
|---|
| 856 | bfd_hash_allocate (table, sizeof (ENTRY_TYPE))); | 
|---|
| 857 | if (ret == (ENTRY_TYPE *) NULL) | 
|---|
| 858 | return NULL; | 
|---|
| 859 | } | 
|---|
| 860 |  | 
|---|
| 861 | /* Call the allocation method of the base class.  */ | 
|---|
| 862 | ret = ((ENTRY_TYPE *) | 
|---|
| 863 | BASE_NEWFUNC ((struct bfd_hash_entry *) ret, table, string)); | 
|---|
| 864 |  | 
|---|
| 865 | /* Initialize the local fields here.  */ | 
|---|
| 866 |  | 
|---|
| 867 | return (struct bfd_hash_entry *) ret; | 
|---|
| 868 | } | 
|---|
| 869 | *Description* | 
|---|
| 870 | The creation routine for the linker hash table, which is in `linker.c', | 
|---|
| 871 | looks just like this example.  FUNCTION_NAME is | 
|---|
| 872 | `_bfd_link_hash_newfunc'.  ENTRY_TYPE is `struct bfd_link_hash_entry'. | 
|---|
| 873 | BASE_NEWFUNC is `bfd_hash_newfunc', the creation routine for a basic | 
|---|
| 874 | hash table. | 
|---|
| 875 |  | 
|---|
| 876 | `_bfd_link_hash_newfunc' also initializes the local fields in a | 
|---|
| 877 | linker hash table entry: `type', `written' and `next'. | 
|---|
| 878 |  | 
|---|
| 879 |  | 
|---|
| 880 | File: bfd.info,  Node: Write Other Derived Routines,  Prev: Write the Derived Creation Routine,  Up: Deriving a New Hash Table Type | 
|---|
| 881 |  | 
|---|
| 882 | Write other derived routines | 
|---|
| 883 | ............................ | 
|---|
| 884 |  | 
|---|
| 885 | You will want to write other routines for your new hash table, as | 
|---|
| 886 | well. | 
|---|
| 887 |  | 
|---|
| 888 | You will want an initialization routine which calls the | 
|---|
| 889 | initialization routine of the hash table you are deriving from and | 
|---|
| 890 | initializes any other local fields.  For the linker hash table, this is | 
|---|
| 891 | `_bfd_link_hash_table_init' in `linker.c'. | 
|---|
| 892 |  | 
|---|
| 893 | You will want a lookup routine which calls the lookup routine of the | 
|---|
| 894 | hash table you are deriving from and casts the result.  The linker hash | 
|---|
| 895 | table uses `bfd_link_hash_lookup' in `linker.c' (this actually takes an | 
|---|
| 896 | additional argument which it uses to decide how to return the looked up | 
|---|
| 897 | value). | 
|---|
| 898 |  | 
|---|
| 899 | You may want a traversal routine.  This should just call the | 
|---|
| 900 | traversal routine of the hash table you are deriving from with | 
|---|
| 901 | appropriate casts.  The linker hash table uses `bfd_link_hash_traverse' | 
|---|
| 902 | in `linker.c'. | 
|---|
| 903 |  | 
|---|
| 904 | These routines may simply be defined as macros.  For example, the | 
|---|
| 905 | a.out backend linker hash table, which is derived from the linker hash | 
|---|
| 906 | table, uses macros for the lookup and traversal routines.  These are | 
|---|
| 907 | `aout_link_hash_lookup' and `aout_link_hash_traverse' in aoutx.h. | 
|---|
| 908 |  | 
|---|
| 909 |  | 
|---|
| 910 | File: bfd.info,  Node: BFD back ends,  Next: GNU Free Documentation License,  Prev: BFD front end,  Up: Top | 
|---|
| 911 |  | 
|---|
| 912 | BFD back ends | 
|---|
| 913 | ************* | 
|---|
| 914 |  | 
|---|
| 915 | * Menu: | 
|---|
| 916 |  | 
|---|
| 917 | * What to Put Where:: | 
|---|
| 918 | * aout ::       a.out backends | 
|---|
| 919 | * coff ::       coff backends | 
|---|
| 920 | * elf  ::       elf backends | 
|---|
| 921 | * mmo  ::       mmo backend | 
|---|
| 922 |  | 
|---|
| 923 |  | 
|---|
| 924 | File: bfd.info,  Node: What to Put Where,  Next: aout,  Prev: BFD back ends,  Up: BFD back ends | 
|---|
| 925 |  | 
|---|
| 926 | All of BFD lives in one directory. | 
|---|
| 927 |  | 
|---|
| 928 |  | 
|---|
| 929 | File: bfd.info,  Node: aout,  Next: coff,  Prev: What to Put Where,  Up: BFD back ends | 
|---|
| 930 |  | 
|---|
| 931 | a.out backends | 
|---|
| 932 | ============== | 
|---|
| 933 |  | 
|---|
| 934 | *Description* | 
|---|
| 935 | BFD supports a number of different flavours of a.out format, though the | 
|---|
| 936 | major differences are only the sizes of the structures on disk, and the | 
|---|
| 937 | shape of the relocation information. | 
|---|
| 938 |  | 
|---|
| 939 | The support is split into a basic support file `aoutx.h' and other | 
|---|
| 940 | files which derive functions from the base. One derivation file is | 
|---|
| 941 | `aoutf1.h' (for a.out flavour 1), and adds to the basic a.out functions | 
|---|
| 942 | support for sun3, sun4, 386 and 29k a.out files, to create a target | 
|---|
| 943 | jump vector for a specific target. | 
|---|
| 944 |  | 
|---|
| 945 | This information is further split out into more specific files for | 
|---|
| 946 | each machine, including `sunos.c' for sun3 and sun4, `newsos3.c' for | 
|---|
| 947 | the Sony NEWS, and `demo64.c' for a demonstration of a 64 bit a.out | 
|---|
| 948 | format. | 
|---|
| 949 |  | 
|---|
| 950 | The base file `aoutx.h' defines general mechanisms for reading and | 
|---|
| 951 | writing records to and from disk and various other methods which BFD | 
|---|
| 952 | requires. It is included by `aout32.c' and `aout64.c' to form the names | 
|---|
| 953 | `aout_32_swap_exec_header_in', `aout_64_swap_exec_header_in', etc. | 
|---|
| 954 |  | 
|---|
| 955 | As an example, this is what goes on to make the back end for a sun4, | 
|---|
| 956 | from `aout32.c': | 
|---|
| 957 |  | 
|---|
| 958 | #define ARCH_SIZE 32 | 
|---|
| 959 | #include "aoutx.h" | 
|---|
| 960 |  | 
|---|
| 961 | Which exports names: | 
|---|
| 962 |  | 
|---|
| 963 | ... | 
|---|
| 964 | aout_32_canonicalize_reloc | 
|---|
| 965 | aout_32_find_nearest_line | 
|---|
| 966 | aout_32_get_lineno | 
|---|
| 967 | aout_32_get_reloc_upper_bound | 
|---|
| 968 | ... | 
|---|
| 969 |  | 
|---|
| 970 | from `sunos.c': | 
|---|
| 971 |  | 
|---|
| 972 | #define TARGET_NAME "a.out-sunos-big" | 
|---|
| 973 | #define VECNAME    sunos_big_vec | 
|---|
| 974 | #include "aoutf1.h" | 
|---|
| 975 |  | 
|---|
| 976 | requires all the names from `aout32.c', and produces the jump vector | 
|---|
| 977 |  | 
|---|
| 978 | sunos_big_vec | 
|---|
| 979 |  | 
|---|
| 980 | The file `host-aout.c' is a special case.  It is for a large set of | 
|---|
| 981 | hosts that use "more or less standard" a.out files, and for which | 
|---|
| 982 | cross-debugging is not interesting.  It uses the standard 32-bit a.out | 
|---|
| 983 | support routines, but determines the file offsets and addresses of the | 
|---|
| 984 | text, data, and BSS sections, the machine architecture and machine | 
|---|
| 985 | type, and the entry point address, in a host-dependent manner.  Once | 
|---|
| 986 | these values have been determined, generic code is used to handle the | 
|---|
| 987 | object file. | 
|---|
| 988 |  | 
|---|
| 989 | When porting it to run on a new system, you must supply: | 
|---|
| 990 |  | 
|---|
| 991 | HOST_PAGE_SIZE | 
|---|
| 992 | HOST_SEGMENT_SIZE | 
|---|
| 993 | HOST_MACHINE_ARCH       (optional) | 
|---|
| 994 | HOST_MACHINE_MACHINE    (optional) | 
|---|
| 995 | HOST_TEXT_START_ADDR | 
|---|
| 996 | HOST_STACK_END_ADDR | 
|---|
| 997 |  | 
|---|
| 998 | in the file `../include/sys/h-XXX.h' (for your host).  These values, | 
|---|
| 999 | plus the structures and macros defined in `a.out.h' on your host | 
|---|
| 1000 | system, will produce a BFD target that will access ordinary a.out files | 
|---|
| 1001 | on your host. To configure a new machine to use `host-aout.c', specify: | 
|---|
| 1002 |  | 
|---|
| 1003 | TDEFAULTS = -DDEFAULT_VECTOR=host_aout_big_vec | 
|---|
| 1004 | TDEPFILES= host-aout.o trad-core.o | 
|---|
| 1005 |  | 
|---|
| 1006 | in the `config/XXX.mt' file, and modify `configure.in' to use the | 
|---|
| 1007 | `XXX.mt' file (by setting "`bfd_target=XXX'") when your configuration | 
|---|
| 1008 | is selected. | 
|---|
| 1009 |  | 
|---|
| 1010 | Relocations | 
|---|
| 1011 | ----------- | 
|---|
| 1012 |  | 
|---|
| 1013 | *Description* | 
|---|
| 1014 | The file `aoutx.h' provides for both the _standard_ and _extended_ | 
|---|
| 1015 | forms of a.out relocation records. | 
|---|
| 1016 |  | 
|---|
| 1017 | The standard records contain only an address, a symbol index, and a | 
|---|
| 1018 | type field. The extended records (used on 29ks and sparcs) also have a | 
|---|
| 1019 | full integer for an addend. | 
|---|
| 1020 |  | 
|---|
| 1021 | Internal entry points | 
|---|
| 1022 | --------------------- | 
|---|
| 1023 |  | 
|---|
| 1024 | *Description* | 
|---|
| 1025 | `aoutx.h' exports several routines for accessing the contents of an | 
|---|
| 1026 | a.out file, which are gathered and exported in turn by various format | 
|---|
| 1027 | specific files (eg sunos.c). | 
|---|
| 1028 |  | 
|---|
| 1029 | `aout_SIZE_swap_exec_header_in' | 
|---|
| 1030 | ............................... | 
|---|
| 1031 |  | 
|---|
| 1032 | *Synopsis* | 
|---|
| 1033 | void aout_SIZE_swap_exec_header_in, | 
|---|
| 1034 | (bfd *abfd, | 
|---|
| 1035 | struct external_exec *raw_bytes, | 
|---|
| 1036 | struct internal_exec *execp); | 
|---|
| 1037 | *Description* | 
|---|
| 1038 | Swap the information in an executable header RAW_BYTES taken from a raw | 
|---|
| 1039 | byte stream memory image into the internal exec header structure EXECP. | 
|---|
| 1040 |  | 
|---|
| 1041 | `aout_SIZE_swap_exec_header_out' | 
|---|
| 1042 | ................................ | 
|---|
| 1043 |  | 
|---|
| 1044 | *Synopsis* | 
|---|
| 1045 | void aout_SIZE_swap_exec_header_out | 
|---|
| 1046 | (bfd *abfd, | 
|---|
| 1047 | struct internal_exec *execp, | 
|---|
| 1048 | struct external_exec *raw_bytes); | 
|---|
| 1049 | *Description* | 
|---|
| 1050 | Swap the information in an internal exec header structure EXECP into | 
|---|
| 1051 | the buffer RAW_BYTES ready for writing to disk. | 
|---|
| 1052 |  | 
|---|
| 1053 | `aout_SIZE_some_aout_object_p' | 
|---|
| 1054 | .............................. | 
|---|
| 1055 |  | 
|---|
| 1056 | *Synopsis* | 
|---|
| 1057 | const bfd_target *aout_SIZE_some_aout_object_p | 
|---|
| 1058 | (bfd *abfd, | 
|---|
| 1059 | const bfd_target *(*callback_to_real_object_p) ()); | 
|---|
| 1060 | *Description* | 
|---|
| 1061 | Some a.out variant thinks that the file open in ABFD checking is an | 
|---|
| 1062 | a.out file.  Do some more checking, and set up for access if it really | 
|---|
| 1063 | is.  Call back to the calling environment's "finish up" function just | 
|---|
| 1064 | before returning, to handle any last-minute setup. | 
|---|
| 1065 |  | 
|---|
| 1066 | `aout_SIZE_mkobject' | 
|---|
| 1067 | .................... | 
|---|
| 1068 |  | 
|---|
| 1069 | *Synopsis* | 
|---|
| 1070 | bfd_boolean aout_SIZE_mkobject, (bfd *abfd); | 
|---|
| 1071 | *Description* | 
|---|
| 1072 | Initialize BFD ABFD for use with a.out files. | 
|---|
| 1073 |  | 
|---|
| 1074 | `aout_SIZE_machine_type' | 
|---|
| 1075 | ........................ | 
|---|
| 1076 |  | 
|---|
| 1077 | *Synopsis* | 
|---|
| 1078 | enum machine_type  aout_SIZE_machine_type | 
|---|
| 1079 | (enum bfd_architecture arch, | 
|---|
| 1080 | unsigned long machine)); | 
|---|
| 1081 | *Description* | 
|---|
| 1082 | Keep track of machine architecture and machine type for a.out's. Return | 
|---|
| 1083 | the `machine_type' for a particular architecture and machine, or | 
|---|
| 1084 | `M_UNKNOWN' if that exact architecture and machine can't be represented | 
|---|
| 1085 | in a.out format. | 
|---|
| 1086 |  | 
|---|
| 1087 | If the architecture is understood, machine type 0 (default) is | 
|---|
| 1088 | always understood. | 
|---|
| 1089 |  | 
|---|
| 1090 | `aout_SIZE_set_arch_mach' | 
|---|
| 1091 | ......................... | 
|---|
| 1092 |  | 
|---|
| 1093 | *Synopsis* | 
|---|
| 1094 | bfd_boolean aout_SIZE_set_arch_mach, | 
|---|
| 1095 | (bfd *, | 
|---|
| 1096 | enum bfd_architecture arch, | 
|---|
| 1097 | unsigned long machine)); | 
|---|
| 1098 | *Description* | 
|---|
| 1099 | Set the architecture and the machine of the BFD ABFD to the values ARCH | 
|---|
| 1100 | and MACHINE.  Verify that ABFD's format can support the architecture | 
|---|
| 1101 | required. | 
|---|
| 1102 |  | 
|---|
| 1103 | `aout_SIZE_new_section_hook' | 
|---|
| 1104 | ............................ | 
|---|
| 1105 |  | 
|---|
| 1106 | *Synopsis* | 
|---|
| 1107 | bfd_boolean aout_SIZE_new_section_hook, | 
|---|
| 1108 | (bfd *abfd, | 
|---|
| 1109 | asection *newsect)); | 
|---|
| 1110 | *Description* | 
|---|
| 1111 | Called by the BFD in response to a `bfd_make_section' request. | 
|---|
| 1112 |  | 
|---|