bfd-in.h revision 77298
117721Speter/* Main header file for the bfd library -- portable access to object files. 217721Speter Copyright 1990, 91, 92, 93, 94, 95, 96, 97, 98, 99, 2000 332785Speter Free Software Foundation, Inc. 432785Speter Contributed by Cygnus Support. 532785Speter 632785Speter** NOTE: bfd.h and bfd-in2.h are GENERATED files. Don't change them; 732785Speter** instead, change bfd-in.h or the other BFD source files processed to 832785Speter** generate these files. 932785Speter 1032785SpeterThis file is part of BFD, the Binary File Descriptor library. 1132785Speter 1232785SpeterThis program is free software; you can redistribute it and/or modify 1332785Speterit under the terms of the GNU General Public License as published by 1432785Speterthe Free Software Foundation; either version 2 of the License, or 1532785Speter(at your option) any later version. 1632785Speter 1732785SpeterThis program is distributed in the hope that it will be useful, 1832785Speterbut WITHOUT ANY WARRANTY; without even the implied warranty of 1932785SpeterMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 2032785SpeterGNU General Public License for more details. 2132785Speter 2232785SpeterYou should have received a copy of the GNU General Public License 2332785Speteralong with this program; if not, write to the Free Software 2432785SpeterFoundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ 2532785Speter 2632785Speter/* bfd.h -- The only header file required by users of the bfd library 2732785Speter 2832785SpeterThe bfd.h file is generated from bfd-in.h and various .c files; if you 2932785Speterchange it, your changes will probably be lost. 3032785Speter 3132785SpeterAll the prototypes and definitions following the comment "THE FOLLOWING 3232785SpeterIS EXTRACTED FROM THE SOURCE" are extracted from the source files for 3332785SpeterBFD. If you change it, someone oneday will extract it from the source 3432785Speteragain, and your changes will be lost. To save yourself from this bind, 3532785Speterchange the definitions in the source in the bfd directory. Type "make 3632785Speterdocs" and then "make headers" in that directory, and magically this file 3732785Speterwill change to reflect your changes. 3832785Speter 3932785SpeterIf you don't have the tools to perform the extraction, then you are 4032785Spetersafe from someone on your system trampling over your header files. 4132785SpeterYou should still maintain the equivalence between the source and this 4232785Speterfile though; every change you make to the .c file should be reflected 4332785Speterhere. */ 4432785Speter 4532785Speter#ifndef __BFD_H_SEEN__ 4632785Speter#define __BFD_H_SEEN__ 4732785Speter 4832785Speter#ifdef __cplusplus 4932785Speterextern "C" { 5032785Speter#endif 5132785Speter 5232785Speter#include "ansidecl.h" 5332785Speter 5432785Speter/* These two lines get substitutions done by commands in Makefile.in. */ 5532785Speter#define BFD_VERSION "@VERSION@" 5632785Speter#define BFD_ARCH_SIZE @wordsize@ 5732785Speter#define BFD_HOST_64BIT_LONG @BFD_HOST_64BIT_LONG@ 5832785Speter#if @BFD_HOST_64_BIT_DEFINED@ 5932785Speter#define BFD_HOST_64_BIT @BFD_HOST_64_BIT@ 6032785Speter#define BFD_HOST_U_64_BIT @BFD_HOST_U_64_BIT@ 6132785Speter#endif 6232785Speter 6332785Speter#if BFD_ARCH_SIZE >= 64 6432785Speter#define BFD64 6532785Speter#endif 6632785Speter 6732785Speter#ifndef INLINE 6832785Speter#if __GNUC__ >= 2 6932785Speter#define INLINE __inline__ 7032785Speter#else 7132785Speter#define INLINE 7232785Speter#endif 7332785Speter#endif 7432785Speter 7532785Speter/* forward declaration */ 7632785Spetertypedef struct _bfd bfd; 7732785Speter 7832785Speter/* To squelch erroneous compiler warnings ("illegal pointer 7932785Speter combination") from the SVR3 compiler, we would like to typedef 8032785Speter boolean to int (it doesn't like functions which return boolean. 8132785Speter Making sure they are never implicitly declared to return int 8232785Speter doesn't seem to help). But this file is not configured based on 8332785Speter the host. */ 8432785Speter/* General rules: functions which are boolean return true on success 8532785Speter and false on failure (unless they're a predicate). -- bfd.doc */ 8632785Speter/* I'm sure this is going to break something and someone is going to 8732785Speter force me to change it. */ 8832785Speter/* typedef enum boolean {false, true} boolean; */ 8932785Speter/* Yup, SVR4 has a "typedef enum boolean" in <sys/types.h> -fnf */ 9032785Speter/* It gets worse if the host also defines a true/false enum... -sts */ 9132785Speter/* And even worse if your compiler has built-in boolean types... -law */ 9232785Speter#if defined (__GNUG__) && (__GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 6)) 9332785Speter#define TRUE_FALSE_ALREADY_DEFINED 9432785Speter#endif 9517721Speter#ifdef MPW 9617721Speter/* Pre-emptive strike - get the file with the enum. */ 9717721Speter#include <Types.h> 9832785Speter#define TRUE_FALSE_ALREADY_DEFINED 9932785Speter#endif /* MPW */ 10032785Speter#ifndef TRUE_FALSE_ALREADY_DEFINED 10132785Spetertypedef enum bfd_boolean {false, true} boolean; 10232785Speter#define BFD_TRUE_FALSE 10332785Speter#else 10417721Speter/* Use enum names that will appear nowhere else. */ 10517721Spetertypedef enum bfd_boolean {bfd_fffalse, bfd_tttrue} boolean; 10617721Speter#endif 10725839Speter 10817721Speter/* A pointer to a position in a file. */ 10917721Speter/* FIXME: This should be using off_t from <sys/types.h>. 11025839Speter For now, try to avoid breaking stuff by not including <sys/types.h> here. 11154427Speter This will break on systems with 64-bit file offsets (e.g. 4.4BSD). 11232785Speter Probably the best long-term answer is to avoid using file_ptr AND off_t 11325839Speter in this header file, and to handle this in the BFD implementation 11454427Speter rather than in its interface. */ 11525839Speter/* typedef off_t file_ptr; */ 11625839Spetertypedef long int file_ptr; 11725839Speter 11817721Speter/* Support for different sizes of target format ints and addresses. 11917721Speter If the type `long' is at least 64 bits, BFD_HOST_64BIT_LONG will be 12025839Speter set to 1 above. Otherwise, if gcc is being used, this code will 12117721Speter use gcc's "long long" type. Otherwise, BFD_HOST_64_BIT must be 12217721Speter defined above. */ 12344852Speter 12432785Speter#ifndef BFD_HOST_64_BIT 12566525Speter# if BFD_HOST_64BIT_LONG 12625839Speter# define BFD_HOST_64_BIT long 12717721Speter# define BFD_HOST_U_64_BIT unsigned long 12817721Speter# else 12954427Speter# ifdef __GNUC__ 13017721Speter# if __GNUC__ >= 2 13125839Speter# define BFD_HOST_64_BIT long long 13244852Speter# define BFD_HOST_U_64_BIT unsigned long long 13325839Speter# endif /* __GNUC__ >= 2 */ 13425839Speter# endif /* ! defined (__GNUC__) */ 13554427Speter# endif /* ! BFD_HOST_64BIT_LONG */ 13654427Speter#endif /* ! defined (BFD_HOST_64_BIT) */ 13766525Speter 13825839Speter#ifdef BFD64 13925839Speter 14025839Speter#ifndef BFD_HOST_64_BIT 14154427Speter #error No 64 bit integer type available 14254427Speter#endif /* ! defined (BFD_HOST_64_BIT) */ 14332785Speter 14417721Spetertypedef BFD_HOST_U_64_BIT bfd_vma; 14525839Spetertypedef BFD_HOST_64_BIT bfd_signed_vma; 14632785Spetertypedef BFD_HOST_U_64_BIT bfd_size_type; 14732785Spetertypedef BFD_HOST_U_64_BIT symvalue; 14825839Speter 14932785Speter#ifndef fprintf_vma 15032785Speter#if BFD_HOST_64BIT_LONG 15125839Speter#define sprintf_vma(s,x) sprintf (s, "%016lx", x) 15234461Speter#define fprintf_vma(f,x) fprintf (f, "%016lx", x) 15332785Speter#else 15417721Speter#define _bfd_int64_low(x) ((unsigned long) (((x) & 0xffffffff))) 15525839Speter#define _bfd_int64_high(x) ((unsigned long) (((x) >> 32) & 0xffffffff)) 15625839Speter#define fprintf_vma(s,x) \ 15717721Speter fprintf ((s), "%08lx%08lx", _bfd_int64_high (x), _bfd_int64_low (x)) 15854427Speter#define sprintf_vma(s,x) \ 15917721Speter sprintf ((s), "%08lx%08lx", _bfd_int64_high (x), _bfd_int64_low (x)) 16017721Speter#endif 16117721Speter#endif 16217721Speter 16317721Speter#else /* not BFD64 */ 16417721Speter 16554427Speter/* Represent a target address. Also used as a generic unsigned type 16617721Speter which is guaranteed to be big enough to hold any arithmetic types 16754427Speter we need to deal with. */ 16832785Spetertypedef unsigned long bfd_vma; 16925839Speter 17054427Speter/* A generic signed type which is guaranteed to be big enough to hold any 17166525Speter arithmetic types we need to deal with. Can be assumed to be compatible 17217721Speter with bfd_vma in the same way that signed and unsigned ints are compatible 17317721Speter (as parameters, in assignment, etc). */ 17417721Spetertypedef long bfd_signed_vma; 17525839Speter 17644852Spetertypedef unsigned long symvalue; 17766525Spetertypedef unsigned long bfd_size_type; 17817721Speter 17932785Speter/* Print a bfd_vma x on stream s. */ 18054427Speter#define fprintf_vma(s,x) fprintf (s, "%08lx", x) 18117721Speter#define sprintf_vma(s,x) sprintf (s, "%08lx", x) 18254427Speter 18317721Speter#endif /* not BFD64 */ 18417721Speter 18525839Speter#define printf_vma(x) fprintf_vma(stdout,x) 18632785Speter 18766525Spetertypedef unsigned int flagword; /* 32 bits of flags */ 18854427Spetertypedef unsigned char bfd_byte; 18925839Speter 19032785Speter/** File formats */ 19125839Speter 19225839Spetertypedef enum bfd_format { 19325839Speter bfd_unknown = 0, /* file format is unknown */ 19417721Speter bfd_object, /* linker/assember/compiler output */ 19517721Speter bfd_archive, /* object archive file */ 19617721Speter bfd_core, /* core dump */ 19717721Speter bfd_type_end} /* marks the end; don't use it! */ 19817721Speter bfd_format; 19917721Speter 20017721Speter/* Values that may appear in the flags field of a BFD. These also 20117721Speter appear in the object_flags field of the bfd_target structure, where 20217721Speter they indicate the set of flags used by that backend (not all flags 20317721Speter are meaningful for all object file formats) (FIXME: at the moment, 20417721Speter the object_flags values have mostly just been copied from backend 20517721Speter to another, and are not necessarily correct). */ 20617721Speter 20717721Speter/* No flags. */ 20817721Speter#define BFD_NO_FLAGS 0x00 20917721Speter 21017721Speter/* BFD contains relocation entries. */ 21117721Speter#define HAS_RELOC 0x01 21217721Speter 21317721Speter/* BFD is directly executable. */ 21417721Speter#define EXEC_P 0x02 21517721Speter 21617721Speter/* BFD has line number information (basically used for F_LNNO in a 21717721Speter COFF header). */ 21817721Speter#define HAS_LINENO 0x04 21917721Speter 22017721Speter/* BFD has debugging information. */ 22117721Speter#define HAS_DEBUG 0x08 22217721Speter 22317721Speter/* BFD has symbols. */ 22417721Speter#define HAS_SYMS 0x10 22517721Speter 22617721Speter/* BFD has local symbols (basically used for F_LSYMS in a COFF 22732785Speter header). */ 22832785Speter#define HAS_LOCALS 0x20 22932785Speter 23032785Speter/* BFD is a dynamic object. */ 23132785Speter#define DYNAMIC 0x40 23232785Speter 23332785Speter/* Text section is write protected (if D_PAGED is not set, this is 23432785Speter like an a.out NMAGIC file) (the linker sets this by default, but 23532785Speter clears it for -r or -N). */ 23632785Speter#define WP_TEXT 0x80 23717721Speter 23817721Speter/* BFD is dynamically paged (this is like an a.out ZMAGIC file) (the 23932785Speter linker sets this by default, but clears it for -r or -n or -N). */ 24017721Speter#define D_PAGED 0x100 24117721Speter 24217721Speter/* BFD is relaxable (this means that bfd_relax_section may be able to 24317721Speter do something) (sometimes bfd_relax_section can do something even if 24417721Speter this is not set). */ 24517721Speter#define BFD_IS_RELAXABLE 0x200 24617721Speter 24717721Speter/* This may be set before writing out a BFD to request using a 24817721Speter traditional format. For example, this is used to request that when 24917721Speter writing out an a.out object the symbols not be hashed to eliminate 25017721Speter duplicates. */ 25117721Speter#define BFD_TRADITIONAL_FORMAT 0x400 25217721Speter 25317721Speter/* This flag indicates that the BFD contents are actually cached in 25425839Speter memory. If this is set, iostream points to a bfd_in_memory struct. */ 25525839Speter#define BFD_IN_MEMORY 0x800 25625839Speter 25725839Speter/* symbols and relocation */ 25825839Speter 25925839Speter/* A count of carsyms (canonical archive symbols). */ 26025839Spetertypedef unsigned long symindex; 26125839Speter 26225839Speter/* How to perform a relocation. */ 26325839Spetertypedef const struct reloc_howto_struct reloc_howto_type; 26425839Speter 26525839Speter#define BFD_NO_MORE_SYMBOLS ((symindex) ~0) 26632785Speter 26732785Speter/* General purpose part of a symbol X; 26817721Speter target specific parts are in libcoff.h, libaout.h, etc. */ 26917721Speter 27017721Speter#define bfd_get_section(x) ((x)->section) 27117721Speter#define bfd_get_output_section(x) ((x)->section->output_section) 27217721Speter#define bfd_set_section(x,y) ((x)->section) = (y) 27317721Speter#define bfd_asymbol_base(x) ((x)->section->vma) 27417721Speter#define bfd_asymbol_value(x) (bfd_asymbol_base(x) + (x)->value) 27517721Speter#define bfd_asymbol_name(x) ((x)->name) 27617721Speter/*Perhaps future: #define bfd_asymbol_bfd(x) ((x)->section->owner)*/ 27725839Speter#define bfd_asymbol_bfd(x) ((x)->the_bfd) 27825839Speter#define bfd_asymbol_flavour(x) (bfd_asymbol_bfd(x)->xvec->flavour) 27925839Speter 28025839Speter/* A canonical archive symbol. */ 28125839Speter/* This is a type pun with struct ranlib on purpose! */ 28225839Spetertypedef struct carsym { 28325839Speter char *name; 28425839Speter file_ptr file_offset; /* look here to find the file */ 28525839Speter} carsym; /* to make these you call a carsymogen */ 28625839Speter 28717721Speter/* Used in generating armaps (archive tables of contents). 28817721Speter Perhaps just a forward definition would do? */ 28917721Speterstruct orl { /* output ranlib */ 29017721Speter char **name; /* symbol name */ 29117721Speter file_ptr pos; /* bfd* or file position */ 29217721Speter int namidx; /* index into string table */ 29317721Speter}; 29417721Speter 29517721Speter/* Linenumber stuff */ 29617721Spetertypedef struct lineno_cache_entry { 29717721Speter unsigned int line_number; /* Linenumber from start of function*/ 29817721Speter union { 29917721Speter struct symbol_cache_entry *sym; /* Function name */ 30017721Speter unsigned long offset; /* Offset into section */ 30117721Speter } u; 30217721Speter} alent; 30317721Speter 30417721Speter/* object and core file sections */ 30517721Speter 30617721Speter#define align_power(addr, align) \ 30717721Speter ( ((addr) + ((1<<(align))-1)) & (-1 << (align))) 30817721Speter 30917721Spetertypedef struct sec *sec_ptr; 31017721Speter 31117721Speter#define bfd_get_section_name(bfd, ptr) ((ptr)->name + 0) 31217721Speter#define bfd_get_section_vma(bfd, ptr) ((ptr)->vma + 0) 31317721Speter#define bfd_get_section_alignment(bfd, ptr) ((ptr)->alignment_power + 0) 31417721Speter#define bfd_section_name(bfd, ptr) ((ptr)->name) 31517721Speter#define bfd_section_size(bfd, ptr) (bfd_get_section_size_before_reloc(ptr)) 31617721Speter#define bfd_section_vma(bfd, ptr) ((ptr)->vma) 31717721Speter#define bfd_section_lma(bfd, ptr) ((ptr)->lma) 31817721Speter#define bfd_section_alignment(bfd, ptr) ((ptr)->alignment_power) 31917721Speter#define bfd_get_section_flags(bfd, ptr) ((ptr)->flags + 0) 32017721Speter#define bfd_get_section_userdata(bfd, ptr) ((ptr)->userdata) 32117721Speter 32217721Speter#define bfd_is_com_section(ptr) (((ptr)->flags & SEC_IS_COMMON) != 0) 32317721Speter 32432785Speter#define bfd_set_section_vma(bfd, ptr, val) (((ptr)->vma = (ptr)->lma= (val)), ((ptr)->user_set_vma = (boolean)true), true) 32532785Speter#define bfd_set_section_alignment(bfd, ptr, val) (((ptr)->alignment_power = (val)),true) 32617721Speter#define bfd_set_section_userdata(bfd, ptr, val) (((ptr)->userdata = (val)),true) 32717721Speter 32817721Spetertypedef struct stat stat_type; 32917721Speter 33017721Spetertypedef enum bfd_print_symbol 33117721Speter{ 33217721Speter bfd_print_symbol_name, 33317721Speter bfd_print_symbol_more, 33417721Speter bfd_print_symbol_all 33517721Speter} bfd_print_symbol_type; 33617721Speter 33717721Speter/* Information about a symbol that nm needs. */ 33817721Speter 33917721Spetertypedef struct _symbol_info 34017721Speter{ 34125839Speter symvalue value; 34225839Speter char type; 34325839Speter CONST char *name; /* Symbol name. */ 34425839Speter unsigned char stab_type; /* Stab type. */ 34525839Speter char stab_other; /* Stab other. */ 34625839Speter short stab_desc; /* Stab desc. */ 34717721Speter CONST char *stab_name; /* String for stab type. */ 34825839Speter} symbol_info; 34917721Speter 35017721Speter/* Get the name of a stabs type code. */ 35117721Speter 35217721Speterextern const char *bfd_get_stab_name PARAMS ((int)); 35317721Speter 35417721Speter/* Hash table routines. There is no way to free up a hash table. */ 35517721Speter 35617721Speter/* An element in the hash table. Most uses will actually use a larger 35717721Speter structure, and an instance of this will be the first field. */ 35817721Speter 35917721Speterstruct bfd_hash_entry 36017721Speter{ 36117721Speter /* Next entry for this hash code. */ 36217721Speter struct bfd_hash_entry *next; 36317721Speter /* String being hashed. */ 36417721Speter const char *string; 36517721Speter /* Hash code. This is the full hash code, not the index into the 36617721Speter table. */ 36717721Speter unsigned long hash; 36817721Speter}; 36917721Speter 37017721Speter/* A hash table. */ 37117721Speter 37217721Speterstruct bfd_hash_table 37317721Speter{ 37417721Speter /* The hash array. */ 37517721Speter struct bfd_hash_entry **table; 37617721Speter /* The number of slots in the hash table. */ 37717721Speter unsigned int size; 37817721Speter /* A function used to create new elements in the hash table. The 37917721Speter first entry is itself a pointer to an element. When this 38017721Speter function is first invoked, this pointer will be NULL. However, 38117721Speter having the pointer permits a hierarchy of method functions to be 38217721Speter built each of which calls the function in the superclass. Thus 38317721Speter each function should be written to allocate a new block of memory 38417721Speter only if the argument is NULL. */ 38517721Speter struct bfd_hash_entry *(*newfunc) PARAMS ((struct bfd_hash_entry *, 38617721Speter struct bfd_hash_table *, 38717721Speter const char *)); 38817721Speter /* An objalloc for this hash table. This is a struct objalloc *, 38917721Speter but we use PTR to avoid requiring the inclusion of objalloc.h. */ 39017721Speter PTR memory; 39117721Speter}; 39217721Speter 39332785Speter/* Initialize a hash table. */ 39432785Speterextern boolean bfd_hash_table_init 39517721Speter PARAMS ((struct bfd_hash_table *, 39617721Speter struct bfd_hash_entry *(*) (struct bfd_hash_entry *, 39732785Speter struct bfd_hash_table *, 39832785Speter const char *))); 39932785Speter 40017721Speter/* Initialize a hash table specifying a size. */ 40132785Speterextern boolean bfd_hash_table_init_n 40217721Speter PARAMS ((struct bfd_hash_table *, 40332785Speter struct bfd_hash_entry *(*) (struct bfd_hash_entry *, 40417721Speter struct bfd_hash_table *, 40532785Speter const char *), 40632785Speter unsigned int size)); 40732785Speter 40832785Speter/* Free up a hash table. */ 40932785Speterextern void bfd_hash_table_free PARAMS ((struct bfd_hash_table *)); 41032785Speter 41132785Speter/* Look up a string in a hash table. If CREATE is true, a new entry 41232785Speter will be created for this string if one does not already exist. The 41332785Speter COPY argument must be true if this routine should copy the string 41432785Speter into newly allocated memory when adding an entry. */ 41532785Speterextern struct bfd_hash_entry *bfd_hash_lookup 41632785Speter PARAMS ((struct bfd_hash_table *, const char *, boolean create, 41732785Speter boolean copy)); 41832785Speter 419/* Replace an entry in a hash table. */ 420extern void bfd_hash_replace 421 PARAMS ((struct bfd_hash_table *, struct bfd_hash_entry *old, 422 struct bfd_hash_entry *nw)); 423 424/* Base method for creating a hash table entry. */ 425extern struct bfd_hash_entry *bfd_hash_newfunc 426 PARAMS ((struct bfd_hash_entry *, struct bfd_hash_table *, 427 const char *)); 428 429/* Grab some space for a hash table entry. */ 430extern PTR bfd_hash_allocate PARAMS ((struct bfd_hash_table *, 431 unsigned int)); 432 433/* Traverse a hash table in a random order, calling a function on each 434 element. If the function returns false, the traversal stops. The 435 INFO argument is passed to the function. */ 436extern void bfd_hash_traverse PARAMS ((struct bfd_hash_table *, 437 boolean (*) (struct bfd_hash_entry *, 438 PTR), 439 PTR info)); 440 441/* Semi-portable string concatenation in cpp. 442 The CAT4 hack is to avoid a problem with some strict ANSI C preprocessors. 443 The problem is, "32_" is not a valid preprocessing token, and we don't 444 want extra underscores (e.g., "nlm_32_"). The XCAT2 macro will cause the 445 inner CAT macros to be evaluated first, producing still-valid pp-tokens. 446 Then the final concatenation can be done. (Sigh.) */ 447#ifndef CAT 448#ifdef SABER 449#define CAT(a,b) a##b 450#define CAT3(a,b,c) a##b##c 451#define CAT4(a,b,c,d) a##b##c##d 452#else 453#if defined(__STDC__) || defined(ALMOST_STDC) 454#define CAT(a,b) a##b 455#define CAT3(a,b,c) a##b##c 456#define XCAT2(a,b) CAT(a,b) 457#define CAT4(a,b,c,d) XCAT2(CAT(a,b),CAT(c,d)) 458#else 459#define CAT(a,b) a/**/b 460#define CAT3(a,b,c) a/**/b/**/c 461#define CAT4(a,b,c,d) a/**/b/**/c/**/d 462#endif 463#endif 464#endif 465 466#define COFF_SWAP_TABLE (PTR) &bfd_coff_std_swap_table 467 468/* User program access to BFD facilities */ 469 470/* Direct I/O routines, for programs which know more about the object 471 file than BFD does. Use higher level routines if possible. */ 472 473extern bfd_size_type bfd_read 474 PARAMS ((PTR, bfd_size_type size, bfd_size_type nitems, bfd *abfd)); 475extern bfd_size_type bfd_write 476 PARAMS ((const PTR, bfd_size_type size, bfd_size_type nitems, bfd *abfd)); 477extern int bfd_seek PARAMS ((bfd *abfd, file_ptr fp, int direction)); 478extern long bfd_tell PARAMS ((bfd *abfd)); 479extern int bfd_flush PARAMS ((bfd *abfd)); 480extern int bfd_stat PARAMS ((bfd *abfd, struct stat *)); 481 482/* Cast from const char * to char * so that caller can assign to 483 a char * without a warning. */ 484#define bfd_get_filename(abfd) ((char *) (abfd)->filename) 485#define bfd_get_cacheable(abfd) ((abfd)->cacheable) 486#define bfd_get_format(abfd) ((abfd)->format) 487#define bfd_get_target(abfd) ((abfd)->xvec->name) 488#define bfd_get_flavour(abfd) ((abfd)->xvec->flavour) 489#define bfd_family_coff(abfd) \ 490 (bfd_get_flavour (abfd) == bfd_target_coff_flavour || \ 491 bfd_get_flavour (abfd) == bfd_target_xcoff_flavour) 492#define bfd_big_endian(abfd) ((abfd)->xvec->byteorder == BFD_ENDIAN_BIG) 493#define bfd_little_endian(abfd) ((abfd)->xvec->byteorder == BFD_ENDIAN_LITTLE) 494#define bfd_header_big_endian(abfd) \ 495 ((abfd)->xvec->header_byteorder == BFD_ENDIAN_BIG) 496#define bfd_header_little_endian(abfd) \ 497 ((abfd)->xvec->header_byteorder == BFD_ENDIAN_LITTLE) 498#define bfd_get_file_flags(abfd) ((abfd)->flags) 499#define bfd_applicable_file_flags(abfd) ((abfd)->xvec->object_flags) 500#define bfd_applicable_section_flags(abfd) ((abfd)->xvec->section_flags) 501#define bfd_my_archive(abfd) ((abfd)->my_archive) 502#define bfd_has_map(abfd) ((abfd)->has_armap) 503 504#define bfd_valid_reloc_types(abfd) ((abfd)->xvec->valid_reloc_types) 505#define bfd_usrdata(abfd) ((abfd)->usrdata) 506 507#define bfd_get_start_address(abfd) ((abfd)->start_address) 508#define bfd_get_symcount(abfd) ((abfd)->symcount) 509#define bfd_get_outsymbols(abfd) ((abfd)->outsymbols) 510#define bfd_count_sections(abfd) ((abfd)->section_count) 511 512#define bfd_get_symbol_leading_char(abfd) ((abfd)->xvec->symbol_leading_char) 513 514#define bfd_set_cacheable(abfd,bool) (((abfd)->cacheable = (boolean) (bool)), true) 515 516extern boolean bfd_record_phdr 517 PARAMS ((bfd *, unsigned long, boolean, flagword, boolean, bfd_vma, 518 boolean, boolean, unsigned int, struct sec **)); 519 520/* Byte swapping routines. */ 521 522bfd_vma bfd_getb64 PARAMS ((const unsigned char *)); 523bfd_vma bfd_getl64 PARAMS ((const unsigned char *)); 524bfd_signed_vma bfd_getb_signed_64 PARAMS ((const unsigned char *)); 525bfd_signed_vma bfd_getl_signed_64 PARAMS ((const unsigned char *)); 526bfd_vma bfd_getb32 PARAMS ((const unsigned char *)); 527bfd_vma bfd_getl32 PARAMS ((const unsigned char *)); 528bfd_signed_vma bfd_getb_signed_32 PARAMS ((const unsigned char *)); 529bfd_signed_vma bfd_getl_signed_32 PARAMS ((const unsigned char *)); 530bfd_vma bfd_getb16 PARAMS ((const unsigned char *)); 531bfd_vma bfd_getl16 PARAMS ((const unsigned char *)); 532bfd_signed_vma bfd_getb_signed_16 PARAMS ((const unsigned char *)); 533bfd_signed_vma bfd_getl_signed_16 PARAMS ((const unsigned char *)); 534void bfd_putb64 PARAMS ((bfd_vma, unsigned char *)); 535void bfd_putl64 PARAMS ((bfd_vma, unsigned char *)); 536void bfd_putb32 PARAMS ((bfd_vma, unsigned char *)); 537void bfd_putl32 PARAMS ((bfd_vma, unsigned char *)); 538void bfd_putb16 PARAMS ((bfd_vma, unsigned char *)); 539void bfd_putl16 PARAMS ((bfd_vma, unsigned char *)); 540 541/* Byte swapping routines which take size and endiannes as arguments. */ 542 543bfd_vma bfd_get_bits PARAMS ((bfd_byte *, int, boolean)); 544void bfd_put_bits PARAMS ((bfd_vma, bfd_byte *, int, boolean)); 545 546/* Externally visible ECOFF routines. */ 547 548#if defined(__STDC__) || defined(ALMOST_STDC) 549struct ecoff_debug_info; 550struct ecoff_debug_swap; 551struct ecoff_extr; 552struct symbol_cache_entry; 553struct bfd_link_info; 554struct bfd_link_hash_entry; 555struct bfd_elf_version_tree; 556#endif 557extern bfd_vma bfd_ecoff_get_gp_value PARAMS ((bfd * abfd)); 558extern boolean bfd_ecoff_set_gp_value PARAMS ((bfd *abfd, bfd_vma gp_value)); 559extern boolean bfd_ecoff_set_regmasks 560 PARAMS ((bfd *abfd, unsigned long gprmask, unsigned long fprmask, 561 unsigned long *cprmask)); 562extern PTR bfd_ecoff_debug_init 563 PARAMS ((bfd *output_bfd, struct ecoff_debug_info *output_debug, 564 const struct ecoff_debug_swap *output_swap, 565 struct bfd_link_info *)); 566extern void bfd_ecoff_debug_free 567 PARAMS ((PTR handle, bfd *output_bfd, struct ecoff_debug_info *output_debug, 568 const struct ecoff_debug_swap *output_swap, 569 struct bfd_link_info *)); 570extern boolean bfd_ecoff_debug_accumulate 571 PARAMS ((PTR handle, bfd *output_bfd, struct ecoff_debug_info *output_debug, 572 const struct ecoff_debug_swap *output_swap, 573 bfd *input_bfd, struct ecoff_debug_info *input_debug, 574 const struct ecoff_debug_swap *input_swap, 575 struct bfd_link_info *)); 576extern boolean bfd_ecoff_debug_accumulate_other 577 PARAMS ((PTR handle, bfd *output_bfd, struct ecoff_debug_info *output_debug, 578 const struct ecoff_debug_swap *output_swap, bfd *input_bfd, 579 struct bfd_link_info *)); 580extern boolean bfd_ecoff_debug_externals 581 PARAMS ((bfd *abfd, struct ecoff_debug_info *debug, 582 const struct ecoff_debug_swap *swap, 583 boolean relocateable, 584 boolean (*get_extr) (struct symbol_cache_entry *, 585 struct ecoff_extr *), 586 void (*set_index) (struct symbol_cache_entry *, 587 bfd_size_type))); 588extern boolean bfd_ecoff_debug_one_external 589 PARAMS ((bfd *abfd, struct ecoff_debug_info *debug, 590 const struct ecoff_debug_swap *swap, 591 const char *name, struct ecoff_extr *esym)); 592extern bfd_size_type bfd_ecoff_debug_size 593 PARAMS ((bfd *abfd, struct ecoff_debug_info *debug, 594 const struct ecoff_debug_swap *swap)); 595extern boolean bfd_ecoff_write_debug 596 PARAMS ((bfd *abfd, struct ecoff_debug_info *debug, 597 const struct ecoff_debug_swap *swap, file_ptr where)); 598extern boolean bfd_ecoff_write_accumulated_debug 599 PARAMS ((PTR handle, bfd *abfd, struct ecoff_debug_info *debug, 600 const struct ecoff_debug_swap *swap, 601 struct bfd_link_info *info, file_ptr where)); 602extern boolean bfd_mips_ecoff_create_embedded_relocs 603 PARAMS ((bfd *, struct bfd_link_info *, struct sec *, struct sec *, 604 char **)); 605 606/* Externally visible ELF routines. */ 607 608struct bfd_link_needed_list 609{ 610 struct bfd_link_needed_list *next; 611 bfd *by; 612 const char *name; 613}; 614 615extern boolean bfd_elf32_record_link_assignment 616 PARAMS ((bfd *, struct bfd_link_info *, const char *, boolean)); 617extern boolean bfd_elf64_record_link_assignment 618 PARAMS ((bfd *, struct bfd_link_info *, const char *, boolean)); 619extern struct bfd_link_needed_list *bfd_elf_get_needed_list 620 PARAMS ((bfd *, struct bfd_link_info *)); 621extern boolean bfd_elf_get_bfd_needed_list 622 PARAMS ((bfd *, struct bfd_link_needed_list **)); 623extern boolean bfd_elf32_size_dynamic_sections 624 PARAMS ((bfd *, const char *, const char *, boolean, const char *, 625 const char * const *, struct bfd_link_info *, struct sec **, 626 struct bfd_elf_version_tree *)); 627extern boolean bfd_elf64_size_dynamic_sections 628 PARAMS ((bfd *, const char *, const char *, boolean, const char *, 629 const char * const *, struct bfd_link_info *, struct sec **, 630 struct bfd_elf_version_tree *)); 631extern void bfd_elf_set_dt_needed_name PARAMS ((bfd *, const char *)); 632extern void bfd_elf_set_dt_needed_soname PARAMS ((bfd *, const char *)); 633extern const char *bfd_elf_get_dt_soname PARAMS ((bfd *)); 634extern struct bfd_link_needed_list *bfd_elf_get_runpath_list 635 PARAMS ((bfd *, struct bfd_link_info *)); 636 637/* Return an upper bound on the number of bytes required to store a 638 copy of ABFD's program header table entries. Return -1 if an error 639 occurs; bfd_get_error will return an appropriate code. */ 640extern long bfd_get_elf_phdr_upper_bound PARAMS ((bfd *abfd)); 641 642/* Copy ABFD's program header table entries to *PHDRS. The entries 643 will be stored as an array of Elf_Internal_Phdr structures, as 644 defined in include/elf/internal.h. To find out how large the 645 buffer needs to be, call bfd_get_elf_phdr_upper_bound. 646 647 Return the number of program header table entries read, or -1 if an 648 error occurs; bfd_get_error will return an appropriate code. */ 649extern int bfd_get_elf_phdrs PARAMS ((bfd *abfd, void *phdrs)); 650 651/* Return the arch_size field of an elf bfd, or -1 if not elf. */ 652extern int bfd_get_arch_size PARAMS ((bfd *)); 653 654/* Return true if address "naturally" sign extends, or -1 if not elf. */ 655extern int bfd_get_sign_extend_vma PARAMS ((bfd *)); 656 657extern boolean bfd_m68k_elf32_create_embedded_relocs 658 PARAMS ((bfd *, struct bfd_link_info *, struct sec *, struct sec *, 659 char **)); 660 661/* SunOS shared library support routines for the linker. */ 662 663extern struct bfd_link_needed_list *bfd_sunos_get_needed_list 664 PARAMS ((bfd *, struct bfd_link_info *)); 665extern boolean bfd_sunos_record_link_assignment 666 PARAMS ((bfd *, struct bfd_link_info *, const char *)); 667extern boolean bfd_sunos_size_dynamic_sections 668 PARAMS ((bfd *, struct bfd_link_info *, struct sec **, struct sec **, 669 struct sec **)); 670 671/* Linux shared library support routines for the linker. */ 672 673extern boolean bfd_i386linux_size_dynamic_sections 674 PARAMS ((bfd *, struct bfd_link_info *)); 675extern boolean bfd_m68klinux_size_dynamic_sections 676 PARAMS ((bfd *, struct bfd_link_info *)); 677extern boolean bfd_sparclinux_size_dynamic_sections 678 PARAMS ((bfd *, struct bfd_link_info *)); 679 680/* mmap hacks */ 681 682struct _bfd_window_internal; 683typedef struct _bfd_window_internal bfd_window_internal; 684 685typedef struct _bfd_window { 686 /* What the user asked for. */ 687 PTR data; 688 bfd_size_type size; 689 /* The actual window used by BFD. Small user-requested read-only 690 regions sharing a page may share a single window into the object 691 file. Read-write versions shouldn't until I've fixed things to 692 keep track of which portions have been claimed by the 693 application; don't want to give the same region back when the 694 application wants two writable copies! */ 695 struct _bfd_window_internal *i; 696} bfd_window; 697 698extern void bfd_init_window PARAMS ((bfd_window *)); 699extern void bfd_free_window PARAMS ((bfd_window *)); 700extern boolean bfd_get_file_window 701 PARAMS ((bfd *, file_ptr, bfd_size_type, bfd_window *, boolean)); 702 703/* XCOFF support routines for the linker. */ 704 705extern boolean bfd_xcoff_link_record_set 706 PARAMS ((bfd *, struct bfd_link_info *, struct bfd_link_hash_entry *, 707 bfd_size_type)); 708extern boolean bfd_xcoff_import_symbol 709 PARAMS ((bfd *, struct bfd_link_info *, struct bfd_link_hash_entry *, 710 bfd_vma, const char *, const char *, const char *)); 711extern boolean bfd_xcoff_export_symbol 712 PARAMS ((bfd *, struct bfd_link_info *, struct bfd_link_hash_entry *, 713 boolean)); 714extern boolean bfd_xcoff_link_count_reloc 715 PARAMS ((bfd *, struct bfd_link_info *, const char *)); 716extern boolean bfd_xcoff_record_link_assignment 717 PARAMS ((bfd *, struct bfd_link_info *, const char *)); 718extern boolean bfd_xcoff_size_dynamic_sections 719 PARAMS ((bfd *, struct bfd_link_info *, const char *, const char *, 720 unsigned long, unsigned long, unsigned long, boolean, 721 int, boolean, boolean, struct sec **)); 722 723/* Externally visible COFF routines. */ 724 725#if defined(__STDC__) || defined(ALMOST_STDC) 726struct internal_syment; 727union internal_auxent; 728#endif 729 730extern boolean bfd_coff_get_syment 731 PARAMS ((bfd *, struct symbol_cache_entry *, struct internal_syment *)); 732 733extern boolean bfd_coff_get_auxent 734 PARAMS ((bfd *, struct symbol_cache_entry *, int, union internal_auxent *)); 735 736extern boolean bfd_coff_set_symbol_class 737 PARAMS ((bfd *, struct symbol_cache_entry *, unsigned int)); 738 739extern boolean bfd_m68k_coff_create_embedded_relocs 740 PARAMS ((bfd *, struct bfd_link_info *, struct sec *, struct sec *, 741 char **)); 742 743/* ARM Interworking support. Called from linker. */ 744extern boolean bfd_arm_allocate_interworking_sections 745 PARAMS ((struct bfd_link_info *)); 746 747extern boolean bfd_arm_process_before_allocation 748 PARAMS ((bfd *, struct bfd_link_info *, int)); 749 750extern boolean bfd_arm_get_bfd_for_interworking 751 PARAMS ((bfd *, struct bfd_link_info *)); 752 753/* PE ARM Interworking support. Called from linker. */ 754extern boolean bfd_arm_pe_allocate_interworking_sections 755 PARAMS ((struct bfd_link_info *)); 756 757extern boolean bfd_arm_pe_process_before_allocation 758 PARAMS ((bfd *, struct bfd_link_info *, int)); 759 760extern boolean bfd_arm_pe_get_bfd_for_interworking 761 PARAMS ((bfd *, struct bfd_link_info *)); 762 763/* ELF ARM Interworking support. Called from linker. */ 764extern boolean bfd_elf32_arm_allocate_interworking_sections 765 PARAMS ((struct bfd_link_info *)); 766 767extern boolean bfd_elf32_arm_process_before_allocation 768 PARAMS ((bfd *, struct bfd_link_info *, int)); 769 770extern boolean bfd_elf32_arm_get_bfd_for_interworking 771 PARAMS ((bfd *, struct bfd_link_info *)); 772 773/* TI COFF load page support. */ 774extern void bfd_ticoff_set_section_load_page 775 PARAMS ((struct sec *, int)); 776 777extern int bfd_ticoff_get_section_load_page 778 PARAMS ((struct sec *)); 779 780/* And more from the source. */ 781