X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=bfd%2Fbfd-in.h;h=be71f7396bdba712a65b55e9843604a0d5489515;hb=28a0c103996c49ab0784f19e3813f3b6ac4a6619;hp=30b643fd9152fadbcf890ced9821ae93d7615861;hpb=3b1f83adadb508ac01e146dbc1d3f37eed55af6e;p=deliverable%2Fbinutils-gdb.git diff --git a/bfd/bfd-in.h b/bfd/bfd-in.h index 30b643fd91..be71f7396b 100644 --- a/bfd/bfd-in.h +++ b/bfd/bfd-in.h @@ -20,7 +20,7 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software -Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* bfd.h -- The only header file required by users of the bfd library @@ -44,12 +44,17 @@ here. */ #ifndef __BFD_H_SEEN__ #define __BFD_H_SEEN__ +#ifdef __cplusplus +extern "C" { +#endif + #include "ansidecl.h" #include "obstack.h" /* These two lines get substitutions done by commands in Makefile.in. */ -#define BFD_VERSION "@VERSION@" +#define BFD_VERSION "@VERSION@" #define BFD_ARCH_SIZE @WORDSIZE@ +#define BFD_HOST_64BIT_LONG @BFD_HOST_64BIT_LONG@ #if BFD_ARCH_SIZE >= 64 #define BFD64 @@ -63,9 +68,6 @@ here. */ #endif #endif -/* 64-bit type definition (if any) from bfd's sysdep.h goes here */ - - /* forward declaration */ typedef struct _bfd bfd; @@ -86,11 +88,17 @@ typedef struct _bfd bfd; #if defined (__GNUG__) && (__GNUC_MINOR__ > 5) #define TRUE_FALSE_ALREADY_DEFINED #endif +#ifdef MPW +/* Pre-emptive strike - get the file with the enum. */ +#include +#define TRUE_FALSE_ALREADY_DEFINED +#endif /* MPW */ #ifndef TRUE_FALSE_ALREADY_DEFINED typedef enum bfd_boolean {false, true} boolean; #define BFD_TRUE_FALSE #else -typedef enum bfd_boolean {bfd_false, bfd_true} boolean; +/* Use enum names that will appear nowhere else. */ +typedef enum bfd_boolean {bfd_fffalse, bfd_tttrue} boolean; #endif /* A pointer to a position in a file. */ @@ -104,43 +112,42 @@ typedef enum bfd_boolean {bfd_false, bfd_true} boolean; typedef long int file_ptr; /* Support for different sizes of target format ints and addresses. - If the host implements 64-bit values, it defines BFD_HOST_64_BIT to - be the appropriate type. Otherwise, this code will fall back on - gcc's "long long" type if gcc is being used. BFD_HOST_64_BIT must - be defined in such a way as to be a valid type name by itself or - with "unsigned" prefixed. It should be a signed type by itself. - - If neither is the case, then compilation will fail if 64-bit - targets are requested. If you don't request any 64-bit targets, - you should be safe. */ + If the type `long' is at least 64 bits, BFD_HOST_64BIT_LONG will be + set to 1 above. Otherwise, if gcc is being used, this code will + use gcc's "long long" type. Otherwise, the compilation will fail + if 64-bit targets are requested. */ -#ifdef BFD64 +#ifdef BFD64 -#if defined (__GNUC__) && !defined (BFD_HOST_64_BIT) +#ifndef BFD_HOST_64_BIT +#if BFD_HOST_64BIT_LONG +#define BFD_HOST_64_BIT long +#else +#ifdef __GNUC__ #define BFD_HOST_64_BIT long long -typedef BFD_HOST_64_BIT int64_type; -typedef unsigned BFD_HOST_64_BIT uint64_type; -#endif - -#if !defined (uint64_type) && defined (__GNUC__) -#define uint64_type unsigned long long -#define int64_type long long -#endif -#ifndef uint64_typeLOW -#define uint64_typeLOW(x) ((unsigned long)(((x) & 0xffffffff))) -#define uint64_typeHIGH(x) ((unsigned long)(((x) >> 32) & 0xffffffff)) -#endif +#endif /* defined (__GNUC__) */ +#endif /* ! BFD_HOST_64BIT_LONG */ +#endif /* ! defined (BFD_HOST_64_BIT) */ typedef unsigned BFD_HOST_64_BIT bfd_vma; typedef BFD_HOST_64_BIT bfd_signed_vma; typedef unsigned BFD_HOST_64_BIT bfd_size_type; typedef unsigned BFD_HOST_64_BIT symvalue; + #ifndef fprintf_vma +#if BFD_HOST_64BIT_LONG +#define sprintf_vma(s,x) sprintf (s, "%016lx", x) +#define fprintf_vma(f,x) fprintf (f, "%016lx", x) +#else +#define _bfd_int64_low(x) ((unsigned long) (((x) & 0xffffffff))) +#define _bfd_int64_high(x) ((unsigned long) (((x) >> 32) & 0xffffffff)) #define fprintf_vma(s,x) \ - fprintf(s,"%08lx%08lx", uint64_typeHIGH(x), uint64_typeLOW(x)) + fprintf ((s), "%08lx%08lx", _bfd_int64_high (x), _bfd_int64_low (x)) #define sprintf_vma(s,x) \ - sprintf(s,"%08lx%08lx", uint64_typeHIGH(x), uint64_typeLOW(x)) + sprintf ((s), "%08lx%08lx", _bfd_int64_high (x), _bfd_int64_low (x)) +#endif #endif + #else /* not BFD64 */ /* Represent a target address. Also used as a generic unsigned type @@ -297,9 +304,9 @@ typedef struct sec *sec_ptr; #define bfd_is_com_section(ptr) (((ptr)->flags & SEC_IS_COMMON) != 0) -#define bfd_set_section_vma(bfd, ptr, val) (((ptr)->vma = (ptr)->lma= (val)), ((ptr)->user_set_vma = bfd_true), bfd_true) -#define bfd_set_section_alignment(bfd, ptr, val) (((ptr)->alignment_power = (val)),bfd_true) -#define bfd_set_section_userdata(bfd, ptr, val) (((ptr)->userdata = (val)),bfd_true) +#define bfd_set_section_vma(bfd, ptr, val) (((ptr)->vma = (ptr)->lma= (val)), ((ptr)->user_set_vma = (boolean)true), true) +#define bfd_set_section_alignment(bfd, ptr, val) (((ptr)->alignment_power = (val)),true) +#define bfd_set_section_userdata(bfd, ptr, val) (((ptr)->userdata = (val)),true) typedef struct stat stat_type; @@ -386,6 +393,11 @@ extern struct bfd_hash_entry *bfd_hash_lookup PARAMS ((struct bfd_hash_table *, const char *, boolean create, boolean copy)); +/* Replace an entry in a hash table. */ +extern void bfd_hash_replace + PARAMS ((struct bfd_hash_table *, struct bfd_hash_entry *old, + struct bfd_hash_entry *nw)); + /* Base method for creating a hash table entry. */ extern struct bfd_hash_entry *bfd_hash_newfunc PARAMS ((struct bfd_hash_entry *, struct bfd_hash_table *, @@ -444,42 +456,6 @@ extern long bfd_tell PARAMS ((bfd *abfd)); extern int bfd_flush PARAMS ((bfd *abfd)); extern int bfd_stat PARAMS ((bfd *abfd, struct stat *)); -/* PE STUFF */ -/* Also define some types which are used within bfdlink.h for the - bfd_link_info struct. These are not defined in bfdlink.h for a reason. - When the link_info data is passed to bfd from ld, it is copied into - extern variables defined in internal.h. The type class for these must - be available to any thing that includes internal.h. When internal.h is - included, it is always preceeded by an include on this file. If I leave the - type definitions in bfdlink.h, then I must include that file when ever - I include internal.h, and this is not always a good thing */ - -/* These are the different types of subsystems to be used when linking for - Windows NT. This information is passed in as an input parameter (default - is console) and ultimately ends up in the optional header data */ -enum bfd_link_subsystem -{ - native, /* image doesn't require a subsystem */ - windows, /* image runs in the Windows GUI subsystem */ - console, /* image runs in the Windows CUI (character) subsystem */ - os2, /* image runs in the OS/2 character subsystem */ - posix /* image runs in the posix character subsystem */ -}; -/* The NT optional header file allows input of the stack and heap reserve - and commit size. This data may be input on the command line and will - end up in the optional header. Default sizes are provided. */ -struct _bfd_link_stack_heap -{ - boolean stack_defined; - boolean heap_defined; - bfd_vma stack_reserve; - bfd_vma stack_commit; - bfd_vma heap_reserve; - bfd_vma heap_commit; -}; -typedef struct _bfd_link_stack_heap bfd_link_stack_heap; - -/* END OF PE STUFF */ /* Cast from const char * to char * so that caller can assign to a char * without a warning. */ @@ -504,7 +480,7 @@ typedef struct _bfd_link_stack_heap bfd_link_stack_heap; #define bfd_get_symbol_leading_char(abfd) ((abfd)->xvec->symbol_leading_char) -#define bfd_set_cacheable(abfd,bool) (((abfd)->cacheable = (bool)), bfd_true) +#define bfd_set_cacheable(abfd,bool) (((abfd)->cacheable = (boolean)(bool)), true) /* Byte swapping routines. */ @@ -535,6 +511,7 @@ struct ecoff_debug_swap; struct ecoff_extr; struct symbol_cache_entry; struct bfd_link_info; +struct bfd_link_hash_entry; #endif extern bfd_vma bfd_ecoff_get_gp_value PARAMS ((bfd * abfd)); extern boolean bfd_ecoff_set_gp_value PARAMS ((bfd *abfd, bfd_vma gp_value)); @@ -587,10 +564,19 @@ extern boolean bfd_mips_ecoff_create_embedded_relocs /* Externally visible ELF routines. */ +struct bfd_link_needed_list +{ + struct bfd_link_needed_list *next; + bfd *by; + const char *name; +}; + extern boolean bfd_elf32_record_link_assignment - PARAMS ((bfd *, struct bfd_link_info *, const char *)); + PARAMS ((bfd *, struct bfd_link_info *, const char *, boolean)); extern boolean bfd_elf64_record_link_assignment - PARAMS ((bfd *, struct bfd_link_info *, const char *)); + PARAMS ((bfd *, struct bfd_link_info *, const char *, boolean)); +extern struct bfd_link_needed_list *bfd_elf_get_needed_list + PARAMS ((bfd *, struct bfd_link_info *)); extern boolean bfd_elf32_size_dynamic_sections PARAMS ((bfd *, const char *, const char *, boolean, struct bfd_link_info *, struct sec **)); @@ -601,6 +587,8 @@ extern void bfd_elf_set_dt_needed_name PARAMS ((bfd *, const char *)); /* SunOS shared library support routines for the linker. */ +extern struct bfd_link_needed_list *bfd_sunos_get_needed_list + PARAMS ((bfd *, struct bfd_link_info *)); extern boolean bfd_sunos_record_link_assignment PARAMS ((bfd *, struct bfd_link_info *, const char *)); extern boolean bfd_sunos_size_dynamic_sections @@ -612,12 +600,17 @@ extern boolean bfd_sunos_size_dynamic_sections extern boolean bfd_linux_size_dynamic_sections PARAMS ((bfd *, struct bfd_link_info *)); -/* And more from the source. */ +/* XCOFF support routines for the linker. */ + +extern boolean bfd_xcoff_import_symbol + PARAMS ((bfd *, struct bfd_link_info *, struct bfd_link_hash_entry *, + bfd_vma, const char *, const char *, const char *)); +extern boolean bfd_xcoff_export_symbol + PARAMS ((bfd *, struct bfd_link_info *, struct bfd_link_hash_entry *, + boolean)); +extern boolean bfd_xcoff_size_dynamic_sections + PARAMS ((bfd *, struct bfd_link_info *, const char *, const char *, + unsigned long, unsigned long, unsigned long, boolean, + int, boolean)); -/* provide storage for subsystem, stack and heap data which may have been - passed in on the command line. Ld puts this data into a bfd_link_info - struct which ultimately gets passed in to the bfd. When it arrives, copy - it to the following struct so that the data will be available in coffcode.h - where it is needed. The typedef's used are defined in bfd.h */ -enum bfd_link_subsystem NT_subsystem; -bfd_link_stack_heap NT_stack_heap; +/* And more from the source. */