Updated 2.10 headers.
This commit is contained in:
parent
e22c5813c4
commit
bacaa92f40
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=60783
@ -1,6 +1,7 @@
|
||||
/* $FreeBSD$ */
|
||||
|
||||
/* Main header file for the bfd library -- portable access to object files.
|
||||
Copyright 1990, 91, 92, 93, 94, 95, 96, 97, 1998
|
||||
Copyright 1990, 91, 92, 93, 94, 95, 96, 97, 98, 99, 2000
|
||||
Free Software Foundation, Inc.
|
||||
Contributed by Cygnus Support.
|
||||
|
||||
@ -53,7 +54,7 @@ extern "C" {
|
||||
#include "ansidecl.h"
|
||||
|
||||
/* These two lines get substitutions done by commands in Makefile.in. */
|
||||
#define BFD_VERSION "2.9.1"
|
||||
/* #define BFD_VERSION "2.9.5" */
|
||||
#define BFD_ARCH_SIZE 32
|
||||
#define BFD_HOST_64BIT_LONG 0
|
||||
#if 0
|
||||
@ -90,7 +91,7 @@ typedef struct _bfd bfd;
|
||||
/* 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)
|
||||
#if defined (__GNUG__) && (__GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 6))
|
||||
#define TRUE_FALSE_ALREADY_DEFINED
|
||||
#endif
|
||||
#ifdef MPW
|
||||
@ -122,20 +123,24 @@ typedef long int file_ptr;
|
||||
use gcc's "long long" type. Otherwise, BFD_HOST_64_BIT must be
|
||||
defined above. */
|
||||
|
||||
#ifndef BFD_HOST_64_BIT
|
||||
# if BFD_HOST_64BIT_LONG
|
||||
# define BFD_HOST_64_BIT long
|
||||
# define BFD_HOST_U_64_BIT unsigned long
|
||||
# else
|
||||
# ifdef __GNUC__
|
||||
# if __GNUC__ >= 2
|
||||
# define BFD_HOST_64_BIT long long
|
||||
# define BFD_HOST_U_64_BIT unsigned long long
|
||||
# endif /* __GNUC__ >= 2 */
|
||||
# endif /* ! defined (__GNUC__) */
|
||||
# endif /* ! BFD_HOST_64BIT_LONG */
|
||||
#endif /* ! defined (BFD_HOST_64_BIT) */
|
||||
|
||||
#ifdef BFD64
|
||||
|
||||
#ifndef BFD_HOST_64_BIT
|
||||
#if BFD_HOST_64BIT_LONG
|
||||
#define BFD_HOST_64_BIT long
|
||||
#define BFD_HOST_U_64_BIT unsigned long
|
||||
#else
|
||||
#ifdef __GNUC__
|
||||
#define BFD_HOST_64_BIT long long
|
||||
#define BFD_HOST_U_64_BIT unsigned long long
|
||||
#else /* ! defined (__GNUC__) */
|
||||
#error No 64 bit integer type available
|
||||
#endif /* ! defined (__GNUC__) */
|
||||
#endif /* ! BFD_HOST_64BIT_LONG */
|
||||
#endif /* ! defined (BFD_HOST_64_BIT) */
|
||||
|
||||
typedef BFD_HOST_U_64_BIT bfd_vma;
|
||||
@ -176,7 +181,9 @@ typedef unsigned long bfd_size_type;
|
||||
/* Print a bfd_vma x on stream s. */
|
||||
#define fprintf_vma(s,x) fprintf(s, "%08lx", x)
|
||||
#define sprintf_vma(s,x) sprintf(s, "%08lx", x)
|
||||
|
||||
#endif /* not BFD64 */
|
||||
|
||||
#define printf_vma(x) fprintf_vma(stdout,x)
|
||||
|
||||
typedef unsigned int flagword; /* 32 bits of flags */
|
||||
@ -621,6 +628,23 @@ extern boolean bfd_elf64_size_dynamic_sections
|
||||
extern void bfd_elf_set_dt_needed_name PARAMS ((bfd *, const char *));
|
||||
extern const char *bfd_elf_get_dt_soname PARAMS ((bfd *));
|
||||
|
||||
/* Return an upper bound on the number of bytes required to store a
|
||||
copy of ABFD's program header table entries. Return -1 if an error
|
||||
occurs; bfd_get_error will return an appropriate code. */
|
||||
extern long bfd_get_elf_phdr_upper_bound PARAMS ((bfd *abfd));
|
||||
|
||||
/* Copy ABFD's program header table entries to *PHDRS. The entries
|
||||
will be stored as an array of Elf_Internal_Phdr structures, as
|
||||
defined in include/elf/internal.h. To find out how large the
|
||||
buffer needs to be, call bfd_get_elf_phdr_upper_bound.
|
||||
|
||||
Return the number of program header table entries read, or -1 if an
|
||||
error occurs; bfd_get_error will return an appropriate code. */
|
||||
extern int bfd_get_elf_phdrs PARAMS ((bfd *abfd, void *phdrs));
|
||||
|
||||
/* Return the arch_size field of an elf bfd, or -1 if not elf. */
|
||||
extern int bfd_elf_get_arch_size PARAMS ((bfd *));
|
||||
|
||||
/* SunOS shared library support routines for the linker. */
|
||||
|
||||
extern struct bfd_link_needed_list *bfd_sunos_get_needed_list
|
||||
@ -692,9 +716,50 @@ union internal_auxent;
|
||||
|
||||
extern boolean bfd_coff_get_syment
|
||||
PARAMS ((bfd *, struct symbol_cache_entry *, struct internal_syment *));
|
||||
|
||||
extern boolean bfd_coff_get_auxent
|
||||
PARAMS ((bfd *, struct symbol_cache_entry *, int, union internal_auxent *));
|
||||
|
||||
extern boolean bfd_coff_set_symbol_class
|
||||
PARAMS ((bfd *, struct symbol_cache_entry *, unsigned int));
|
||||
|
||||
/* ARM Interworking support. Called from linker. */
|
||||
extern boolean bfd_arm_allocate_interworking_sections
|
||||
PARAMS ((struct bfd_link_info *));
|
||||
|
||||
extern boolean bfd_arm_process_before_allocation
|
||||
PARAMS ((bfd *, struct bfd_link_info *, int));
|
||||
|
||||
extern boolean bfd_arm_get_bfd_for_interworking
|
||||
PARAMS ((bfd *, struct bfd_link_info *));
|
||||
|
||||
/* PE ARM Interworking support. Called from linker. */
|
||||
extern boolean bfd_arm_pe_allocate_interworking_sections
|
||||
PARAMS ((struct bfd_link_info *));
|
||||
|
||||
extern boolean bfd_arm_pe_process_before_allocation
|
||||
PARAMS ((bfd *, struct bfd_link_info *, int));
|
||||
|
||||
extern boolean bfd_arm_pe_get_bfd_for_interworking
|
||||
PARAMS ((bfd *, struct bfd_link_info *));
|
||||
|
||||
/* ELF ARM Interworking support. Called from linker. */
|
||||
extern boolean bfd_elf32_arm_allocate_interworking_sections
|
||||
PARAMS ((struct bfd_link_info *));
|
||||
|
||||
extern boolean bfd_elf32_arm_process_before_allocation
|
||||
PARAMS ((bfd *, struct bfd_link_info *, int));
|
||||
|
||||
extern boolean bfd_elf32_arm_get_bfd_for_interworking
|
||||
PARAMS ((bfd *, struct bfd_link_info *));
|
||||
|
||||
/* TI COFF load page support. */
|
||||
extern void bfd_ticoff_set_section_load_page
|
||||
PARAMS ((struct sec *, int));
|
||||
|
||||
extern int bfd_ticoff_get_section_load_page
|
||||
PARAMS ((struct sec *));
|
||||
|
||||
/* And more from the source. */
|
||||
void
|
||||
bfd_init PARAMS ((void));
|
||||
@ -720,11 +785,17 @@ bfd_close_all_done PARAMS ((bfd *));
|
||||
bfd *
|
||||
bfd_create PARAMS ((CONST char *filename, bfd *templ));
|
||||
|
||||
boolean
|
||||
bfd_make_writable PARAMS ((bfd *abfd));
|
||||
|
||||
boolean
|
||||
bfd_make_readable PARAMS ((bfd *abfd));
|
||||
|
||||
|
||||
/* Byte swapping macros for user section data. */
|
||||
|
||||
#define bfd_put_8(abfd, val, ptr) \
|
||||
(*((unsigned char *)(ptr)) = (unsigned char)(val))
|
||||
((void) (*((unsigned char *)(ptr)) = (unsigned char)(val)))
|
||||
#define bfd_put_signed_8 \
|
||||
bfd_put_8
|
||||
#define bfd_get_8(abfd, ptr) \
|
||||
@ -759,6 +830,20 @@ bfd_create PARAMS ((CONST char *filename, bfd *templ));
|
||||
#define bfd_get_signed_64(abfd, ptr) \
|
||||
BFD_SEND(abfd, bfd_getx_signed_64, (ptr))
|
||||
|
||||
#define bfd_get(bits, abfd, ptr) \
|
||||
((bits) == 8 ? bfd_get_8 (abfd, ptr) \
|
||||
: (bits) == 16 ? bfd_get_16 (abfd, ptr) \
|
||||
: (bits) == 32 ? bfd_get_32 (abfd, ptr) \
|
||||
: (bits) == 64 ? bfd_get_64 (abfd, ptr) \
|
||||
: (abort (), (bfd_vma) - 1))
|
||||
|
||||
#define bfd_put(bits, abfd, val, ptr) \
|
||||
((bits) == 8 ? bfd_put_8 (abfd, val, ptr) \
|
||||
: (bits) == 16 ? bfd_put_16 (abfd, val, ptr) \
|
||||
: (bits) == 32 ? bfd_put_32 (abfd, val, ptr) \
|
||||
: (bits) == 64 ? bfd_put_64 (abfd, val, ptr) \
|
||||
: (abort (), (void) 0))
|
||||
|
||||
|
||||
/* Byte swapping macros for file header data. */
|
||||
|
||||
@ -798,6 +883,27 @@ bfd_create PARAMS ((CONST char *filename, bfd *templ));
|
||||
#define bfd_h_get_signed_64(abfd, ptr) \
|
||||
BFD_SEND(abfd, bfd_h_getx_signed_64, (ptr))
|
||||
|
||||
/* This structure is used for a comdat section, as in PE. A comdat
|
||||
section is associated with a particular symbol. When the linker
|
||||
sees a comdat section, it keeps only one of the sections with a
|
||||
given name and associated with a given symbol. */
|
||||
|
||||
struct bfd_comdat_info
|
||||
{
|
||||
/* The name of the symbol associated with a comdat section. */
|
||||
const char *name;
|
||||
|
||||
/* The local symbol table index of the symbol associated with a
|
||||
comdat section. This is only meaningful to the object file format
|
||||
specific code; it is not an index into the list returned by
|
||||
bfd_canonicalize_symtab. */
|
||||
long symbol;
|
||||
|
||||
/* If this section is being discarded, the linker uses this field
|
||||
to point to the input section which is being kept. */
|
||||
struct sec *sec;
|
||||
};
|
||||
|
||||
typedef struct sec
|
||||
{
|
||||
/* The name of the section; the name isn't a copy, the pointer is
|
||||
@ -863,7 +969,7 @@ typedef struct sec
|
||||
standard data. */
|
||||
#define SEC_CONSTRUCTOR 0x100
|
||||
|
||||
/* The section is a constuctor, and should be placed at the
|
||||
/* The section is a constructor, and should be placed at the
|
||||
end of the text, data, or bss section(?). */
|
||||
#define SEC_CONSTRUCTOR_TEXT 0x1100
|
||||
#define SEC_CONSTRUCTOR_DATA 0x2100
|
||||
@ -952,6 +1058,27 @@ typedef struct sec
|
||||
else up the line will take care of it later. */
|
||||
#define SEC_LINKER_CREATED 0x800000
|
||||
|
||||
/* This section should not be subject to garbage collection. */
|
||||
#define SEC_KEEP 0x1000000
|
||||
|
||||
/* This section contains "short" data, and should be placed
|
||||
"near" the GP. */
|
||||
#define SEC_SMALL_DATA 0x2000000
|
||||
|
||||
/* This section contains data which may be shared with other
|
||||
executables or shared objects. */
|
||||
#define SEC_SHARED 0x4000000
|
||||
|
||||
/* When a section with this flag is being linked, then if the size of
|
||||
the input section is less than a page, it should not cross a page
|
||||
boundary. If the size of the input section is one page or more, it
|
||||
should be aligned on a page boundary. */
|
||||
#define SEC_BLOCK 0x8000000
|
||||
|
||||
/* Conditionally link this section; do not link if there are no
|
||||
references found to any symbol in the section. */
|
||||
#define SEC_CLINK 0x10000000
|
||||
|
||||
/* End of section flags. */
|
||||
|
||||
/* Some internal packed boolean fields. */
|
||||
@ -965,6 +1092,9 @@ typedef struct sec
|
||||
/* A mark flag used by some of the linker backends. */
|
||||
unsigned int linker_mark : 1;
|
||||
|
||||
/* A mark flag used by some linker backends for garbage collection. */
|
||||
unsigned int gc_mark : 1;
|
||||
|
||||
/* End of internal packed boolean fields. */
|
||||
|
||||
/* The virtual memory address of the section - where it will be
|
||||
@ -982,22 +1112,25 @@ typedef struct sec
|
||||
|
||||
bfd_vma lma;
|
||||
|
||||
/* The size of the section in bytes, as it will be output.
|
||||
contains a value even if the section has no contents (e.g., the
|
||||
size of <<.bss>>). This will be filled in after relocation */
|
||||
/* The size of the section in octets, as it will be output.
|
||||
Contains a value even if the section has no contents (e.g., the
|
||||
size of <<.bss>>). This will be filled in after relocation. */
|
||||
|
||||
bfd_size_type _cooked_size;
|
||||
|
||||
/* The original size on disk of the section, in bytes. Normally this
|
||||
/* The original size on disk of the section, in octets. Normally this
|
||||
value is the same as the size, but if some relaxing has
|
||||
been done, then this value will be bigger. */
|
||||
|
||||
bfd_size_type _raw_size;
|
||||
|
||||
/* If this section is going to be output, then this value is the
|
||||
offset into the output section of the first byte in the input
|
||||
section. E.g., if this was going to start at the 100th byte in
|
||||
the output section, this value would be 100. */
|
||||
offset in *bytes* into the output section of the first byte in the
|
||||
input section (byte ==> smallest addressable unit on the
|
||||
target). In most cases, if this was going to start at the
|
||||
100th octet (8-bit quantity) in the output section, this value
|
||||
would be 100. However, if the target byte size is 16 bits
|
||||
(bfd_octets_per_byte is "2"), this value would be 50. */
|
||||
|
||||
bfd_vma output_offset;
|
||||
|
||||
@ -1055,6 +1188,10 @@ typedef struct sec
|
||||
|
||||
unsigned int lineno_count;
|
||||
|
||||
/* Optional information about a COMDAT entry; NULL if not COMDAT */
|
||||
|
||||
struct bfd_comdat_info *comdat;
|
||||
|
||||
/* When a section is being output, this value changes as more
|
||||
linenumbers are written out */
|
||||
|
||||
@ -1114,9 +1251,11 @@ extern const struct symbol_cache_entry * const bfd_com_symbol;
|
||||
extern const struct symbol_cache_entry * const bfd_und_symbol;
|
||||
extern const struct symbol_cache_entry * const bfd_ind_symbol;
|
||||
#define bfd_get_section_size_before_reloc(section) \
|
||||
(section->reloc_done ? (abort(),1): (section)->_raw_size)
|
||||
((section)->reloc_done ? (abort (), (bfd_size_type) 1) \
|
||||
: (section)->_raw_size)
|
||||
#define bfd_get_section_size_after_reloc(section) \
|
||||
((section->reloc_done) ? (section)->_cooked_size: (abort(),1))
|
||||
((section)->reloc_done ? (section)->_cooked_size \
|
||||
: (abort (), (bfd_size_type) 1))
|
||||
asection *
|
||||
bfd_get_section_by_name PARAMS ((bfd *abfd, CONST char *name));
|
||||
|
||||
@ -1161,6 +1300,10 @@ bfd_copy_private_section_data PARAMS ((bfd *ibfd, asection *isec, bfd *obfd, ase
|
||||
#define bfd_copy_private_section_data(ibfd, isection, obfd, osection) \
|
||||
BFD_SEND (obfd, _bfd_copy_private_section_data, \
|
||||
(ibfd, isection, obfd, osection))
|
||||
void
|
||||
_bfd_strip_section_from_output
|
||||
PARAMS ((struct bfd_link_info *info, asection *section));
|
||||
|
||||
enum bfd_architecture
|
||||
{
|
||||
bfd_arch_unknown, /* File arch not known */
|
||||
@ -1173,6 +1316,7 @@ enum bfd_architecture
|
||||
#define bfd_mach_m68030 5
|
||||
#define bfd_mach_m68040 6
|
||||
#define bfd_mach_m68060 7
|
||||
#define bfd_mach_cpu32 8
|
||||
bfd_arch_vax, /* DEC Vax */
|
||||
bfd_arch_i960, /* Intel 960 */
|
||||
/* The order of the following is important.
|
||||
@ -1200,8 +1344,9 @@ enum bfd_architecture
|
||||
#define bfd_mach_sparc_sparclite 3
|
||||
#define bfd_mach_sparc_v8plus 4
|
||||
#define bfd_mach_sparc_v8plusa 5 /* with ultrasparc add'ns */
|
||||
#define bfd_mach_sparc_v9 6
|
||||
#define bfd_mach_sparc_v9a 7 /* with ultrasparc add'ns */
|
||||
#define bfd_mach_sparc_sparclite_le 6
|
||||
#define bfd_mach_sparc_v9 7
|
||||
#define bfd_mach_sparc_v9a 8 /* with ultrasparc add'ns */
|
||||
/* Nonzero if MACH has the v9 instruction set. */
|
||||
#define bfd_mach_sparc_v9_p(mach) \
|
||||
((mach) >= bfd_mach_sparc_v8plus && (mach) <= bfd_mach_sparc_v9a)
|
||||
@ -1211,6 +1356,7 @@ enum bfd_architecture
|
||||
#define bfd_mach_mips4000 4000
|
||||
#define bfd_mach_mips4010 4010
|
||||
#define bfd_mach_mips4100 4100
|
||||
#define bfd_mach_mips4111 4111
|
||||
#define bfd_mach_mips4300 4300
|
||||
#define bfd_mach_mips4400 4400
|
||||
#define bfd_mach_mips4600 4600
|
||||
@ -1223,9 +1369,11 @@ enum bfd_architecture
|
||||
bfd_arch_i386, /* Intel 386 */
|
||||
#define bfd_mach_i386_i386 0
|
||||
#define bfd_mach_i386_i8086 1
|
||||
#define bfd_mach_i386_i386_intel_syntax 2
|
||||
bfd_arch_we32k, /* AT&T WE32xxx */
|
||||
bfd_arch_tahoe, /* CCI/Harris Tahoe */
|
||||
bfd_arch_i860, /* Intel 860 */
|
||||
bfd_arch_i370, /* IBM 360/370 Mainframes */
|
||||
bfd_arch_romp, /* IBM ROMP PC/RT */
|
||||
bfd_arch_alliant, /* Alliant */
|
||||
bfd_arch_convex, /* Convex */
|
||||
@ -1239,34 +1387,63 @@ enum bfd_architecture
|
||||
bfd_arch_rs6000, /* IBM RS/6000 */
|
||||
bfd_arch_hppa, /* HP PA RISC */
|
||||
bfd_arch_d10v, /* Mitsubishi D10V */
|
||||
#define bfd_mach_d10v 0
|
||||
#define bfd_mach_d10v_ts2 2
|
||||
#define bfd_mach_d10v_ts3 3
|
||||
bfd_arch_d30v, /* Mitsubishi D30V */
|
||||
bfd_arch_z8k, /* Zilog Z8000 */
|
||||
#define bfd_mach_z8001 1
|
||||
#define bfd_mach_z8002 2
|
||||
bfd_arch_h8500, /* Hitachi H8/500 */
|
||||
bfd_arch_sh, /* Hitachi SH */
|
||||
#define bfd_mach_sh 0
|
||||
#define bfd_mach_sh2 0x20
|
||||
#define bfd_mach_sh_dsp 0x2d
|
||||
#define bfd_mach_sh3 0x30
|
||||
#define bfd_mach_sh3_dsp 0x3d
|
||||
#define bfd_mach_sh3e 0x3e
|
||||
#define bfd_mach_sh4 0x40
|
||||
bfd_arch_alpha, /* Dec Alpha */
|
||||
#define bfd_mach_alpha_ev4 0x10
|
||||
#define bfd_mach_alpha_ev5 0x20
|
||||
#define bfd_mach_alpha_ev6 0x30
|
||||
bfd_arch_arm, /* Advanced Risc Machines ARM */
|
||||
#define bfd_mach_arm_2 1
|
||||
#define bfd_mach_arm_2a 2
|
||||
#define bfd_mach_arm_2a 2
|
||||
#define bfd_mach_arm_3 3
|
||||
#define bfd_mach_arm_3M 4
|
||||
#define bfd_mach_arm_4 5
|
||||
#define bfd_mach_arm_4 5
|
||||
#define bfd_mach_arm_4T 6
|
||||
#define bfd_mach_arm_5 7
|
||||
#define bfd_mach_arm_5T 8
|
||||
bfd_arch_ns32k, /* National Semiconductors ns32000 */
|
||||
bfd_arch_w65, /* WDC 65816 */
|
||||
bfd_arch_tic30, /* Texas Instruments TMS320C30 */
|
||||
bfd_arch_tic54x, /* Texas Instruments TMS320C54X */
|
||||
bfd_arch_tic80, /* TI TMS320c80 (MVP) */
|
||||
bfd_arch_v850, /* NEC V850 */
|
||||
#define bfd_mach_v850 0
|
||||
#define bfd_mach_v850e 'E'
|
||||
#define bfd_mach_v850ea 'A'
|
||||
bfd_arch_arc, /* Argonaut RISC Core */
|
||||
#define bfd_mach_arc_base 0
|
||||
bfd_arch_m32r, /* Mitsubishi M32R/D */
|
||||
#define bfd_mach_m32r 0 /* backwards compatibility */
|
||||
#define bfd_mach_m32rx 'x'
|
||||
bfd_arch_mn10200, /* Matsushita MN10200 */
|
||||
bfd_arch_mn10300, /* Matsushita MN10300 */
|
||||
#define bfd_mach_mn10300 300
|
||||
#define bfd_mach_am33 330
|
||||
bfd_arch_fr30,
|
||||
#define bfd_mach_fr30 0x46523330
|
||||
bfd_arch_mcore,
|
||||
bfd_arch_ia64, /* HP/Intel ia64 */
|
||||
bfd_arch_pj,
|
||||
bfd_arch_avr, /* Atmel AVR microcontrollers */
|
||||
#define bfd_mach_avr1 1
|
||||
#define bfd_mach_avr2 2
|
||||
#define bfd_mach_avr3 3
|
||||
#define bfd_mach_avr4 4
|
||||
bfd_arch_last
|
||||
};
|
||||
|
||||
@ -1332,6 +1509,13 @@ const char *
|
||||
bfd_printable_arch_mach
|
||||
PARAMS ((enum bfd_architecture arch, unsigned long machine));
|
||||
|
||||
unsigned int
|
||||
bfd_octets_per_byte PARAMS ((bfd *abfd));
|
||||
|
||||
unsigned int
|
||||
bfd_arch_mach_octets_per_byte PARAMS ((enum bfd_architecture arch,
|
||||
unsigned long machine));
|
||||
|
||||
typedef enum bfd_reloc_status
|
||||
{
|
||||
/* No errors detected */
|
||||
@ -1450,13 +1634,26 @@ struct reloc_howto_struct
|
||||
/* The textual name of the relocation type. */
|
||||
char *name;
|
||||
|
||||
/* When performing a partial link, some formats must modify the
|
||||
relocations rather than the data - this flag signals this.*/
|
||||
/* Some formats record a relocation addend in the section contents
|
||||
rather than with the relocation. For ELF formats this is the
|
||||
distinction between USE_REL and USE_RELA (though the code checks
|
||||
for USE_REL == 1/0). The value of this field is TRUE if the
|
||||
addend is recorded with the section contents; when performing a
|
||||
partial link (ld -r) the section contents (the data) will be
|
||||
modified. The value of this field is FALSE if addends are
|
||||
recorded with the relocation (in arelent.addend); when performing
|
||||
a partial link the relocation will be modified.
|
||||
All relocations for all ELF USE_RELA targets should set this field
|
||||
to FALSE (values of TRUE should be looked on with suspicion).
|
||||
However, the converse is not true: not all relocations of all ELF
|
||||
USE_REL targets set this field to TRUE. Why this is so is peculiar
|
||||
to each particular target. For relocs that aren't used in partial
|
||||
links (e.g. GOT stuff) it doesn't matter what this is set to. */
|
||||
boolean partial_inplace;
|
||||
|
||||
/* The src_mask selects which parts of the read in data
|
||||
are to be used in the relocation sum. E.g., if this was an 8 bit
|
||||
bit of data which we read and relocated, this would be
|
||||
byte of data which we read and relocated, this would be
|
||||
0x000000ff. When we have relocs which have an addend, such as
|
||||
sun4 extended relocs, the value in the offset part of a
|
||||
relocating field is garbage so we never use it. In this case
|
||||
@ -1482,6 +1679,9 @@ struct reloc_howto_struct
|
||||
{(unsigned)C,R,S,B, P, BI, O,SF,NAME,INPLACE,MASKSRC,MASKDST,PC}
|
||||
#define NEWHOWTO( FUNCTION, NAME,SIZE,REL,IN) HOWTO(0,0,SIZE,0,REL,0,complain_overflow_dont,FUNCTION, NAME,false,0,0,IN)
|
||||
|
||||
#define EMPTY_HOWTO(C) \
|
||||
HOWTO((C),0,0,0,false,0,complain_overflow_dont,NULL,NULL,false,0,0,false)
|
||||
|
||||
#define HOWTO_PREPARE(relocation, symbol) \
|
||||
{ \
|
||||
if (symbol != (asymbol *)NULL) { \
|
||||
@ -1506,6 +1706,7 @@ bfd_check_overflow
|
||||
PARAMS ((enum complain_overflow how,
|
||||
unsigned int bitsize,
|
||||
unsigned int rightshift,
|
||||
unsigned int addrsize,
|
||||
bfd_vma relocation));
|
||||
|
||||
bfd_reloc_status_type
|
||||
@ -1662,6 +1863,9 @@ relocation types already defined. */
|
||||
BFD_RELOC_SPARC_L44,
|
||||
BFD_RELOC_SPARC_REGISTER,
|
||||
|
||||
/* SPARC little endian relocation */
|
||||
BFD_RELOC_SPARC_REV32,
|
||||
|
||||
/* Alpha ECOFF and ELF relocations. Some of these treat the symbol or
|
||||
"addend" in some special way.
|
||||
For GPDISP_HI16 ("gpdisp") relocations, the symbol is ignored when
|
||||
@ -1710,6 +1914,17 @@ The GNU linker currently doesn't do any of this optimizing. */
|
||||
BFD_RELOC_ALPHA_ELF_LITERAL,
|
||||
BFD_RELOC_ALPHA_LITUSE,
|
||||
|
||||
/* The BFD_RELOC_ALPHA_USER_* relocations are used by the assembler to
|
||||
process the explicit !<reloc>!sequence relocations, and are mapped
|
||||
into the normal relocations at the end of processing. */
|
||||
BFD_RELOC_ALPHA_USER_LITERAL,
|
||||
BFD_RELOC_ALPHA_USER_LITUSE_BASE,
|
||||
BFD_RELOC_ALPHA_USER_LITUSE_BYTOFF,
|
||||
BFD_RELOC_ALPHA_USER_LITUSE_JSR,
|
||||
BFD_RELOC_ALPHA_USER_GPDISP,
|
||||
BFD_RELOC_ALPHA_USER_GPRELHIGH,
|
||||
BFD_RELOC_ALPHA_USER_GPRELLOW,
|
||||
|
||||
/* The HINT relocation indicates a value that should be filled into the
|
||||
"hint" field of a jmp/jsr/ret instruction, for possible branch-
|
||||
prediction logic which may be provided on some processors. */
|
||||
@ -1765,6 +1980,10 @@ to compensate for the borrow when the low bits are added. */
|
||||
BFD_RELOC_MIPS_GOT_LO16,
|
||||
BFD_RELOC_MIPS_CALL_HI16,
|
||||
BFD_RELOC_MIPS_CALL_LO16,
|
||||
BFD_RELOC_MIPS_SUB,
|
||||
BFD_RELOC_MIPS_GOT_PAGE,
|
||||
BFD_RELOC_MIPS_GOT_OFST,
|
||||
BFD_RELOC_MIPS_GOT_DISP,
|
||||
|
||||
|
||||
/* i386/elf relocations */
|
||||
@ -1791,6 +2010,14 @@ to compensate for the borrow when the low bits are added. */
|
||||
BFD_RELOC_NS32K_DISP_16_PCREL,
|
||||
BFD_RELOC_NS32K_DISP_32_PCREL,
|
||||
|
||||
/* Picojava relocs. Not all of these appear in object files. */
|
||||
BFD_RELOC_PJ_CODE_HI16,
|
||||
BFD_RELOC_PJ_CODE_LO16,
|
||||
BFD_RELOC_PJ_CODE_DIR16,
|
||||
BFD_RELOC_PJ_CODE_DIR32,
|
||||
BFD_RELOC_PJ_CODE_REL16,
|
||||
BFD_RELOC_PJ_CODE_REL32,
|
||||
|
||||
/* Power(rs6000) and PowerPC relocations. */
|
||||
BFD_RELOC_PPC_B26,
|
||||
BFD_RELOC_PPC_BA26,
|
||||
@ -1823,6 +2050,9 @@ to compensate for the borrow when the low bits are added. */
|
||||
BFD_RELOC_PPC_EMB_BIT_FLD,
|
||||
BFD_RELOC_PPC_EMB_RELSDA,
|
||||
|
||||
/* IBM 370/390 relocations */
|
||||
BFD_RELOC_I370_D12,
|
||||
|
||||
/* The type of reloc used to build a contructor table - at the moment
|
||||
probably a 32 bit wide absolute relocation, but the target can choose.
|
||||
It generally does map to one of the other relocation types. */
|
||||
@ -1832,9 +2062,20 @@ It generally does map to one of the other relocation types. */
|
||||
not stored in the instruction. */
|
||||
BFD_RELOC_ARM_PCREL_BRANCH,
|
||||
|
||||
/* ARM 26 bit pc-relative branch. The lowest bit must be zero and is
|
||||
not stored in the instruction. The 2nd lowest bit comes from a 1 bit
|
||||
field in the instruction. */
|
||||
BFD_RELOC_ARM_PCREL_BLX,
|
||||
|
||||
/* Thumb 22 bit pc-relative branch. The lowest bit must be zero and is
|
||||
not stored in the instruction. The 2nd lowest bit comes from a 1 bit
|
||||
field in the instruction. */
|
||||
BFD_RELOC_THUMB_PCREL_BLX,
|
||||
|
||||
/* These relocs are only used within the ARM assembler. They are not
|
||||
(at present) written to any object files. */
|
||||
BFD_RELOC_ARM_IMMEDIATE,
|
||||
BFD_RELOC_ARM_ADRL_IMMEDIATE,
|
||||
BFD_RELOC_ARM_OFFSET_IMM,
|
||||
BFD_RELOC_ARM_SHIFT_IMM,
|
||||
BFD_RELOC_ARM_SWI,
|
||||
@ -1850,6 +2091,15 @@ not stored in the instruction. */
|
||||
BFD_RELOC_ARM_THUMB_IMM,
|
||||
BFD_RELOC_ARM_THUMB_SHIFT,
|
||||
BFD_RELOC_ARM_THUMB_OFFSET,
|
||||
BFD_RELOC_ARM_GOT12,
|
||||
BFD_RELOC_ARM_GOT32,
|
||||
BFD_RELOC_ARM_JUMP_SLOT,
|
||||
BFD_RELOC_ARM_COPY,
|
||||
BFD_RELOC_ARM_GLOB_DAT,
|
||||
BFD_RELOC_ARM_PLT32,
|
||||
BFD_RELOC_ARM_RELATIVE,
|
||||
BFD_RELOC_ARM_GOTOFF,
|
||||
BFD_RELOC_ARM_GOTPC,
|
||||
|
||||
/* Hitachi SH relocs. Not all of these appear in object files. */
|
||||
BFD_RELOC_SH_PCDISP8BY2,
|
||||
@ -1870,6 +2120,8 @@ not stored in the instruction. */
|
||||
BFD_RELOC_SH_CODE,
|
||||
BFD_RELOC_SH_DATA,
|
||||
BFD_RELOC_SH_LABEL,
|
||||
BFD_RELOC_SH_LOOP_START,
|
||||
BFD_RELOC_SH_LOOP_END,
|
||||
|
||||
/* Thumb 23-, 12- and 9-bit pc-relative branches. The lowest bit must
|
||||
be zero and is not stored in the instruction. */
|
||||
@ -1908,7 +2160,53 @@ assumed to be 0. */
|
||||
assumed to be 0. */
|
||||
BFD_RELOC_D10V_18_PCREL,
|
||||
|
||||
/* Mitsubishi D30V relocs.
|
||||
This is a 6-bit absolute reloc. */
|
||||
BFD_RELOC_D30V_6,
|
||||
|
||||
/* This is a 6-bit pc-relative reloc with
|
||||
the right 3 bits assumed to be 0. */
|
||||
BFD_RELOC_D30V_9_PCREL,
|
||||
|
||||
/* This is a 6-bit pc-relative reloc with
|
||||
the right 3 bits assumed to be 0. Same
|
||||
as the previous reloc but on the right side
|
||||
of the container. */
|
||||
BFD_RELOC_D30V_9_PCREL_R,
|
||||
|
||||
/* This is a 12-bit absolute reloc with the
|
||||
right 3 bitsassumed to be 0. */
|
||||
BFD_RELOC_D30V_15,
|
||||
|
||||
/* This is a 12-bit pc-relative reloc with
|
||||
the right 3 bits assumed to be 0. */
|
||||
BFD_RELOC_D30V_15_PCREL,
|
||||
|
||||
/* This is a 12-bit pc-relative reloc with
|
||||
the right 3 bits assumed to be 0. Same
|
||||
as the previous reloc but on the right side
|
||||
of the container. */
|
||||
BFD_RELOC_D30V_15_PCREL_R,
|
||||
|
||||
/* This is an 18-bit absolute reloc with
|
||||
the right 3 bits assumed to be 0. */
|
||||
BFD_RELOC_D30V_21,
|
||||
|
||||
/* This is an 18-bit pc-relative reloc with
|
||||
the right 3 bits assumed to be 0. */
|
||||
BFD_RELOC_D30V_21_PCREL,
|
||||
|
||||
/* This is an 18-bit pc-relative reloc with
|
||||
the right 3 bits assumed to be 0. Same
|
||||
as the previous reloc but on the right side
|
||||
of the container. */
|
||||
BFD_RELOC_D30V_21_PCREL_R,
|
||||
|
||||
/* This is a 32-bit absolute reloc. */
|
||||
BFD_RELOC_D30V_32,
|
||||
|
||||
/* This is a 32-bit pc-relative reloc. */
|
||||
BFD_RELOC_D30V_32_PCREL,
|
||||
|
||||
/* Mitsubishi M32R relocs.
|
||||
This is a 24 bit absolute address. */
|
||||
@ -1972,6 +2270,27 @@ data area pointer. */
|
||||
/* This is a 16 bit offset from the tiny data area pointer. */
|
||||
BFD_RELOC_V850_TDA_16_16_OFFSET,
|
||||
|
||||
/* This is a 5 bit offset (of which only 4 bits are used) from the tiny
|
||||
data area pointer. */
|
||||
BFD_RELOC_V850_TDA_4_5_OFFSET,
|
||||
|
||||
/* This is a 4 bit offset from the tiny data area pointer. */
|
||||
BFD_RELOC_V850_TDA_4_4_OFFSET,
|
||||
|
||||
/* This is a 16 bit offset from the short data area pointer, with the
|
||||
bits placed non-contigously in the instruction. */
|
||||
BFD_RELOC_V850_SDA_16_16_SPLIT_OFFSET,
|
||||
|
||||
/* This is a 16 bit offset from the zero data area pointer, with the
|
||||
bits placed non-contigously in the instruction. */
|
||||
BFD_RELOC_V850_ZDA_16_16_SPLIT_OFFSET,
|
||||
|
||||
/* This is a 6 bit offset from the call table base pointer. */
|
||||
BFD_RELOC_V850_CALLT_6_7_OFFSET,
|
||||
|
||||
/* This is a 16 bit offset from the call table base pointer. */
|
||||
BFD_RELOC_V850_CALLT_16_16_OFFSET,
|
||||
|
||||
|
||||
/* This is a 32bit pcrel reloc for the mn10300, offset by two bytes in the
|
||||
instruction. */
|
||||
@ -1985,6 +2304,221 @@ instruction. */
|
||||
significant 8 bits of a 24 bit word are placed into the least
|
||||
significant 8 bits of the opcode. */
|
||||
BFD_RELOC_TIC30_LDP,
|
||||
|
||||
/* This is a 7bit reloc for the tms320c54x, where the least
|
||||
significant 7 bits of a 16 bit word are placed into the least
|
||||
significant 7 bits of the opcode. */
|
||||
BFD_RELOC_TIC54X_PARTLS7,
|
||||
|
||||
/* This is a 9bit DP reloc for the tms320c54x, where the most
|
||||
significant 9 bits of a 16 bit word are placed into the least
|
||||
significant 9 bits of the opcode. */
|
||||
BFD_RELOC_TIC54X_PARTMS9,
|
||||
|
||||
/* This is an extended address 23-bit reloc for the tms320c54x. */
|
||||
BFD_RELOC_TIC54X_23,
|
||||
|
||||
/* This is a 16-bit reloc for the tms320c54x, where the least
|
||||
significant 16 bits of a 23-bit extended address are placed into
|
||||
the opcode. */
|
||||
BFD_RELOC_TIC54X_16_OF_23,
|
||||
|
||||
/* This is a reloc for the tms320c54x, where the most
|
||||
significant 7 bits of a 23-bit extended address are placed into
|
||||
the opcode. */
|
||||
BFD_RELOC_TIC54X_MS7_OF_23,
|
||||
|
||||
/* This is a 48 bit reloc for the FR30 that stores 32 bits. */
|
||||
BFD_RELOC_FR30_48,
|
||||
|
||||
/* This is a 32 bit reloc for the FR30 that stores 20 bits split up into
|
||||
two sections. */
|
||||
BFD_RELOC_FR30_20,
|
||||
|
||||
/* This is a 16 bit reloc for the FR30 that stores a 6 bit word offset in
|
||||
4 bits. */
|
||||
BFD_RELOC_FR30_6_IN_4,
|
||||
|
||||
/* This is a 16 bit reloc for the FR30 that stores an 8 bit byte offset
|
||||
into 8 bits. */
|
||||
BFD_RELOC_FR30_8_IN_8,
|
||||
|
||||
/* This is a 16 bit reloc for the FR30 that stores a 9 bit short offset
|
||||
into 8 bits. */
|
||||
BFD_RELOC_FR30_9_IN_8,
|
||||
|
||||
/* This is a 16 bit reloc for the FR30 that stores a 10 bit word offset
|
||||
into 8 bits. */
|
||||
BFD_RELOC_FR30_10_IN_8,
|
||||
|
||||
/* This is a 16 bit reloc for the FR30 that stores a 9 bit pc relative
|
||||
short offset into 8 bits. */
|
||||
BFD_RELOC_FR30_9_PCREL,
|
||||
|
||||
/* This is a 16 bit reloc for the FR30 that stores a 12 bit pc relative
|
||||
short offset into 11 bits. */
|
||||
BFD_RELOC_FR30_12_PCREL,
|
||||
|
||||
/* Motorola Mcore relocations. */
|
||||
BFD_RELOC_MCORE_PCREL_IMM8BY4,
|
||||
BFD_RELOC_MCORE_PCREL_IMM11BY2,
|
||||
BFD_RELOC_MCORE_PCREL_IMM4BY2,
|
||||
BFD_RELOC_MCORE_PCREL_32,
|
||||
BFD_RELOC_MCORE_PCREL_JSR_IMM11BY2,
|
||||
BFD_RELOC_MCORE_RVA,
|
||||
|
||||
/* This is a 16 bit reloc for the AVR that stores 8 bit pc relative
|
||||
short offset into 7 bits. */
|
||||
BFD_RELOC_AVR_7_PCREL,
|
||||
|
||||
/* This is a 16 bit reloc for the AVR that stores 13 bit pc relative
|
||||
short offset into 12 bits. */
|
||||
BFD_RELOC_AVR_13_PCREL,
|
||||
|
||||
/* This is a 16 bit reloc for the AVR that stores 17 bit value (usually
|
||||
program memory address) into 16 bits. */
|
||||
BFD_RELOC_AVR_16_PM,
|
||||
|
||||
/* This is a 16 bit reloc for the AVR that stores 8 bit value (usually
|
||||
data memory address) into 8 bit immediate value of LDI insn. */
|
||||
BFD_RELOC_AVR_LO8_LDI,
|
||||
|
||||
/* This is a 16 bit reloc for the AVR that stores 8 bit value (high 8 bit
|
||||
of data memory address) into 8 bit immediate value of LDI insn. */
|
||||
BFD_RELOC_AVR_HI8_LDI,
|
||||
|
||||
/* This is a 16 bit reloc for the AVR that stores 8 bit value (most high 8 bit
|
||||
of program memory address) into 8 bit immediate value of LDI insn. */
|
||||
BFD_RELOC_AVR_HH8_LDI,
|
||||
|
||||
/* This is a 16 bit reloc for the AVR that stores negated 8 bit value
|
||||
(usually data memory address) into 8 bit immediate value of SUBI insn. */
|
||||
BFD_RELOC_AVR_LO8_LDI_NEG,
|
||||
|
||||
/* This is a 16 bit reloc for the AVR that stores negated 8 bit value
|
||||
(high 8 bit of data memory address) into 8 bit immediate value of
|
||||
SUBI insn. */
|
||||
BFD_RELOC_AVR_HI8_LDI_NEG,
|
||||
|
||||
/* This is a 16 bit reloc for the AVR that stores negated 8 bit value
|
||||
(most high 8 bit of program memory address) into 8 bit immediate value
|
||||
of LDI or SUBI insn. */
|
||||
BFD_RELOC_AVR_HH8_LDI_NEG,
|
||||
|
||||
/* This is a 16 bit reloc for the AVR that stores 8 bit value (usually
|
||||
command address) into 8 bit immediate value of LDI insn. */
|
||||
BFD_RELOC_AVR_LO8_LDI_PM,
|
||||
|
||||
/* This is a 16 bit reloc for the AVR that stores 8 bit value (high 8 bit
|
||||
of command address) into 8 bit immediate value of LDI insn. */
|
||||
BFD_RELOC_AVR_HI8_LDI_PM,
|
||||
|
||||
/* This is a 16 bit reloc for the AVR that stores 8 bit value (most high 8 bit
|
||||
of command address) into 8 bit immediate value of LDI insn. */
|
||||
BFD_RELOC_AVR_HH8_LDI_PM,
|
||||
|
||||
/* This is a 16 bit reloc for the AVR that stores negated 8 bit value
|
||||
(usually command address) into 8 bit immediate value of SUBI insn. */
|
||||
BFD_RELOC_AVR_LO8_LDI_PM_NEG,
|
||||
|
||||
/* This is a 16 bit reloc for the AVR that stores negated 8 bit value
|
||||
(high 8 bit of 16 bit command address) into 8 bit immediate value
|
||||
of SUBI insn. */
|
||||
BFD_RELOC_AVR_HI8_LDI_PM_NEG,
|
||||
|
||||
/* This is a 16 bit reloc for the AVR that stores negated 8 bit value
|
||||
(high 6 bit of 22 bit command address) into 8 bit immediate
|
||||
value of SUBI insn. */
|
||||
BFD_RELOC_AVR_HH8_LDI_PM_NEG,
|
||||
|
||||
/* This is a 32 bit reloc for the AVR that stores 23 bit value
|
||||
into 22 bits. */
|
||||
BFD_RELOC_AVR_CALL,
|
||||
|
||||
/* These two relocations are used by the linker to determine which of
|
||||
the entries in a C++ virtual function table are actually used. When
|
||||
the --gc-sections option is given, the linker will zero out the entries
|
||||
that are not used, so that the code for those functions need not be
|
||||
included in the output.
|
||||
|
||||
VTABLE_INHERIT is a zero-space relocation used to describe to the
|
||||
linker the inheritence tree of a C++ virtual function table. The
|
||||
relocation's symbol should be the parent class' vtable, and the
|
||||
relocation should be located at the child vtable.
|
||||
|
||||
VTABLE_ENTRY is a zero-space relocation that describes the use of a
|
||||
virtual function table entry. The reloc's symbol should refer to the
|
||||
table of the class mentioned in the code. Off of that base, an offset
|
||||
describes the entry that is being used. For Rela hosts, this offset
|
||||
is stored in the reloc's addend. For Rel hosts, we are forced to put
|
||||
this offset in the reloc's section offset. */
|
||||
BFD_RELOC_VTABLE_INHERIT,
|
||||
BFD_RELOC_VTABLE_ENTRY,
|
||||
|
||||
/* Intel IA64 Relocations. */
|
||||
BFD_RELOC_IA64_IMM14,
|
||||
BFD_RELOC_IA64_IMM22,
|
||||
BFD_RELOC_IA64_IMM64,
|
||||
BFD_RELOC_IA64_DIR32MSB,
|
||||
BFD_RELOC_IA64_DIR32LSB,
|
||||
BFD_RELOC_IA64_DIR64MSB,
|
||||
BFD_RELOC_IA64_DIR64LSB,
|
||||
BFD_RELOC_IA64_GPREL22,
|
||||
BFD_RELOC_IA64_GPREL64I,
|
||||
BFD_RELOC_IA64_GPREL32MSB,
|
||||
BFD_RELOC_IA64_GPREL32LSB,
|
||||
BFD_RELOC_IA64_GPREL64MSB,
|
||||
BFD_RELOC_IA64_GPREL64LSB,
|
||||
BFD_RELOC_IA64_LTOFF22,
|
||||
BFD_RELOC_IA64_LTOFF64I,
|
||||
BFD_RELOC_IA64_PLTOFF22,
|
||||
BFD_RELOC_IA64_PLTOFF64I,
|
||||
BFD_RELOC_IA64_PLTOFF64MSB,
|
||||
BFD_RELOC_IA64_PLTOFF64LSB,
|
||||
BFD_RELOC_IA64_FPTR64I,
|
||||
BFD_RELOC_IA64_FPTR32MSB,
|
||||
BFD_RELOC_IA64_FPTR32LSB,
|
||||
BFD_RELOC_IA64_FPTR64MSB,
|
||||
BFD_RELOC_IA64_FPTR64LSB,
|
||||
BFD_RELOC_IA64_PCREL21B,
|
||||
BFD_RELOC_IA64_PCREL21M,
|
||||
BFD_RELOC_IA64_PCREL21F,
|
||||
BFD_RELOC_IA64_PCREL32MSB,
|
||||
BFD_RELOC_IA64_PCREL32LSB,
|
||||
BFD_RELOC_IA64_PCREL64MSB,
|
||||
BFD_RELOC_IA64_PCREL64LSB,
|
||||
BFD_RELOC_IA64_LTOFF_FPTR22,
|
||||
BFD_RELOC_IA64_LTOFF_FPTR64I,
|
||||
BFD_RELOC_IA64_LTOFF_FPTR64MSB,
|
||||
BFD_RELOC_IA64_LTOFF_FPTR64LSB,
|
||||
BFD_RELOC_IA64_SEGBASE,
|
||||
BFD_RELOC_IA64_SEGREL32MSB,
|
||||
BFD_RELOC_IA64_SEGREL32LSB,
|
||||
BFD_RELOC_IA64_SEGREL64MSB,
|
||||
BFD_RELOC_IA64_SEGREL64LSB,
|
||||
BFD_RELOC_IA64_SECREL32MSB,
|
||||
BFD_RELOC_IA64_SECREL32LSB,
|
||||
BFD_RELOC_IA64_SECREL64MSB,
|
||||
BFD_RELOC_IA64_SECREL64LSB,
|
||||
BFD_RELOC_IA64_REL32MSB,
|
||||
BFD_RELOC_IA64_REL32LSB,
|
||||
BFD_RELOC_IA64_REL64MSB,
|
||||
BFD_RELOC_IA64_REL64LSB,
|
||||
BFD_RELOC_IA64_LTV32MSB,
|
||||
BFD_RELOC_IA64_LTV32LSB,
|
||||
BFD_RELOC_IA64_LTV64MSB,
|
||||
BFD_RELOC_IA64_LTV64LSB,
|
||||
BFD_RELOC_IA64_IPLTMSB,
|
||||
BFD_RELOC_IA64_IPLTLSB,
|
||||
BFD_RELOC_IA64_EPLTMSB,
|
||||
BFD_RELOC_IA64_EPLTLSB,
|
||||
BFD_RELOC_IA64_COPY,
|
||||
BFD_RELOC_IA64_TPREL22,
|
||||
BFD_RELOC_IA64_TPREL64MSB,
|
||||
BFD_RELOC_IA64_TPREL64LSB,
|
||||
BFD_RELOC_IA64_LTOFF_TP22,
|
||||
BFD_RELOC_IA64_LTOFF22X,
|
||||
BFD_RELOC_IA64_LDXMOV,
|
||||
BFD_RELOC_UNUSED };
|
||||
typedef enum bfd_reloc_code_real bfd_reloc_code_real_type;
|
||||
reloc_howto_type *
|
||||
@ -2039,7 +2573,7 @@ typedef struct symbol_cache_entry
|
||||
<<BSF_GLOBAL>> */
|
||||
|
||||
/* The symbol is a debugging record. The value has an arbitary
|
||||
meaning. */
|
||||
meaning, unless BSF_DEBUGGING_RELOC is also set. */
|
||||
#define BSF_DEBUGGING 0x08
|
||||
|
||||
/* The symbol denotes a function entry point. Used in ELF,
|
||||
@ -2097,6 +2631,11 @@ typedef struct symbol_cache_entry
|
||||
others someday. */
|
||||
#define BSF_OBJECT 0x10000
|
||||
|
||||
/* This symbol is a debugging symbol. The value is the offset
|
||||
into the section of the data. BSF_DEBUGGING should be set
|
||||
as well. */
|
||||
#define BSF_DEBUGGING_RELOC 0x20000
|
||||
|
||||
flagword flags;
|
||||
|
||||
/* A pointer to the section to which this symbol is
|
||||
@ -2138,6 +2677,9 @@ bfd_print_symbol_vandf PARAMS ((PTR file, asymbol *symbol));
|
||||
int
|
||||
bfd_decode_symclass PARAMS ((asymbol *symbol));
|
||||
|
||||
boolean
|
||||
bfd_is_undefined_symclass PARAMS ((int symclass));
|
||||
|
||||
void
|
||||
bfd_symbol_info PARAMS ((asymbol *symbol, symbol_info *ret));
|
||||
|
||||
@ -2281,6 +2823,7 @@ struct _bfd
|
||||
struct nlm_obj_tdata *nlm_obj_data;
|
||||
struct bout_data_struct *bout_data;
|
||||
struct sun_core_struct *sun_core_data;
|
||||
struct sco5_core_struct *sco5_core_data;
|
||||
struct trad_core_struct *trad_core_data;
|
||||
struct som_data_struct *som_data;
|
||||
struct hpux_core_struct *hpux_core_data;
|
||||
@ -2433,6 +2976,9 @@ bfd_set_private_flags PARAMS ((bfd *abfd, flagword flags));
|
||||
#define bfd_relax_section(abfd, section, link_info, again) \
|
||||
BFD_SEND (abfd, _bfd_relax_section, (abfd, section, link_info, again))
|
||||
|
||||
#define bfd_gc_sections(abfd, link_info) \
|
||||
BFD_SEND (abfd, _bfd_gc_sections, (abfd, link_info))
|
||||
|
||||
#define bfd_link_hash_table_create(abfd) \
|
||||
BFD_SEND (abfd, _bfd_link_hash_table_create, (abfd))
|
||||
|
||||
@ -2520,6 +3066,7 @@ enum bfd_flavour {
|
||||
bfd_target_os9k_flavour,
|
||||
bfd_target_versados_flavour,
|
||||
bfd_target_msdos_flavour,
|
||||
bfd_target_ovax_flavour,
|
||||
bfd_target_evax_flavour
|
||||
};
|
||||
|
||||
@ -2727,7 +3274,8 @@ CAT(NAME,_bfd_relax_section),\
|
||||
CAT(NAME,_bfd_link_hash_table_create),\
|
||||
CAT(NAME,_bfd_link_add_symbols),\
|
||||
CAT(NAME,_bfd_final_link),\
|
||||
CAT(NAME,_bfd_link_split_section)
|
||||
CAT(NAME,_bfd_link_split_section),\
|
||||
CAT(NAME,_bfd_gc_sections)
|
||||
int (*_bfd_sizeof_headers) PARAMS ((bfd *, boolean));
|
||||
bfd_byte * (*_bfd_get_relocated_section_contents) PARAMS ((bfd *,
|
||||
struct bfd_link_info *, struct bfd_link_order *,
|
||||
@ -2751,7 +3299,10 @@ CAT(NAME,_bfd_link_split_section)
|
||||
/* Should this section be split up into smaller pieces during linking. */
|
||||
boolean (*_bfd_link_split_section) PARAMS ((bfd *, struct sec *));
|
||||
|
||||
/* Routines to handle dynamic symbols and relocs. */
|
||||
/* Remove sections that are not referenced from the output. */
|
||||
boolean (*_bfd_gc_sections) PARAMS ((bfd *, struct bfd_link_info *));
|
||||
|
||||
/* Routines to handle dynamic symbols and relocs. */
|
||||
#define BFD_JUMP_TABLE_DYNAMIC(NAME)\
|
||||
CAT(NAME,_get_dynamic_symtab_upper_bound),\
|
||||
CAT(NAME,_canonicalize_dynamic_symtab),\
|
||||
@ -2768,7 +3319,11 @@ CAT(NAME,_canonicalize_dynamic_reloc)
|
||||
long (*_bfd_canonicalize_dynamic_reloc)
|
||||
PARAMS ((bfd *, arelent **, struct symbol_cache_entry **));
|
||||
|
||||
/* Opposite endian version of this target. */
|
||||
const struct bfd_target * alternative_target;
|
||||
|
||||
PTR backend_data;
|
||||
|
||||
} bfd_target;
|
||||
boolean
|
||||
bfd_set_default_target PARAMS ((const char *name));
|
||||
@ -2779,6 +3334,9 @@ bfd_find_target PARAMS ((CONST char *target_name, bfd *abfd));
|
||||
const char **
|
||||
bfd_target_list PARAMS ((void));
|
||||
|
||||
const bfd_target *
|
||||
bfd_search_for_target PARAMS ((int (* search_func)(const bfd_target *, void *), void *));
|
||||
|
||||
boolean
|
||||
bfd_check_format PARAMS ((bfd *abfd, bfd_format format));
|
||||
|
||||
|
@ -1,6 +1,7 @@
|
||||
/* $FreeBSD$ */
|
||||
|
||||
/* Main header file for the bfd library -- portable access to object files.
|
||||
Copyright 1990, 91, 92, 93, 94, 95, 96, 97, 1998
|
||||
Copyright 1990, 91, 92, 93, 94, 95, 96, 97, 98, 99, 2000
|
||||
Free Software Foundation, Inc.
|
||||
Contributed by Cygnus Support.
|
||||
|
||||
@ -53,13 +54,13 @@ extern "C" {
|
||||
#include "ansidecl.h"
|
||||
|
||||
/* These two lines get substitutions done by commands in Makefile.in. */
|
||||
#define BFD_VERSION "2.9.1"
|
||||
/* #define BFD_VERSION "2.9.5" */
|
||||
#define BFD_ARCH_SIZE 64
|
||||
#if defined(__i386__)
|
||||
#define BFD_HOST_64BIT_LONG 0
|
||||
#define BFD_HOST_64BIT_LONG 0
|
||||
#else
|
||||
#define BFD_HOST_64BIT_LONG 1
|
||||
#endif
|
||||
#define BFD_HOST_64BIT_LONG 1
|
||||
#endif /* __i386__ */
|
||||
#if 0
|
||||
#define BFD_HOST_64_BIT
|
||||
#define BFD_HOST_U_64_BIT
|
||||
@ -94,7 +95,7 @@ typedef struct _bfd bfd;
|
||||
/* 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)
|
||||
#if defined (__GNUG__) && (__GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 6))
|
||||
#define TRUE_FALSE_ALREADY_DEFINED
|
||||
#endif
|
||||
#ifdef MPW
|
||||
@ -126,20 +127,24 @@ typedef long int file_ptr;
|
||||
use gcc's "long long" type. Otherwise, BFD_HOST_64_BIT must be
|
||||
defined above. */
|
||||
|
||||
#ifndef BFD_HOST_64_BIT
|
||||
# if BFD_HOST_64BIT_LONG
|
||||
# define BFD_HOST_64_BIT long
|
||||
# define BFD_HOST_U_64_BIT unsigned long
|
||||
# else
|
||||
# ifdef __GNUC__
|
||||
# if __GNUC__ >= 2
|
||||
# define BFD_HOST_64_BIT long long
|
||||
# define BFD_HOST_U_64_BIT unsigned long long
|
||||
# endif /* __GNUC__ >= 2 */
|
||||
# endif /* ! defined (__GNUC__) */
|
||||
# endif /* ! BFD_HOST_64BIT_LONG */
|
||||
#endif /* ! defined (BFD_HOST_64_BIT) */
|
||||
|
||||
#ifdef BFD64
|
||||
|
||||
#ifndef BFD_HOST_64_BIT
|
||||
#if BFD_HOST_64BIT_LONG
|
||||
#define BFD_HOST_64_BIT long
|
||||
#define BFD_HOST_U_64_BIT unsigned long
|
||||
#else
|
||||
#ifdef __GNUC__
|
||||
#define BFD_HOST_64_BIT long long
|
||||
#define BFD_HOST_U_64_BIT unsigned long long
|
||||
#else /* ! defined (__GNUC__) */
|
||||
#error No 64 bit integer type available
|
||||
#endif /* ! defined (__GNUC__) */
|
||||
#endif /* ! BFD_HOST_64BIT_LONG */
|
||||
#endif /* ! defined (BFD_HOST_64_BIT) */
|
||||
|
||||
typedef BFD_HOST_U_64_BIT bfd_vma;
|
||||
@ -180,7 +185,9 @@ typedef unsigned long bfd_size_type;
|
||||
/* Print a bfd_vma x on stream s. */
|
||||
#define fprintf_vma(s,x) fprintf(s, "%08lx", x)
|
||||
#define sprintf_vma(s,x) sprintf(s, "%08lx", x)
|
||||
|
||||
#endif /* not BFD64 */
|
||||
|
||||
#define printf_vma(x) fprintf_vma(stdout,x)
|
||||
|
||||
typedef unsigned int flagword; /* 32 bits of flags */
|
||||
@ -625,6 +632,23 @@ extern boolean bfd_elf64_size_dynamic_sections
|
||||
extern void bfd_elf_set_dt_needed_name PARAMS ((bfd *, const char *));
|
||||
extern const char *bfd_elf_get_dt_soname PARAMS ((bfd *));
|
||||
|
||||
/* Return an upper bound on the number of bytes required to store a
|
||||
copy of ABFD's program header table entries. Return -1 if an error
|
||||
occurs; bfd_get_error will return an appropriate code. */
|
||||
extern long bfd_get_elf_phdr_upper_bound PARAMS ((bfd *abfd));
|
||||
|
||||
/* Copy ABFD's program header table entries to *PHDRS. The entries
|
||||
will be stored as an array of Elf_Internal_Phdr structures, as
|
||||
defined in include/elf/internal.h. To find out how large the
|
||||
buffer needs to be, call bfd_get_elf_phdr_upper_bound.
|
||||
|
||||
Return the number of program header table entries read, or -1 if an
|
||||
error occurs; bfd_get_error will return an appropriate code. */
|
||||
extern int bfd_get_elf_phdrs PARAMS ((bfd *abfd, void *phdrs));
|
||||
|
||||
/* Return the arch_size field of an elf bfd, or -1 if not elf. */
|
||||
extern int bfd_elf_get_arch_size PARAMS ((bfd *));
|
||||
|
||||
/* SunOS shared library support routines for the linker. */
|
||||
|
||||
extern struct bfd_link_needed_list *bfd_sunos_get_needed_list
|
||||
@ -696,9 +720,50 @@ union internal_auxent;
|
||||
|
||||
extern boolean bfd_coff_get_syment
|
||||
PARAMS ((bfd *, struct symbol_cache_entry *, struct internal_syment *));
|
||||
|
||||
extern boolean bfd_coff_get_auxent
|
||||
PARAMS ((bfd *, struct symbol_cache_entry *, int, union internal_auxent *));
|
||||
|
||||
extern boolean bfd_coff_set_symbol_class
|
||||
PARAMS ((bfd *, struct symbol_cache_entry *, unsigned int));
|
||||
|
||||
/* ARM Interworking support. Called from linker. */
|
||||
extern boolean bfd_arm_allocate_interworking_sections
|
||||
PARAMS ((struct bfd_link_info *));
|
||||
|
||||
extern boolean bfd_arm_process_before_allocation
|
||||
PARAMS ((bfd *, struct bfd_link_info *, int));
|
||||
|
||||
extern boolean bfd_arm_get_bfd_for_interworking
|
||||
PARAMS ((bfd *, struct bfd_link_info *));
|
||||
|
||||
/* PE ARM Interworking support. Called from linker. */
|
||||
extern boolean bfd_arm_pe_allocate_interworking_sections
|
||||
PARAMS ((struct bfd_link_info *));
|
||||
|
||||
extern boolean bfd_arm_pe_process_before_allocation
|
||||
PARAMS ((bfd *, struct bfd_link_info *, int));
|
||||
|
||||
extern boolean bfd_arm_pe_get_bfd_for_interworking
|
||||
PARAMS ((bfd *, struct bfd_link_info *));
|
||||
|
||||
/* ELF ARM Interworking support. Called from linker. */
|
||||
extern boolean bfd_elf32_arm_allocate_interworking_sections
|
||||
PARAMS ((struct bfd_link_info *));
|
||||
|
||||
extern boolean bfd_elf32_arm_process_before_allocation
|
||||
PARAMS ((bfd *, struct bfd_link_info *, int));
|
||||
|
||||
extern boolean bfd_elf32_arm_get_bfd_for_interworking
|
||||
PARAMS ((bfd *, struct bfd_link_info *));
|
||||
|
||||
/* TI COFF load page support. */
|
||||
extern void bfd_ticoff_set_section_load_page
|
||||
PARAMS ((struct sec *, int));
|
||||
|
||||
extern int bfd_ticoff_get_section_load_page
|
||||
PARAMS ((struct sec *));
|
||||
|
||||
/* And more from the source. */
|
||||
void
|
||||
bfd_init PARAMS ((void));
|
||||
@ -724,11 +789,17 @@ bfd_close_all_done PARAMS ((bfd *));
|
||||
bfd *
|
||||
bfd_create PARAMS ((CONST char *filename, bfd *templ));
|
||||
|
||||
boolean
|
||||
bfd_make_writable PARAMS ((bfd *abfd));
|
||||
|
||||
boolean
|
||||
bfd_make_readable PARAMS ((bfd *abfd));
|
||||
|
||||
|
||||
/* Byte swapping macros for user section data. */
|
||||
|
||||
#define bfd_put_8(abfd, val, ptr) \
|
||||
(*((unsigned char *)(ptr)) = (unsigned char)(val))
|
||||
((void) (*((unsigned char *)(ptr)) = (unsigned char)(val)))
|
||||
#define bfd_put_signed_8 \
|
||||
bfd_put_8
|
||||
#define bfd_get_8(abfd, ptr) \
|
||||
@ -763,6 +834,20 @@ bfd_create PARAMS ((CONST char *filename, bfd *templ));
|
||||
#define bfd_get_signed_64(abfd, ptr) \
|
||||
BFD_SEND(abfd, bfd_getx_signed_64, (ptr))
|
||||
|
||||
#define bfd_get(bits, abfd, ptr) \
|
||||
((bits) == 8 ? bfd_get_8 (abfd, ptr) \
|
||||
: (bits) == 16 ? bfd_get_16 (abfd, ptr) \
|
||||
: (bits) == 32 ? bfd_get_32 (abfd, ptr) \
|
||||
: (bits) == 64 ? bfd_get_64 (abfd, ptr) \
|
||||
: (abort (), (bfd_vma) - 1))
|
||||
|
||||
#define bfd_put(bits, abfd, val, ptr) \
|
||||
((bits) == 8 ? bfd_put_8 (abfd, val, ptr) \
|
||||
: (bits) == 16 ? bfd_put_16 (abfd, val, ptr) \
|
||||
: (bits) == 32 ? bfd_put_32 (abfd, val, ptr) \
|
||||
: (bits) == 64 ? bfd_put_64 (abfd, val, ptr) \
|
||||
: (abort (), (void) 0))
|
||||
|
||||
|
||||
/* Byte swapping macros for file header data. */
|
||||
|
||||
@ -802,6 +887,27 @@ bfd_create PARAMS ((CONST char *filename, bfd *templ));
|
||||
#define bfd_h_get_signed_64(abfd, ptr) \
|
||||
BFD_SEND(abfd, bfd_h_getx_signed_64, (ptr))
|
||||
|
||||
/* This structure is used for a comdat section, as in PE. A comdat
|
||||
section is associated with a particular symbol. When the linker
|
||||
sees a comdat section, it keeps only one of the sections with a
|
||||
given name and associated with a given symbol. */
|
||||
|
||||
struct bfd_comdat_info
|
||||
{
|
||||
/* The name of the symbol associated with a comdat section. */
|
||||
const char *name;
|
||||
|
||||
/* The local symbol table index of the symbol associated with a
|
||||
comdat section. This is only meaningful to the object file format
|
||||
specific code; it is not an index into the list returned by
|
||||
bfd_canonicalize_symtab. */
|
||||
long symbol;
|
||||
|
||||
/* If this section is being discarded, the linker uses this field
|
||||
to point to the input section which is being kept. */
|
||||
struct sec *sec;
|
||||
};
|
||||
|
||||
typedef struct sec
|
||||
{
|
||||
/* The name of the section; the name isn't a copy, the pointer is
|
||||
@ -867,7 +973,7 @@ typedef struct sec
|
||||
standard data. */
|
||||
#define SEC_CONSTRUCTOR 0x100
|
||||
|
||||
/* The section is a constuctor, and should be placed at the
|
||||
/* The section is a constructor, and should be placed at the
|
||||
end of the text, data, or bss section(?). */
|
||||
#define SEC_CONSTRUCTOR_TEXT 0x1100
|
||||
#define SEC_CONSTRUCTOR_DATA 0x2100
|
||||
@ -956,6 +1062,27 @@ typedef struct sec
|
||||
else up the line will take care of it later. */
|
||||
#define SEC_LINKER_CREATED 0x800000
|
||||
|
||||
/* This section should not be subject to garbage collection. */
|
||||
#define SEC_KEEP 0x1000000
|
||||
|
||||
/* This section contains "short" data, and should be placed
|
||||
"near" the GP. */
|
||||
#define SEC_SMALL_DATA 0x2000000
|
||||
|
||||
/* This section contains data which may be shared with other
|
||||
executables or shared objects. */
|
||||
#define SEC_SHARED 0x4000000
|
||||
|
||||
/* When a section with this flag is being linked, then if the size of
|
||||
the input section is less than a page, it should not cross a page
|
||||
boundary. If the size of the input section is one page or more, it
|
||||
should be aligned on a page boundary. */
|
||||
#define SEC_BLOCK 0x8000000
|
||||
|
||||
/* Conditionally link this section; do not link if there are no
|
||||
references found to any symbol in the section. */
|
||||
#define SEC_CLINK 0x10000000
|
||||
|
||||
/* End of section flags. */
|
||||
|
||||
/* Some internal packed boolean fields. */
|
||||
@ -969,6 +1096,9 @@ typedef struct sec
|
||||
/* A mark flag used by some of the linker backends. */
|
||||
unsigned int linker_mark : 1;
|
||||
|
||||
/* A mark flag used by some linker backends for garbage collection. */
|
||||
unsigned int gc_mark : 1;
|
||||
|
||||
/* End of internal packed boolean fields. */
|
||||
|
||||
/* The virtual memory address of the section - where it will be
|
||||
@ -986,22 +1116,25 @@ typedef struct sec
|
||||
|
||||
bfd_vma lma;
|
||||
|
||||
/* The size of the section in bytes, as it will be output.
|
||||
contains a value even if the section has no contents (e.g., the
|
||||
size of <<.bss>>). This will be filled in after relocation */
|
||||
/* The size of the section in octets, as it will be output.
|
||||
Contains a value even if the section has no contents (e.g., the
|
||||
size of <<.bss>>). This will be filled in after relocation. */
|
||||
|
||||
bfd_size_type _cooked_size;
|
||||
|
||||
/* The original size on disk of the section, in bytes. Normally this
|
||||
/* The original size on disk of the section, in octets. Normally this
|
||||
value is the same as the size, but if some relaxing has
|
||||
been done, then this value will be bigger. */
|
||||
|
||||
bfd_size_type _raw_size;
|
||||
|
||||
/* If this section is going to be output, then this value is the
|
||||
offset into the output section of the first byte in the input
|
||||
section. E.g., if this was going to start at the 100th byte in
|
||||
the output section, this value would be 100. */
|
||||
offset in *bytes* into the output section of the first byte in the
|
||||
input section (byte ==> smallest addressable unit on the
|
||||
target). In most cases, if this was going to start at the
|
||||
100th octet (8-bit quantity) in the output section, this value
|
||||
would be 100. However, if the target byte size is 16 bits
|
||||
(bfd_octets_per_byte is "2"), this value would be 50. */
|
||||
|
||||
bfd_vma output_offset;
|
||||
|
||||
@ -1059,6 +1192,10 @@ typedef struct sec
|
||||
|
||||
unsigned int lineno_count;
|
||||
|
||||
/* Optional information about a COMDAT entry; NULL if not COMDAT */
|
||||
|
||||
struct bfd_comdat_info *comdat;
|
||||
|
||||
/* When a section is being output, this value changes as more
|
||||
linenumbers are written out */
|
||||
|
||||
@ -1118,9 +1255,11 @@ extern const struct symbol_cache_entry * const bfd_com_symbol;
|
||||
extern const struct symbol_cache_entry * const bfd_und_symbol;
|
||||
extern const struct symbol_cache_entry * const bfd_ind_symbol;
|
||||
#define bfd_get_section_size_before_reloc(section) \
|
||||
(section->reloc_done ? (abort(),1): (section)->_raw_size)
|
||||
((section)->reloc_done ? (abort (), (bfd_size_type) 1) \
|
||||
: (section)->_raw_size)
|
||||
#define bfd_get_section_size_after_reloc(section) \
|
||||
((section->reloc_done) ? (section)->_cooked_size: (abort(),1))
|
||||
((section)->reloc_done ? (section)->_cooked_size \
|
||||
: (abort (), (bfd_size_type) 1))
|
||||
asection *
|
||||
bfd_get_section_by_name PARAMS ((bfd *abfd, CONST char *name));
|
||||
|
||||
@ -1165,6 +1304,10 @@ bfd_copy_private_section_data PARAMS ((bfd *ibfd, asection *isec, bfd *obfd, ase
|
||||
#define bfd_copy_private_section_data(ibfd, isection, obfd, osection) \
|
||||
BFD_SEND (obfd, _bfd_copy_private_section_data, \
|
||||
(ibfd, isection, obfd, osection))
|
||||
void
|
||||
_bfd_strip_section_from_output
|
||||
PARAMS ((struct bfd_link_info *info, asection *section));
|
||||
|
||||
enum bfd_architecture
|
||||
{
|
||||
bfd_arch_unknown, /* File arch not known */
|
||||
@ -1177,6 +1320,7 @@ enum bfd_architecture
|
||||
#define bfd_mach_m68030 5
|
||||
#define bfd_mach_m68040 6
|
||||
#define bfd_mach_m68060 7
|
||||
#define bfd_mach_cpu32 8
|
||||
bfd_arch_vax, /* DEC Vax */
|
||||
bfd_arch_i960, /* Intel 960 */
|
||||
/* The order of the following is important.
|
||||
@ -1204,8 +1348,9 @@ enum bfd_architecture
|
||||
#define bfd_mach_sparc_sparclite 3
|
||||
#define bfd_mach_sparc_v8plus 4
|
||||
#define bfd_mach_sparc_v8plusa 5 /* with ultrasparc add'ns */
|
||||
#define bfd_mach_sparc_v9 6
|
||||
#define bfd_mach_sparc_v9a 7 /* with ultrasparc add'ns */
|
||||
#define bfd_mach_sparc_sparclite_le 6
|
||||
#define bfd_mach_sparc_v9 7
|
||||
#define bfd_mach_sparc_v9a 8 /* with ultrasparc add'ns */
|
||||
/* Nonzero if MACH has the v9 instruction set. */
|
||||
#define bfd_mach_sparc_v9_p(mach) \
|
||||
((mach) >= bfd_mach_sparc_v8plus && (mach) <= bfd_mach_sparc_v9a)
|
||||
@ -1215,6 +1360,7 @@ enum bfd_architecture
|
||||
#define bfd_mach_mips4000 4000
|
||||
#define bfd_mach_mips4010 4010
|
||||
#define bfd_mach_mips4100 4100
|
||||
#define bfd_mach_mips4111 4111
|
||||
#define bfd_mach_mips4300 4300
|
||||
#define bfd_mach_mips4400 4400
|
||||
#define bfd_mach_mips4600 4600
|
||||
@ -1227,9 +1373,11 @@ enum bfd_architecture
|
||||
bfd_arch_i386, /* Intel 386 */
|
||||
#define bfd_mach_i386_i386 0
|
||||
#define bfd_mach_i386_i8086 1
|
||||
#define bfd_mach_i386_i386_intel_syntax 2
|
||||
bfd_arch_we32k, /* AT&T WE32xxx */
|
||||
bfd_arch_tahoe, /* CCI/Harris Tahoe */
|
||||
bfd_arch_i860, /* Intel 860 */
|
||||
bfd_arch_i370, /* IBM 360/370 Mainframes */
|
||||
bfd_arch_romp, /* IBM ROMP PC/RT */
|
||||
bfd_arch_alliant, /* Alliant */
|
||||
bfd_arch_convex, /* Convex */
|
||||
@ -1243,34 +1391,63 @@ enum bfd_architecture
|
||||
bfd_arch_rs6000, /* IBM RS/6000 */
|
||||
bfd_arch_hppa, /* HP PA RISC */
|
||||
bfd_arch_d10v, /* Mitsubishi D10V */
|
||||
#define bfd_mach_d10v 0
|
||||
#define bfd_mach_d10v_ts2 2
|
||||
#define bfd_mach_d10v_ts3 3
|
||||
bfd_arch_d30v, /* Mitsubishi D30V */
|
||||
bfd_arch_z8k, /* Zilog Z8000 */
|
||||
#define bfd_mach_z8001 1
|
||||
#define bfd_mach_z8002 2
|
||||
bfd_arch_h8500, /* Hitachi H8/500 */
|
||||
bfd_arch_sh, /* Hitachi SH */
|
||||
#define bfd_mach_sh 0
|
||||
#define bfd_mach_sh2 0x20
|
||||
#define bfd_mach_sh_dsp 0x2d
|
||||
#define bfd_mach_sh3 0x30
|
||||
#define bfd_mach_sh3_dsp 0x3d
|
||||
#define bfd_mach_sh3e 0x3e
|
||||
#define bfd_mach_sh4 0x40
|
||||
bfd_arch_alpha, /* Dec Alpha */
|
||||
#define bfd_mach_alpha_ev4 0x10
|
||||
#define bfd_mach_alpha_ev5 0x20
|
||||
#define bfd_mach_alpha_ev6 0x30
|
||||
bfd_arch_arm, /* Advanced Risc Machines ARM */
|
||||
#define bfd_mach_arm_2 1
|
||||
#define bfd_mach_arm_2a 2
|
||||
#define bfd_mach_arm_2a 2
|
||||
#define bfd_mach_arm_3 3
|
||||
#define bfd_mach_arm_3M 4
|
||||
#define bfd_mach_arm_4 5
|
||||
#define bfd_mach_arm_4 5
|
||||
#define bfd_mach_arm_4T 6
|
||||
#define bfd_mach_arm_5 7
|
||||
#define bfd_mach_arm_5T 8
|
||||
bfd_arch_ns32k, /* National Semiconductors ns32000 */
|
||||
bfd_arch_w65, /* WDC 65816 */
|
||||
bfd_arch_tic30, /* Texas Instruments TMS320C30 */
|
||||
bfd_arch_tic54x, /* Texas Instruments TMS320C54X */
|
||||
bfd_arch_tic80, /* TI TMS320c80 (MVP) */
|
||||
bfd_arch_v850, /* NEC V850 */
|
||||
#define bfd_mach_v850 0
|
||||
#define bfd_mach_v850e 'E'
|
||||
#define bfd_mach_v850ea 'A'
|
||||
bfd_arch_arc, /* Argonaut RISC Core */
|
||||
#define bfd_mach_arc_base 0
|
||||
bfd_arch_m32r, /* Mitsubishi M32R/D */
|
||||
#define bfd_mach_m32r 0 /* backwards compatibility */
|
||||
#define bfd_mach_m32rx 'x'
|
||||
bfd_arch_mn10200, /* Matsushita MN10200 */
|
||||
bfd_arch_mn10300, /* Matsushita MN10300 */
|
||||
#define bfd_mach_mn10300 300
|
||||
#define bfd_mach_am33 330
|
||||
bfd_arch_fr30,
|
||||
#define bfd_mach_fr30 0x46523330
|
||||
bfd_arch_mcore,
|
||||
bfd_arch_ia64, /* HP/Intel ia64 */
|
||||
bfd_arch_pj,
|
||||
bfd_arch_avr, /* Atmel AVR microcontrollers */
|
||||
#define bfd_mach_avr1 1
|
||||
#define bfd_mach_avr2 2
|
||||
#define bfd_mach_avr3 3
|
||||
#define bfd_mach_avr4 4
|
||||
bfd_arch_last
|
||||
};
|
||||
|
||||
@ -1336,6 +1513,13 @@ const char *
|
||||
bfd_printable_arch_mach
|
||||
PARAMS ((enum bfd_architecture arch, unsigned long machine));
|
||||
|
||||
unsigned int
|
||||
bfd_octets_per_byte PARAMS ((bfd *abfd));
|
||||
|
||||
unsigned int
|
||||
bfd_arch_mach_octets_per_byte PARAMS ((enum bfd_architecture arch,
|
||||
unsigned long machine));
|
||||
|
||||
typedef enum bfd_reloc_status
|
||||
{
|
||||
/* No errors detected */
|
||||
@ -1454,13 +1638,26 @@ struct reloc_howto_struct
|
||||
/* The textual name of the relocation type. */
|
||||
char *name;
|
||||
|
||||
/* When performing a partial link, some formats must modify the
|
||||
relocations rather than the data - this flag signals this.*/
|
||||
/* Some formats record a relocation addend in the section contents
|
||||
rather than with the relocation. For ELF formats this is the
|
||||
distinction between USE_REL and USE_RELA (though the code checks
|
||||
for USE_REL == 1/0). The value of this field is TRUE if the
|
||||
addend is recorded with the section contents; when performing a
|
||||
partial link (ld -r) the section contents (the data) will be
|
||||
modified. The value of this field is FALSE if addends are
|
||||
recorded with the relocation (in arelent.addend); when performing
|
||||
a partial link the relocation will be modified.
|
||||
All relocations for all ELF USE_RELA targets should set this field
|
||||
to FALSE (values of TRUE should be looked on with suspicion).
|
||||
However, the converse is not true: not all relocations of all ELF
|
||||
USE_REL targets set this field to TRUE. Why this is so is peculiar
|
||||
to each particular target. For relocs that aren't used in partial
|
||||
links (e.g. GOT stuff) it doesn't matter what this is set to. */
|
||||
boolean partial_inplace;
|
||||
|
||||
/* The src_mask selects which parts of the read in data
|
||||
are to be used in the relocation sum. E.g., if this was an 8 bit
|
||||
bit of data which we read and relocated, this would be
|
||||
byte of data which we read and relocated, this would be
|
||||
0x000000ff. When we have relocs which have an addend, such as
|
||||
sun4 extended relocs, the value in the offset part of a
|
||||
relocating field is garbage so we never use it. In this case
|
||||
@ -1486,6 +1683,9 @@ struct reloc_howto_struct
|
||||
{(unsigned)C,R,S,B, P, BI, O,SF,NAME,INPLACE,MASKSRC,MASKDST,PC}
|
||||
#define NEWHOWTO( FUNCTION, NAME,SIZE,REL,IN) HOWTO(0,0,SIZE,0,REL,0,complain_overflow_dont,FUNCTION, NAME,false,0,0,IN)
|
||||
|
||||
#define EMPTY_HOWTO(C) \
|
||||
HOWTO((C),0,0,0,false,0,complain_overflow_dont,NULL,NULL,false,0,0,false)
|
||||
|
||||
#define HOWTO_PREPARE(relocation, symbol) \
|
||||
{ \
|
||||
if (symbol != (asymbol *)NULL) { \
|
||||
@ -1510,6 +1710,7 @@ bfd_check_overflow
|
||||
PARAMS ((enum complain_overflow how,
|
||||
unsigned int bitsize,
|
||||
unsigned int rightshift,
|
||||
unsigned int addrsize,
|
||||
bfd_vma relocation));
|
||||
|
||||
bfd_reloc_status_type
|
||||
@ -1666,6 +1867,9 @@ relocation types already defined. */
|
||||
BFD_RELOC_SPARC_L44,
|
||||
BFD_RELOC_SPARC_REGISTER,
|
||||
|
||||
/* SPARC little endian relocation */
|
||||
BFD_RELOC_SPARC_REV32,
|
||||
|
||||
/* Alpha ECOFF and ELF relocations. Some of these treat the symbol or
|
||||
"addend" in some special way.
|
||||
For GPDISP_HI16 ("gpdisp") relocations, the symbol is ignored when
|
||||
@ -1714,6 +1918,17 @@ The GNU linker currently doesn't do any of this optimizing. */
|
||||
BFD_RELOC_ALPHA_ELF_LITERAL,
|
||||
BFD_RELOC_ALPHA_LITUSE,
|
||||
|
||||
/* The BFD_RELOC_ALPHA_USER_* relocations are used by the assembler to
|
||||
process the explicit !<reloc>!sequence relocations, and are mapped
|
||||
into the normal relocations at the end of processing. */
|
||||
BFD_RELOC_ALPHA_USER_LITERAL,
|
||||
BFD_RELOC_ALPHA_USER_LITUSE_BASE,
|
||||
BFD_RELOC_ALPHA_USER_LITUSE_BYTOFF,
|
||||
BFD_RELOC_ALPHA_USER_LITUSE_JSR,
|
||||
BFD_RELOC_ALPHA_USER_GPDISP,
|
||||
BFD_RELOC_ALPHA_USER_GPRELHIGH,
|
||||
BFD_RELOC_ALPHA_USER_GPRELLOW,
|
||||
|
||||
/* The HINT relocation indicates a value that should be filled into the
|
||||
"hint" field of a jmp/jsr/ret instruction, for possible branch-
|
||||
prediction logic which may be provided on some processors. */
|
||||
@ -1769,6 +1984,10 @@ to compensate for the borrow when the low bits are added. */
|
||||
BFD_RELOC_MIPS_GOT_LO16,
|
||||
BFD_RELOC_MIPS_CALL_HI16,
|
||||
BFD_RELOC_MIPS_CALL_LO16,
|
||||
BFD_RELOC_MIPS_SUB,
|
||||
BFD_RELOC_MIPS_GOT_PAGE,
|
||||
BFD_RELOC_MIPS_GOT_OFST,
|
||||
BFD_RELOC_MIPS_GOT_DISP,
|
||||
|
||||
|
||||
/* i386/elf relocations */
|
||||
@ -1795,6 +2014,14 @@ to compensate for the borrow when the low bits are added. */
|
||||
BFD_RELOC_NS32K_DISP_16_PCREL,
|
||||
BFD_RELOC_NS32K_DISP_32_PCREL,
|
||||
|
||||
/* Picojava relocs. Not all of these appear in object files. */
|
||||
BFD_RELOC_PJ_CODE_HI16,
|
||||
BFD_RELOC_PJ_CODE_LO16,
|
||||
BFD_RELOC_PJ_CODE_DIR16,
|
||||
BFD_RELOC_PJ_CODE_DIR32,
|
||||
BFD_RELOC_PJ_CODE_REL16,
|
||||
BFD_RELOC_PJ_CODE_REL32,
|
||||
|
||||
/* Power(rs6000) and PowerPC relocations. */
|
||||
BFD_RELOC_PPC_B26,
|
||||
BFD_RELOC_PPC_BA26,
|
||||
@ -1827,6 +2054,9 @@ to compensate for the borrow when the low bits are added. */
|
||||
BFD_RELOC_PPC_EMB_BIT_FLD,
|
||||
BFD_RELOC_PPC_EMB_RELSDA,
|
||||
|
||||
/* IBM 370/390 relocations */
|
||||
BFD_RELOC_I370_D12,
|
||||
|
||||
/* The type of reloc used to build a contructor table - at the moment
|
||||
probably a 32 bit wide absolute relocation, but the target can choose.
|
||||
It generally does map to one of the other relocation types. */
|
||||
@ -1836,9 +2066,20 @@ It generally does map to one of the other relocation types. */
|
||||
not stored in the instruction. */
|
||||
BFD_RELOC_ARM_PCREL_BRANCH,
|
||||
|
||||
/* ARM 26 bit pc-relative branch. The lowest bit must be zero and is
|
||||
not stored in the instruction. The 2nd lowest bit comes from a 1 bit
|
||||
field in the instruction. */
|
||||
BFD_RELOC_ARM_PCREL_BLX,
|
||||
|
||||
/* Thumb 22 bit pc-relative branch. The lowest bit must be zero and is
|
||||
not stored in the instruction. The 2nd lowest bit comes from a 1 bit
|
||||
field in the instruction. */
|
||||
BFD_RELOC_THUMB_PCREL_BLX,
|
||||
|
||||
/* These relocs are only used within the ARM assembler. They are not
|
||||
(at present) written to any object files. */
|
||||
BFD_RELOC_ARM_IMMEDIATE,
|
||||
BFD_RELOC_ARM_ADRL_IMMEDIATE,
|
||||
BFD_RELOC_ARM_OFFSET_IMM,
|
||||
BFD_RELOC_ARM_SHIFT_IMM,
|
||||
BFD_RELOC_ARM_SWI,
|
||||
@ -1854,6 +2095,15 @@ not stored in the instruction. */
|
||||
BFD_RELOC_ARM_THUMB_IMM,
|
||||
BFD_RELOC_ARM_THUMB_SHIFT,
|
||||
BFD_RELOC_ARM_THUMB_OFFSET,
|
||||
BFD_RELOC_ARM_GOT12,
|
||||
BFD_RELOC_ARM_GOT32,
|
||||
BFD_RELOC_ARM_JUMP_SLOT,
|
||||
BFD_RELOC_ARM_COPY,
|
||||
BFD_RELOC_ARM_GLOB_DAT,
|
||||
BFD_RELOC_ARM_PLT32,
|
||||
BFD_RELOC_ARM_RELATIVE,
|
||||
BFD_RELOC_ARM_GOTOFF,
|
||||
BFD_RELOC_ARM_GOTPC,
|
||||
|
||||
/* Hitachi SH relocs. Not all of these appear in object files. */
|
||||
BFD_RELOC_SH_PCDISP8BY2,
|
||||
@ -1874,6 +2124,8 @@ not stored in the instruction. */
|
||||
BFD_RELOC_SH_CODE,
|
||||
BFD_RELOC_SH_DATA,
|
||||
BFD_RELOC_SH_LABEL,
|
||||
BFD_RELOC_SH_LOOP_START,
|
||||
BFD_RELOC_SH_LOOP_END,
|
||||
|
||||
/* Thumb 23-, 12- and 9-bit pc-relative branches. The lowest bit must
|
||||
be zero and is not stored in the instruction. */
|
||||
@ -1912,7 +2164,53 @@ assumed to be 0. */
|
||||
assumed to be 0. */
|
||||
BFD_RELOC_D10V_18_PCREL,
|
||||
|
||||
/* Mitsubishi D30V relocs.
|
||||
This is a 6-bit absolute reloc. */
|
||||
BFD_RELOC_D30V_6,
|
||||
|
||||
/* This is a 6-bit pc-relative reloc with
|
||||
the right 3 bits assumed to be 0. */
|
||||
BFD_RELOC_D30V_9_PCREL,
|
||||
|
||||
/* This is a 6-bit pc-relative reloc with
|
||||
the right 3 bits assumed to be 0. Same
|
||||
as the previous reloc but on the right side
|
||||
of the container. */
|
||||
BFD_RELOC_D30V_9_PCREL_R,
|
||||
|
||||
/* This is a 12-bit absolute reloc with the
|
||||
right 3 bitsassumed to be 0. */
|
||||
BFD_RELOC_D30V_15,
|
||||
|
||||
/* This is a 12-bit pc-relative reloc with
|
||||
the right 3 bits assumed to be 0. */
|
||||
BFD_RELOC_D30V_15_PCREL,
|
||||
|
||||
/* This is a 12-bit pc-relative reloc with
|
||||
the right 3 bits assumed to be 0. Same
|
||||
as the previous reloc but on the right side
|
||||
of the container. */
|
||||
BFD_RELOC_D30V_15_PCREL_R,
|
||||
|
||||
/* This is an 18-bit absolute reloc with
|
||||
the right 3 bits assumed to be 0. */
|
||||
BFD_RELOC_D30V_21,
|
||||
|
||||
/* This is an 18-bit pc-relative reloc with
|
||||
the right 3 bits assumed to be 0. */
|
||||
BFD_RELOC_D30V_21_PCREL,
|
||||
|
||||
/* This is an 18-bit pc-relative reloc with
|
||||
the right 3 bits assumed to be 0. Same
|
||||
as the previous reloc but on the right side
|
||||
of the container. */
|
||||
BFD_RELOC_D30V_21_PCREL_R,
|
||||
|
||||
/* This is a 32-bit absolute reloc. */
|
||||
BFD_RELOC_D30V_32,
|
||||
|
||||
/* This is a 32-bit pc-relative reloc. */
|
||||
BFD_RELOC_D30V_32_PCREL,
|
||||
|
||||
/* Mitsubishi M32R relocs.
|
||||
This is a 24 bit absolute address. */
|
||||
@ -1976,6 +2274,27 @@ data area pointer. */
|
||||
/* This is a 16 bit offset from the tiny data area pointer. */
|
||||
BFD_RELOC_V850_TDA_16_16_OFFSET,
|
||||
|
||||
/* This is a 5 bit offset (of which only 4 bits are used) from the tiny
|
||||
data area pointer. */
|
||||
BFD_RELOC_V850_TDA_4_5_OFFSET,
|
||||
|
||||
/* This is a 4 bit offset from the tiny data area pointer. */
|
||||
BFD_RELOC_V850_TDA_4_4_OFFSET,
|
||||
|
||||
/* This is a 16 bit offset from the short data area pointer, with the
|
||||
bits placed non-contigously in the instruction. */
|
||||
BFD_RELOC_V850_SDA_16_16_SPLIT_OFFSET,
|
||||
|
||||
/* This is a 16 bit offset from the zero data area pointer, with the
|
||||
bits placed non-contigously in the instruction. */
|
||||
BFD_RELOC_V850_ZDA_16_16_SPLIT_OFFSET,
|
||||
|
||||
/* This is a 6 bit offset from the call table base pointer. */
|
||||
BFD_RELOC_V850_CALLT_6_7_OFFSET,
|
||||
|
||||
/* This is a 16 bit offset from the call table base pointer. */
|
||||
BFD_RELOC_V850_CALLT_16_16_OFFSET,
|
||||
|
||||
|
||||
/* This is a 32bit pcrel reloc for the mn10300, offset by two bytes in the
|
||||
instruction. */
|
||||
@ -1989,6 +2308,221 @@ instruction. */
|
||||
significant 8 bits of a 24 bit word are placed into the least
|
||||
significant 8 bits of the opcode. */
|
||||
BFD_RELOC_TIC30_LDP,
|
||||
|
||||
/* This is a 7bit reloc for the tms320c54x, where the least
|
||||
significant 7 bits of a 16 bit word are placed into the least
|
||||
significant 7 bits of the opcode. */
|
||||
BFD_RELOC_TIC54X_PARTLS7,
|
||||
|
||||
/* This is a 9bit DP reloc for the tms320c54x, where the most
|
||||
significant 9 bits of a 16 bit word are placed into the least
|
||||
significant 9 bits of the opcode. */
|
||||
BFD_RELOC_TIC54X_PARTMS9,
|
||||
|
||||
/* This is an extended address 23-bit reloc for the tms320c54x. */
|
||||
BFD_RELOC_TIC54X_23,
|
||||
|
||||
/* This is a 16-bit reloc for the tms320c54x, where the least
|
||||
significant 16 bits of a 23-bit extended address are placed into
|
||||
the opcode. */
|
||||
BFD_RELOC_TIC54X_16_OF_23,
|
||||
|
||||
/* This is a reloc for the tms320c54x, where the most
|
||||
significant 7 bits of a 23-bit extended address are placed into
|
||||
the opcode. */
|
||||
BFD_RELOC_TIC54X_MS7_OF_23,
|
||||
|
||||
/* This is a 48 bit reloc for the FR30 that stores 32 bits. */
|
||||
BFD_RELOC_FR30_48,
|
||||
|
||||
/* This is a 32 bit reloc for the FR30 that stores 20 bits split up into
|
||||
two sections. */
|
||||
BFD_RELOC_FR30_20,
|
||||
|
||||
/* This is a 16 bit reloc for the FR30 that stores a 6 bit word offset in
|
||||
4 bits. */
|
||||
BFD_RELOC_FR30_6_IN_4,
|
||||
|
||||
/* This is a 16 bit reloc for the FR30 that stores an 8 bit byte offset
|
||||
into 8 bits. */
|
||||
BFD_RELOC_FR30_8_IN_8,
|
||||
|
||||
/* This is a 16 bit reloc for the FR30 that stores a 9 bit short offset
|
||||
into 8 bits. */
|
||||
BFD_RELOC_FR30_9_IN_8,
|
||||
|
||||
/* This is a 16 bit reloc for the FR30 that stores a 10 bit word offset
|
||||
into 8 bits. */
|
||||
BFD_RELOC_FR30_10_IN_8,
|
||||
|
||||
/* This is a 16 bit reloc for the FR30 that stores a 9 bit pc relative
|
||||
short offset into 8 bits. */
|
||||
BFD_RELOC_FR30_9_PCREL,
|
||||
|
||||
/* This is a 16 bit reloc for the FR30 that stores a 12 bit pc relative
|
||||
short offset into 11 bits. */
|
||||
BFD_RELOC_FR30_12_PCREL,
|
||||
|
||||
/* Motorola Mcore relocations. */
|
||||
BFD_RELOC_MCORE_PCREL_IMM8BY4,
|
||||
BFD_RELOC_MCORE_PCREL_IMM11BY2,
|
||||
BFD_RELOC_MCORE_PCREL_IMM4BY2,
|
||||
BFD_RELOC_MCORE_PCREL_32,
|
||||
BFD_RELOC_MCORE_PCREL_JSR_IMM11BY2,
|
||||
BFD_RELOC_MCORE_RVA,
|
||||
|
||||
/* This is a 16 bit reloc for the AVR that stores 8 bit pc relative
|
||||
short offset into 7 bits. */
|
||||
BFD_RELOC_AVR_7_PCREL,
|
||||
|
||||
/* This is a 16 bit reloc for the AVR that stores 13 bit pc relative
|
||||
short offset into 12 bits. */
|
||||
BFD_RELOC_AVR_13_PCREL,
|
||||
|
||||
/* This is a 16 bit reloc for the AVR that stores 17 bit value (usually
|
||||
program memory address) into 16 bits. */
|
||||
BFD_RELOC_AVR_16_PM,
|
||||
|
||||
/* This is a 16 bit reloc for the AVR that stores 8 bit value (usually
|
||||
data memory address) into 8 bit immediate value of LDI insn. */
|
||||
BFD_RELOC_AVR_LO8_LDI,
|
||||
|
||||
/* This is a 16 bit reloc for the AVR that stores 8 bit value (high 8 bit
|
||||
of data memory address) into 8 bit immediate value of LDI insn. */
|
||||
BFD_RELOC_AVR_HI8_LDI,
|
||||
|
||||
/* This is a 16 bit reloc for the AVR that stores 8 bit value (most high 8 bit
|
||||
of program memory address) into 8 bit immediate value of LDI insn. */
|
||||
BFD_RELOC_AVR_HH8_LDI,
|
||||
|
||||
/* This is a 16 bit reloc for the AVR that stores negated 8 bit value
|
||||
(usually data memory address) into 8 bit immediate value of SUBI insn. */
|
||||
BFD_RELOC_AVR_LO8_LDI_NEG,
|
||||
|
||||
/* This is a 16 bit reloc for the AVR that stores negated 8 bit value
|
||||
(high 8 bit of data memory address) into 8 bit immediate value of
|
||||
SUBI insn. */
|
||||
BFD_RELOC_AVR_HI8_LDI_NEG,
|
||||
|
||||
/* This is a 16 bit reloc for the AVR that stores negated 8 bit value
|
||||
(most high 8 bit of program memory address) into 8 bit immediate value
|
||||
of LDI or SUBI insn. */
|
||||
BFD_RELOC_AVR_HH8_LDI_NEG,
|
||||
|
||||
/* This is a 16 bit reloc for the AVR that stores 8 bit value (usually
|
||||
command address) into 8 bit immediate value of LDI insn. */
|
||||
BFD_RELOC_AVR_LO8_LDI_PM,
|
||||
|
||||
/* This is a 16 bit reloc for the AVR that stores 8 bit value (high 8 bit
|
||||
of command address) into 8 bit immediate value of LDI insn. */
|
||||
BFD_RELOC_AVR_HI8_LDI_PM,
|
||||
|
||||
/* This is a 16 bit reloc for the AVR that stores 8 bit value (most high 8 bit
|
||||
of command address) into 8 bit immediate value of LDI insn. */
|
||||
BFD_RELOC_AVR_HH8_LDI_PM,
|
||||
|
||||
/* This is a 16 bit reloc for the AVR that stores negated 8 bit value
|
||||
(usually command address) into 8 bit immediate value of SUBI insn. */
|
||||
BFD_RELOC_AVR_LO8_LDI_PM_NEG,
|
||||
|
||||
/* This is a 16 bit reloc for the AVR that stores negated 8 bit value
|
||||
(high 8 bit of 16 bit command address) into 8 bit immediate value
|
||||
of SUBI insn. */
|
||||
BFD_RELOC_AVR_HI8_LDI_PM_NEG,
|
||||
|
||||
/* This is a 16 bit reloc for the AVR that stores negated 8 bit value
|
||||
(high 6 bit of 22 bit command address) into 8 bit immediate
|
||||
value of SUBI insn. */
|
||||
BFD_RELOC_AVR_HH8_LDI_PM_NEG,
|
||||
|
||||
/* This is a 32 bit reloc for the AVR that stores 23 bit value
|
||||
into 22 bits. */
|
||||
BFD_RELOC_AVR_CALL,
|
||||
|
||||
/* These two relocations are used by the linker to determine which of
|
||||
the entries in a C++ virtual function table are actually used. When
|
||||
the --gc-sections option is given, the linker will zero out the entries
|
||||
that are not used, so that the code for those functions need not be
|
||||
included in the output.
|
||||
|
||||
VTABLE_INHERIT is a zero-space relocation used to describe to the
|
||||
linker the inheritence tree of a C++ virtual function table. The
|
||||
relocation's symbol should be the parent class' vtable, and the
|
||||
relocation should be located at the child vtable.
|
||||
|
||||
VTABLE_ENTRY is a zero-space relocation that describes the use of a
|
||||
virtual function table entry. The reloc's symbol should refer to the
|
||||
table of the class mentioned in the code. Off of that base, an offset
|
||||
describes the entry that is being used. For Rela hosts, this offset
|
||||
is stored in the reloc's addend. For Rel hosts, we are forced to put
|
||||
this offset in the reloc's section offset. */
|
||||
BFD_RELOC_VTABLE_INHERIT,
|
||||
BFD_RELOC_VTABLE_ENTRY,
|
||||
|
||||
/* Intel IA64 Relocations. */
|
||||
BFD_RELOC_IA64_IMM14,
|
||||
BFD_RELOC_IA64_IMM22,
|
||||
BFD_RELOC_IA64_IMM64,
|
||||
BFD_RELOC_IA64_DIR32MSB,
|
||||
BFD_RELOC_IA64_DIR32LSB,
|
||||
BFD_RELOC_IA64_DIR64MSB,
|
||||
BFD_RELOC_IA64_DIR64LSB,
|
||||
BFD_RELOC_IA64_GPREL22,
|
||||
BFD_RELOC_IA64_GPREL64I,
|
||||
BFD_RELOC_IA64_GPREL32MSB,
|
||||
BFD_RELOC_IA64_GPREL32LSB,
|
||||
BFD_RELOC_IA64_GPREL64MSB,
|
||||
BFD_RELOC_IA64_GPREL64LSB,
|
||||
BFD_RELOC_IA64_LTOFF22,
|
||||
BFD_RELOC_IA64_LTOFF64I,
|
||||
BFD_RELOC_IA64_PLTOFF22,
|
||||
BFD_RELOC_IA64_PLTOFF64I,
|
||||
BFD_RELOC_IA64_PLTOFF64MSB,
|
||||
BFD_RELOC_IA64_PLTOFF64LSB,
|
||||
BFD_RELOC_IA64_FPTR64I,
|
||||
BFD_RELOC_IA64_FPTR32MSB,
|
||||
BFD_RELOC_IA64_FPTR32LSB,
|
||||
BFD_RELOC_IA64_FPTR64MSB,
|
||||
BFD_RELOC_IA64_FPTR64LSB,
|
||||
BFD_RELOC_IA64_PCREL21B,
|
||||
BFD_RELOC_IA64_PCREL21M,
|
||||
BFD_RELOC_IA64_PCREL21F,
|
||||
BFD_RELOC_IA64_PCREL32MSB,
|
||||
BFD_RELOC_IA64_PCREL32LSB,
|
||||
BFD_RELOC_IA64_PCREL64MSB,
|
||||
BFD_RELOC_IA64_PCREL64LSB,
|
||||
BFD_RELOC_IA64_LTOFF_FPTR22,
|
||||
BFD_RELOC_IA64_LTOFF_FPTR64I,
|
||||
BFD_RELOC_IA64_LTOFF_FPTR64MSB,
|
||||
BFD_RELOC_IA64_LTOFF_FPTR64LSB,
|
||||
BFD_RELOC_IA64_SEGBASE,
|
||||
BFD_RELOC_IA64_SEGREL32MSB,
|
||||
BFD_RELOC_IA64_SEGREL32LSB,
|
||||
BFD_RELOC_IA64_SEGREL64MSB,
|
||||
BFD_RELOC_IA64_SEGREL64LSB,
|
||||
BFD_RELOC_IA64_SECREL32MSB,
|
||||
BFD_RELOC_IA64_SECREL32LSB,
|
||||
BFD_RELOC_IA64_SECREL64MSB,
|
||||
BFD_RELOC_IA64_SECREL64LSB,
|
||||
BFD_RELOC_IA64_REL32MSB,
|
||||
BFD_RELOC_IA64_REL32LSB,
|
||||
BFD_RELOC_IA64_REL64MSB,
|
||||
BFD_RELOC_IA64_REL64LSB,
|
||||
BFD_RELOC_IA64_LTV32MSB,
|
||||
BFD_RELOC_IA64_LTV32LSB,
|
||||
BFD_RELOC_IA64_LTV64MSB,
|
||||
BFD_RELOC_IA64_LTV64LSB,
|
||||
BFD_RELOC_IA64_IPLTMSB,
|
||||
BFD_RELOC_IA64_IPLTLSB,
|
||||
BFD_RELOC_IA64_EPLTMSB,
|
||||
BFD_RELOC_IA64_EPLTLSB,
|
||||
BFD_RELOC_IA64_COPY,
|
||||
BFD_RELOC_IA64_TPREL22,
|
||||
BFD_RELOC_IA64_TPREL64MSB,
|
||||
BFD_RELOC_IA64_TPREL64LSB,
|
||||
BFD_RELOC_IA64_LTOFF_TP22,
|
||||
BFD_RELOC_IA64_LTOFF22X,
|
||||
BFD_RELOC_IA64_LDXMOV,
|
||||
BFD_RELOC_UNUSED };
|
||||
typedef enum bfd_reloc_code_real bfd_reloc_code_real_type;
|
||||
reloc_howto_type *
|
||||
@ -2043,7 +2577,7 @@ typedef struct symbol_cache_entry
|
||||
<<BSF_GLOBAL>> */
|
||||
|
||||
/* The symbol is a debugging record. The value has an arbitary
|
||||
meaning. */
|
||||
meaning, unless BSF_DEBUGGING_RELOC is also set. */
|
||||
#define BSF_DEBUGGING 0x08
|
||||
|
||||
/* The symbol denotes a function entry point. Used in ELF,
|
||||
@ -2101,6 +2635,11 @@ typedef struct symbol_cache_entry
|
||||
others someday. */
|
||||
#define BSF_OBJECT 0x10000
|
||||
|
||||
/* This symbol is a debugging symbol. The value is the offset
|
||||
into the section of the data. BSF_DEBUGGING should be set
|
||||
as well. */
|
||||
#define BSF_DEBUGGING_RELOC 0x20000
|
||||
|
||||
flagword flags;
|
||||
|
||||
/* A pointer to the section to which this symbol is
|
||||
@ -2142,6 +2681,9 @@ bfd_print_symbol_vandf PARAMS ((PTR file, asymbol *symbol));
|
||||
int
|
||||
bfd_decode_symclass PARAMS ((asymbol *symbol));
|
||||
|
||||
boolean
|
||||
bfd_is_undefined_symclass PARAMS ((int symclass));
|
||||
|
||||
void
|
||||
bfd_symbol_info PARAMS ((asymbol *symbol, symbol_info *ret));
|
||||
|
||||
@ -2285,6 +2827,7 @@ struct _bfd
|
||||
struct nlm_obj_tdata *nlm_obj_data;
|
||||
struct bout_data_struct *bout_data;
|
||||
struct sun_core_struct *sun_core_data;
|
||||
struct sco5_core_struct *sco5_core_data;
|
||||
struct trad_core_struct *trad_core_data;
|
||||
struct som_data_struct *som_data;
|
||||
struct hpux_core_struct *hpux_core_data;
|
||||
@ -2437,6 +2980,9 @@ bfd_set_private_flags PARAMS ((bfd *abfd, flagword flags));
|
||||
#define bfd_relax_section(abfd, section, link_info, again) \
|
||||
BFD_SEND (abfd, _bfd_relax_section, (abfd, section, link_info, again))
|
||||
|
||||
#define bfd_gc_sections(abfd, link_info) \
|
||||
BFD_SEND (abfd, _bfd_gc_sections, (abfd, link_info))
|
||||
|
||||
#define bfd_link_hash_table_create(abfd) \
|
||||
BFD_SEND (abfd, _bfd_link_hash_table_create, (abfd))
|
||||
|
||||
@ -2524,6 +3070,7 @@ enum bfd_flavour {
|
||||
bfd_target_os9k_flavour,
|
||||
bfd_target_versados_flavour,
|
||||
bfd_target_msdos_flavour,
|
||||
bfd_target_ovax_flavour,
|
||||
bfd_target_evax_flavour
|
||||
};
|
||||
|
||||
@ -2731,7 +3278,8 @@ CAT(NAME,_bfd_relax_section),\
|
||||
CAT(NAME,_bfd_link_hash_table_create),\
|
||||
CAT(NAME,_bfd_link_add_symbols),\
|
||||
CAT(NAME,_bfd_final_link),\
|
||||
CAT(NAME,_bfd_link_split_section)
|
||||
CAT(NAME,_bfd_link_split_section),\
|
||||
CAT(NAME,_bfd_gc_sections)
|
||||
int (*_bfd_sizeof_headers) PARAMS ((bfd *, boolean));
|
||||
bfd_byte * (*_bfd_get_relocated_section_contents) PARAMS ((bfd *,
|
||||
struct bfd_link_info *, struct bfd_link_order *,
|
||||
@ -2755,7 +3303,10 @@ CAT(NAME,_bfd_link_split_section)
|
||||
/* Should this section be split up into smaller pieces during linking. */
|
||||
boolean (*_bfd_link_split_section) PARAMS ((bfd *, struct sec *));
|
||||
|
||||
/* Routines to handle dynamic symbols and relocs. */
|
||||
/* Remove sections that are not referenced from the output. */
|
||||
boolean (*_bfd_gc_sections) PARAMS ((bfd *, struct bfd_link_info *));
|
||||
|
||||
/* Routines to handle dynamic symbols and relocs. */
|
||||
#define BFD_JUMP_TABLE_DYNAMIC(NAME)\
|
||||
CAT(NAME,_get_dynamic_symtab_upper_bound),\
|
||||
CAT(NAME,_canonicalize_dynamic_symtab),\
|
||||
@ -2772,7 +3323,11 @@ CAT(NAME,_canonicalize_dynamic_reloc)
|
||||
long (*_bfd_canonicalize_dynamic_reloc)
|
||||
PARAMS ((bfd *, arelent **, struct symbol_cache_entry **));
|
||||
|
||||
/* Opposite endian version of this target. */
|
||||
const struct bfd_target * alternative_target;
|
||||
|
||||
PTR backend_data;
|
||||
|
||||
} bfd_target;
|
||||
boolean
|
||||
bfd_set_default_target PARAMS ((const char *name));
|
||||
@ -2783,6 +3338,9 @@ bfd_find_target PARAMS ((CONST char *target_name, bfd *abfd));
|
||||
const char **
|
||||
bfd_target_list PARAMS ((void));
|
||||
|
||||
const bfd_target *
|
||||
bfd_search_for_target PARAMS ((int (* search_func)(const bfd_target *, void *), void *));
|
||||
|
||||
boolean
|
||||
bfd_check_format PARAMS ((bfd *abfd, bfd_format format));
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user