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 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 <sac@slash.cygnus.com>
* versados.c (struct esd, get_4): Lint; use unsigned chars.
/* 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;
/* typedef enum boolean {false, true} boolean; */
/* Yup, SVR4 has a "typedef enum boolean" in <sys/types.h> -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
/* 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
#define printf_vma(x) fprintf_vma(stdout,x)
typedef unsigned int flagword; /* 32 bits of flags */
+typedef unsigned char bfd_byte;
\f
/** File formats */
#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
/* 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;
file_ptr pos; /* bfd* or file position */
int namidx; /* index into string table */
};
-
\f
/* Linenumber stuff */
\f
/* object and core file sections */
-
#define align_power(addr, align) \
( ((addr) + ((1<<(align))-1)) & (-1 << (align)))
#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;
\f
\f
/* 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)
#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. */
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. */
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. */
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;
/* typedef enum boolean {false, true} boolean; */
/* Yup, SVR4 has a "typedef enum boolean" in <sys/types.h> -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
#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;
\f
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)
#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. */
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));
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,
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 };
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;
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));
#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))
#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))
#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));
bfd_target_srec_flavour,
bfd_target_som_flavour,
bfd_target_os9k_flavour,
- bfd_target_msdos_flavour
+ bfd_target_versados_flavour
};
/* Forward declaration. */
/* 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)\