1@node typedef bfd, Error reporting, BFD front end, BFD front end 2@section @code{typedef bfd} 3A BFD has type @code{bfd}; objects of this type are the 4cornerstone of any application using BFD. Using BFD 5consists of making references though the BFD and to data in the BFD. 6 7Here is the structure that defines the type @code{bfd}. It 8contains the major data about the file and pointers 9to the rest of the data. 10 11 12@example 13 14enum bfd_direction 15 @{ 16 no_direction = 0, 17 read_direction = 1, 18 write_direction = 2, 19 both_direction = 3 20 @}; 21 22enum bfd_plugin_format 23 @{ 24 bfd_plugin_unknown = 0, 25 bfd_plugin_yes = 1, 26 bfd_plugin_no = 2 27 @}; 28 29struct bfd_build_id 30 @{ 31 bfd_size_type size; 32 bfd_byte data[1]; 33 @}; 34 35struct bfd 36@{ 37 /* The filename the application opened the BFD with. */ 38 const char *filename; 39 40 /* A pointer to the target jump table. */ 41 const struct bfd_target *xvec; 42 43 /* The IOSTREAM, and corresponding IO vector that provide access 44 to the file backing the BFD. */ 45 void *iostream; 46 const struct bfd_iovec *iovec; 47 48 /* The caching routines use these to maintain a 49 least-recently-used list of BFDs. */ 50 struct bfd *lru_prev, *lru_next; 51 52 /* Track current file position (or current buffer offset for 53 in-memory BFDs). When a file is closed by the caching routines, 54 BFD retains state information on the file here. */ 55 ufile_ptr where; 56 57 /* File modified time, if mtime_set is TRUE. */ 58 long mtime; 59 60 /* A unique identifier of the BFD */ 61 unsigned int id; 62 63 /* The format which belongs to the BFD. (object, core, etc.) */ 64 ENUM_BITFIELD (bfd_format) format : 3; 65 66 /* The direction with which the BFD was opened. */ 67 ENUM_BITFIELD (bfd_direction) direction : 2; 68 69 /* Format_specific flags. */ 70 flagword flags; 71 72 /* Values that may appear in the flags field of a BFD. These also 73 appear in the object_flags field of the bfd_target structure, where 74 they indicate the set of flags used by that backend (not all flags 75 are meaningful for all object file formats) (FIXME: at the moment, 76 the object_flags values have mostly just been copied from backend 77 to another, and are not necessarily correct). */ 78 79#define BFD_NO_FLAGS 0x0 80 81 /* BFD contains relocation entries. */ 82#define HAS_RELOC 0x1 83 84 /* BFD is directly executable. */ 85#define EXEC_P 0x2 86 87 /* BFD has line number information (basically used for F_LNNO in a 88 COFF header). */ 89#define HAS_LINENO 0x4 90 91 /* BFD has debugging information. */ 92#define HAS_DEBUG 0x08 93 94 /* BFD has symbols. */ 95#define HAS_SYMS 0x10 96 97 /* BFD has local symbols (basically used for F_LSYMS in a COFF 98 header). */ 99#define HAS_LOCALS 0x20 100 101 /* BFD is a dynamic object. */ 102#define DYNAMIC 0x40 103 104 /* Text section is write protected (if D_PAGED is not set, this is 105 like an a.out NMAGIC file) (the linker sets this by default, but 106 clears it for -r or -N). */ 107#define WP_TEXT 0x80 108 109 /* BFD is dynamically paged (this is like an a.out ZMAGIC file) (the 110 linker sets this by default, but clears it for -r or -n or -N). */ 111#define D_PAGED 0x100 112 113 /* BFD is relaxable (this means that bfd_relax_section may be able to 114 do something) (sometimes bfd_relax_section can do something even if 115 this is not set). */ 116#define BFD_IS_RELAXABLE 0x200 117 118 /* This may be set before writing out a BFD to request using a 119 traditional format. For example, this is used to request that when 120 writing out an a.out object the symbols not be hashed to eliminate 121 duplicates. */ 122#define BFD_TRADITIONAL_FORMAT 0x400 123 124 /* This flag indicates that the BFD contents are actually cached 125 in memory. If this is set, iostream points to a bfd_in_memory 126 struct. */ 127#define BFD_IN_MEMORY 0x800 128 129 /* This BFD has been created by the linker and doesn't correspond 130 to any input file. */ 131#define BFD_LINKER_CREATED 0x1000 132 133 /* This may be set before writing out a BFD to request that it 134 be written using values for UIDs, GIDs, timestamps, etc. that 135 will be consistent from run to run. */ 136#define BFD_DETERMINISTIC_OUTPUT 0x2000 137 138 /* Compress sections in this BFD. */ 139#define BFD_COMPRESS 0x4000 140 141 /* Decompress sections in this BFD. */ 142#define BFD_DECOMPRESS 0x8000 143 144 /* BFD is a dummy, for plugins. */ 145#define BFD_PLUGIN 0x10000 146 147 /* Compress sections in this BFD with SHF_COMPRESSED from gABI. */ 148#define BFD_COMPRESS_GABI 0x20000 149 150 /* Convert ELF common symbol type to STT_COMMON or STT_OBJECT in this 151 BFD. */ 152#define BFD_CONVERT_ELF_COMMON 0x40000 153 154 /* Use the ELF STT_COMMON type in this BFD. */ 155#define BFD_USE_ELF_STT_COMMON 0x80000 156 157 /* Put pathnames into archives (non-POSIX). */ 158#define BFD_ARCHIVE_FULL_PATH 0x100000 159 160 /* Flags bits to be saved in bfd_preserve_save. */ 161#define BFD_FLAGS_SAVED \ 162 (BFD_IN_MEMORY | BFD_COMPRESS | BFD_DECOMPRESS | BFD_LINKER_CREATED \ 163 | BFD_PLUGIN | BFD_COMPRESS_GABI | BFD_CONVERT_ELF_COMMON \ 164 | BFD_USE_ELF_STT_COMMON) 165 166 /* Flags bits which are for BFD use only. */ 167#define BFD_FLAGS_FOR_BFD_USE_MASK \ 168 (BFD_IN_MEMORY | BFD_COMPRESS | BFD_DECOMPRESS | BFD_LINKER_CREATED \ 169 | BFD_PLUGIN | BFD_TRADITIONAL_FORMAT | BFD_DETERMINISTIC_OUTPUT \ 170 | BFD_COMPRESS_GABI | BFD_CONVERT_ELF_COMMON | BFD_USE_ELF_STT_COMMON) 171 172 /* Is the file descriptor being cached? That is, can it be closed as 173 needed, and re-opened when accessed later? */ 174 unsigned int cacheable : 1; 175 176 /* Marks whether there was a default target specified when the 177 BFD was opened. This is used to select which matching algorithm 178 to use to choose the back end. */ 179 unsigned int target_defaulted : 1; 180 181 /* ... and here: (``once'' means at least once). */ 182 unsigned int opened_once : 1; 183 184 /* Set if we have a locally maintained mtime value, rather than 185 getting it from the file each time. */ 186 unsigned int mtime_set : 1; 187 188 /* Flag set if symbols from this BFD should not be exported. */ 189 unsigned int no_export : 1; 190 191 /* Remember when output has begun, to stop strange things 192 from happening. */ 193 unsigned int output_has_begun : 1; 194 195 /* Have archive map. */ 196 unsigned int has_armap : 1; 197 198 /* Set if this is a thin archive. */ 199 unsigned int is_thin_archive : 1; 200 201 /* Set if this archive should not cache element positions. */ 202 unsigned int no_element_cache : 1; 203 204 /* Set if only required symbols should be added in the link hash table for 205 this object. Used by VMS linkers. */ 206 unsigned int selective_search : 1; 207 208 /* Set if this is the linker output BFD. */ 209 unsigned int is_linker_output : 1; 210 211 /* Set if this is the linker input BFD. */ 212 unsigned int is_linker_input : 1; 213 214 /* If this is an input for a compiler plug-in library. */ 215 ENUM_BITFIELD (bfd_plugin_format) plugin_format : 2; 216 217 /* Set if this is a plugin output file. */ 218 unsigned int lto_output : 1; 219 220 /* Set if this is a slim LTO object not loaded with a compiler plugin. */ 221 unsigned int lto_slim_object : 1; 222 223 /* Set to dummy BFD created when claimed by a compiler plug-in 224 library. */ 225 bfd *plugin_dummy_bfd; 226 227 /* Currently my_archive is tested before adding origin to 228 anything. I believe that this can become always an add of 229 origin, with origin set to 0 for non archive files. */ 230 ufile_ptr origin; 231 232 /* The origin in the archive of the proxy entry. This will 233 normally be the same as origin, except for thin archives, 234 when it will contain the current offset of the proxy in the 235 thin archive rather than the offset of the bfd in its actual 236 container. */ 237 ufile_ptr proxy_origin; 238 239 /* A hash table for section names. */ 240 struct bfd_hash_table section_htab; 241 242 /* Pointer to linked list of sections. */ 243 struct bfd_section *sections; 244 245 /* The last section on the section list. */ 246 struct bfd_section *section_last; 247 248 /* The number of sections. */ 249 unsigned int section_count; 250 251 /* A field used by _bfd_generic_link_add_archive_symbols. This will 252 be used only for archive elements. */ 253 int archive_pass; 254 255 /* Stuff only useful for object files: 256 The start address. */ 257 bfd_vma start_address; 258 259 /* Symbol table for output BFD (with symcount entries). 260 Also used by the linker to cache input BFD symbols. */ 261 struct bfd_symbol **outsymbols; 262 263 /* Used for input and output. */ 264 unsigned int symcount; 265 266 /* Used for slurped dynamic symbol tables. */ 267 unsigned int dynsymcount; 268 269 /* Pointer to structure which contains architecture information. */ 270 const struct bfd_arch_info *arch_info; 271 272 /* Stuff only useful for archives. */ 273 void *arelt_data; 274 struct bfd *my_archive; /* The containing archive BFD. */ 275 struct bfd *archive_next; /* The next BFD in the archive. */ 276 struct bfd *archive_head; /* The first BFD in the archive. */ 277 struct bfd *nested_archives; /* List of nested archive in a flattened 278 thin archive. */ 279 280 union @{ 281 /* For input BFDs, a chain of BFDs involved in a link. */ 282 struct bfd *next; 283 /* For output BFD, the linker hash table. */ 284 struct bfd_link_hash_table *hash; 285 @} link; 286 287 /* Used by the back end to hold private data. */ 288 union 289 @{ 290 struct aout_data_struct *aout_data; 291 struct artdata *aout_ar_data; 292 struct coff_tdata *coff_obj_data; 293 struct pe_tdata *pe_obj_data; 294 struct xcoff_tdata *xcoff_obj_data; 295 struct ecoff_tdata *ecoff_obj_data; 296 struct srec_data_struct *srec_data; 297 struct verilog_data_struct *verilog_data; 298 struct ihex_data_struct *ihex_data; 299 struct tekhex_data_struct *tekhex_data; 300 struct elf_obj_tdata *elf_obj_data; 301 struct mmo_data_struct *mmo_data; 302 struct sun_core_struct *sun_core_data; 303 struct sco5_core_struct *sco5_core_data; 304 struct trad_core_struct *trad_core_data; 305 struct som_data_struct *som_data; 306 struct hpux_core_struct *hpux_core_data; 307 struct hppabsd_core_struct *hppabsd_core_data; 308 struct sgi_core_struct *sgi_core_data; 309 struct lynx_core_struct *lynx_core_data; 310 struct osf_core_struct *osf_core_data; 311 struct cisco_core_struct *cisco_core_data; 312 struct versados_data_struct *versados_data; 313 struct netbsd_core_struct *netbsd_core_data; 314 struct mach_o_data_struct *mach_o_data; 315 struct mach_o_fat_data_struct *mach_o_fat_data; 316 struct plugin_data_struct *plugin_data; 317 struct bfd_pef_data_struct *pef_data; 318 struct bfd_pef_xlib_data_struct *pef_xlib_data; 319 struct bfd_sym_data_struct *sym_data; 320 void *any; 321 @} 322 tdata; 323 324 /* Used by the application to hold private data. */ 325 void *usrdata; 326 327 /* Where all the allocated stuff under this BFD goes. This is a 328 struct objalloc *, but we use void * to avoid requiring the inclusion 329 of objalloc.h. */ 330 void *memory; 331 332 /* For input BFDs, the build ID, if the object has one. */ 333 const struct bfd_build_id *build_id; 334@}; 335 336static inline const char * 337bfd_get_filename (const bfd *abfd) 338@{ 339 return abfd->filename; 340@} 341 342static inline bfd_boolean 343bfd_get_cacheable (const bfd *abfd) 344@{ 345 return abfd->cacheable; 346@} 347 348static inline enum bfd_format 349bfd_get_format (const bfd *abfd) 350@{ 351 return abfd->format; 352@} 353 354static inline flagword 355bfd_get_file_flags (const bfd *abfd) 356@{ 357 return abfd->flags; 358@} 359 360static inline bfd_vma 361bfd_get_start_address (const bfd *abfd) 362@{ 363 return abfd->start_address; 364@} 365 366static inline unsigned int 367bfd_get_symcount (const bfd *abfd) 368@{ 369 return abfd->symcount; 370@} 371 372static inline unsigned int 373bfd_get_dynamic_symcount (const bfd *abfd) 374@{ 375 return abfd->dynsymcount; 376@} 377 378static inline struct bfd_symbol ** 379bfd_get_outsymbols (const bfd *abfd) 380@{ 381 return abfd->outsymbols; 382@} 383 384static inline unsigned int 385bfd_count_sections (const bfd *abfd) 386@{ 387 return abfd->section_count; 388@} 389 390static inline bfd_boolean 391bfd_has_map (const bfd *abfd) 392@{ 393 return abfd->has_armap; 394@} 395 396static inline bfd_boolean 397bfd_is_thin_archive (const bfd *abfd) 398@{ 399 return abfd->is_thin_archive; 400@} 401 402static inline void * 403bfd_usrdata (const bfd *abfd) 404@{ 405 return abfd->usrdata; 406@} 407 408/* See note beside bfd_set_section_userdata. */ 409static inline bfd_boolean 410bfd_set_cacheable (bfd * abfd, bfd_boolean val) 411@{ 412 abfd->cacheable = val; 413 return TRUE; 414@} 415 416static inline void 417bfd_set_thin_archive (bfd *abfd, bfd_boolean val) 418@{ 419 abfd->is_thin_archive = val; 420@} 421 422static inline void 423bfd_set_usrdata (bfd *abfd, void *val) 424@{ 425 abfd->usrdata = val; 426@} 427 428static inline asection * 429bfd_asymbol_section (const asymbol *sy) 430@{ 431 return sy->section; 432@} 433 434static inline bfd_vma 435bfd_asymbol_value (const asymbol *sy) 436@{ 437 return sy->section->vma + sy->value; 438@} 439 440static inline const char * 441bfd_asymbol_name (const asymbol *sy) 442@{ 443 return sy->name; 444@} 445 446static inline struct bfd * 447bfd_asymbol_bfd (const asymbol *sy) 448@{ 449 return sy->the_bfd; 450@} 451 452static inline void 453bfd_set_asymbol_name (asymbol *sy, const char *name) 454@{ 455 sy->name = name; 456@} 457 458static inline bfd_size_type 459bfd_get_section_limit_octets (const bfd *abfd, const asection *sec) 460@{ 461 if (abfd->direction != write_direction && sec->rawsize != 0) 462 return sec->rawsize; 463 return sec->size; 464@} 465 466/* Find the address one past the end of SEC. */ 467static inline bfd_size_type 468bfd_get_section_limit (const bfd *abfd, const asection *sec) 469@{ 470 return (bfd_get_section_limit_octets (abfd, sec) 471 / bfd_octets_per_byte (abfd, sec)); 472@} 473 474/* Functions to handle insertion and deletion of a bfd's sections. These 475 only handle the list pointers, ie. do not adjust section_count, 476 target_index etc. */ 477static inline void 478bfd_section_list_remove (bfd *abfd, asection *s) 479@{ 480 asection *next = s->next; 481 asection *prev = s->prev; 482 if (prev) 483 prev->next = next; 484 else 485 abfd->sections = next; 486 if (next) 487 next->prev = prev; 488 else 489 abfd->section_last = prev; 490@} 491 492static inline void 493bfd_section_list_append (bfd *abfd, asection *s) 494@{ 495 s->next = 0; 496 if (abfd->section_last) 497 @{ 498 s->prev = abfd->section_last; 499 abfd->section_last->next = s; 500 @} 501 else 502 @{ 503 s->prev = 0; 504 abfd->sections = s; 505 @} 506 abfd->section_last = s; 507@} 508 509static inline void 510bfd_section_list_prepend (bfd *abfd, asection *s) 511@{ 512 s->prev = 0; 513 if (abfd->sections) 514 @{ 515 s->next = abfd->sections; 516 abfd->sections->prev = s; 517 @} 518 else 519 @{ 520 s->next = 0; 521 abfd->section_last = s; 522 @} 523 abfd->sections = s; 524@} 525 526static inline void 527bfd_section_list_insert_after (bfd *abfd, asection *a, asection *s) 528@{ 529 asection *next = a->next; 530 s->next = next; 531 s->prev = a; 532 a->next = s; 533 if (next) 534 next->prev = s; 535 else 536 abfd->section_last = s; 537@} 538 539static inline void 540bfd_section_list_insert_before (bfd *abfd, asection *b, asection *s) 541@{ 542 asection *prev = b->prev; 543 s->prev = prev; 544 s->next = b; 545 b->prev = s; 546 if (prev) 547 prev->next = s; 548 else 549 abfd->sections = s; 550@} 551 552static inline bfd_boolean 553bfd_section_removed_from_list (const bfd *abfd, const asection *s) 554@{ 555 return s->next ? s->next->prev != s : abfd->section_last != s; 556@} 557 558@end example 559@node Error reporting, Miscellaneous, typedef bfd, BFD front end 560@section Error reporting 561Most BFD functions return nonzero on success (check their 562individual documentation for precise semantics). On an error, 563they call @code{bfd_set_error} to set an error condition that callers 564can check by calling @code{bfd_get_error}. 565If that returns @code{bfd_error_system_call}, then check 566@code{errno}. 567 568The easiest way to report a BFD error to the user is to 569use @code{bfd_perror}. 570 571@subsection Type @code{bfd_error_type} 572The values returned by @code{bfd_get_error} are defined by the 573enumerated type @code{bfd_error_type}. 574 575 576@example 577 578typedef enum bfd_error 579@{ 580 bfd_error_no_error = 0, 581 bfd_error_system_call, 582 bfd_error_invalid_target, 583 bfd_error_wrong_format, 584 bfd_error_wrong_object_format, 585 bfd_error_invalid_operation, 586 bfd_error_no_memory, 587 bfd_error_no_symbols, 588 bfd_error_no_armap, 589 bfd_error_no_more_archived_files, 590 bfd_error_malformed_archive, 591 bfd_error_missing_dso, 592 bfd_error_file_not_recognized, 593 bfd_error_file_ambiguously_recognized, 594 bfd_error_no_contents, 595 bfd_error_nonrepresentable_section, 596 bfd_error_no_debug_section, 597 bfd_error_bad_value, 598 bfd_error_file_truncated, 599 bfd_error_file_too_big, 600 bfd_error_sorry, 601 bfd_error_on_input, 602 bfd_error_invalid_error_code 603@} 604bfd_error_type; 605 606@end example 607@findex bfd_get_error 608@subsubsection @code{bfd_get_error} 609@strong{Synopsis} 610@example 611bfd_error_type bfd_get_error (void); 612@end example 613@strong{Description}@* 614Return the current BFD error condition. 615 616@findex bfd_set_error 617@subsubsection @code{bfd_set_error} 618@strong{Synopsis} 619@example 620void bfd_set_error (bfd_error_type error_tag); 621@end example 622@strong{Description}@* 623Set the BFD error condition to be @var{error_tag}. 624 625@var{error_tag} must not be bfd_error_on_input. Use 626bfd_set_input_error for input errors instead. 627 628@findex bfd_set_input_error 629@subsubsection @code{bfd_set_input_error} 630@strong{Synopsis} 631@example 632void bfd_set_input_error (bfd *input, bfd_error_type error_tag); 633@end example 634@strong{Description}@* 635Set the BFD error condition to be bfd_error_on_input. 636@var{input} is the input bfd where the error occurred, and 637@var{error_tag} the bfd_error_type error. 638 639@findex bfd_errmsg 640@subsubsection @code{bfd_errmsg} 641@strong{Synopsis} 642@example 643const char *bfd_errmsg (bfd_error_type error_tag); 644@end example 645@strong{Description}@* 646Return a string describing the error @var{error_tag}, or 647the system error if @var{error_tag} is @code{bfd_error_system_call}. 648 649@findex bfd_perror 650@subsubsection @code{bfd_perror} 651@strong{Synopsis} 652@example 653void bfd_perror (const char *message); 654@end example 655@strong{Description}@* 656Print to the standard error stream a string describing the 657last BFD error that occurred, or the last system error if 658the last BFD error was a system call failure. If @var{message} 659is non-NULL and non-empty, the error string printed is preceded 660by @var{message}, a colon, and a space. It is followed by a newline. 661 662@subsection BFD error handler 663Some BFD functions want to print messages describing the 664problem. They call a BFD error handler function. This 665function may be overridden by the program. 666 667The BFD error handler acts like vprintf. 668 669 670@example 671 672typedef void (*bfd_error_handler_type) (const char *, va_list); 673 674@end example 675@findex _bfd_error_handler 676@subsubsection @code{_bfd_error_handler} 677@strong{Synopsis} 678@example 679void _bfd_error_handler (const char *fmt, ...) ATTRIBUTE_PRINTF_1; 680@end example 681@strong{Description}@* 682This is the default routine to handle BFD error messages. 683Like fprintf (stderr, ...), but also handles some extra format 684specifiers. 685 686%pA section name from section. For group components, prints 687group name too. 688%pB file name from bfd. For archive components, prints 689archive too. 690 691Beware: Only supports a maximum of 9 format arguments. 692 693@findex bfd_set_error_handler 694@subsubsection @code{bfd_set_error_handler} 695@strong{Synopsis} 696@example 697bfd_error_handler_type bfd_set_error_handler (bfd_error_handler_type); 698@end example 699@strong{Description}@* 700Set the BFD error handler function. Returns the previous 701function. 702 703@findex bfd_set_error_program_name 704@subsubsection @code{bfd_set_error_program_name} 705@strong{Synopsis} 706@example 707void bfd_set_error_program_name (const char *); 708@end example 709@strong{Description}@* 710Set the program name to use when printing a BFD error. This 711is printed before the error message followed by a colon and 712space. The string must not be changed after it is passed to 713this function. 714 715@subsection BFD assert handler 716If BFD finds an internal inconsistency, the bfd assert 717handler is called with information on the BFD version, BFD 718source file and line. If this happens, most programs linked 719against BFD are expected to want to exit with an error, or mark 720the current BFD operation as failed, so it is recommended to 721override the default handler, which just calls 722_bfd_error_handler and continues. 723 724 725@example 726 727typedef void (*bfd_assert_handler_type) (const char *bfd_formatmsg, 728 const char *bfd_version, 729 const char *bfd_file, 730 int bfd_line); 731 732@end example 733@findex bfd_set_assert_handler 734@subsubsection @code{bfd_set_assert_handler} 735@strong{Synopsis} 736@example 737bfd_assert_handler_type bfd_set_assert_handler (bfd_assert_handler_type); 738@end example 739@strong{Description}@* 740Set the BFD assert handler function. Returns the previous 741function. 742 743@node Miscellaneous, Memory Usage, Error reporting, BFD front end 744@section Miscellaneous 745 746 747@subsection Miscellaneous functions 748 749 750@findex bfd_get_reloc_upper_bound 751@subsubsection @code{bfd_get_reloc_upper_bound} 752@strong{Synopsis} 753@example 754long bfd_get_reloc_upper_bound (bfd *abfd, asection *sect); 755@end example 756@strong{Description}@* 757Return the number of bytes required to store the 758relocation information associated with section @var{sect} 759attached to bfd @var{abfd}. If an error occurs, return -1. 760 761@findex bfd_canonicalize_reloc 762@subsubsection @code{bfd_canonicalize_reloc} 763@strong{Synopsis} 764@example 765long bfd_canonicalize_reloc 766 (bfd *abfd, asection *sec, arelent **loc, asymbol **syms); 767@end example 768@strong{Description}@* 769Call the back end associated with the open BFD 770@var{abfd} and translate the external form of the relocation 771information attached to @var{sec} into the internal canonical 772form. Place the table into memory at @var{loc}, which has 773been preallocated, usually by a call to 774@code{bfd_get_reloc_upper_bound}. Returns the number of relocs, or 775-1 on error. 776 777The @var{syms} table is also needed for horrible internal magic 778reasons. 779 780@findex bfd_set_reloc 781@subsubsection @code{bfd_set_reloc} 782@strong{Synopsis} 783@example 784void bfd_set_reloc 785 (bfd *abfd, asection *sec, arelent **rel, unsigned int count); 786@end example 787@strong{Description}@* 788Set the relocation pointer and count within 789section @var{sec} to the values @var{rel} and @var{count}. 790The argument @var{abfd} is ignored. 791@example 792#define bfd_set_reloc(abfd, asect, location, count) \ 793 BFD_SEND (abfd, _bfd_set_reloc, (abfd, asect, location, count)) 794@end example 795 796@findex bfd_set_file_flags 797@subsubsection @code{bfd_set_file_flags} 798@strong{Synopsis} 799@example 800bfd_boolean bfd_set_file_flags (bfd *abfd, flagword flags); 801@end example 802@strong{Description}@* 803Set the flag word in the BFD @var{abfd} to the value @var{flags}. 804 805Possible errors are: 806@itemize @bullet 807 808@item 809@code{bfd_error_wrong_format} - The target bfd was not of object format. 810@item 811@code{bfd_error_invalid_operation} - The target bfd was open for reading. 812@item 813@code{bfd_error_invalid_operation} - 814The flag word contained a bit which was not applicable to the 815type of file. E.g., an attempt was made to set the @code{D_PAGED} bit 816on a BFD format which does not support demand paging. 817@end itemize 818 819@findex bfd_get_arch_size 820@subsubsection @code{bfd_get_arch_size} 821@strong{Synopsis} 822@example 823int bfd_get_arch_size (bfd *abfd); 824@end example 825@strong{Description}@* 826Returns the normalized architecture address size, in bits, as 827determined by the object file's format. By normalized, we mean 828either 32 or 64. For ELF, this information is included in the 829header. Use bfd_arch_bits_per_address for number of bits in 830the architecture address. 831 832@strong{Returns}@* 833Returns the arch size in bits if known, @code{-1} otherwise. 834 835@findex bfd_get_sign_extend_vma 836@subsubsection @code{bfd_get_sign_extend_vma} 837@strong{Synopsis} 838@example 839int bfd_get_sign_extend_vma (bfd *abfd); 840@end example 841@strong{Description}@* 842Indicates if the target architecture "naturally" sign extends 843an address. Some architectures implicitly sign extend address 844values when they are converted to types larger than the size 845of an address. For instance, bfd_get_start_address() will 846return an address sign extended to fill a bfd_vma when this is 847the case. 848 849@strong{Returns}@* 850Returns @code{1} if the target architecture is known to sign 851extend addresses, @code{0} if the target architecture is known to 852not sign extend addresses, and @code{-1} otherwise. 853 854@findex bfd_set_start_address 855@subsubsection @code{bfd_set_start_address} 856@strong{Synopsis} 857@example 858bfd_boolean bfd_set_start_address (bfd *abfd, bfd_vma vma); 859@end example 860@strong{Description}@* 861Make @var{vma} the entry point of output BFD @var{abfd}. 862 863@strong{Returns}@* 864Returns @code{TRUE} on success, @code{FALSE} otherwise. 865 866@findex bfd_get_gp_size 867@subsubsection @code{bfd_get_gp_size} 868@strong{Synopsis} 869@example 870unsigned int bfd_get_gp_size (bfd *abfd); 871@end example 872@strong{Description}@* 873Return the maximum size of objects to be optimized using the GP 874register under MIPS ECOFF. This is typically set by the @code{-G} 875argument to the compiler, assembler or linker. 876 877@findex bfd_set_gp_size 878@subsubsection @code{bfd_set_gp_size} 879@strong{Synopsis} 880@example 881void bfd_set_gp_size (bfd *abfd, unsigned int i); 882@end example 883@strong{Description}@* 884Set the maximum size of objects to be optimized using the GP 885register under ECOFF or MIPS ELF. This is typically set by 886the @code{-G} argument to the compiler, assembler or linker. 887 888@findex bfd_scan_vma 889@subsubsection @code{bfd_scan_vma} 890@strong{Synopsis} 891@example 892bfd_vma bfd_scan_vma (const char *string, const char **end, int base); 893@end example 894@strong{Description}@* 895Convert, like @code{strtoul}, a numerical expression 896@var{string} into a @code{bfd_vma} integer, and return that integer. 897(Though without as many bells and whistles as @code{strtoul}.) 898The expression is assumed to be unsigned (i.e., positive). 899If given a @var{base}, it is used as the base for conversion. 900A base of 0 causes the function to interpret the string 901in hex if a leading "0x" or "0X" is found, otherwise 902in octal if a leading zero is found, otherwise in decimal. 903 904If the value would overflow, the maximum @code{bfd_vma} value is 905returned. 906 907@findex bfd_copy_private_header_data 908@subsubsection @code{bfd_copy_private_header_data} 909@strong{Synopsis} 910@example 911bfd_boolean bfd_copy_private_header_data (bfd *ibfd, bfd *obfd); 912@end example 913@strong{Description}@* 914Copy private BFD header information from the BFD @var{ibfd} to the 915the BFD @var{obfd}. This copies information that may require 916sections to exist, but does not require symbol tables. Return 917@code{true} on success, @code{false} on error. 918Possible error returns are: 919 920@itemize @bullet 921 922@item 923@code{bfd_error_no_memory} - 924Not enough memory exists to create private data for @var{obfd}. 925@end itemize 926@example 927#define bfd_copy_private_header_data(ibfd, obfd) \ 928 BFD_SEND (obfd, _bfd_copy_private_header_data, \ 929 (ibfd, obfd)) 930@end example 931 932@findex bfd_copy_private_bfd_data 933@subsubsection @code{bfd_copy_private_bfd_data} 934@strong{Synopsis} 935@example 936bfd_boolean bfd_copy_private_bfd_data (bfd *ibfd, bfd *obfd); 937@end example 938@strong{Description}@* 939Copy private BFD information from the BFD @var{ibfd} to the 940the BFD @var{obfd}. Return @code{TRUE} on success, @code{FALSE} on error. 941Possible error returns are: 942 943@itemize @bullet 944 945@item 946@code{bfd_error_no_memory} - 947Not enough memory exists to create private data for @var{obfd}. 948@end itemize 949@example 950#define bfd_copy_private_bfd_data(ibfd, obfd) \ 951 BFD_SEND (obfd, _bfd_copy_private_bfd_data, \ 952 (ibfd, obfd)) 953@end example 954 955@findex bfd_set_private_flags 956@subsubsection @code{bfd_set_private_flags} 957@strong{Synopsis} 958@example 959bfd_boolean bfd_set_private_flags (bfd *abfd, flagword flags); 960@end example 961@strong{Description}@* 962Set private BFD flag information in the BFD @var{abfd}. 963Return @code{TRUE} on success, @code{FALSE} on error. Possible error 964returns are: 965 966@itemize @bullet 967 968@item 969@code{bfd_error_no_memory} - 970Not enough memory exists to create private data for @var{obfd}. 971@end itemize 972@example 973#define bfd_set_private_flags(abfd, flags) \ 974 BFD_SEND (abfd, _bfd_set_private_flags, (abfd, flags)) 975@end example 976 977@findex Other functions 978@subsubsection @code{Other functions} 979@strong{Description}@* 980The following functions exist but have not yet been documented. 981@example 982#define bfd_sizeof_headers(abfd, info) \ 983 BFD_SEND (abfd, _bfd_sizeof_headers, (abfd, info)) 984 985#define bfd_find_nearest_line(abfd, sec, syms, off, file, func, line) \ 986 BFD_SEND (abfd, _bfd_find_nearest_line, \ 987 (abfd, syms, sec, off, file, func, line, NULL)) 988 989#define bfd_find_nearest_line_discriminator(abfd, sec, syms, off, file, func, \ 990 line, disc) \ 991 BFD_SEND (abfd, _bfd_find_nearest_line, \ 992 (abfd, syms, sec, off, file, func, line, disc)) 993 994#define bfd_find_line(abfd, syms, sym, file, line) \ 995 BFD_SEND (abfd, _bfd_find_line, \ 996 (abfd, syms, sym, file, line)) 997 998#define bfd_find_inliner_info(abfd, file, func, line) \ 999 BFD_SEND (abfd, _bfd_find_inliner_info, \ 1000 (abfd, file, func, line)) 1001 1002#define bfd_debug_info_start(abfd) \ 1003 BFD_SEND (abfd, _bfd_debug_info_start, (abfd)) 1004 1005#define bfd_debug_info_end(abfd) \ 1006 BFD_SEND (abfd, _bfd_debug_info_end, (abfd)) 1007 1008#define bfd_debug_info_accumulate(abfd, section) \ 1009 BFD_SEND (abfd, _bfd_debug_info_accumulate, (abfd, section)) 1010 1011#define bfd_stat_arch_elt(abfd, stat) \ 1012 BFD_SEND (abfd, _bfd_stat_arch_elt,(abfd, stat)) 1013 1014#define bfd_update_armap_timestamp(abfd) \ 1015 BFD_SEND (abfd, _bfd_update_armap_timestamp, (abfd)) 1016 1017#define bfd_set_arch_mach(abfd, arch, mach)\ 1018 BFD_SEND ( abfd, _bfd_set_arch_mach, (abfd, arch, mach)) 1019 1020#define bfd_relax_section(abfd, section, link_info, again) \ 1021 BFD_SEND (abfd, _bfd_relax_section, (abfd, section, link_info, again)) 1022 1023#define bfd_gc_sections(abfd, link_info) \ 1024 BFD_SEND (abfd, _bfd_gc_sections, (abfd, link_info)) 1025 1026#define bfd_lookup_section_flags(link_info, flag_info, section) \ 1027 BFD_SEND (abfd, _bfd_lookup_section_flags, (link_info, flag_info, section)) 1028 1029#define bfd_merge_sections(abfd, link_info) \ 1030 BFD_SEND (abfd, _bfd_merge_sections, (abfd, link_info)) 1031 1032#define bfd_is_group_section(abfd, sec) \ 1033 BFD_SEND (abfd, _bfd_is_group_section, (abfd, sec)) 1034 1035#define bfd_group_name(abfd, sec) \ 1036 BFD_SEND (abfd, _bfd_group_name, (abfd, sec)) 1037 1038#define bfd_discard_group(abfd, sec) \ 1039 BFD_SEND (abfd, _bfd_discard_group, (abfd, sec)) 1040 1041#define bfd_link_hash_table_create(abfd) \ 1042 BFD_SEND (abfd, _bfd_link_hash_table_create, (abfd)) 1043 1044#define bfd_link_add_symbols(abfd, info) \ 1045 BFD_SEND (abfd, _bfd_link_add_symbols, (abfd, info)) 1046 1047#define bfd_link_just_syms(abfd, sec, info) \ 1048 BFD_SEND (abfd, _bfd_link_just_syms, (sec, info)) 1049 1050#define bfd_final_link(abfd, info) \ 1051 BFD_SEND (abfd, _bfd_final_link, (abfd, info)) 1052 1053#define bfd_free_cached_info(abfd) \ 1054 BFD_SEND (abfd, _bfd_free_cached_info, (abfd)) 1055 1056#define bfd_get_dynamic_symtab_upper_bound(abfd) \ 1057 BFD_SEND (abfd, _bfd_get_dynamic_symtab_upper_bound, (abfd)) 1058 1059#define bfd_print_private_bfd_data(abfd, file)\ 1060 BFD_SEND (abfd, _bfd_print_private_bfd_data, (abfd, file)) 1061 1062#define bfd_canonicalize_dynamic_symtab(abfd, asymbols) \ 1063 BFD_SEND (abfd, _bfd_canonicalize_dynamic_symtab, (abfd, asymbols)) 1064 1065#define bfd_get_synthetic_symtab(abfd, count, syms, dyncount, dynsyms, ret) \ 1066 BFD_SEND (abfd, _bfd_get_synthetic_symtab, (abfd, count, syms, \ 1067 dyncount, dynsyms, ret)) 1068 1069#define bfd_get_dynamic_reloc_upper_bound(abfd) \ 1070 BFD_SEND (abfd, _bfd_get_dynamic_reloc_upper_bound, (abfd)) 1071 1072#define bfd_canonicalize_dynamic_reloc(abfd, arels, asyms) \ 1073 BFD_SEND (abfd, _bfd_canonicalize_dynamic_reloc, (abfd, arels, asyms)) 1074 1075extern bfd_byte *bfd_get_relocated_section_contents 1076 (bfd *, struct bfd_link_info *, struct bfd_link_order *, bfd_byte *, 1077 bfd_boolean, asymbol **); 1078 1079@end example 1080 1081@findex bfd_alt_mach_code 1082@subsubsection @code{bfd_alt_mach_code} 1083@strong{Synopsis} 1084@example 1085bfd_boolean bfd_alt_mach_code (bfd *abfd, int alternative); 1086@end example 1087@strong{Description}@* 1088When more than one machine code number is available for the 1089same machine type, this function can be used to switch between 1090the preferred one (alternative == 0) and any others. Currently, 1091only ELF supports this feature, with up to two alternate 1092machine codes. 1093 1094@findex bfd_emul_get_maxpagesize 1095@subsubsection @code{bfd_emul_get_maxpagesize} 1096@strong{Synopsis} 1097@example 1098bfd_vma bfd_emul_get_maxpagesize (const char *); 1099@end example 1100@strong{Description}@* 1101Returns the maximum page size, in bytes, as determined by 1102emulation. 1103 1104@strong{Returns}@* 1105Returns the maximum page size in bytes for ELF, 0 otherwise. 1106 1107@findex bfd_emul_set_maxpagesize 1108@subsubsection @code{bfd_emul_set_maxpagesize} 1109@strong{Synopsis} 1110@example 1111void bfd_emul_set_maxpagesize (const char *, bfd_vma); 1112@end example 1113@strong{Description}@* 1114For ELF, set the maximum page size for the emulation. It is 1115a no-op for other formats. 1116 1117@findex bfd_emul_get_commonpagesize 1118@subsubsection @code{bfd_emul_get_commonpagesize} 1119@strong{Synopsis} 1120@example 1121bfd_vma bfd_emul_get_commonpagesize (const char *, bfd_boolean); 1122@end example 1123@strong{Description}@* 1124Returns the common page size, in bytes, as determined by 1125emulation. 1126 1127@strong{Returns}@* 1128Returns the common page size in bytes for ELF, 0 otherwise. 1129 1130@findex bfd_emul_set_commonpagesize 1131@subsubsection @code{bfd_emul_set_commonpagesize} 1132@strong{Synopsis} 1133@example 1134void bfd_emul_set_commonpagesize (const char *, bfd_vma); 1135@end example 1136@strong{Description}@* 1137For ELF, set the common page size for the emulation. It is 1138a no-op for other formats. 1139 1140@findex bfd_demangle 1141@subsubsection @code{bfd_demangle} 1142@strong{Synopsis} 1143@example 1144char *bfd_demangle (bfd *, const char *, int); 1145@end example 1146@strong{Description}@* 1147Wrapper around cplus_demangle. Strips leading underscores and 1148other such chars that would otherwise confuse the demangler. 1149If passed a g++ v3 ABI mangled name, returns a buffer allocated 1150with malloc holding the demangled name. Returns NULL otherwise 1151and on memory alloc failure. 1152 1153@findex bfd_update_compression_header 1154@subsubsection @code{bfd_update_compression_header} 1155@strong{Synopsis} 1156@example 1157void bfd_update_compression_header 1158 (bfd *abfd, bfd_byte *contents, asection *sec); 1159@end example 1160@strong{Description}@* 1161Set the compression header at CONTENTS of SEC in ABFD and update 1162elf_section_flags for compression. 1163 1164@findex bfd_check_compression_header 1165@subsubsection @code{bfd_check_compression_header} 1166@strong{Synopsis} 1167@example 1168bfd_boolean bfd_check_compression_header 1169 (bfd *abfd, bfd_byte *contents, asection *sec, 1170 bfd_size_type *uncompressed_size, 1171 unsigned int *uncompressed_alignment_power); 1172@end example 1173@strong{Description}@* 1174Check the compression header at CONTENTS of SEC in ABFD and 1175store the uncompressed size in UNCOMPRESSED_SIZE and the 1176uncompressed data alignment in UNCOMPRESSED_ALIGNMENT_POWER 1177if the compression header is valid. 1178 1179@strong{Returns}@* 1180Return TRUE if the compression header is valid. 1181 1182@findex bfd_get_compression_header_size 1183@subsubsection @code{bfd_get_compression_header_size} 1184@strong{Synopsis} 1185@example 1186int bfd_get_compression_header_size (bfd *abfd, asection *sec); 1187@end example 1188@strong{Description}@* 1189Return the size of the compression header of SEC in ABFD. 1190 1191@strong{Returns}@* 1192Return the size of the compression header in bytes. 1193 1194@findex bfd_convert_section_size 1195@subsubsection @code{bfd_convert_section_size} 1196@strong{Synopsis} 1197@example 1198bfd_size_type bfd_convert_section_size 1199 (bfd *ibfd, asection *isec, bfd *obfd, bfd_size_type size); 1200@end example 1201@strong{Description}@* 1202Convert the size @var{size} of the section @var{isec} in input 1203BFD @var{ibfd} to the section size in output BFD @var{obfd}. 1204 1205@findex bfd_convert_section_contents 1206@subsubsection @code{bfd_convert_section_contents} 1207@strong{Synopsis} 1208@example 1209bfd_boolean bfd_convert_section_contents 1210 (bfd *ibfd, asection *isec, bfd *obfd, 1211 bfd_byte **ptr, bfd_size_type *ptr_size); 1212@end example 1213@strong{Description}@* 1214Convert the contents, stored in @var{*ptr}, of the section 1215@var{isec} in input BFD @var{ibfd} to output BFD @var{obfd} 1216if needed. The original buffer pointed to by @var{*ptr} may 1217be freed and @var{*ptr} is returned with memory malloc'd by this 1218function, and the new size written to @var{ptr_size}. 1219 1220