From 3b1f83adadb508ac01e146dbc1d3f37eed55af6e Mon Sep 17 00:00:00 2001 From: Jeff Law Date: Fri, 9 Jun 1995 19:16:33 +0000 Subject: [PATCH] * bfd-in.h: (TRUE_FALSE_ALREADY_DEFINED): Define this if compiling with g++-2.6 or later. (bfd_set_section_vma): Use bfd_true and bfd_false rather than true and false. (bfd_set_section_alignment): Likewise. (bfd_set_section_userdata): Likewise. (bfd_set_cacheable): Likewise. * bfd-in2.h: Rebuilt. --- bfd/ChangeLog | 11 +++++ bfd/bfd-in.h | 111 +++++++++++++++++++++++++++++++++++++++++-------- bfd/bfd-in2.h | 130 ++++++++++++++++++++++++++++++++++++++++++++++++++++------ 3 files changed, 222 insertions(+), 30 deletions(-) diff --git a/bfd/ChangeLog b/bfd/ChangeLog index ae68a38..45750f1 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,14 @@ +Fri Jun 9 12:49:00 1995 Jeff Law (law@snake.cs.utah.edu) + + * bfd-in.h: (TRUE_FALSE_ALREADY_DEFINED): Define this if + compiling with g++-2.6 or later. + (bfd_set_section_vma): Use bfd_true and bfd_false rather than + true and false. + (bfd_set_section_alignment): Likewise. + (bfd_set_section_userdata): Likewise. + (bfd_set_cacheable): Likewise. + * bfd-in2.h: Rebuilt. + Fri Jun 9 07:54:29 1995 Steve Chamberlain * versados.c (struct esd, get_4): Lint; use unsigned chars. diff --git a/bfd/bfd-in.h b/bfd/bfd-in.h index ad9fa96..30b643f 100644 --- a/bfd/bfd-in.h +++ b/bfd/bfd-in.h @@ -1,5 +1,5 @@ /* Main header file for the bfd library -- portable access to object files. - Copyright 1990, 1991, 1992, 1993, 1994 Free Software Foundation, Inc. + Copyright 1990, 1991, 1992, 1993, 1994, 1995 Free Software Foundation, Inc. Contributed by Cygnus Support. ** NOTE: bfd.h and bfd-in2.h are GENERATED files. Don't change them; @@ -82,6 +82,10 @@ typedef struct _bfd bfd; /* typedef enum boolean {false, true} boolean; */ /* Yup, SVR4 has a "typedef enum boolean" in -fnf */ /* It gets worse if the host also defines a true/false enum... -sts */ +/* And even worse if your compiler has built-in boolean types... -law */ +#if defined (__GNUG__) && (__GNUC_MINOR__ > 5) +#define TRUE_FALSE_ALREADY_DEFINED +#endif #ifndef TRUE_FALSE_ALREADY_DEFINED typedef enum bfd_boolean {false, true} boolean; #define BFD_TRUE_FALSE @@ -99,15 +103,16 @@ typedef enum bfd_boolean {bfd_false, bfd_true} boolean; /* typedef off_t file_ptr; */ 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. +/* 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 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. */ #ifdef BFD64 @@ -159,6 +164,7 @@ typedef unsigned long bfd_size_type; #define printf_vma(x) fprintf_vma(stdout,x) typedef unsigned int flagword; /* 32 bits of flags */ +typedef unsigned char bfd_byte; /** File formats */ @@ -213,7 +219,8 @@ typedef enum bfd_format { #define D_PAGED 0x100 /* BFD is relaxable (this means that bfd_relax_section may be able to - do something). */ + do something) (sometimes bfd_relax_section can do something even if + this is not set). */ #define BFD_IS_RELAXABLE 0x200 /* This may be set before writing out a BFD to request using a @@ -227,6 +234,9 @@ typedef enum bfd_format { /* A count of carsyms (canonical archive symbols). */ typedef unsigned long symindex; +/* How to perform a relocation. */ +typedef const struct reloc_howto_struct reloc_howto_type; + #define BFD_NO_MORE_SYMBOLS ((symindex) ~0) /* General purpose part of a symbol X; @@ -257,7 +267,6 @@ struct orl { /* output ranlib */ file_ptr pos; /* bfd* or file position */ int namidx; /* index into string table */ }; - /* Linenumber stuff */ @@ -271,7 +280,6 @@ typedef struct lineno_cache_entry { /* object and core file sections */ - #define align_power(addr, align) \ ( ((addr) + ((1<<(align))-1)) & (-1 << (align))) @@ -289,9 +297,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 = 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) +#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) typedef struct stat stat_type; @@ -424,6 +432,55 @@ extern void bfd_hash_traverse PARAMS ((struct bfd_hash_table *, /* User program access to BFD facilities */ +/* Direct I/O routines, for programs which know more about the object + file than BFD does. Use higher level routines if possible. */ + +extern bfd_size_type bfd_read + PARAMS ((PTR, bfd_size_type size, bfd_size_type nitems, bfd *abfd)); +extern bfd_size_type bfd_write + PARAMS ((const PTR, bfd_size_type size, bfd_size_type nitems, bfd *abfd)); +extern int bfd_seek PARAMS ((bfd *abfd, file_ptr fp, int direction)); +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. */ #define bfd_get_filename(abfd) ((char *) (abfd)->filename) @@ -447,7 +504,7 @@ extern void bfd_hash_traverse PARAMS ((struct bfd_hash_table *, #define bfd_get_symbol_leading_char(abfd) ((abfd)->xvec->symbol_leading_char) -#define bfd_set_cacheable(abfd,bool) (((abfd)->cacheable = (bool)), true) +#define bfd_set_cacheable(abfd,bool) (((abfd)->cacheable = (bool)), bfd_true) /* Byte swapping routines. */ @@ -524,6 +581,9 @@ extern boolean bfd_ecoff_write_accumulated_debug PARAMS ((PTR handle, bfd *abfd, struct ecoff_debug_info *debug, const struct ecoff_debug_swap *swap, struct bfd_link_info *info, file_ptr where)); +extern boolean bfd_mips_ecoff_create_embedded_relocs + PARAMS ((bfd *, struct bfd_link_info *, struct sec *, struct sec *, + char **)); /* Externally visible ELF routines. */ @@ -532,9 +592,11 @@ extern boolean bfd_elf32_record_link_assignment extern boolean bfd_elf64_record_link_assignment PARAMS ((bfd *, struct bfd_link_info *, const char *)); extern boolean bfd_elf32_size_dynamic_sections - PARAMS ((bfd *, struct bfd_link_info *, struct sec **)); + PARAMS ((bfd *, const char *, const char *, boolean, + struct bfd_link_info *, struct sec **)); extern boolean bfd_elf64_size_dynamic_sections - PARAMS ((bfd *, struct bfd_link_info *, struct sec **)); + PARAMS ((bfd *, const char *, const char *, boolean, + struct bfd_link_info *, struct sec **)); extern void bfd_elf_set_dt_needed_name PARAMS ((bfd *, const char *)); /* SunOS shared library support routines for the linker. */ @@ -545,4 +607,17 @@ extern boolean bfd_sunos_size_dynamic_sections PARAMS ((bfd *, struct bfd_link_info *, struct sec **, struct sec **, struct sec **)); +/* Linux shared library support routines for the linker. */ + +extern boolean bfd_linux_size_dynamic_sections + PARAMS ((bfd *, struct bfd_link_info *)); + /* And more from the source. */ + +/* 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; diff --git a/bfd/bfd-in2.h b/bfd/bfd-in2.h index b2dc589..351edfa 100644 --- a/bfd/bfd-in2.h +++ b/bfd/bfd-in2.h @@ -82,6 +82,10 @@ typedef struct _bfd bfd; /* typedef enum boolean {false, true} boolean; */ /* Yup, SVR4 has a "typedef enum boolean" in -fnf */ /* It gets worse if the host also defines a true/false enum... -sts */ +/* And even worse if your compiler has built-in boolean types... -law */ +#if defined (__GNUG__) && (__GNUC_MINOR__ > 5) +#define TRUE_FALSE_ALREADY_DEFINED +#endif #ifndef TRUE_FALSE_ALREADY_DEFINED typedef enum bfd_boolean {false, true} boolean; #define BFD_TRUE_FALSE @@ -293,9 +297,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 = 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) +#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) typedef struct stat stat_type; @@ -440,6 +444,43 @@ 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. */ #define bfd_get_filename(abfd) ((char *) (abfd)->filename) @@ -463,7 +504,7 @@ extern int bfd_stat PARAMS ((bfd *abfd, struct stat *)); #define bfd_get_symbol_leading_char(abfd) ((abfd)->xvec->symbol_leading_char) -#define bfd_set_cacheable(abfd,bool) (((abfd)->cacheable = (bool)), true) +#define bfd_set_cacheable(abfd,bool) (((abfd)->cacheable = (bool)), bfd_true) /* Byte swapping routines. */ @@ -572,6 +613,14 @@ extern boolean bfd_linux_size_dynamic_sections PARAMS ((bfd *, struct bfd_link_info *)); /* And more from the source. */ + +/* 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; void bfd_init PARAMS ((void)); @@ -1327,6 +1376,25 @@ The 24-bit relocation is used in some Intel 960 configurations. */ BFD_RELOC_12_PCREL, BFD_RELOC_8_PCREL, +/* For ELF. */ + BFD_RELOC_32_GOT_PCREL, + BFD_RELOC_16_GOT_PCREL, + BFD_RELOC_8_GOT_PCREL, + BFD_RELOC_32_GOTOFF, + BFD_RELOC_16_GOTOFF, + BFD_RELOC_8_GOTOFF, + BFD_RELOC_32_PLT_PCREL, + BFD_RELOC_16_PLT_PCREL, + BFD_RELOC_8_PLT_PCREL, + BFD_RELOC_32_PLTOFF, + BFD_RELOC_16_PLTOFF, + BFD_RELOC_8_PLTOFF, + +/* Relocations used by 68K ELF. */ + BFD_RELOC_68K_GLOB_DAT, + BFD_RELOC_68K_JMP_SLOT, + BFD_RELOC_68K_RELATIVE, + /* Linkage-table relative. */ BFD_RELOC_32_BASEREL, BFD_RELOC_16_BASEREL, @@ -1524,13 +1592,22 @@ not stored in the instruction. */ BFD_RELOC_ARM_SWI, BFD_RELOC_ARM_MULTI, BFD_RELOC_ARM_CP_OFF_IMM, + BFD_RELOC_ARM_ADR_IMM, + BFD_RELOC_ARM_LDR_IMM, + BFD_RELOC_ARM_LITERAL, + BFD_RELOC_ARM_IN_POOL, /* start-sanitize-arc */ /* Argonaut RISC Core (ARC) relocs. ARC 22 bit pc-relative branch. The lowest two bits must be zero and are -not stored in the instruction. High 20 bits installed in bits 7 through 26 -of instruction. */ +not stored in the instruction. The high 20 bits are installed in bits 26 +through 7 of the instruction. */ BFD_RELOC_ARC_B22_PCREL, + +/* ARC 26 bit absolute branch. The lowest two bits must be zero and are not +stored in the instruction. The high 24 bits are installed in bits 23 +through 0. */ + BFD_RELOC_ARC_B26, /* end-sanitize-arc */ BFD_RELOC_UNUSED }; @@ -1820,6 +1897,7 @@ struct _bfd struct lynx_core_struct *lynx_core_data; struct osf_core_struct *osf_core_data; struct cisco_core_struct *cisco_core_data; + struct versados_data_struct *versados_data; PTR any; } tdata; @@ -1864,6 +1942,14 @@ bfd_errmsg PARAMS ((bfd_error_type error_tag)); void bfd_perror PARAMS ((CONST char *message)); +typedef void (*bfd_error_handler_type) PARAMS ((const char *, ...)); + +bfd_error_handler_type +bfd_set_error_handler PARAMS ((bfd_error_handler_type)); + +void +bfd_set_error_program_name PARAMS ((const char *)); + long bfd_get_reloc_upper_bound PARAMS ((bfd *abfd, asection *sect)); @@ -1907,6 +1993,18 @@ bfd_copy_private_bfd_data PARAMS ((bfd *ibfd, bfd *obfd)); #define bfd_copy_private_bfd_data(ibfd, obfd) \ BFD_SEND (ibfd, _bfd_copy_private_bfd_data, \ (ibfd, obfd)) +boolean +bfd_merge_private_bfd_data PARAMS ((bfd *ibfd, bfd *obfd)); + +#define bfd_merge_private_bfd_data(ibfd, obfd) \ + BFD_SEND (ibfd, _bfd_merge_private_bfd_data, \ + (ibfd, obfd)) +boolean +bfd_set_private_flags PARAMS ((bfd *abfd, flagword flags)); + +#define bfd_set_private_flags(abfd, flags) \ + BFD_SEND (abfd, _bfd_set_private_flags, \ + (abfd, flags)) #define bfd_sizeof_headers(abfd, reloc) \ BFD_SEND (abfd, _bfd_sizeof_headers, (abfd, reloc)) @@ -1933,10 +2031,6 @@ bfd_copy_private_bfd_data PARAMS ((bfd *ibfd, bfd *obfd)); #define bfd_set_arch_mach(abfd, arch, mach)\ BFD_SEND ( abfd, _bfd_set_arch_mach, (abfd, arch, mach)) -#define bfd_get_relocated_section_contents(abfd, link_info, link_order, data, relocateable, symbols) \ - BFD_SEND (abfd, _bfd_get_relocated_section_contents, \ - (abfd, link_info, link_order, data, relocateable, symbols)) - #define bfd_relax_section(abfd, section, link_info, again) \ BFD_SEND (abfd, _bfd_relax_section, (abfd, section, link_info, again)) @@ -1964,6 +2058,11 @@ bfd_copy_private_bfd_data PARAMS ((bfd *ibfd, bfd *obfd)); #define bfd_canonicalize_dynamic_reloc(abfd, arels, asyms) \ BFD_SEND (abfd, _bfd_canonicalize_dynamic_reloc, (abfd, arels, asyms)) +extern bfd_byte *bfd_get_relocated_section_contents + PARAMS ((bfd *, struct bfd_link_info *, + struct bfd_link_order *, bfd_byte *, + boolean, asymbol **)); + symindex bfd_get_next_mapent PARAMS ((bfd *abfd, symindex previous, carsym **sym)); @@ -2019,7 +2118,7 @@ enum bfd_flavour { bfd_target_srec_flavour, bfd_target_som_flavour, bfd_target_os9k_flavour, - bfd_target_msdos_flavour + bfd_target_versados_flavour }; /* Forward declaration. */ @@ -2078,14 +2177,21 @@ CAT(NAME,_get_section_contents) /* Entry points to copy private data. */ #define BFD_JUMP_TABLE_COPY(NAME)\ CAT(NAME,_bfd_copy_private_bfd_data),\ -CAT(NAME,_bfd_copy_private_section_data) +CAT(NAME,_bfd_merge_private_bfd_data),\ +CAT(NAME,_bfd_copy_private_section_data),\ +CAT(NAME,_bfd_set_private_flags) /* Called to copy BFD general private data from one object file to another. */ boolean (*_bfd_copy_private_bfd_data) PARAMS ((bfd *, bfd *)); + /* Called to merge BFD general private data from one object file + to a common output file when linking. */ + boolean (*_bfd_merge_private_bfd_data) PARAMS ((bfd *, bfd *)); /* Called to copy BFD private section data from one object file to another. */ boolean (*_bfd_copy_private_section_data) PARAMS ((bfd *, sec_ptr, bfd *, sec_ptr)); + /* Called to set private backend flags */ + boolean (*_bfd_set_private_flags) PARAMS ((bfd *, flagword)); /* Core file entry points. */ #define BFD_JUMP_TABLE_CORE(NAME)\ -- 2.7.4