updated with alpha changes
This commit is contained in:
parent
693f8191ed
commit
7e7fb4a834
|
@ -1,3 +1,24 @@
|
|||
Wed Jan 19 17:28:59 1994 Ken Raeburn (raeburn@cujo.cygnus.com)
|
||||
|
||||
* config/alphaosf.mh (HDEFINES): Don't define HOST_64_BIT here;
|
||||
that's dealt with elsewhere.
|
||||
* hosts/alphaosf.h (sprintf_vma, fprintf_vma): New macros.
|
||||
(uint64_typeHIGH, uint64_typeLOW): Comment with HOST_64_BIT so
|
||||
they get copied to bfd.h.
|
||||
|
||||
* reloc.c (enum bfd_reloc_code_real): Add some Alpha relocation
|
||||
types. Reorganized some of the existing ones.
|
||||
* coff-alpha.c (alpha_howto_table): Construct 64-bit negative one
|
||||
values in case of compilation on a 32-bit machine. Fix pcrel
|
||||
fields of some reloc types.
|
||||
(alpha_bfd_reloc_type_lookup): Handle more relocation types.
|
||||
|
||||
* bfd-in.h (uint64_typeHIGH, uint64_typeLOW): Supply default
|
||||
definitions when not defined, regardless of whether uint64_type is
|
||||
a defined macro or not.
|
||||
(fprintf_vma, sprintf_vma): Define only if fprintf_vma is not
|
||||
already defined.
|
||||
|
||||
Wed Jan 19 00:02:54 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
|
||||
|
||||
* aoutx.h (translate_to_native_sym_flags): Set the type of a
|
||||
|
|
|
@ -120,6 +120,8 @@ typedef unsigned HOST_64_BIT uint64_type;
|
|||
#if !defined (uint64_type) && defined (__GNUC__)
|
||||
#define uint64_type unsigned long long
|
||||
#define int64_type long long
|
||||
#endif
|
||||
#ifndef uint64_typeLOW
|
||||
#define uint64_typeLOW(x) ((unsigned long)(((x) & 0xffffffff)))
|
||||
#define uint64_typeHIGH(x) ((unsigned long)(((x) >> 32) & 0xffffffff))
|
||||
#endif
|
||||
|
@ -128,10 +130,12 @@ typedef unsigned HOST_64_BIT bfd_vma;
|
|||
typedef HOST_64_BIT bfd_signed_vma;
|
||||
typedef unsigned HOST_64_BIT bfd_size_type;
|
||||
typedef unsigned HOST_64_BIT symvalue;
|
||||
#ifndef fprintf_vma
|
||||
#define fprintf_vma(s,x) \
|
||||
fprintf(s,"%08lx%08lx", uint64_typeHIGH(x), uint64_typeLOW(x))
|
||||
#define sprintf_vma(s,x) \
|
||||
sprintf(s,"%08lx%08lx", uint64_typeHIGH(x), uint64_typeLOW(x))
|
||||
#endif
|
||||
#else /* not BFD64 */
|
||||
|
||||
/* Represent a target address. Also used as a generic unsigned type
|
||||
|
@ -547,16 +551,26 @@ struct ecoff_debug_info;
|
|||
struct ecoff_debug_swap;
|
||||
struct ecoff_extr;
|
||||
struct symbol_cache_entry;
|
||||
struct bfd_link_info;
|
||||
#endif
|
||||
extern boolean bfd_ecoff_debug_accumulate
|
||||
extern PTR bfd_ecoff_debug_init
|
||||
PARAMS ((bfd *output_bfd, struct ecoff_debug_info *output_debug,
|
||||
const struct ecoff_debug_swap *output_swap,
|
||||
struct bfd_link_info *));
|
||||
extern void bfd_ecoff_debug_free
|
||||
PARAMS ((PTR handle, bfd *output_bfd, struct ecoff_debug_info *output_debug,
|
||||
const struct ecoff_debug_swap *output_swap,
|
||||
struct bfd_link_info *));
|
||||
extern boolean bfd_ecoff_debug_accumulate
|
||||
PARAMS ((PTR handle, bfd *output_bfd, struct ecoff_debug_info *output_debug,
|
||||
const struct ecoff_debug_swap *output_swap,
|
||||
bfd *input_bfd, struct ecoff_debug_info *input_debug,
|
||||
const struct ecoff_debug_swap *input_swap,
|
||||
boolean relocateable));
|
||||
extern boolean bfd_ecoff_debug_link_other
|
||||
PARAMS ((bfd *output_bfd, struct ecoff_debug_info *output_debug,
|
||||
const struct ecoff_debug_swap *output_swap, bfd *input_bfd));
|
||||
struct bfd_link_info *));
|
||||
extern boolean bfd_ecoff_debug_accumulate_other
|
||||
PARAMS ((PTR handle, bfd *output_bfd, struct ecoff_debug_info *output_debug,
|
||||
const struct ecoff_debug_swap *output_swap, bfd *input_bfd,
|
||||
struct bfd_link_info *));
|
||||
extern boolean bfd_ecoff_debug_externals
|
||||
PARAMS ((bfd *abfd, struct ecoff_debug_info *debug,
|
||||
const struct ecoff_debug_swap *swap,
|
||||
|
@ -575,6 +589,10 @@ extern bfd_size_type bfd_ecoff_debug_size
|
|||
extern boolean bfd_ecoff_write_debug
|
||||
PARAMS ((bfd *abfd, struct ecoff_debug_info *debug,
|
||||
const struct ecoff_debug_swap *swap, file_ptr where));
|
||||
extern boolean bfd_ecoff_write_accumulated_debug
|
||||
PARAMS ((PTR handle, bfd *abfd, struct ecoff_debug_info *debug,
|
||||
const struct ecoff_debug_swap *swap,
|
||||
struct bfd_link_info *info, file_ptr where));
|
||||
|
||||
/* And more from the source. */
|
||||
void
|
||||
|
@ -1259,6 +1277,7 @@ typedef enum bfd_reloc_code_real
|
|||
BFD_RELOC_64,
|
||||
BFD_RELOC_32,
|
||||
BFD_RELOC_16,
|
||||
BFD_RELOC_14,
|
||||
BFD_RELOC_8,
|
||||
|
||||
/* PC-relative relocations */
|
||||
|
@ -1283,6 +1302,10 @@ typedef enum bfd_reloc_code_real
|
|||
/* 32-bit pc-relative, shifted right 2 bits (i.e., 30-bit
|
||||
word displacement, e.g. for SPARC) */
|
||||
BFD_RELOC_32_PCREL_S2,
|
||||
/* signed 16-bit pc-relative, shifted right 2 bits (e.g. for MIPS) */
|
||||
BFD_RELOC_16_PCREL_S2,
|
||||
/* this is used on the Alpha */
|
||||
BFD_RELOC_23_PCREL_S2,
|
||||
|
||||
/* High 22 bits of 32-bit value, placed into lower 22 bits of
|
||||
target word; simple reloc. */
|
||||
|
@ -1290,6 +1313,13 @@ typedef enum bfd_reloc_code_real
|
|||
/* Low 10 bits. */
|
||||
BFD_RELOC_LO10,
|
||||
|
||||
/* For systems that allocate a Global Pointer register, these are
|
||||
displacements off that register. These relocation types are
|
||||
handled specially, because the value the register will have is
|
||||
decided relatively late. */
|
||||
BFD_RELOC_GPREL16,
|
||||
BFD_RELOC_GPREL32,
|
||||
|
||||
/* Reloc types used for i960/b.out. */
|
||||
BFD_RELOC_I960_CALLJ,
|
||||
|
||||
|
@ -1331,13 +1361,50 @@ typedef enum bfd_reloc_code_real
|
|||
BFD_RELOC_SPARC_LO7,
|
||||
/* end-sanitize-v9 */
|
||||
|
||||
/* Alpha ECOFF relocations. Some of these treat the symbol or "addend"
|
||||
in some special way. */
|
||||
/* For GPDISP_HI16 ("gpdisp") relocations, the symbol is ignored when
|
||||
writing; when reading, it will be the absolute section symbol. The
|
||||
addend is the displacement in bytes of the "lda" instruction from
|
||||
the "ldah" instruction (which is at the address of this reloc). */
|
||||
BFD_RELOC_ALPHA_GPDISP_HI16,
|
||||
/* For GPDISP_LO16 ("ignore") relocations, the symbol is handled as
|
||||
with GPDISP_HI16 relocs. The addend is ignored when writing the
|
||||
relocations out, and is filled in with the file's GP value on
|
||||
reading, for convenience. */
|
||||
BFD_RELOC_ALPHA_GPDISP_LO16,
|
||||
|
||||
/* The Alpha LITERAL/LITUSE relocs are produced by a symbol reference;
|
||||
the assembler turns it into a LDQ instruction to load the address of
|
||||
the symbol, and then fills in a register in the real instruction.
|
||||
|
||||
The LITERAL reloc, at the LDQ instruction, refers to the .lita
|
||||
section symbol. The addend is ignored when writing, but is filled
|
||||
in with the file's GP value on reading, for convenience, as with the
|
||||
GPDISP_LO16 reloc.
|
||||
|
||||
The LITUSE reloc, on the instruction using the loaded address, gives
|
||||
information to the linker that it might be able to use to optimize
|
||||
away some literal section references. The symbol is ignored (read
|
||||
as the absolute section symbol), and the "addend" indicates the type
|
||||
of instruction using the register:
|
||||
1 - "memory" fmt insn
|
||||
2 - byte-manipulation (byte offset reg)
|
||||
3 - jsr (target of branch)
|
||||
|
||||
The GNU linker currently doesn't do any of this optimizing. */
|
||||
BFD_RELOC_ALPHA_LITERAL,
|
||||
BFD_RELOC_ALPHA_LITUSE,
|
||||
|
||||
/* 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. */
|
||||
BFD_RELOC_ALPHA_HINT,
|
||||
|
||||
/* Bits 27..2 of the relocation address shifted right 2 bits;
|
||||
simple reloc otherwise. */
|
||||
BFD_RELOC_MIPS_JMP,
|
||||
|
||||
/* signed 16-bit pc-relative, shifted right 2 bits (e.g. for MIPS) */
|
||||
BFD_RELOC_16_PCREL_S2,
|
||||
|
||||
/* High 16 bits of 32-bit value; simple reloc. */
|
||||
BFD_RELOC_HI16,
|
||||
/* High 16 bits of 32-bit value but the low 16 bits will be sign
|
||||
|
@ -1348,8 +1415,8 @@ typedef enum bfd_reloc_code_real
|
|||
/* Low 16 bits. */
|
||||
BFD_RELOC_LO16,
|
||||
|
||||
/* 16 bit relocation relative to the global pointer. */
|
||||
BFD_RELOC_MIPS_GPREL,
|
||||
/* relocation relative to the global pointer. */
|
||||
#define BFD_RELOC_MIPS_GPREL BFD_RELOC_GPREL16
|
||||
|
||||
/* Relocation against a MIPS literal section. */
|
||||
BFD_RELOC_MIPS_LITERAL,
|
||||
|
@ -1357,7 +1424,7 @@ typedef enum bfd_reloc_code_real
|
|||
/* MIPS ELF relocations. */
|
||||
BFD_RELOC_MIPS_GOT16,
|
||||
BFD_RELOC_MIPS_CALL16,
|
||||
BFD_RELOC_MIPS_GPREL32,
|
||||
#define BFD_RELOC_MIPS_GPREL32 BFD_RELOC_GPREL32
|
||||
|
||||
/* These are, so far, specific to HPPA processors. I'm not sure that some
|
||||
don't duplicate other reloc types, such as BFD_RELOC_32 and _32_PCREL.
|
||||
|
|
Loading…
Reference in New Issue