This is the mail archive of the
binutils@sources.redhat.com
mailing list for the binutils project.
alpha elf reloc fixes, part 2
- To: binutils at sources dot redhat dot com
- Subject: alpha elf reloc fixes, part 2
- From: Richard Henderson <rth at redhat dot com>
- Date: Tue, 4 Sep 2001 20:04:18 -0700
This does a couple of things:
* Remove cruft associated with broken user relocation patch.
* Remove ECOFF relocations from ELF that were never implemented,
and that I never plan on implementing.
* Rename and implement one ECOFF relocation that I do like (GPREL16).
* Compress the opcodes table a tad.
r~
bfd/
* elf64-alpha.c (SKIP_HOWTO): New.
(elf64_alpha_howto_table): Use it to remove dead ECOFF relocs.
Fix sizes of 16-bit mem format relocs.
(elf64_alpha_reloc_map): Update to match.
(elf64_alpha_relax_with_lituse): Use GPREL16 as appropriate.
(elf64_alpha_relax_without_lituse): Likewise.
(elf64_alpha_check_relocs): Handle GPREL16.
(elf64_alpha_relocate_section): Likewise.
* reloc.c (BFD_RELOC_ALPHA_USER_*): Remove.
(BFD_RELOC_ALPHA_GPREL_HI16, BFD_RELOC_ALPHA_GPREL_LO16): New.
* bfd-in2.h, libbfd.h: Rebuild.
include/elf/
* alpha.h (R_ALPHA_OP*, R_ALPHA_IMMED*, R_ALPHA_GPVALUE): Remove.
(R_ALPHA_GPREL16): Rename from R_ALPHA_IMMED_GP_16.
include/opcode/
* alpha.h (struct alpha_operand): Pack elements into bitfields.
Index: bfd/elf64-alpha.c
===================================================================
RCS file: /cvs/src/src/bfd/elf64-alpha.c,v
retrieving revision 1.33
diff -c -p -d -r1.33 elf64-alpha.c
*** bfd/elf64-alpha.c 2001/08/31 19:20:12 1.33
--- bfd/elf64-alpha.c 2001/09/05 02:50:31
*************** elf64_alpha_object_p (abfd)
*** 399,404 ****
--- 399,407 ----
from smaller values. Start with zero, widen, *then* decrement. */
#define MINUS_ONE (((bfd_vma)0) - 1)
+ #define SKIP_HOWTO(N) \
+ HOWTO(N, 0, 0, 0, 0, 0, 0, elf64_alpha_reloc_bad, 0, 0, 0, 0, 0)
+
static reloc_howto_type elf64_alpha_howto_table[] =
{
HOWTO (R_ALPHA_NONE, /* type */
*************** static reloc_howto_type elf64_alpha_howt
*** 465,471 ****
/* Used for an instruction that refers to memory off the GP register. */
HOWTO (R_ALPHA_LITERAL, /* type */
0, /* rightshift */
! 2, /* size (0 = byte, 1 = short, 2 = long) */
16, /* bitsize */
false, /* pc_relative */
0, /* bitpos */
--- 468,474 ----
/* Used for an instruction that refers to memory off the GP register. */
HOWTO (R_ALPHA_LITERAL, /* type */
0, /* rightshift */
! 1, /* size (0 = byte, 1 = short, 2 = long) */
16, /* bitsize */
false, /* pc_relative */
0, /* bitpos */
*************** static reloc_howto_type elf64_alpha_howt
*** 486,492 ****
This does not actually do any relocation. */
HOWTO (R_ALPHA_LITUSE, /* type */
0, /* rightshift */
! 2, /* size (0 = byte, 1 = short, 2 = long) */
32, /* bitsize */
false, /* pc_relative */
0, /* bitpos */
--- 489,495 ----
This does not actually do any relocation. */
HOWTO (R_ALPHA_LITUSE, /* type */
0, /* rightshift */
! 1, /* size (0 = byte, 1 = short, 2 = long) */
32, /* bitsize */
false, /* pc_relative */
0, /* bitpos */
*************** static reloc_howto_type elf64_alpha_howt
*** 546,552 ****
/* A hint for a jump to a register. */
HOWTO (R_ALPHA_HINT, /* type */
2, /* rightshift */
! 2, /* size (0 = byte, 1 = short, 2 = long) */
14, /* bitsize */
true, /* pc_relative */
0, /* bitpos */
--- 549,555 ----
/* A hint for a jump to a register. */
HOWTO (R_ALPHA_HINT, /* type */
2, /* rightshift */
! 1, /* size (0 = byte, 1 = short, 2 = long) */
14, /* bitsize */
true, /* pc_relative */
0, /* bitpos */
*************** static reloc_howto_type elf64_alpha_howt
*** 602,701 ****
MINUS_ONE, /* src_mask */
MINUS_ONE, /* dst_mask */
true), /* pcrel_offset */
-
- /* Push a value on the reloc evaluation stack. */
- /* Not implemented -- it's dumb. */
- HOWTO (R_ALPHA_OP_PUSH, /* type */
- 0, /* rightshift */
- 0, /* size (0 = byte, 1 = short, 2 = long) */
- 0, /* bitsize */
- false, /* pc_relative */
- 0, /* bitpos */
- complain_overflow_dont, /* complain_on_overflow */
- elf64_alpha_reloc_bad, /* special_function */
- "OP_PUSH", /* name */
- false, /* partial_inplace */
- 0, /* src_mask */
- 0, /* dst_mask */
- false), /* pcrel_offset */
-
- /* Store the value from the stack at the given address. Store it in
- a bitfield of size r_size starting at bit position r_offset. */
- /* Not implemented -- it's dumb. */
- HOWTO (R_ALPHA_OP_STORE, /* type */
- 0, /* rightshift */
- 4, /* size (0 = byte, 1 = short, 2 = long) */
- 64, /* bitsize */
- false, /* pc_relative */
- 0, /* bitpos */
- complain_overflow_dont, /* complain_on_overflow */
- elf64_alpha_reloc_bad, /* special_function */
- "OP_STORE", /* name */
- false, /* partial_inplace */
- 0, /* src_mask */
- MINUS_ONE, /* dst_mask */
- false), /* pcrel_offset */
-
- /* Subtract the reloc address from the value on the top of the
- relocation stack. */
- /* Not implemented -- it's dumb. */
- HOWTO (R_ALPHA_OP_PSUB, /* type */
- 0, /* rightshift */
- 0, /* size (0 = byte, 1 = short, 2 = long) */
- 0, /* bitsize */
- false, /* pc_relative */
- 0, /* bitpos */
- complain_overflow_dont, /* complain_on_overflow */
- elf64_alpha_reloc_bad, /* special_function */
- "OP_PSUB", /* name */
- false, /* partial_inplace */
- 0, /* src_mask */
- 0, /* dst_mask */
- false), /* pcrel_offset */
-
- /* Shift the value on the top of the relocation stack right by the
- given value. */
- /* Not implemented -- it's dumb. */
- HOWTO (R_ALPHA_OP_PRSHIFT, /* type */
- 0, /* rightshift */
- 0, /* size (0 = byte, 1 = short, 2 = long) */
- 0, /* bitsize */
- false, /* pc_relative */
- 0, /* bitpos */
- complain_overflow_dont, /* complain_on_overflow */
- elf64_alpha_reloc_bad, /* special_function */
- "OP_PRSHIFT", /* name */
- false, /* partial_inplace */
- 0, /* src_mask */
- 0, /* dst_mask */
- false), /* pcrel_offset */
! /* Change the value of GP used by +r_addend until the next GPVALUE or the
! end of the input bfd. */
! /* Not implemented -- it's dumb. */
! HOWTO (R_ALPHA_GPVALUE,
! 0, /* rightshift */
! 0, /* size (0 = byte, 1 = short, 2 = long) */
! 0, /* bitsize */
! false, /* pc_relative */
! 0, /* bitpos */
! complain_overflow_dont, /* complain_on_overflow */
! elf64_alpha_reloc_bad, /* special_function */
! "GPVALUE", /* name */
! false, /* partial_inplace */
! 0, /* src_mask */
! 0, /* dst_mask */
! false), /* pcrel_offset */
/* The high 16 bits of the displacement from GP to the target. */
HOWTO (R_ALPHA_GPRELHIGH,
0, /* rightshift */
! 2, /* size (0 = byte, 1 = short, 2 = long) */
16, /* bitsize */
false, /* pc_relative */
0, /* bitpos */
complain_overflow_signed, /* complain_on_overflow */
! elf64_alpha_reloc_bad, /* special_function */
"GPRELHIGH", /* name */
false, /* partial_inplace */
0xffff, /* src_mask */
--- 605,627 ----
MINUS_ONE, /* src_mask */
MINUS_ONE, /* dst_mask */
true), /* pcrel_offset */
! /* Skip 12 - 16; deprecated ECOFF relocs. */
! SKIP_HOWTO (12),
! SKIP_HOWTO (13),
! SKIP_HOWTO (14),
! SKIP_HOWTO (15),
! SKIP_HOWTO (16),
/* The high 16 bits of the displacement from GP to the target. */
HOWTO (R_ALPHA_GPRELHIGH,
0, /* rightshift */
! 1, /* size (0 = byte, 1 = short, 2 = long) */
16, /* bitsize */
false, /* pc_relative */
0, /* bitpos */
complain_overflow_signed, /* complain_on_overflow */
! 0, /* special_function */
"GPRELHIGH", /* name */
false, /* partial_inplace */
0xffff, /* src_mask */
*************** static reloc_howto_type elf64_alpha_howt
*** 705,716 ****
/* The low 16 bits of the displacement from GP to the target. */
HOWTO (R_ALPHA_GPRELLOW,
0, /* rightshift */
! 2, /* size (0 = byte, 1 = short, 2 = long) */
16, /* bitsize */
false, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
! elf64_alpha_reloc_bad, /* special_function */
"GPRELLOW", /* name */
false, /* partial_inplace */
0xffff, /* src_mask */
--- 631,642 ----
/* The low 16 bits of the displacement from GP to the target. */
HOWTO (R_ALPHA_GPRELLOW,
0, /* rightshift */
! 1, /* size (0 = byte, 1 = short, 2 = long) */
16, /* bitsize */
false, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
! 0, /* special_function */
"GPRELLOW", /* name */
false, /* partial_inplace */
0xffff, /* src_mask */
*************** static reloc_howto_type elf64_alpha_howt
*** 718,806 ****
false), /* pcrel_offset */
/* A 16-bit displacement from the GP to the target. */
! /* XXX: Not implemented. */
! HOWTO (R_ALPHA_IMMED_GP_16,
0, /* rightshift */
! 2, /* size (0 = byte, 1 = short, 2 = long) */
16, /* bitsize */
false, /* pc_relative */
0, /* bitpos */
complain_overflow_signed, /* complain_on_overflow */
0, /* special_function */
! "IMMED_GP_16", /* name */
false, /* partial_inplace */
0xffff, /* src_mask */
0xffff, /* dst_mask */
false), /* pcrel_offset */
! /* The high bits of a 32-bit displacement from the GP to the target; the
! low bits are supplied in the subsequent R_ALPHA_IMMED_LO32 relocs. */
! /* XXX: Not implemented. */
! HOWTO (R_ALPHA_IMMED_GP_HI32,
! 0, /* rightshift */
! 0, /* size (0 = byte, 1 = short, 2 = long) */
! 0, /* bitsize */
! false, /* pc_relative */
! 0, /* bitpos */
! complain_overflow_dont, /* complain_on_overflow */
! elf64_alpha_reloc_bad, /* special_function */
! "IMMED_GP_HI32", /* name */
! false, /* partial_inplace */
! 0, /* src_mask */
! 0, /* dst_mask */
! false), /* pcrel_offset */
!
! /* The high bits of a 32-bit displacement to the starting address of the
! current section (the relocation target is ignored); the low bits are
! supplied in the subsequent R_ALPHA_IMMED_LO32 relocs. */
! /* XXX: Not implemented. */
! HOWTO (R_ALPHA_IMMED_SCN_HI32,
! 0, /* rightshift */
! 0, /* size (0 = byte, 1 = short, 2 = long) */
! 0, /* bitsize */
! false, /* pc_relative */
! 0, /* bitpos */
! complain_overflow_dont, /* complain_on_overflow */
! elf64_alpha_reloc_bad, /* special_function */
! "IMMED_SCN_HI32", /* name */
! false, /* partial_inplace */
! 0, /* src_mask */
! 0, /* dst_mask */
! false), /* pcrel_offset */
!
! /* The high bits of a 32-bit displacement from the previous br, bsr, jsr
! or jmp insn (as tagged by a BRADDR or HINT reloc) to the target; the
! low bits are supplied by subsequent R_ALPHA_IMMED_LO32 relocs. */
! /* XXX: Not implemented. */
! HOWTO (R_ALPHA_IMMED_BR_HI32,
! 0, /* rightshift */
! 0, /* size (0 = byte, 1 = short, 2 = long) */
! 0, /* bitsize */
! false, /* pc_relative */
! 0, /* bitpos */
! complain_overflow_dont, /* complain_on_overflow */
! elf64_alpha_reloc_bad, /* special_function */
! "IMMED_BR_HI32", /* name */
! false, /* partial_inplace */
! 0, /* src_mask */
! 0, /* dst_mask */
! false), /* pcrel_offset */
!
! /* The low 16 bits of a displacement calculated in a previous HI32 reloc. */
! /* XXX: Not implemented. */
! HOWTO (R_ALPHA_IMMED_LO32,
! 0, /* rightshift */
! 0, /* size (0 = byte, 1 = short, 2 = long) */
! 0, /* bitsize */
! false, /* pc_relative */
! 0, /* bitpos */
! complain_overflow_dont, /* complain_on_overflow */
! elf64_alpha_reloc_bad, /* special_function */
! "IMMED_LO32", /* name */
! false, /* partial_inplace */
! 0, /* src_mask */
! 0, /* dst_mask */
! false), /* pcrel_offset */
/* Misc ELF relocations. */
--- 644,668 ----
false), /* pcrel_offset */
/* A 16-bit displacement from the GP to the target. */
! HOWTO (R_ALPHA_GPREL16,
0, /* rightshift */
! 1, /* size (0 = byte, 1 = short, 2 = long) */
16, /* bitsize */
false, /* pc_relative */
0, /* bitpos */
complain_overflow_signed, /* complain_on_overflow */
0, /* special_function */
! "GPREL16", /* name */
false, /* partial_inplace */
0xffff, /* src_mask */
0xffff, /* dst_mask */
false), /* pcrel_offset */
! /* Skip 20 - 23; deprecated ECOFF relocs. */
! SKIP_HOWTO (20),
! SKIP_HOWTO (21),
! SKIP_HOWTO (22),
! SKIP_HOWTO (23),
/* Misc ELF relocations. */
*************** struct elf_reloc_map
*** 1003,1032 ****
static const struct elf_reloc_map elf64_alpha_reloc_map[] =
{
! {BFD_RELOC_NONE, R_ALPHA_NONE},
! {BFD_RELOC_32, R_ALPHA_REFLONG},
! {BFD_RELOC_64, R_ALPHA_REFQUAD},
! {BFD_RELOC_CTOR, R_ALPHA_REFQUAD},
! {BFD_RELOC_GPREL32, R_ALPHA_GPREL32},
! {BFD_RELOC_ALPHA_ELF_LITERAL, R_ALPHA_LITERAL},
! {BFD_RELOC_ALPHA_LITUSE, R_ALPHA_LITUSE},
! {BFD_RELOC_ALPHA_GPDISP, R_ALPHA_GPDISP},
! {BFD_RELOC_23_PCREL_S2, R_ALPHA_BRADDR},
! {BFD_RELOC_ALPHA_HINT, R_ALPHA_HINT},
! {BFD_RELOC_16_PCREL, R_ALPHA_SREL16},
! {BFD_RELOC_32_PCREL, R_ALPHA_SREL32},
! {BFD_RELOC_64_PCREL, R_ALPHA_SREL64},
!
! /* 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, R_ALPHA_LITERAL},
! {BFD_RELOC_ALPHA_USER_LITUSE_BASE, R_ALPHA_LITUSE},
! {BFD_RELOC_ALPHA_USER_LITUSE_BYTOFF, R_ALPHA_LITUSE},
! {BFD_RELOC_ALPHA_USER_LITUSE_JSR, R_ALPHA_LITUSE},
! {BFD_RELOC_ALPHA_USER_GPDISP, R_ALPHA_GPDISP},
! {BFD_RELOC_ALPHA_USER_GPRELHIGH, R_ALPHA_GPRELHIGH},
! {BFD_RELOC_ALPHA_USER_GPRELLOW, R_ALPHA_GPRELLOW},
};
/* Given a BFD reloc type, return a HOWTO structure. */
--- 865,886 ----
static const struct elf_reloc_map elf64_alpha_reloc_map[] =
{
! {BFD_RELOC_NONE, R_ALPHA_NONE},
! {BFD_RELOC_32, R_ALPHA_REFLONG},
! {BFD_RELOC_64, R_ALPHA_REFQUAD},
! {BFD_RELOC_CTOR, R_ALPHA_REFQUAD},
! {BFD_RELOC_GPREL32, R_ALPHA_GPREL32},
! {BFD_RELOC_ALPHA_ELF_LITERAL, R_ALPHA_LITERAL},
! {BFD_RELOC_ALPHA_LITUSE, R_ALPHA_LITUSE},
! {BFD_RELOC_ALPHA_GPDISP, R_ALPHA_GPDISP},
! {BFD_RELOC_23_PCREL_S2, R_ALPHA_BRADDR},
! {BFD_RELOC_ALPHA_HINT, R_ALPHA_HINT},
! {BFD_RELOC_16_PCREL, R_ALPHA_SREL16},
! {BFD_RELOC_32_PCREL, R_ALPHA_SREL32},
! {BFD_RELOC_64_PCREL, R_ALPHA_SREL64},
! {BFD_RELOC_ALPHA_GPREL_HI16, R_ALPHA_GPRELHIGH},
! {BFD_RELOC_ALPHA_GPREL_LO16, R_ALPHA_GPRELLOW},
! {BFD_RELOC_GPREL16, R_ALPHA_GPREL16},
};
/* Given a BFD reloc type, return a HOWTO structure. */
*************** elf64_alpha_relax_with_lituse (info, sym
*** 1205,1211 ****
register from the literal insn. Leave the offset alone. */
insn = (insn & 0xffe0ffff) | (lit_insn & 0x001f0000);
urel->r_info = ELF64_R_INFO (ELF64_R_SYM (irel->r_info),
! R_ALPHA_GPRELLOW);
urel->r_addend = irel->r_addend;
info->changed_relocs = true;
--- 1059,1065 ----
register from the literal insn. Leave the offset alone. */
insn = (insn & 0xffe0ffff) | (lit_insn & 0x001f0000);
urel->r_info = ELF64_R_INFO (ELF64_R_SYM (irel->r_info),
! R_ALPHA_GPREL16);
urel->r_addend = irel->r_addend;
info->changed_relocs = true;
*************** elf64_alpha_relax_without_lituse (info,
*** 1442,1448 ****
bfd_put_32 (info->abfd, insn, info->contents + irel->r_offset);
info->changed_contents = true;
! irel->r_info = ELF64_R_INFO (ELF64_R_SYM (irel->r_info), R_ALPHA_GPRELLOW);
info->changed_relocs = true;
/* Reduce the use count on this got entry by one, possibly
--- 1296,1302 ----
bfd_put_32 (info->abfd, insn, info->contents + irel->r_offset);
info->changed_contents = true;
! irel->r_info = ELF64_R_INFO (ELF64_R_SYM (irel->r_info), R_ALPHA_GPREL16);
info->changed_relocs = true;
/* Reduce the use count on this got entry by one, possibly
*************** elf64_alpha_check_relocs (abfd, info, se
*** 2539,2544 ****
--- 2393,2399 ----
/* FALLTHRU */
case R_ALPHA_GPDISP:
+ case R_ALPHA_GPREL16:
case R_ALPHA_GPREL32:
case R_ALPHA_GPRELHIGH:
case R_ALPHA_GPRELLOW:
*************** elf64_alpha_relocate_section (output_bfd
*** 3560,3572 ****
}
break;
- case R_ALPHA_OP_PUSH:
- case R_ALPHA_OP_STORE:
- case R_ALPHA_OP_PSUB:
- case R_ALPHA_OP_PRSHIFT:
- /* We hate these silly beasts. */
- abort ();
-
case R_ALPHA_LITERAL:
{
struct alpha_elf_got_entry *gotent;
--- 3415,3420 ----
*************** elf64_alpha_relocate_section (output_bfd
*** 3637,3642 ****
--- 3485,3491 ----
/* overflow handled by _bfd_final_link_relocate */
goto default_reloc;
+ case R_ALPHA_GPREL16:
case R_ALPHA_GPREL32:
case R_ALPHA_GPRELLOW:
BFD_ASSERT(gp != 0);
Index: bfd/reloc.c
===================================================================
RCS file: /cvs/src/src/bfd/reloc.c,v
retrieving revision 1.45
diff -c -p -d -r1.45 reloc.c
*** bfd/reloc.c 2001/08/29 01:33:52 1.45
--- bfd/reloc.c 2001/09/05 02:50:31
*************** ENUMDOC
*** 1931,1958 ****
2 - byte-manipulation (byte offset reg)
3 - jsr (target of branch)
- The GNU linker currently doesn't do any of this optimizing.
-
ENUM
- BFD_RELOC_ALPHA_USER_LITERAL
- ENUMX
- BFD_RELOC_ALPHA_USER_LITUSE_BASE
- ENUMX
- BFD_RELOC_ALPHA_USER_LITUSE_BYTOFF
- ENUMX
- BFD_RELOC_ALPHA_USER_LITUSE_JSR
- ENUMX
- BFD_RELOC_ALPHA_USER_GPDISP
- ENUMX
- BFD_RELOC_ALPHA_USER_GPRELHIGH
- ENUMX
- BFD_RELOC_ALPHA_USER_GPRELLOW
- ENUMDOC
- 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.
-
- ENUM
BFD_RELOC_ALPHA_HINT
ENUMDOC
The HINT relocation indicates a value that should be filled into the
--- 1931,1937 ----
*************** ENUM
*** 1970,1975 ****
--- 1949,1962 ----
ENUMDOC
The CODEADDR relocation outputs a STO_CA in the object file,
which is filled by the linker.
+
+ ENUM
+ BFD_RELOC_ALPHA_GPREL_HI16
+ ENUMX
+ BFD_RELOC_ALPHA_GPREL_LO16
+ ENUMDOC
+ The GPREL_HI/LO relocations together form a 32-bit offset from the
+ GP register.
ENUM
BFD_RELOC_MIPS_JMP
Index: include/elf/alpha.h
===================================================================
RCS file: /cvs/src/src/include/elf/alpha.h,v
retrieving revision 1.4
diff -c -p -d -r1.4 alpha.h
*** include/elf/alpha.h 2001/03/14 02:27:44 1.4
--- include/elf/alpha.h 2001/09/05 02:50:31
*************** START_RELOC_NUMBERS (elf_alpha_reloc_typ
*** 80,102 ****
RELOC_NUMBER (R_ALPHA_SREL32, 10) /* PC relative 32 bit */
RELOC_NUMBER (R_ALPHA_SREL64, 11) /* PC relative 64 bit */
! /* Inherited these from ECOFF, but they are not particularly useful
! and are depreciated. And not implemented in the BFD, btw. */
! RELOC_NUMBER (R_ALPHA_OP_PUSH, 12) /* OP stack push */
! RELOC_NUMBER (R_ALPHA_OP_STORE, 13) /* OP stack pop and store */
! RELOC_NUMBER (R_ALPHA_OP_PSUB, 14) /* OP stack subtract */
! RELOC_NUMBER (R_ALPHA_OP_PRSHIFT, 15) /* OP stack right shift */
! RELOC_NUMBER (R_ALPHA_GPVALUE, 16)
! RELOC_NUMBER (R_ALPHA_GPRELHIGH, 17)
! RELOC_NUMBER (R_ALPHA_GPRELLOW, 18)
! RELOC_NUMBER (R_ALPHA_IMMED_GP_16, 19)
! RELOC_NUMBER (R_ALPHA_IMMED_GP_HI32, 20)
! RELOC_NUMBER (R_ALPHA_IMMED_SCN_HI32, 21)
! RELOC_NUMBER (R_ALPHA_IMMED_BR_HI32, 22)
! RELOC_NUMBER (R_ALPHA_IMMED_LO32, 23)
! /* These relocations are specific to shared libraries. */
RELOC_NUMBER (R_ALPHA_COPY, 24) /* Copy symbol at runtime */
RELOC_NUMBER (R_ALPHA_GLOB_DAT, 25) /* Create GOT entry */
RELOC_NUMBER (R_ALPHA_JMP_SLOT, 26) /* Create PLT entry */
--- 80,94 ----
RELOC_NUMBER (R_ALPHA_SREL32, 10) /* PC relative 32 bit */
RELOC_NUMBER (R_ALPHA_SREL64, 11) /* PC relative 64 bit */
! /* Skip 12 - 16; deprecated ECOFF relocs. */
! RELOC_NUMBER (R_ALPHA_GPRELHIGH, 17) /* GP relative 32 bit, high 16 bits */
! RELOC_NUMBER (R_ALPHA_GPRELLOW, 18) /* GP relative 32 bit, low 16 bits */
! RELOC_NUMBER (R_ALPHA_GPREL16, 19) /* GP relative 16 bit */
! /* Skip 20 - 23; deprecated ECOFF relocs. */
!
! /* These relocations are specific to shared libraries. */
RELOC_NUMBER (R_ALPHA_COPY, 24) /* Copy symbol at runtime */
RELOC_NUMBER (R_ALPHA_GLOB_DAT, 25) /* Create GOT entry */
RELOC_NUMBER (R_ALPHA_JMP_SLOT, 26) /* Create PLT entry */
Index: include/opcode/alpha.h
===================================================================
RCS file: /cvs/src/src/include/opcode/alpha.h,v
retrieving revision 1.2
diff -c -p -d -r1.2 alpha.h
*** include/opcode/alpha.h 1999/10/18 22:29:14 1.2
--- include/opcode/alpha.h 2001/09/05 02:50:31
*************** extern const unsigned alpha_num_opcodes;
*** 81,96 ****
struct alpha_operand
{
/* The number of bits in the operand. */
! int bits;
/* How far the operand is left shifted in the instruction. */
! int shift;
/* The default relocation type for this operand. */
! int default_reloc;
/* One bit syntax flags. */
! unsigned flags;
/* Insertion function. This is used by the assembler. To insert an
operand value into an instruction, check this field.
--- 81,96 ----
struct alpha_operand
{
/* The number of bits in the operand. */
! unsigned int bits : 5;
/* How far the operand is left shifted in the instruction. */
! unsigned int shift : 5;
/* The default relocation type for this operand. */
! signed int default_reloc : 16;
/* One bit syntax flags. */
! unsigned int flags : 16;
/* Insertion function. This is used by the assembler. To insert an
operand value into an instruction, check this field.