This is the mail archive of the binutils@sources.redhat.com mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

alpha elf reloc fixes, part 2


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.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]