1 /* Generic BFD library interface and support routines.
2 Copyright (C) 1990-2024 Free Software Foundation, Inc.
3 Written by Cygnus Support.
5 This file is part of BFD, the Binary File Descriptor library.
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 3 of the License, or
10 (at your option) any later version.
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with this program; if not, write to the Free Software
19 Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
20 MA 02110-1301, USA. */
24 typedef bfd, Error reporting, BFD front end, BFD front end
29 A BFD has type <<bfd>>; objects of this type are the
30 cornerstone of any application using BFD. Using BFD
31 consists of making references though the BFD and to data in the BFD.
33 Here is the structure that defines the type <<bfd>>. It
34 contains the major data about the file and pointers
35 to the rest of the data.
38 .typedef enum bfd_format
40 . bfd_unknown = 0, {* File format is unknown. *}
41 . bfd_object, {* Linker/assembler/compiler output. *}
42 . bfd_archive, {* Object archive file. *}
43 . bfd_core, {* Core dump. *}
44 . bfd_type_end {* Marks the end; don't use it! *}
52 . write_direction = 2,
64 .enum bfd_plugin_format
66 . bfd_plugin_unknown = 0,
68 . bfd_plugin_yes_unused = 2,
78 .enum bfd_lto_object_type
80 . lto_non_object, {* Not an LTO object. *}
81 . lto_non_ir_object, {* An object without LTO IR. *}
82 . lto_slim_ir_object, {* A slim LTO IR object. *}
83 . lto_fat_ir_object {* A fat LTO IR object. *}
86 .struct bfd_mmapped_entry
94 . struct bfd_mmapped *next;
95 . unsigned int max_entry;
96 . unsigned int next_entry;
97 . struct bfd_mmapped_entry entries[1];
104 . {* The filename the application opened the BFD with. *}
105 . const char *filename;
107 . {* A pointer to the target jump table. *}
108 . const struct bfd_target *xvec;
110 . {* The IOSTREAM, and corresponding IO vector that provide access
111 . to the file backing the BFD. *}
113 . const struct bfd_iovec *iovec;
115 . {* The caching routines use these to maintain a
116 . least-recently-used list of BFDs. *}
117 . struct bfd *lru_prev, *lru_next;
119 . {* Track current file position (or current buffer offset for
120 . in-memory BFDs). When a file is closed by the caching routines,
121 . BFD retains state information on the file here. *}
124 . {* File modified time, if mtime_set is TRUE. *}
127 . {* A unique identifier of the BFD *}
130 . {* Format_specific flags. *}
133 . {* Values that may appear in the flags field of a BFD. These also
134 . appear in the object_flags field of the bfd_target structure, where
135 . they indicate the set of flags used by that backend (not all flags
136 . are meaningful for all object file formats) (FIXME: at the moment,
137 . the object_flags values have mostly just been copied from backend
138 . to another, and are not necessarily correct). *}
140 .#define BFD_NO_FLAGS 0x0
142 . {* BFD contains relocation entries. *}
143 .#define HAS_RELOC 0x1
145 . {* BFD is directly executable. *}
148 . {* BFD has line number information (basically used for F_LNNO in a
150 .#define HAS_LINENO 0x4
152 . {* BFD has debugging information. *}
153 .#define HAS_DEBUG 0x08
155 . {* BFD has symbols. *}
156 .#define HAS_SYMS 0x10
158 . {* BFD has local symbols (basically used for F_LSYMS in a COFF
160 .#define HAS_LOCALS 0x20
162 . {* BFD is a dynamic object. *}
163 .#define DYNAMIC 0x40
165 . {* Text section is write protected (if D_PAGED is not set, this is
166 . like an a.out NMAGIC file) (the linker sets this by default, but
167 . clears it for -r or -N). *}
168 .#define WP_TEXT 0x80
170 . {* BFD is dynamically paged (this is like an a.out ZMAGIC file) (the
171 . linker sets this by default, but clears it for -r or -n or -N). *}
172 .#define D_PAGED 0x100
174 . {* BFD is relaxable (this means that bfd_relax_section may be able to
175 . do something) (sometimes bfd_relax_section can do something even if
176 . this is not set). *}
177 .#define BFD_IS_RELAXABLE 0x200
179 . {* This may be set before writing out a BFD to request using a
180 . traditional format. For example, this is used to request that when
181 . writing out an a.out object the symbols not be hashed to eliminate
183 .#define BFD_TRADITIONAL_FORMAT 0x400
185 . {* This flag indicates that the BFD contents are actually cached
186 . in memory. If this is set, iostream points to a malloc'd
187 . bfd_in_memory struct. *}
188 .#define BFD_IN_MEMORY 0x800
190 . {* This BFD has been created by the linker and doesn't correspond
191 . to any input file. *}
192 .#define BFD_LINKER_CREATED 0x1000
194 . {* This may be set before writing out a BFD to request that it
195 . be written using values for UIDs, GIDs, timestamps, etc. that
196 . will be consistent from run to run. *}
197 .#define BFD_DETERMINISTIC_OUTPUT 0x2000
199 . {* Compress sections in this BFD. *}
200 .#define BFD_COMPRESS 0x4000
202 . {* Decompress sections in this BFD. *}
203 .#define BFD_DECOMPRESS 0x8000
205 . {* BFD is a dummy, for plugins. *}
206 .#define BFD_PLUGIN 0x10000
208 . {* Compress sections in this BFD with SHF_COMPRESSED from gABI. *}
209 .#define BFD_COMPRESS_GABI 0x20000
211 . {* Convert ELF common symbol type to STT_COMMON or STT_OBJECT in this
213 .#define BFD_CONVERT_ELF_COMMON 0x40000
215 . {* Use the ELF STT_COMMON type in this BFD. *}
216 .#define BFD_USE_ELF_STT_COMMON 0x80000
218 . {* Put pathnames into archives (non-POSIX). *}
219 .#define BFD_ARCHIVE_FULL_PATH 0x100000
221 .#define BFD_CLOSED_BY_CACHE 0x200000
223 . {* Compress sections in this BFD with SHF_COMPRESSED zstd. *}
224 .#define BFD_COMPRESS_ZSTD 0x400000
226 . {* Don't generate ELF section header. *}
227 .#define BFD_NO_SECTION_HEADER 0x800000
229 . {* Flags bits which are for BFD use only. *}
230 .#define BFD_FLAGS_FOR_BFD_USE_MASK \
231 . (BFD_IN_MEMORY | BFD_COMPRESS | BFD_DECOMPRESS | BFD_LINKER_CREATED \
232 . | BFD_PLUGIN | BFD_TRADITIONAL_FORMAT | BFD_DETERMINISTIC_OUTPUT \
233 . | BFD_COMPRESS_GABI | BFD_CONVERT_ELF_COMMON | BFD_USE_ELF_STT_COMMON \
234 . | BFD_NO_SECTION_HEADER)
236 . {* The format which belongs to the BFD. (object, core, etc.) *}
237 . ENUM_BITFIELD (bfd_format) format : 3;
239 . {* The direction with which the BFD was opened. *}
240 . ENUM_BITFIELD (bfd_direction) direction : 2;
242 . {* POSIX.1-2017 (IEEE Std 1003.1) says of fopen : "When a file is
243 . opened with update mode ('+' as the second or third character in
244 . the mode argument), both input and output may be performed on
245 . the associated stream. However, the application shall ensure
246 . that output is not directly followed by input without an
247 . intervening call to fflush() or to a file positioning function
248 . (fseek(), fsetpos(), or rewind()), and input is not directly
249 . followed by output without an intervening call to a file
250 . positioning function, unless the input operation encounters
252 . This field tracks the last IO operation, so that bfd can insert
253 . a seek when IO direction changes. *}
254 . ENUM_BITFIELD (bfd_last_io) last_io : 2;
256 . {* Is the file descriptor being cached? That is, can it be closed as
257 . needed, and re-opened when accessed later? *}
258 . unsigned int cacheable : 1;
260 . {* Marks whether there was a default target specified when the
261 . BFD was opened. This is used to select which matching algorithm
262 . to use to choose the back end. *}
263 . unsigned int target_defaulted : 1;
265 . {* ... and here: (``once'' means at least once). *}
266 . unsigned int opened_once : 1;
268 . {* Set if we have a locally maintained mtime value, rather than
269 . getting it from the file each time. *}
270 . unsigned int mtime_set : 1;
272 . {* Flag set if symbols from this BFD should not be exported. *}
273 . unsigned int no_export : 1;
275 . {* Remember when output has begun, to stop strange things
277 . unsigned int output_has_begun : 1;
279 . {* Have archive map. *}
280 . unsigned int has_armap : 1;
282 . {* Set if this is a thin archive. *}
283 . unsigned int is_thin_archive : 1;
285 . {* Set if this archive should not cache element positions. *}
286 . unsigned int no_element_cache : 1;
288 . {* Set if only required symbols should be added in the link hash table for
289 . this object. Used by VMS linkers. *}
290 . unsigned int selective_search : 1;
292 . {* Set if this is the linker output BFD. *}
293 . unsigned int is_linker_output : 1;
295 . {* Set if this is the linker input BFD. *}
296 . unsigned int is_linker_input : 1;
298 . {* If this is an input for a compiler plug-in library. *}
299 . ENUM_BITFIELD (bfd_plugin_format) plugin_format : 2;
301 . {* Set if this is a plugin output file. *}
302 . unsigned int lto_output : 1;
304 . {* Do not attempt to modify this file. Set when detecting errors
305 . that BFD is not prepared to handle for objcopy/strip. *}
306 . unsigned int read_only : 1;
308 . {* LTO object type. *}
309 . ENUM_BITFIELD (bfd_lto_object_type) lto_type : 2;
311 . {* Set if this BFD is currently being processed by
312 . bfd_check_format_matches. This is checked by the cache to
313 . avoid closing the BFD in this case. This should only be
314 . examined or modified while the BFD lock is held. *}
315 . unsigned int in_format_matches : 1;
317 . {* Set to dummy BFD created when claimed by a compiler plug-in
319 . bfd *plugin_dummy_bfd;
321 . {* The offset of this bfd in the file, typically 0 if it is not
322 . contained in an archive. *}
325 . {* The origin in the archive of the proxy entry. This will
326 . normally be the same as origin, except for thin archives,
327 . when it will contain the current offset of the proxy in the
328 . thin archive rather than the offset of the bfd in its actual
330 . ufile_ptr proxy_origin;
332 . {* A hash table for section names. *}
333 . struct bfd_hash_table section_htab;
335 . {* Pointer to linked list of sections. *}
336 . struct bfd_section *sections;
338 . {* The last section on the section list. *}
339 . struct bfd_section *section_last;
341 . {* The number of sections. *}
342 . unsigned int section_count;
344 . {* The archive plugin file descriptor. *}
345 . int archive_plugin_fd;
347 . {* The number of opens on the archive plugin file descriptor. *}
348 . unsigned int archive_plugin_fd_open_count;
350 . {* A field used by _bfd_generic_link_add_archive_symbols. This will
351 . be used only for archive elements. *}
354 . {* The total size of memory from bfd_alloc. *}
355 . bfd_size_type alloc_size;
357 . {* Stuff only useful for object files:
358 . The start address. *}
359 . bfd_vma start_address;
361 . {* Symbol table for output BFD (with symcount entries).
362 . Also used by the linker to cache input BFD symbols. *}
363 . struct bfd_symbol **outsymbols;
365 . {* Used for input and output. *}
366 . unsigned int symcount;
368 . {* Used for slurped dynamic symbol tables. *}
369 . unsigned int dynsymcount;
371 . {* Pointer to structure which contains architecture information. *}
372 . const struct bfd_arch_info *arch_info;
374 . {* Cached length of file for bfd_get_size. 0 until bfd_get_size is
375 . called, 1 if stat returns an error or the file size is too large to
376 . return in ufile_ptr. Both 0 and 1 should be treated as "unknown". *}
379 . {* Stuff only useful for archives. *}
381 . struct bfd *my_archive; {* The containing archive BFD. *}
382 . struct bfd *archive_next; {* The next BFD in the archive. *}
383 . struct bfd *archive_head; {* The first BFD in the archive. *}
384 . struct bfd *nested_archives; {* List of nested archive in a flattened
388 . {* For input BFDs, a chain of BFDs involved in a link. *}
390 . {* For output BFD, the linker hash table. *}
391 . struct bfd_link_hash_table *hash;
394 . {* Used by the back end to hold private data. *}
397 . struct aout_data_struct *aout_data;
398 . struct artdata *aout_ar_data;
399 . struct coff_tdata *coff_obj_data;
400 . struct pe_tdata *pe_obj_data;
401 . struct xcoff_tdata *xcoff_obj_data;
402 . struct ecoff_tdata *ecoff_obj_data;
403 . struct srec_data_struct *srec_data;
404 . struct verilog_data_struct *verilog_data;
405 . struct ihex_data_struct *ihex_data;
406 . struct tekhex_data_struct *tekhex_data;
407 . struct elf_obj_tdata *elf_obj_data;
408 . struct mmo_data_struct *mmo_data;
409 . struct trad_core_struct *trad_core_data;
410 . struct som_data_struct *som_data;
411 . struct hpux_core_struct *hpux_core_data;
412 . struct hppabsd_core_struct *hppabsd_core_data;
413 . struct sgi_core_struct *sgi_core_data;
414 . struct lynx_core_struct *lynx_core_data;
415 . struct osf_core_struct *osf_core_data;
416 . struct cisco_core_struct *cisco_core_data;
417 . struct netbsd_core_struct *netbsd_core_data;
418 . struct mach_o_data_struct *mach_o_data;
419 . struct mach_o_fat_data_struct *mach_o_fat_data;
420 . struct plugin_data_struct *plugin_data;
421 . struct bfd_pef_data_struct *pef_data;
422 . struct bfd_pef_xlib_data_struct *pef_xlib_data;
423 . struct bfd_sym_data_struct *sym_data;
428 . {* Used by the application to hold private data. *}
431 . {* Where all the allocated stuff under this BFD goes. This is a
432 . struct objalloc *, but we use void * to avoid requiring the inclusion
436 . {* For input BFDs, the build ID, if the object has one. *}
437 . const struct bfd_build_id *build_id;
439 . {* For input BFDs, mmapped entries. *}
440 . struct bfd_mmapped *mmapped;
445 .static inline const char *
446 .bfd_get_filename (const bfd *abfd)
448 . return abfd->filename;
452 .bfd_get_cacheable (const bfd *abfd)
454 . return abfd->cacheable;
457 .static inline enum bfd_format
458 .bfd_get_format (const bfd *abfd)
460 . return abfd->format;
463 .static inline enum bfd_lto_object_type
464 .bfd_get_lto_type (const bfd *abfd)
466 . return abfd->lto_type;
469 .static inline flagword
470 .bfd_get_file_flags (const bfd *abfd)
472 . return abfd->flags;
475 .static inline bfd_vma
476 .bfd_get_start_address (const bfd *abfd)
478 . return abfd->start_address;
481 .static inline unsigned int
482 .bfd_get_symcount (const bfd *abfd)
484 . return abfd->symcount;
487 .static inline unsigned int
488 .bfd_get_dynamic_symcount (const bfd *abfd)
490 . return abfd->dynsymcount;
493 .static inline struct bfd_symbol **
494 .bfd_get_outsymbols (const bfd *abfd)
496 . return abfd->outsymbols;
499 .static inline unsigned int
500 .bfd_count_sections (const bfd *abfd)
502 . return abfd->section_count;
506 .bfd_has_map (const bfd *abfd)
508 . return abfd->has_armap;
512 .bfd_is_thin_archive (const bfd *abfd)
514 . return abfd->is_thin_archive;
517 .static inline void *
518 .bfd_usrdata (const bfd *abfd)
520 . return abfd->usrdata;
523 .{* See note beside bfd_set_section_userdata. *}
525 .bfd_set_cacheable (bfd * abfd, bool val)
527 . abfd->cacheable = val;
532 .bfd_set_thin_archive (bfd *abfd, bool val)
534 . abfd->is_thin_archive = val;
538 .bfd_set_usrdata (bfd *abfd, void *val)
540 . abfd->usrdata = val;
543 .static inline asection *
544 .bfd_asymbol_section (const asymbol *sy)
546 . return sy->section;
549 .static inline bfd_vma
550 .bfd_asymbol_value (const asymbol *sy)
552 . return sy->section->vma + sy->value;
555 .static inline const char *
556 .bfd_asymbol_name (const asymbol *sy)
561 .static inline struct bfd *
562 .bfd_asymbol_bfd (const asymbol *sy)
564 . return sy->the_bfd;
568 .bfd_set_asymbol_name (asymbol *sy, const char *name)
573 .{* For input sections return the original size on disk of the
574 . section. For output sections return the current size. *}
575 .static inline bfd_size_type
576 .bfd_get_section_limit_octets (const bfd *abfd, const asection *sec)
578 . if (abfd->direction != write_direction && sec->rawsize != 0)
579 . return sec->rawsize;
583 .{* Find the address one past the end of SEC. *}
584 .static inline bfd_size_type
585 .bfd_get_section_limit (const bfd *abfd, const asection *sec)
587 . return (bfd_get_section_limit_octets (abfd, sec)
588 . / bfd_octets_per_byte (abfd, sec));
591 .{* For input sections return the larger of the current size and the
592 . original size on disk of the section. For output sections return
593 . the current size. *}
594 .static inline bfd_size_type
595 .bfd_get_section_alloc_size (const bfd *abfd, const asection *sec)
597 . if (abfd->direction != write_direction && sec->rawsize > sec->size)
598 . return sec->rawsize;
602 .{* Functions to handle insertion and deletion of a bfd's sections. These
603 . only handle the list pointers, ie. do not adjust section_count,
604 . target_index etc. *}
606 .bfd_section_list_remove (bfd *abfd, asection *s)
608 . asection *next = s->next;
609 . asection *prev = s->prev;
613 . abfd->sections = next;
617 . abfd->section_last = prev;
621 .bfd_section_list_append (bfd *abfd, asection *s)
624 . if (abfd->section_last)
626 . s->prev = abfd->section_last;
627 . abfd->section_last->next = s;
632 . abfd->sections = s;
634 . abfd->section_last = s;
638 .bfd_section_list_prepend (bfd *abfd, asection *s)
641 . if (abfd->sections)
643 . s->next = abfd->sections;
644 . abfd->sections->prev = s;
649 . abfd->section_last = s;
651 . abfd->sections = s;
655 .bfd_section_list_insert_after (bfd *abfd, asection *a, asection *s)
657 . asection *next = a->next;
664 . abfd->section_last = s;
668 .bfd_section_list_insert_before (bfd *abfd, asection *b, asection *s)
670 . asection *prev = b->prev;
677 . abfd->sections = s;
681 .bfd_section_removed_from_list (const bfd *abfd, const asection *s)
683 . return s->next ? s->next->prev != s : abfd->section_last != s;
692 #include "libiberty.h"
693 #include "demangle.h"
694 #include "safe-ctype.h"
697 #include "coff/internal.h"
698 #include "coff/sym.h"
700 #include "libecoff.h"
705 #define EXIT_FAILURE 1
709 /* provide storage for subsystem, stack and heap data which may have been
710 passed in on the command line. Ld puts this data into a bfd_link_info
711 struct which ultimately gets passed in to the bfd. When it arrives, copy
712 it to the following struct so that the data will be available in coffcode.h
713 where it is needed. The typedef's used are defined in bfd.h */
717 Error reporting, Initialization, typedef bfd, BFD front end
722 Most BFD functions return nonzero on success (check their
723 individual documentation for precise semantics). On an error,
724 they call <<bfd_set_error>> to set an error condition that callers
725 can check by calling <<bfd_get_error>>.
726 If that returns <<bfd_error_system_call>>, then check
729 The easiest way to report a BFD error to the user is to
732 The BFD error is thread-local.
735 Type <<bfd_error_type>>
737 The values returned by <<bfd_get_error>> are defined by the
738 enumerated type <<bfd_error_type>>.
741 .typedef enum bfd_error
743 . bfd_error_no_error = 0,
744 . bfd_error_system_call,
745 . bfd_error_invalid_target,
746 . bfd_error_wrong_format,
747 . bfd_error_wrong_object_format,
748 . bfd_error_invalid_operation,
749 . bfd_error_no_memory,
750 . bfd_error_no_symbols,
751 . bfd_error_no_armap,
752 . bfd_error_no_more_archived_files,
753 . bfd_error_malformed_archive,
754 . bfd_error_missing_dso,
755 . bfd_error_file_not_recognized,
756 . bfd_error_file_ambiguously_recognized,
757 . bfd_error_no_contents,
758 . bfd_error_nonrepresentable_section,
759 . bfd_error_no_debug_section,
760 . bfd_error_bad_value,
761 . bfd_error_file_truncated,
762 . bfd_error_file_too_big,
764 . bfd_error_on_input,
765 . bfd_error_invalid_error_code
771 static TLS bfd_error_type bfd_error
;
772 static TLS bfd_error_type input_error
;
773 static TLS bfd
*input_bfd
;
774 static TLS
char *_bfd_error_buf
;
776 const char *const bfd_errmsgs
[] =
779 N_("system call error"),
780 N_("invalid bfd target"),
781 N_("file in wrong format"),
782 N_("archive object file in wrong format"),
783 N_("invalid operation"),
784 N_("memory exhausted"),
786 N_("archive has no index; run ranlib to add one"),
787 N_("no more archived files"),
788 N_("malformed archive"),
789 N_("DSO missing from command line"),
790 N_("file format not recognized"),
791 N_("file format is ambiguous"),
792 N_("section has no contents"),
793 N_("nonrepresentable section on output"),
794 N_("symbol needs debug section which does not exist"),
796 N_("file truncated"),
798 N_("sorry, cannot handle this file"),
799 N_("error reading %s: %s"),
800 N_("#<invalid error code>")
808 bfd_error_type bfd_get_error (void);
811 Return the current BFD error condition.
825 void bfd_set_error (bfd_error_type error_tag);
828 Set the BFD error condition to be @var{error_tag}.
830 @var{error_tag} must not be bfd_error_on_input. Use
831 bfd_set_input_error for input errors instead.
835 bfd_set_error (bfd_error_type error_tag
)
837 bfd_error
= error_tag
;
838 if (bfd_error
>= bfd_error_on_input
)
847 void bfd_set_input_error (bfd *input, bfd_error_type error_tag);
851 Set the BFD error condition to be bfd_error_on_input.
852 @var{input} is the input bfd where the error occurred, and
853 @var{error_tag} the bfd_error_type error.
857 bfd_set_input_error (bfd
*input
, bfd_error_type error_tag
)
859 /* This is an error that occurred during bfd_close when writing an
860 archive, but on one of the input files. */
861 bfd_error
= bfd_error_on_input
;
862 _bfd_clear_error_data ();
864 input_error
= error_tag
;
865 if (input_error
>= bfd_error_on_input
)
874 const char *bfd_errmsg (bfd_error_type error_tag);
877 Return a string describing the error @var{error_tag}, or
878 the system error if @var{error_tag} is <<bfd_error_system_call>>.
882 bfd_errmsg (bfd_error_type error_tag
)
887 if (error_tag
== bfd_error_on_input
)
889 const char *msg
= bfd_errmsg (input_error
);
890 char *ret
= bfd_asprintf (_(bfd_errmsgs
[error_tag
]),
891 bfd_get_filename (input_bfd
), msg
);
895 /* Ick, what to do on out of memory? */
899 if (error_tag
== bfd_error_system_call
)
900 return xstrerror (errno
);
902 if (error_tag
> bfd_error_invalid_error_code
)
903 error_tag
= bfd_error_invalid_error_code
; /* sanity check */
905 return _(bfd_errmsgs
[error_tag
]);
913 void bfd_perror (const char *message);
916 Print to the standard error stream a string describing the
917 last BFD error that occurred, or the last system error if
918 the last BFD error was a system call failure. If @var{message}
919 is non-NULL and non-empty, the error string printed is preceded
920 by @var{message}, a colon, and a space. It is followed by a newline.
924 bfd_perror (const char *message
)
927 if (message
== NULL
|| *message
== '\0')
928 fprintf (stderr
, "%s\n", bfd_errmsg (bfd_get_error ()));
930 fprintf (stderr
, "%s: %s\n", message
, bfd_errmsg (bfd_get_error ()));
936 _bfd_clear_error_data
939 void _bfd_clear_error_data (void);
942 Free any data associated with the BFD error.
946 _bfd_clear_error_data (void)
948 free (_bfd_error_buf
);
949 _bfd_error_buf
= NULL
;
957 char *bfd_asprintf (const char *fmt, ...);
960 Primarily for error reporting, this function is like
961 libiberty's xasprintf except that it can return NULL on no
962 memory and the returned string should not be freed. Uses a
963 thread-local malloc'd buffer managed by libbfd, _bfd_error_buf.
964 Be aware that a call to this function frees the result of any
965 previous call. bfd_errmsg (bfd_error_on_input) also calls
970 bfd_asprintf (const char *fmt
, ...)
972 free (_bfd_error_buf
);
973 _bfd_error_buf
= NULL
;
976 int count
= vasprintf (&_bfd_error_buf
, fmt
, ap
);
980 bfd_set_error (bfd_error_no_memory
);
981 _bfd_error_buf
= NULL
;
983 return _bfd_error_buf
;
990 Some BFD functions want to print messages describing the
991 problem. They call a BFD error handler function. This
992 function may be overridden by the program.
994 The BFD error handler acts like vprintf.
997 .typedef void (*bfd_error_handler_type) (const char *, va_list);
1001 /* The program name used when printing BFD error messages. */
1003 static const char *_bfd_error_program_name
;
1005 /* Support for positional parameters. */
1007 union _bfd_doprnt_args
1027 /* Maximum number of _bfd_error_handler args. Don't increase this
1028 without changing the code handling positional parameters. */
1031 /* This macro and _bfd_doprnt taken from libiberty _doprnt.c, tidied a
1032 little and extended to handle '%pA', '%pB' and positional parameters. */
1034 #define PRINT_TYPE(TYPE, FIELD) \
1037 TYPE value = (TYPE) args[arg_no].FIELD; \
1038 result = print (stream, specifier, value); \
1043 .typedef int (*bfd_print_callback) (void *, const char *, ...);
1047 _bfd_doprnt (bfd_print_callback print
, void *stream
, const char *format
,
1048 union _bfd_doprnt_args
*args
)
1050 const char *ptr
= format
;
1051 char specifier
[128];
1052 int total_printed
= 0;
1053 unsigned int arg_count
= 0;
1055 while (*ptr
!= '\0')
1061 /* While we have regular characters, print them. */
1062 char *end
= strchr (ptr
, '%');
1064 result
= print (stream
, "%.*s", (int) (end
- ptr
), ptr
);
1066 result
= print (stream
, "%s", ptr
);
1069 else if (ptr
[1] == '%')
1071 print (stream
, "%%");
1077 /* We have a format specifier! */
1078 char *sptr
= specifier
;
1079 int wide_width
= 0, short_width
= 0;
1080 unsigned int arg_no
;
1082 /* Copy the % and move forward. */
1085 /* Check for a positional parameter. */
1087 if (*ptr
!= '0' && ISDIGIT (*ptr
) && ptr
[1] == '$')
1089 arg_no
= *ptr
- '1';
1093 /* Move past flags. */
1094 while (strchr ("-+ #0'I", *ptr
))
1100 unsigned int arg_index
;
1103 arg_index
= arg_count
;
1104 if (*ptr
!= '0' && ISDIGIT (*ptr
) && ptr
[1] == '$')
1106 arg_index
= *ptr
- '1';
1109 value
= abs (args
[arg_index
].i
);
1111 sptr
+= sprintf (sptr
, "%d", value
);
1114 /* Handle explicit numeric value. */
1115 while (ISDIGIT (*ptr
))
1121 /* Copy and go past the period. */
1126 unsigned int arg_index
;
1129 arg_index
= arg_count
;
1130 if (*ptr
!= '0' && ISDIGIT (*ptr
) && ptr
[1] == '$')
1132 arg_index
= *ptr
- '1';
1135 value
= abs (args
[arg_index
].i
);
1137 sptr
+= sprintf (sptr
, "%d", value
);
1140 /* Handle explicit numeric value. */
1141 while (ISDIGIT (*ptr
))
1144 while (strchr ("hlL", *ptr
))
1163 /* Copy the type specifier, and NULL terminate. */
1166 if ((int) arg_no
< 0)
1179 /* Short values are promoted to int, so just copy it
1180 as an int and trust the C library printf to cast it
1181 to the right width. */
1183 PRINT_TYPE (int, i
);
1189 PRINT_TYPE (int, i
);
1192 PRINT_TYPE (long, l
);
1196 #if defined (__MSVCRT__)
1203 PRINT_TYPE (long long, ll
);
1215 if (wide_width
== 0)
1216 PRINT_TYPE (double, d
);
1218 PRINT_TYPE (long double, ld
);
1222 PRINT_TYPE (char *, p
);
1229 const char *group
= NULL
;
1230 struct coff_comdat_info
*ci
;
1233 sec
= (asection
*) args
[arg_no
].p
;
1235 /* Invoking %pA with a null section pointer is an
1240 && bfd_get_flavour (abfd
) == bfd_target_elf_flavour
1241 && elf_next_in_group (sec
) != NULL
1242 && (sec
->flags
& SEC_GROUP
) == 0)
1243 group
= elf_group_name (sec
);
1244 else if (abfd
!= NULL
1245 && bfd_get_flavour (abfd
) == bfd_target_coff_flavour
1246 && (ci
= bfd_coff_get_comdat_section (sec
->owner
,
1250 result
= print (stream
, "%s[%s]", sec
->name
, group
);
1252 result
= print (stream
, "%s", sec
->name
);
1254 else if (*ptr
== 'B')
1259 abfd
= (bfd
*) args
[arg_no
].p
;
1261 /* Invoking %pB with a null bfd pointer is an
1264 else if (abfd
->my_archive
1265 && !bfd_is_thin_archive (abfd
->my_archive
))
1266 result
= print (stream
, "%s(%s)",
1267 bfd_get_filename (abfd
->my_archive
),
1268 bfd_get_filename (abfd
));
1270 result
= print (stream
, "%s", bfd_get_filename (abfd
));
1273 PRINT_TYPE (void *, p
);
1282 total_printed
+= result
;
1285 return total_printed
;
1288 /* First pass over FORMAT to gather ARGS. Returns number of args. */
1291 _bfd_doprnt_scan (const char *format
, va_list ap
, union _bfd_doprnt_args
*args
)
1293 const char *ptr
= format
;
1294 unsigned int arg_count
= 0;
1296 for (unsigned int i
= 0; i
< MAX_ARGS
; i
++)
1299 while (*ptr
!= '\0')
1303 ptr
= strchr (ptr
, '%');
1307 else if (ptr
[1] == '%')
1311 int wide_width
= 0, short_width
= 0;
1312 unsigned int arg_no
;
1317 /* Check for a positional parameter. */
1319 if (*ptr
!= '0' && ISDIGIT (*ptr
) && ptr
[1] == '$')
1321 arg_no
= *ptr
- '1';
1325 /* Move past flags. */
1326 while (strchr ("-+ #0'I", *ptr
))
1331 unsigned int arg_index
;
1334 arg_index
= arg_count
;
1335 if (*ptr
!= '0' && ISDIGIT (*ptr
) && ptr
[1] == '$')
1337 arg_index
= *ptr
- '1';
1340 if (arg_index
>= MAX_ARGS
)
1342 args
[arg_index
].type
= Int
;
1346 /* Handle explicit numeric value. */
1347 while (ISDIGIT (*ptr
))
1356 unsigned int arg_index
;
1359 arg_index
= arg_count
;
1360 if (*ptr
!= '0' && ISDIGIT (*ptr
) && ptr
[1] == '$')
1362 arg_index
= *ptr
- '1';
1365 if (arg_index
>= MAX_ARGS
)
1367 args
[arg_index
].type
= Int
;
1371 /* Handle explicit numeric value. */
1372 while (ISDIGIT (*ptr
))
1375 while (strchr ("hlL", *ptr
))
1395 if ((int) arg_no
< 0)
1423 arg_type
= LongLong
;
1435 if (wide_width
== 0)
1438 arg_type
= LongDouble
;
1445 if (*ptr
== 'A' || *ptr
== 'B')
1453 if (arg_no
>= MAX_ARGS
)
1455 args
[arg_no
].type
= arg_type
;
1460 for (unsigned int i
= 0; i
< arg_count
; i
++)
1462 switch (args
[i
].type
)
1465 args
[i
].i
= va_arg (ap
, int);
1468 args
[i
].l
= va_arg (ap
, long);
1471 args
[i
].ll
= va_arg (ap
, long long);
1474 args
[i
].d
= va_arg (ap
, double);
1477 args
[i
].ld
= va_arg (ap
, long double);
1480 args
[i
].p
= va_arg (ap
, void *);
1491 _bfd_print (bfd_print_callback print_func
, void *stream
,
1492 const char *fmt
, va_list ap
)
1494 union _bfd_doprnt_args args
[MAX_ARGS
];
1496 _bfd_doprnt_scan (fmt
, ap
, args
);
1497 _bfd_doprnt (print_func
, stream
, fmt
, args
);
1505 void bfd_print_error (bfd_print_callback print_func,
1506 void *stream, const char *fmt, va_list ap);
1510 This formats FMT and AP according to BFD "printf" rules,
1511 sending the output to STREAM by repeated calls to PRINT_FUNC.
1512 PRINT_FUNC is a printf-like function; it does not need to
1513 implement the BFD printf format extensions. This can be used
1514 in a callback that is set via bfd_set_error_handler to turn
1515 the error into ordinary output.
1519 bfd_print_error (bfd_print_callback print_func
, void *stream
,
1520 const char *fmt
, va_list ap
)
1522 print_func (stream
, "%s: ", _bfd_get_error_program_name ());
1523 _bfd_print (print_func
, stream
, fmt
, ap
);
1526 /* The standard error handler that prints to stderr. */
1529 error_handler_fprintf (const char *fmt
, va_list ap
)
1531 /* PR 4992: Don't interrupt output being sent to stdout. */
1534 bfd_print_error ((bfd_print_callback
) fprintf
, stderr
, fmt
, ap
);
1536 /* On AIX, putc is implemented as a macro that triggers a -Wunused-value
1537 warning, so use the fputc function to avoid it. */
1538 fputc ('\n', stderr
);
1542 /* Control printing to a string buffer. */
1549 /* An fprintf like function that instead prints to a string buffer. */
1552 err_sprintf (void *stream
, const char *fmt
, ...)
1554 struct buf_stream
*s
= stream
;
1558 int total
= vsnprintf (s
->ptr
, s
->left
, fmt
, ap
);
1562 else if (total
> s
->left
)
1577 .{* Cached _bfd_check_format messages are put in this. *}
1578 .struct per_xvec_message
1580 . struct per_xvec_message *next;
1584 .{* A list of per_xvec_message objects. The targ field indicates
1585 . which xvec this list holds; PER_XVEC_NO_TARGET is only set for the
1586 . root of the list and indicates that the entry isn't yet used. The
1587 . abfd field is only needed in the root entry of the list. *}
1588 .struct per_xvec_messages
1591 . const bfd_target *targ;
1592 . struct per_xvec_message *messages;
1593 . struct per_xvec_messages *next;
1596 .#define PER_XVEC_NO_TARGET ((const bfd_target *) -1)
1599 /* Helper function to find or allocate the correct per-xvec object
1600 when emitting a message. */
1602 static struct per_xvec_message
*
1603 _bfd_per_xvec_warn (struct per_xvec_messages
*messages
, size_t alloc
)
1605 const bfd_target
*targ
= messages
->abfd
->xvec
;
1607 struct per_xvec_messages
*prev
= NULL
;
1608 struct per_xvec_messages
*iter
= messages
;
1610 if (iter
->targ
== PER_XVEC_NO_TARGET
)
1613 for (; iter
!= NULL
; iter
= iter
->next
)
1615 if (iter
->targ
== targ
)
1622 iter
= bfd_malloc (sizeof (*iter
));
1625 iter
->abfd
= messages
->abfd
;
1627 iter
->messages
= NULL
;
1632 struct per_xvec_message
**m
= &iter
->messages
;
1639 /* Anti-fuzzer measure. Don't cache more than 5 messages. */
1642 *m
= bfd_malloc (sizeof (**m
) + alloc
);
1649 /* Communicate the error-message container processed by
1650 bfd_check_format_matches to the error handling function
1651 error_handler_sprintf. When non-NULL, _bfd_error_handler will call
1652 error_handler_sprintf; when NULL, _bfd_error_internal will be used
1655 static TLS
struct per_xvec_messages
*error_handler_messages
;
1657 /* A special value for error_handler_messages that indicates that the
1658 error should simply be ignored. */
1659 #define IGNORE_ERROR_MESSAGES ((struct per_xvec_messages *) -1)
1661 /* An error handler that prints to a string, then dups that string to
1662 a per-xvec cache. */
1665 error_handler_sprintf (const char *fmt
, va_list ap
)
1667 char error_buf
[1024];
1668 struct buf_stream error_stream
;
1670 error_stream
.ptr
= error_buf
;
1671 error_stream
.left
= sizeof (error_buf
);
1673 _bfd_print (err_sprintf
, &error_stream
, fmt
, ap
);
1675 size_t len
= error_stream
.ptr
- error_buf
;
1676 struct per_xvec_message
*warn
1677 = _bfd_per_xvec_warn (error_handler_messages
, len
+ 1);
1680 memcpy (warn
->message
, error_buf
, len
);
1681 warn
->message
[len
] = 0;
1685 /* This is a function pointer to the routine which should handle BFD
1686 error messages. It is called when a BFD routine encounters an
1687 error for which it wants to print a message. Going through a
1688 function pointer permits a program linked against BFD to intercept
1689 the messages and deal with them itself. */
1691 static bfd_error_handler_type _bfd_error_internal
= error_handler_fprintf
;
1698 void _bfd_error_handler (const char *fmt, ...) ATTRIBUTE_PRINTF_1;
1701 This is the default routine to handle BFD error messages.
1702 Like fprintf (stderr, ...), but also handles some extra format
1705 %pA section name from section. For group components, prints
1707 %pB file name from bfd. For archive components, prints
1710 Beware: Only supports a maximum of 9 format arguments.
1714 _bfd_error_handler (const char *fmt
, ...)
1719 if (error_handler_messages
== IGNORE_ERROR_MESSAGES
)
1723 else if (error_handler_messages
!= NULL
)
1724 error_handler_sprintf (fmt
, ap
);
1726 _bfd_error_internal (fmt
, ap
);
1732 bfd_set_error_handler
1735 bfd_error_handler_type bfd_set_error_handler (bfd_error_handler_type);
1738 Set the BFD error handler function. Returns the previous
1742 bfd_error_handler_type
1743 bfd_set_error_handler (bfd_error_handler_type pnew
)
1745 bfd_error_handler_type pold
;
1747 pold
= _bfd_error_internal
;
1748 _bfd_error_internal
= pnew
;
1754 _bfd_set_error_handler_caching
1757 struct per_xvec_messages *_bfd_set_error_handler_caching (struct per_xvec_messages *);
1760 Set the BFD error handler function to one that stores messages
1761 to the per_xvec_messages object. Returns the previous object
1762 to which messages are stored. Note that two sequential calls
1763 to this with a non-NULL argument will cause output to be
1764 dropped, rather than gathered.
1767 struct per_xvec_messages
*
1768 _bfd_set_error_handler_caching (struct per_xvec_messages
*messages
)
1770 struct per_xvec_messages
*old
= error_handler_messages
;
1772 error_handler_messages
= messages
;
1774 error_handler_messages
= IGNORE_ERROR_MESSAGES
;
1780 _bfd_restore_error_handler_caching
1783 void _bfd_restore_error_handler_caching (struct per_xvec_messages *);
1786 Reset the BFD error handler object to an earlier value.
1790 _bfd_restore_error_handler_caching (struct per_xvec_messages
*old
)
1792 error_handler_messages
= old
;
1797 bfd_set_error_program_name
1800 void bfd_set_error_program_name (const char *);
1803 Set the program name to use when printing a BFD error. This
1804 is printed before the error message followed by a colon and
1805 space. The string must not be changed after it is passed to
1810 bfd_set_error_program_name (const char *name
)
1812 _bfd_error_program_name
= name
;
1817 _bfd_get_error_program_name
1820 const char *_bfd_get_error_program_name (void);
1823 Get the program name used when printing a BFD error.
1827 _bfd_get_error_program_name (void)
1829 if (_bfd_error_program_name
!= NULL
)
1830 return _bfd_error_program_name
;
1838 If BFD finds an internal inconsistency, the bfd assert
1839 handler is called with information on the BFD version, BFD
1840 source file and line. If this happens, most programs linked
1841 against BFD are expected to want to exit with an error, or mark
1842 the current BFD operation as failed, so it is recommended to
1843 override the default handler, which just calls
1844 _bfd_error_handler and continues.
1847 .typedef void (*bfd_assert_handler_type) (const char *bfd_formatmsg,
1848 . const char *bfd_version,
1849 . const char *bfd_file,
1854 /* Note the use of bfd_ prefix on the parameter names above: we want to
1855 show which one is the message and which is the version by naming the
1856 parameters, but avoid polluting the program-using-bfd namespace as
1857 the typedef is visible in the exported headers that the program
1858 includes. Below, it's just for consistency. */
1861 _bfd_default_assert_handler (const char *bfd_formatmsg
,
1862 const char *bfd_version
,
1863 const char *bfd_file
,
1867 _bfd_error_handler (bfd_formatmsg
, bfd_version
, bfd_file
, bfd_line
);
1870 /* Similar to _bfd_error_handler, a program can decide to exit on an
1871 internal BFD error. We use a non-variadic type to simplify passing
1872 on parameters to other functions, e.g. _bfd_error_handler. */
1874 static bfd_assert_handler_type _bfd_assert_handler
= _bfd_default_assert_handler
;
1878 bfd_set_assert_handler
1881 bfd_assert_handler_type bfd_set_assert_handler (bfd_assert_handler_type);
1884 Set the BFD assert handler function. Returns the previous
1888 bfd_assert_handler_type
1889 bfd_set_assert_handler (bfd_assert_handler_type pnew
)
1891 bfd_assert_handler_type pold
;
1893 pold
= _bfd_assert_handler
;
1894 _bfd_assert_handler
= pnew
;
1900 Initialization, Threading, Error reporting, BFD front end
1906 unsigned int bfd_init (void);
1909 This routine must be called before any other BFD function to
1910 initialize magical internal data structures.
1911 Returns a magic number, which may be used to check
1912 that the bfd library is configured as expected by users.
1914 .{* Value returned by bfd_init. *}
1915 .#define BFD_INIT_MAGIC (sizeof (struct bfd_section))
1922 bfd_error
= bfd_error_no_error
;
1924 _bfd_clear_error_data ();
1925 input_error
= bfd_error_no_error
;
1926 _bfd_error_internal
= error_handler_fprintf
;
1927 _bfd_assert_handler
= _bfd_default_assert_handler
;
1929 return BFD_INIT_MAGIC
;
1935 Threading, Miscellaneous, Initialization, BFD front end
1940 BFD has limited support for thread-safety. Most BFD globals
1941 are protected by locks, while the error-related globals are
1942 thread-local. A given BFD cannot safely be used from two
1943 threads at the same time; it is up to the application to do
1944 any needed locking. However, it is ok for different threads
1945 to work on different BFD objects at the same time.
1951 .typedef bool (*bfd_lock_unlock_fn_type) (void *);
1954 /* The lock and unlock functions, if set. */
1955 static bfd_lock_unlock_fn_type lock_fn
;
1956 static bfd_lock_unlock_fn_type unlock_fn
;
1957 static void *lock_data
;
1964 bool bfd_thread_init
1965 (bfd_lock_unlock_fn_type lock,
1966 bfd_lock_unlock_fn_type unlock,
1971 Initialize BFD threading. The functions passed in will be
1972 used to lock and unlock global data structures. This may only
1973 be called a single time in a given process. Returns true on
1974 success and false on error. DATA is passed verbatim to the
1975 lock and unlock functions. The lock and unlock functions
1976 should return true on success, or set the BFD error and return
1981 bfd_thread_init (bfd_lock_unlock_fn_type lock
, bfd_lock_unlock_fn_type unlock
,
1984 /* Both functions must be set, and this cannot have been called
1986 if (lock
== NULL
|| unlock
== NULL
|| unlock_fn
!= NULL
)
1988 bfd_set_error (bfd_error_invalid_operation
);
2003 void bfd_thread_cleanup (void);
2006 Clean up any thread-local state. This should be called by a
2007 thread that uses any BFD functions, before the thread exits.
2008 It is fine to call this multiple times, or to call it and then
2009 later call BFD functions on the same thread again.
2013 bfd_thread_cleanup (void)
2015 _bfd_clear_error_data ();
2023 bool bfd_lock (void);
2026 Acquire the global BFD lock, if needed. Returns true on
2027 success, false on error.
2033 if (lock_fn
!= NULL
)
2034 return lock_fn (lock_data
);
2043 bool bfd_unlock (void);
2046 Release the global BFD lock, if needed. Returns true on
2047 success, false on error.
2053 if (unlock_fn
!= NULL
)
2054 return unlock_fn (lock_data
);
2061 Miscellaneous, Memory Usage, Threading, BFD front end
2067 Miscellaneous functions
2072 bfd_get_reloc_upper_bound
2075 long bfd_get_reloc_upper_bound (bfd *abfd, asection *sect);
2078 Return the number of bytes required to store the
2079 relocation information associated with section @var{sect}
2080 attached to bfd @var{abfd}. If an error occurs, return -1.
2085 bfd_get_reloc_upper_bound (bfd
*abfd
, sec_ptr asect
)
2087 if (abfd
->format
!= bfd_object
)
2089 bfd_set_error (bfd_error_invalid_operation
);
2093 return BFD_SEND (abfd
, _get_reloc_upper_bound
, (abfd
, asect
));
2098 bfd_canonicalize_reloc
2101 long bfd_canonicalize_reloc
2102 (bfd *abfd, asection *sec, arelent **loc, asymbol **syms);
2105 Call the back end associated with the open BFD
2106 @var{abfd} and translate the external form of the relocation
2107 information attached to @var{sec} into the internal canonical
2108 form. Place the table into memory at @var{loc}, which has
2109 been preallocated, usually by a call to
2110 <<bfd_get_reloc_upper_bound>>. Returns the number of relocs, or
2113 The @var{syms} table is also needed for horrible internal magic
2118 bfd_canonicalize_reloc (bfd
*abfd
,
2123 if (abfd
->format
!= bfd_object
)
2125 bfd_set_error (bfd_error_invalid_operation
);
2129 return BFD_SEND (abfd
, _bfd_canonicalize_reloc
,
2130 (abfd
, asect
, location
, symbols
));
2139 (bfd *abfd, asection *sec, arelent **rel, unsigned int count);
2142 Set the relocation pointer and count within
2143 section @var{sec} to the values @var{rel} and @var{count}.
2144 The argument @var{abfd} is ignored.
2146 .#define bfd_set_reloc(abfd, asect, location, count) \
2147 . BFD_SEND (abfd, _bfd_set_reloc, (abfd, asect, location, count))
2155 bool bfd_set_file_flags (bfd *abfd, flagword flags);
2158 Set the flag word in the BFD @var{abfd} to the value @var{flags}.
2160 Possible errors are:
2161 o <<bfd_error_wrong_format>> - The target bfd was not of object format.
2162 o <<bfd_error_invalid_operation>> - The target bfd was open for reading.
2163 o <<bfd_error_invalid_operation>> -
2164 The flag word contained a bit which was not applicable to the
2165 type of file. E.g., an attempt was made to set the <<D_PAGED>> bit
2166 on a BFD format which does not support demand paging.
2171 bfd_set_file_flags (bfd
*abfd
, flagword flags
)
2173 if (abfd
->format
!= bfd_object
)
2175 bfd_set_error (bfd_error_wrong_format
);
2179 if (bfd_read_p (abfd
))
2181 bfd_set_error (bfd_error_invalid_operation
);
2185 abfd
->flags
= flags
;
2186 if ((flags
& bfd_applicable_file_flags (abfd
)) != flags
)
2188 bfd_set_error (bfd_error_invalid_operation
);
2196 bfd_assert (const char *file
, int line
)
2198 /* xgettext:c-format */
2199 (*_bfd_assert_handler
) (_("BFD %s assertion fail %s:%d"),
2200 BFD_VERSION_STRING
, file
, line
);
2203 /* A more or less friendly abort message. In libbfd.h abort is
2204 defined to call this function. */
2207 _bfd_abort (const char *file
, int line
, const char *fn
)
2212 fprintf (stderr
, _("%s: BFD %s internal error, aborting at %s:%d in %s\n"),
2213 _bfd_get_error_program_name (), BFD_VERSION_STRING
,
2216 fprintf (stderr
, _("%s: BFD %s internal error, aborting at %s:%d\n"),
2217 _bfd_get_error_program_name (), BFD_VERSION_STRING
,
2219 fprintf (stderr
, _("Please report this bug.\n"));
2220 _exit (EXIT_FAILURE
);
2228 int bfd_get_arch_size (bfd *abfd);
2231 Returns the normalized architecture address size, in bits, as
2232 determined by the object file's format. By normalized, we mean
2233 either 32 or 64. For ELF, this information is included in the
2234 header. Use bfd_arch_bits_per_address for number of bits in
2235 the architecture address.
2237 Returns the arch size in bits if known, <<-1>> otherwise.
2241 bfd_get_arch_size (bfd
*abfd
)
2243 if (abfd
->xvec
->flavour
== bfd_target_elf_flavour
)
2244 return get_elf_backend_data (abfd
)->s
->arch_size
;
2246 return bfd_arch_bits_per_address (abfd
) > 32 ? 64 : 32;
2251 bfd_get_sign_extend_vma
2254 int bfd_get_sign_extend_vma (bfd *abfd);
2257 Indicates if the target architecture "naturally" sign extends
2258 an address. Some architectures implicitly sign extend address
2259 values when they are converted to types larger than the size
2260 of an address. For instance, bfd_get_start_address() will
2261 return an address sign extended to fill a bfd_vma when this is
2264 Returns <<1>> if the target architecture is known to sign
2265 extend addresses, <<0>> if the target architecture is known to
2266 not sign extend addresses, and <<-1>> otherwise.
2270 bfd_get_sign_extend_vma (bfd
*abfd
)
2274 if (bfd_get_flavour (abfd
) == bfd_target_elf_flavour
)
2275 return get_elf_backend_data (abfd
)->sign_extend_vma
;
2277 name
= bfd_get_target (abfd
);
2279 /* Return a proper value for DJGPP & PE COFF.
2280 This function is required for DWARF2 support, but there is
2281 no place to store this information in the COFF back end.
2282 Should enough other COFF targets add support for DWARF2,
2283 a place will have to be found. Until then, this hack will do. */
2284 if (startswith (name
, "coff-go32")
2285 || strcmp (name
, "pe-i386") == 0
2286 || strcmp (name
, "pei-i386") == 0
2287 || strcmp (name
, "pe-x86-64") == 0
2288 || strcmp (name
, "pei-x86-64") == 0
2289 || strcmp (name
, "pe-aarch64-little") == 0
2290 || strcmp (name
, "pei-aarch64-little") == 0
2291 || strcmp (name
, "pe-arm-wince-little") == 0
2292 || strcmp (name
, "pei-arm-wince-little") == 0
2293 || strcmp (name
, "pei-loongarch64") == 0
2294 || strcmp (name
, "pei-riscv64-little") == 0
2295 || strcmp (name
, "aixcoff-rs6000") == 0
2296 || strcmp (name
, "aix5coff64-rs6000") == 0)
2299 if (startswith (name
, "mach-o"))
2302 bfd_set_error (bfd_error_wrong_format
);
2308 bfd_set_start_address
2311 bool bfd_set_start_address (bfd *abfd, bfd_vma vma);
2314 Make @var{vma} the entry point of output BFD @var{abfd}.
2316 Returns <<TRUE>> on success, <<FALSE>> otherwise.
2320 bfd_set_start_address (bfd
*abfd
, bfd_vma vma
)
2322 abfd
->start_address
= vma
;
2331 unsigned int bfd_get_gp_size (bfd *abfd);
2334 Return the maximum size of objects to be optimized using the GP
2335 register under MIPS ECOFF. This is typically set by the <<-G>>
2336 argument to the compiler, assembler or linker.
2340 bfd_get_gp_size (bfd
*abfd
)
2342 if (abfd
->format
== bfd_object
)
2344 if (abfd
->xvec
->flavour
== bfd_target_ecoff_flavour
)
2345 return ecoff_data (abfd
)->gp_size
;
2346 else if (abfd
->xvec
->flavour
== bfd_target_elf_flavour
)
2347 return elf_gp_size (abfd
);
2357 void bfd_set_gp_size (bfd *abfd, unsigned int i);
2360 Set the maximum size of objects to be optimized using the GP
2361 register under ECOFF or MIPS ELF. This is typically set by
2362 the <<-G>> argument to the compiler, assembler or linker.
2366 bfd_set_gp_size (bfd
*abfd
, unsigned int i
)
2368 /* Don't try to set GP size on an archive or core file! */
2369 if (abfd
->format
!= bfd_object
)
2372 if (abfd
->xvec
->flavour
== bfd_target_ecoff_flavour
)
2373 ecoff_data (abfd
)->gp_size
= i
;
2374 else if (abfd
->xvec
->flavour
== bfd_target_elf_flavour
)
2375 elf_gp_size (abfd
) = i
;
2378 /* Get the GP value. This is an internal function used by some of the
2379 relocation special_function routines on targets which support a GP
2383 _bfd_get_gp_value (bfd
*abfd
)
2387 if (abfd
->format
!= bfd_object
)
2390 if (abfd
->xvec
->flavour
== bfd_target_ecoff_flavour
)
2391 return ecoff_data (abfd
)->gp
;
2392 else if (abfd
->xvec
->flavour
== bfd_target_elf_flavour
)
2393 return elf_gp (abfd
);
2398 /* Set the GP value. */
2401 _bfd_set_gp_value (bfd
*abfd
, bfd_vma v
)
2405 if (abfd
->format
!= bfd_object
)
2408 if (abfd
->xvec
->flavour
== bfd_target_ecoff_flavour
)
2409 ecoff_data (abfd
)->gp
= v
;
2410 else if (abfd
->xvec
->flavour
== bfd_target_elf_flavour
)
2419 void bfd_set_gp_value (bfd *abfd, bfd_vma v);
2422 Allow external access to the fucntion to set the GP value.
2423 This is specifically added for gdb-compile support.
2427 bfd_set_gp_value (bfd
*abfd
, bfd_vma v
)
2429 _bfd_set_gp_value (abfd
, v
);
2437 bfd_vma bfd_scan_vma (const char *string, const char **end, int base);
2440 Convert, like <<strtoul>> or <<stdtoull> depending on the size
2441 of a <<bfd_vma>>, a numerical expression @var{string} into a
2442 <<bfd_vma>> integer, and return that integer.
2446 bfd_scan_vma (const char *string
, const char **end
, int base
)
2448 if (sizeof (bfd_vma
) <= sizeof (unsigned long))
2449 return strtoul (string
, (char **) end
, base
);
2451 if (sizeof (bfd_vma
) <= sizeof (unsigned long long))
2452 return strtoull (string
, (char **) end
, base
);
2459 bfd_copy_private_header_data
2462 bool bfd_copy_private_header_data (bfd *ibfd, bfd *obfd);
2465 Copy private BFD header information from the BFD @var{ibfd} to the
2466 the BFD @var{obfd}. This copies information that may require
2467 sections to exist, but does not require symbol tables. Return
2468 <<true>> on success, <<false>> on error.
2469 Possible error returns are:
2471 o <<bfd_error_no_memory>> -
2472 Not enough memory exists to create private data for @var{obfd}.
2474 .#define bfd_copy_private_header_data(ibfd, obfd) \
2475 . BFD_SEND (obfd, _bfd_copy_private_header_data, \
2482 bfd_copy_private_bfd_data
2485 bool bfd_copy_private_bfd_data (bfd *ibfd, bfd *obfd);
2488 Copy private BFD information from the BFD @var{ibfd} to the
2489 the BFD @var{obfd}. Return <<TRUE>> on success, <<FALSE>> on error.
2490 Possible error returns are:
2492 o <<bfd_error_no_memory>> -
2493 Not enough memory exists to create private data for @var{obfd}.
2495 .#define bfd_copy_private_bfd_data(ibfd, obfd) \
2496 . BFD_SEND (obfd, _bfd_copy_private_bfd_data, \
2503 bfd_set_private_flags
2506 bool bfd_set_private_flags (bfd *abfd, flagword flags);
2509 Set private BFD flag information in the BFD @var{abfd}.
2510 Return <<TRUE>> on success, <<FALSE>> on error. Possible error
2513 o <<bfd_error_no_memory>> -
2514 Not enough memory exists to create private data for @var{obfd}.
2516 .#define bfd_set_private_flags(abfd, flags) \
2517 . BFD_SEND (abfd, _bfd_set_private_flags, (abfd, flags))
2526 The following functions exist but have not yet been documented.
2528 .#define bfd_sizeof_headers(abfd, info) \
2529 . BFD_SEND (abfd, _bfd_sizeof_headers, (abfd, info))
2531 .#define bfd_find_nearest_line(abfd, sec, syms, off, file, func, line) \
2532 . BFD_SEND (abfd, _bfd_find_nearest_line, \
2533 . (abfd, syms, sec, off, file, func, line, NULL))
2535 .#define bfd_find_nearest_line_with_alt(abfd, alt_filename, sec, syms, off, \
2536 . file, func, line, disc) \
2537 . BFD_SEND (abfd, _bfd_find_nearest_line_with_alt, \
2538 . (abfd, alt_filename, syms, sec, off, file, func, line, disc))
2540 .#define bfd_find_nearest_line_discriminator(abfd, sec, syms, off, file, func, \
2542 . BFD_SEND (abfd, _bfd_find_nearest_line, \
2543 . (abfd, syms, sec, off, file, func, line, disc))
2545 .#define bfd_find_line(abfd, syms, sym, file, line) \
2546 . BFD_SEND (abfd, _bfd_find_line, \
2547 . (abfd, syms, sym, file, line))
2549 .#define bfd_find_inliner_info(abfd, file, func, line) \
2550 . BFD_SEND (abfd, _bfd_find_inliner_info, \
2551 . (abfd, file, func, line))
2553 .#define bfd_debug_info_start(abfd) \
2554 . BFD_SEND (abfd, _bfd_debug_info_start, (abfd))
2556 .#define bfd_debug_info_end(abfd) \
2557 . BFD_SEND (abfd, _bfd_debug_info_end, (abfd))
2559 .#define bfd_debug_info_accumulate(abfd, section) \
2560 . BFD_SEND (abfd, _bfd_debug_info_accumulate, (abfd, section))
2562 .#define bfd_stat_arch_elt(abfd, stat) \
2563 . BFD_SEND (abfd->my_archive ? abfd->my_archive : abfd, \
2564 . _bfd_stat_arch_elt, (abfd, stat))
2566 .#define bfd_update_armap_timestamp(abfd) \
2567 . BFD_SEND (abfd, _bfd_update_armap_timestamp, (abfd))
2569 .#define bfd_set_arch_mach(abfd, arch, mach)\
2570 . BFD_SEND ( abfd, _bfd_set_arch_mach, (abfd, arch, mach))
2572 .#define bfd_relax_section(abfd, section, link_info, again) \
2573 . BFD_SEND (abfd, _bfd_relax_section, (abfd, section, link_info, again))
2575 .#define bfd_gc_sections(abfd, link_info) \
2576 . BFD_SEND (abfd, _bfd_gc_sections, (abfd, link_info))
2578 .#define bfd_lookup_section_flags(link_info, flag_info, section) \
2579 . BFD_SEND (abfd, _bfd_lookup_section_flags, (link_info, flag_info, section))
2581 .#define bfd_merge_sections(abfd, link_info) \
2582 . BFD_SEND (abfd, _bfd_merge_sections, (abfd, link_info))
2584 .#define bfd_is_group_section(abfd, sec) \
2585 . BFD_SEND (abfd, _bfd_is_group_section, (abfd, sec))
2587 .#define bfd_group_name(abfd, sec) \
2588 . BFD_SEND (abfd, _bfd_group_name, (abfd, sec))
2590 .#define bfd_discard_group(abfd, sec) \
2591 . BFD_SEND (abfd, _bfd_discard_group, (abfd, sec))
2593 .#define bfd_link_hash_table_create(abfd) \
2594 . BFD_SEND (abfd, _bfd_link_hash_table_create, (abfd))
2596 .#define bfd_link_add_symbols(abfd, info) \
2597 . BFD_SEND (abfd, _bfd_link_add_symbols, (abfd, info))
2599 .#define bfd_link_just_syms(abfd, sec, info) \
2600 . BFD_SEND (abfd, _bfd_link_just_syms, (sec, info))
2602 .#define bfd_final_link(abfd, info) \
2603 . BFD_SEND (abfd, _bfd_final_link, (abfd, info))
2605 .#define bfd_free_cached_info(abfd) \
2606 . BFD_SEND (abfd, _bfd_free_cached_info, (abfd))
2608 .#define bfd_get_dynamic_symtab_upper_bound(abfd) \
2609 . BFD_SEND (abfd, _bfd_get_dynamic_symtab_upper_bound, (abfd))
2611 .#define bfd_print_private_bfd_data(abfd, file)\
2612 . BFD_SEND (abfd, _bfd_print_private_bfd_data, (abfd, file))
2614 .#define bfd_canonicalize_dynamic_symtab(abfd, asymbols) \
2615 . BFD_SEND (abfd, _bfd_canonicalize_dynamic_symtab, (abfd, asymbols))
2617 .#define bfd_get_synthetic_symtab(abfd, count, syms, dyncount, dynsyms, ret) \
2618 . BFD_SEND (abfd, _bfd_get_synthetic_symtab, (abfd, count, syms, \
2619 . dyncount, dynsyms, ret))
2621 .#define bfd_get_dynamic_reloc_upper_bound(abfd) \
2622 . BFD_SEND (abfd, _bfd_get_dynamic_reloc_upper_bound, (abfd))
2624 .#define bfd_canonicalize_dynamic_reloc(abfd, arels, asyms) \
2625 . BFD_SEND (abfd, _bfd_canonicalize_dynamic_reloc, (abfd, arels, asyms))
2631 bfd_get_relocated_section_contents
2634 bfd_byte *bfd_get_relocated_section_contents
2635 (bfd *, struct bfd_link_info *, struct bfd_link_order *, bfd_byte *,
2639 Read and relocate the indirect link_order section, into DATA
2640 (if non-NULL) or to a malloc'd buffer. Return the buffer, or
2645 bfd_get_relocated_section_contents (bfd
*abfd
,
2646 struct bfd_link_info
*link_info
,
2647 struct bfd_link_order
*link_order
,
2653 bfd_byte
*(*fn
) (bfd
*, struct bfd_link_info
*, struct bfd_link_order
*,
2654 bfd_byte
*, bool, asymbol
**);
2656 if (link_order
->type
== bfd_indirect_link_order
)
2658 abfd2
= link_order
->u
.indirect
.section
->owner
;
2665 fn
= abfd2
->xvec
->_bfd_get_relocated_section_contents
;
2667 return (*fn
) (abfd
, link_info
, link_order
, data
, relocatable
, symbols
);
2675 bool bfd_record_phdr
2676 (bfd *, unsigned long, bool, flagword, bool, bfd_vma,
2677 bool, bool, unsigned int, struct bfd_section **);
2680 Record information about an ELF program header.
2684 bfd_record_phdr (bfd
*abfd
,
2689 bfd_vma at
, /* Bytes. */
2690 bool includes_filehdr
,
2691 bool includes_phdrs
,
2695 struct elf_segment_map
*m
, **pm
;
2697 unsigned int opb
= bfd_octets_per_byte (abfd
, NULL
);
2699 if (bfd_get_flavour (abfd
) != bfd_target_elf_flavour
)
2702 amt
= sizeof (struct elf_segment_map
);
2703 amt
+= ((bfd_size_type
) count
- 1) * sizeof (asection
*);
2704 m
= (struct elf_segment_map
*) bfd_zalloc (abfd
, amt
);
2710 m
->p_paddr
= at
* opb
;
2711 m
->p_flags_valid
= flags_valid
;
2712 m
->p_paddr_valid
= at_valid
;
2713 m
->includes_filehdr
= includes_filehdr
;
2714 m
->includes_phdrs
= includes_phdrs
;
2717 memcpy (m
->sections
, secs
, count
* sizeof (asection
*));
2719 for (pm
= &elf_seg_map (abfd
); *pm
!= NULL
; pm
= &(*pm
)->next
)
2727 /* Return true iff this target is 32-bit. */
2732 if (bfd_get_flavour (abfd
) == bfd_target_elf_flavour
)
2734 const struct elf_backend_data
*bed
= get_elf_backend_data (abfd
);
2735 return bed
->s
->elfclass
== ELFCLASS32
;
2738 /* For non-ELF targets, use architecture information. */
2739 return bfd_arch_bits_per_address (abfd
) <= 32;
2749 void bfd_sprintf_vma (bfd *, char *, bfd_vma);
2750 void bfd_fprintf_vma (bfd *, void *, bfd_vma);
2753 bfd_sprintf_vma and bfd_fprintf_vma display an address in the
2754 target's address size.
2757 .#define bfd_printf_vma(abfd,x) bfd_fprintf_vma (abfd, stdout, x)
2762 bfd_sprintf_vma (bfd
*abfd ATTRIBUTE_UNUSED
, char *buf
, bfd_vma value
)
2765 if (!is32bit (abfd
))
2767 sprintf (buf
, "%016" PRIx64
, (uint64_t) value
);
2771 sprintf (buf
, "%08lx", (unsigned long) value
& 0xffffffff);
2775 bfd_fprintf_vma (bfd
*abfd ATTRIBUTE_UNUSED
, void *stream
, bfd_vma value
)
2778 if (!is32bit (abfd
))
2780 fprintf ((FILE *) stream
, "%016" PRIx64
, (uint64_t) value
);
2784 fprintf ((FILE *) stream
, "%08lx", (unsigned long) value
& 0xffffffff);
2792 bool bfd_alt_mach_code (bfd *abfd, int alternative);
2796 When more than one machine code number is available for the
2797 same machine type, this function can be used to switch between
2798 the preferred one (alternative == 0) and any others. Currently,
2799 only ELF supports this feature, with up to two alternate
2804 bfd_alt_mach_code (bfd
*abfd
, int alternative
)
2806 if (bfd_get_flavour (abfd
) == bfd_target_elf_flavour
)
2810 switch (alternative
)
2813 code
= get_elf_backend_data (abfd
)->elf_machine_code
;
2817 code
= get_elf_backend_data (abfd
)->elf_machine_alt1
;
2823 code
= get_elf_backend_data (abfd
)->elf_machine_alt2
;
2832 elf_elfheader (abfd
)->e_machine
= code
;
2842 bfd_emul_get_maxpagesize
2845 bfd_vma bfd_emul_get_maxpagesize (const char *);
2848 Returns the maximum page size, in bytes, as determined by
2853 bfd_emul_get_maxpagesize (const char *emul
)
2855 const bfd_target
*target
;
2857 target
= bfd_find_target (emul
, NULL
);
2859 && target
->flavour
== bfd_target_elf_flavour
)
2860 return xvec_get_elf_backend_data (target
)->maxpagesize
;
2867 bfd_emul_get_commonpagesize
2870 bfd_vma bfd_emul_get_commonpagesize (const char *);
2873 Returns the common page size, in bytes, as determined by
2878 bfd_emul_get_commonpagesize (const char *emul
)
2880 const bfd_target
*target
;
2882 target
= bfd_find_target (emul
, NULL
);
2884 && target
->flavour
== bfd_target_elf_flavour
)
2886 const struct elf_backend_data
*bed
;
2888 bed
= xvec_get_elf_backend_data (target
);
2889 return bed
->commonpagesize
;
2899 char *bfd_demangle (bfd *, const char *, int);
2902 Wrapper around cplus_demangle. Strips leading underscores and
2903 other such chars that would otherwise confuse the demangler.
2904 If passed a g++ v3 ABI mangled name, returns a buffer allocated
2905 with malloc holding the demangled name. Returns NULL otherwise
2906 and on memory alloc failure.
2910 bfd_demangle (bfd
*abfd
, const char *name
, int options
)
2913 const char *pre
, *suf
;
2917 skip_lead
= (abfd
!= NULL
2919 && bfd_get_symbol_leading_char (abfd
) == *name
);
2923 /* This is a hack for better error reporting on XCOFF, PowerPC64-ELF
2924 or the MS PE format. These formats have a number of leading '.'s
2925 on at least some symbols, so we remove all dots to avoid
2926 confusing the demangler. */
2928 while (*name
== '.' || *name
== '$')
2930 pre_len
= name
- pre
;
2932 /* Strip off @plt and suchlike too. */
2934 suf
= strchr (name
, '@');
2937 alloc
= (char *) bfd_malloc (suf
- name
+ 1);
2940 memcpy (alloc
, name
, suf
- name
);
2941 alloc
[suf
- name
] = '\0';
2945 res
= cplus_demangle (name
, options
);
2953 size_t len
= strlen (pre
) + 1;
2954 alloc
= (char *) bfd_malloc (len
);
2957 memcpy (alloc
, pre
, len
);
2963 /* Put back any prefix or suffix. */
2964 if (pre_len
!= 0 || suf
!= NULL
)
2973 suf_len
= strlen (suf
) + 1;
2974 final
= (char *) bfd_malloc (pre_len
+ len
+ suf_len
);
2977 memcpy (final
, pre
, pre_len
);
2978 memcpy (final
+ pre_len
, res
, len
);
2979 memcpy (final
+ pre_len
+ len
, suf
, suf_len
);
2988 /* Get the linker information. */
2990 struct bfd_link_info
*
2991 _bfd_get_link_info (bfd
*abfd
)
2993 if (bfd_get_flavour (abfd
) != bfd_target_elf_flavour
)
2996 return elf_link_info (abfd
);