]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
* elf32-sparc.c (_bfd_sparc_elf_howto_table): R_SPARC_GLOB_JMP
authorDavid Edelsohn <dje.gcc@gmail.com>
Tue, 30 Sep 1997 21:33:19 +0000 (21:33 +0000)
committerDavid Edelsohn <dje.gcc@gmail.com>
Tue, 30 Sep 1997 21:33:19 +0000 (21:33 +0000)
renamed to R_SPARC_UNUSED_42.
(sparc_reloc_map): Delete R_SPARC_GLOB_JMP entry.
* elf64-sparc.c (_bfd_sparc_elf_howto_table): R_SPARC_GLOB_JMP
renamed to R_SPARC_UNUSED_42.
(sparc_reloc_map): Delete R_SPARC_GLOB_JMP entry.
* reloc.c (BFD_RELOC_SPARC_GLOB_JMP): Delete.
* bfd-in2.h: Regenerated.
* libbfd.h: Regenerated.

bfd/bfd-in2.h
bfd/elf32-sparc.c
bfd/elf64-sparc.c
bfd/libbfd.h
bfd/reloc.c

index cf4caec2ec262645b80d242ebff8c9da38ba642d..6171ce34c08256991c34af862561728fbdb45e2c 100644 (file)
@@ -1245,10 +1245,8 @@ enum bfd_architecture
 #define bfd_mach_v850          0
   /* start-sanitize-v850e */
 #define bfd_mach_v850e         'E'
-  /* end-sanitize-v850e */
-  /* start-sanitize-v850eq */
 #define bfd_mach_v850eq        'Q'
-  /* end-sanitize-v850eq */
+  /* end-sanitize-v850e */
   bfd_arch_arc,        /* Argonaut RISC Core */
 #define bfd_mach_arc_base 0
   bfd_arch_m32r,       /* Mitsubishi M32R/D */
@@ -1629,7 +1627,6 @@ relocation types already defined. */
   BFD_RELOC_SPARC_PC_LM22,
   BFD_RELOC_SPARC_WDISP16,
   BFD_RELOC_SPARC_WDISP19,
-  BFD_RELOC_SPARC_GLOB_JMP,
   BFD_RELOC_SPARC_7,
   BFD_RELOC_SPARC_6,
   BFD_RELOC_SPARC_5,
index 4f29eeb87aa72c6af3ea22db09989bdee8a4a1b7..3ac29287c416f6ece98a11870db6361da1aeb0b6 100644 (file)
@@ -126,7 +126,7 @@ reloc_howto_type _bfd_sparc_elf_howto_table[] =
 #endif
   HOWTO(R_SPARC_WDISP16,   2,2,16,true, 0,complain_overflow_signed,  sparc_elf_wdisp16_reloc,"R_SPARC_WDISP16", false,0,0x00000000,true),
   HOWTO(R_SPARC_WDISP19,   2,2,22,true, 0,complain_overflow_signed,  bfd_elf_generic_reloc,  "R_SPARC_WDISP19", false,0,0x0007ffff,true),
-  HOWTO(R_SPARC_GLOB_JMP,  0,0,00,false,0,complain_overflow_dont,    bfd_elf_generic_reloc,  "R_SPARC_GLOB_JMP",false,0,0x00000000,true),
+  HOWTO(R_SPARC_UNUSED_42, 0,0, 0,false,0,complain_overflow_dont,    bfd_elf_generic_reloc,  "R_SPARC_UNUSED_42",false,0,0x00000000,true),
   HOWTO(R_SPARC_7,         0,2, 7,false,0,complain_overflow_bitfield,bfd_elf_generic_reloc,  "R_SPARC_7",       false,0,0x0000007f,true),
   HOWTO(R_SPARC_5,         0,2, 5,false,0,complain_overflow_bitfield,bfd_elf_generic_reloc,  "R_SPARC_5",       false,0,0x0000001f,true),
   HOWTO(R_SPARC_6,         0,2, 6,false,0,complain_overflow_bitfield,bfd_elf_generic_reloc,  "R_SPARC_6",       false,0,0x0000003f,true),
@@ -178,7 +178,6 @@ static CONST struct elf_reloc_map sparc_reloc_map[] =
   {BFD_RELOC_SPARC_PC_LM22, R_SPARC_PC_LM22},
   {BFD_RELOC_SPARC_WDISP16, R_SPARC_WDISP16},
   {BFD_RELOC_SPARC_WDISP19, R_SPARC_WDISP19},
-  {BFD_RELOC_SPARC_GLOB_JMP, R_SPARC_GLOB_JMP},
   {BFD_RELOC_SPARC_7, R_SPARC_7},
   {BFD_RELOC_SPARC_5, R_SPARC_5},
   {BFD_RELOC_SPARC_6, R_SPARC_6},
@@ -819,7 +818,8 @@ elf32_sparc_size_dynamic_sections (output_bfd, info)
                                              s->output_section);
              target = bfd_get_section_by_name (output_bfd, outname + 5);
              if (target != NULL
-                 && (target->flags & SEC_READONLY) != 0)
+                 && (target->flags & SEC_READONLY) != 0
+                 && (target->flags & SEC_ALLOC) != 0)
                reltext = true;
 
              if (strcmp (name, ".rela.plt") == 0)
index 8508fdabaee33159ffcce22fc3d7c84818f66e40..6b809347e1de446def5625f80625b2129d0d9a1c 100644 (file)
@@ -1,5 +1,5 @@
 /* SPARC-specific support for 64-bit ELF
-   Copyright 1993, 1995 Free Software Foundation, Inc.
+   Copyright (C) 1993, 1995, 1996, 1997 Free Software Foundation, Inc.
 
 This file is part of BFD, the Binary File Descriptor library.
 
@@ -25,119 +25,165 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 #include "libbfd.h"
 #include "elf-bfd.h"
 
-static bfd_reloc_status_type sparc64_elf_wdisp16_reloc
-  PARAMS ((bfd *, arelent *, asymbol *, PTR, asection *, bfd *, char **));
+#define SPARC64_OLD_RELOCS
+#include "elf/sparc.h"
+
+static reloc_howto_type *sparc64_elf_reloc_type_lookup
+  PARAMS ((bfd *, bfd_reloc_code_real_type));
+static void sparc64_elf_info_to_howto
+  PARAMS ((bfd *, arelent *, Elf_Internal_Rela *));
+
 static boolean sparc64_elf_relocate_section
   PARAMS ((bfd *, struct bfd_link_info *, bfd *, asection *, bfd_byte *,
           Elf_Internal_Rela *, Elf_Internal_Sym *, asection **));
 static boolean sparc64_elf_object_p PARAMS ((bfd *));
 
-enum reloc_type
-  {
-    R_SPARC_NONE = 0,
-    R_SPARC_8, R_SPARC_16, R_SPARC_32,
-    R_SPARC_DISP8, R_SPARC_DISP16, R_SPARC_DISP32,
-    R_SPARC_WDISP30, R_SPARC_WDISP22,
-    R_SPARC_HI22, R_SPARC_22,
-    R_SPARC_13, R_SPARC_LO10,
-    R_SPARC_GOT10, R_SPARC_GOT13, R_SPARC_GOT22,
-    R_SPARC_PC10, R_SPARC_PC22,
-    R_SPARC_WPLT30,
-    R_SPARC_COPY,
-    R_SPARC_GLOB_DAT, R_SPARC_JMP_SLOT,
-    R_SPARC_RELATIVE,
-    R_SPARC_UA32,
-
-    /* v9 relocs */
-    R_SPARC_10, R_SPARC_11, R_SPARC_64,
-    R_SPARC_OLO10, R_SPARC_HH22, R_SPARC_HM10, R_SPARC_LM22,
-    R_SPARC_PC_HH22, R_SPARC_PC_HM10, R_SPARC_PC_LM22,
-    R_SPARC_WDISP16, R_SPARC_WDISP19,
-    R_SPARC_GLOB_JMP, R_SPARC_LO7,
-
-    R_SPARC_max
-  };
-
-#if 0
-static CONST char *CONST reloc_type_names[] =
+/* The howto table and associated functions.
+   ??? Some of the relocation values have changed.  Until we're ready
+   to upgrade, we have our own copy.  At some point a non upward compatible
+   change will be made at which point this table can be deleted and we'll
+   use the one in elf32-sparc.c.  */
+
+static bfd_reloc_status_type sparc_elf_wdisp16_reloc
+  PARAMS ((bfd *, arelent *, asymbol *, PTR, asection *, bfd *, char **));
+
+static reloc_howto_type sparc64_elf_howto_table[] = 
 {
-  "R_SPARC_NONE",
-  "R_SPARC_8", "R_SPARC_16", "R_SPARC_32",
-  "R_SPARC_DISP8", "R_SPARC_DISP16", "R_SPARC_DISP32",
-  "R_SPARC_WDISP30", "R_SPARC_WDISP22",
-  "R_SPARC_HI22", "R_SPARC_22",
-  "R_SPARC_13", "R_SPARC_LO10",
-  "R_SPARC_GOT10", "R_SPARC_GOT13", "R_SPARC_GOT22",
-  "R_SPARC_PC10", "R_SPARC_PC22",
-  "R_SPARC_WPLT30",
-  "R_SPARC_COPY",
-  "R_SPARC_GLOB_DAT", "R_SPARC_JMP_SLOT",
-  "R_SPARC_RELATIVE",
-  "R_SPARC_UA32",
-
-  "R_SPARC_10", "R_SPARC_11", "R_SPARC_64",
-  "R_SPARC_OLO10", "R_SPARC_HH22", "R_SPARC_HM10", "R_SPARC_LM22",
-  "R_SPARC_PC_HH22", "R_SPARC_PC_HM10", "R_SPARC_PC_LM22",
-  "R_SPARC_WDISP16", "R_SPARC_WDISP19",
-  "R_SPARC_GLOB_JMP", "R_SPARC_LO7",
-};
+  HOWTO(R_SPARC_NONE,      0,0, 0,false,0,complain_overflow_dont,    bfd_elf_generic_reloc,  "R_SPARC_NONE",    false,0,0x00000000,true),
+  HOWTO(R_SPARC_8,         0,0, 8,false,0,complain_overflow_bitfield,bfd_elf_generic_reloc,  "R_SPARC_8",       false,0,0x000000ff,true),
+  HOWTO(R_SPARC_16,        0,1,16,false,0,complain_overflow_bitfield,bfd_elf_generic_reloc,  "R_SPARC_16",      false,0,0x0000ffff,true),
+  HOWTO(R_SPARC_32,        0,2,32,false,0,complain_overflow_bitfield,bfd_elf_generic_reloc,  "R_SPARC_32",      false,0,0xffffffff,true),
+  HOWTO(R_SPARC_DISP8,     0,0, 8,true, 0,complain_overflow_signed,  bfd_elf_generic_reloc,  "R_SPARC_DISP8",   false,0,0x000000ff,true),
+  HOWTO(R_SPARC_DISP16,    0,1,16,true, 0,complain_overflow_signed,  bfd_elf_generic_reloc,  "R_SPARC_DISP16",  false,0,0x0000ffff,true),
+  HOWTO(R_SPARC_DISP32,    0,2,32,true, 0,complain_overflow_signed,  bfd_elf_generic_reloc,  "R_SPARC_DISP32",  false,0,0x00ffffff,true),
+  HOWTO(R_SPARC_WDISP30,   2,2,30,true, 0,complain_overflow_signed,  bfd_elf_generic_reloc,  "R_SPARC_WDISP30", false,0,0x3fffffff,true),
+  HOWTO(R_SPARC_WDISP22,   2,2,22,true, 0,complain_overflow_signed,  bfd_elf_generic_reloc,  "R_SPARC_WDISP22", false,0,0x003fffff,true),
+  HOWTO(R_SPARC_HI22,     10,2,22,false,0,complain_overflow_dont,    bfd_elf_generic_reloc,  "R_SPARC_HI22",    false,0,0x003fffff,true),
+  HOWTO(R_SPARC_22,        0,2,22,false,0,complain_overflow_bitfield,bfd_elf_generic_reloc,  "R_SPARC_22",      false,0,0x003fffff,true),
+  HOWTO(R_SPARC_13,        0,2,13,false,0,complain_overflow_bitfield,bfd_elf_generic_reloc,  "R_SPARC_13",      false,0,0x00001fff,true),
+  HOWTO(R_SPARC_LO10,      0,2,10,false,0,complain_overflow_dont,    bfd_elf_generic_reloc,  "R_SPARC_LO10",    false,0,0x000003ff,true),
+  HOWTO(R_SPARC_GOT10,     0,2,10,false,0,complain_overflow_dont,    bfd_elf_generic_reloc,  "R_SPARC_GOT10",   false,0,0x000003ff,true),
+  HOWTO(R_SPARC_GOT13,     0,2,13,false,0,complain_overflow_signed,  bfd_elf_generic_reloc,  "R_SPARC_GOT13",   false,0,0x00001fff,true),
+  HOWTO(R_SPARC_GOT22,    10,2,22,false,0,complain_overflow_dont,    bfd_elf_generic_reloc,  "R_SPARC_GOT22",   false,0,0x003fffff,true),
+  HOWTO(R_SPARC_PC10,      0,2,10,true, 0,complain_overflow_dont,    bfd_elf_generic_reloc,  "R_SPARC_PC10",    false,0,0x000003ff,true),
+  HOWTO(R_SPARC_PC22,     10,2,22,true, 0,complain_overflow_bitfield,bfd_elf_generic_reloc,  "R_SPARC_PC22",    false,0,0x003fffff,true),
+  HOWTO(R_SPARC_WPLT30,    2,2,30,true, 0,complain_overflow_signed,  bfd_elf_generic_reloc,  "R_SPARC_WPLT30",  false,0,0x3fffffff,true),
+  HOWTO(R_SPARC_COPY,      0,0,00,false,0,complain_overflow_dont,    bfd_elf_generic_reloc,  "R_SPARC_COPY",    false,0,0x00000000,true),
+  HOWTO(R_SPARC_GLOB_DAT,  0,0,00,false,0,complain_overflow_dont,    bfd_elf_generic_reloc,  "R_SPARC_GLOB_DAT",false,0,0x00000000,true),
+  HOWTO(R_SPARC_JMP_SLOT,  0,0,00,false,0,complain_overflow_dont,    bfd_elf_generic_reloc,  "R_SPARC_JMP_SLOT",false,0,0x00000000,true),
+  HOWTO(R_SPARC_RELATIVE,  0,0,00,false,0,complain_overflow_dont,    bfd_elf_generic_reloc,  "R_SPARC_RELATIVE",false,0,0x00000000,true),
+  HOWTO(R_SPARC_UA32,      0,0,00,false,0,complain_overflow_dont,    bfd_elf_generic_reloc,  "R_SPARC_UA32",    false,0,0x00000000,true),
+#if 0 /* not used yet */
+  HOWTO(R_SPARC_PLT32,     0,0,00,false,0,complain_overflow_dont,    sparc_elf_notsupported_reloc,  "R_SPARC_PLT32",    false,0,0x00000000,true),
+  HOWTO(R_SPARC_HIPLT22,   0,0,00,false,0,complain_overflow_dont,    sparc_elf_notsupported_reloc,  "R_SPARC_HIPLT22",  false,0,0x00000000,true),
+  HOWTO(R_SPARC_LOPLT10,   0,0,00,false,0,complain_overflow_dont,    sparc_elf_notsupported_reloc,  "R_SPARC_LOPLT10",  false,0,0x00000000,true),
+  HOWTO(R_SPARC_PCPLT32,   0,0,00,false,0,complain_overflow_dont,    sparc_elf_notsupported_reloc,  "R_SPARC_PCPLT32",  false,0,0x00000000,true),
+  HOWTO(R_SPARC_PCPLT22,   0,0,00,false,0,complain_overflow_dont,    sparc_elf_notsupported_reloc,  "R_SPARC_PCPLT22",  false,0,0x00000000,true),
+  HOWTO(R_SPARC_PCPLT10,   0,0,00,false,0,complain_overflow_dont,    sparc_elf_notsupported_reloc,  "R_SPARC_PCPLT10",  false,0,0x00000000,true),
 #endif
+  HOWTO(R_SPARC_10,        0,2,10,false,0,complain_overflow_bitfield,bfd_elf_generic_reloc,  "R_SPARC_10",      false,0,0x000003ff,true),
+  HOWTO(R_SPARC_11,        0,2,11,false,0,complain_overflow_bitfield,bfd_elf_generic_reloc,  "R_SPARC_11",      false,0,0x000007ff,true),
+  HOWTO(R_SPARC_64,        0,4,00,false,0,complain_overflow_bitfield,bfd_elf_generic_reloc,  "R_SPARC_64",      false,0,~ (bfd_vma) 0, true),
+  HOWTO(R_SPARC_OLO10,     0,2,10,false,0,complain_overflow_dont,    bfd_elf_generic_reloc,  "R_SPARC_OLO10",   false,0,0x000003ff,true),
+  HOWTO(R_SPARC_HH22,     42,2,22,false,0,complain_overflow_dont,    bfd_elf_generic_reloc,  "R_SPARC_HH22",    false,0,0x003fffff,true),
+  HOWTO(R_SPARC_HM10,     32,2,10,false,0,complain_overflow_dont,    bfd_elf_generic_reloc,  "R_SPARC_HM10",    false,0,0x000003ff,true),
+  HOWTO(R_SPARC_LM22,     10,2,22,false,0,complain_overflow_dont,    bfd_elf_generic_reloc,  "R_SPARC_LM22",    false,0,0x003fffff,true),
+  HOWTO(R_SPARC_PC_HH22,  42,2,22,true, 0,complain_overflow_dont,    bfd_elf_generic_reloc,  "R_SPARC_HH22",    false,0,0x003fffff,true),
+  HOWTO(R_SPARC_PC_HM10,  32,2,10,true, 0,complain_overflow_dont,    bfd_elf_generic_reloc,  "R_SPARC_HM10",    false,0,0x000003ff,true),
+  HOWTO(R_SPARC_PC_LM22,  10,2,22,true, 0,complain_overflow_dont,    bfd_elf_generic_reloc,  "R_SPARC_LM22",    false,0,0x003fffff,true),
+  HOWTO(R_SPARC_WDISP16,   2,2,16,true, 0,complain_overflow_signed,  sparc_elf_wdisp16_reloc,"R_SPARC_WDISP16", false,0,0x00000000,true),
+  HOWTO(R_SPARC_WDISP19,   2,2,22,true, 0,complain_overflow_signed,  bfd_elf_generic_reloc,  "R_SPARC_WDISP19", false,0,0x0007ffff,true),
+  HOWTO(R_SPARC_UNUSED_42, 0,0, 0,false,0,complain_overflow_dont,    bfd_elf_generic_reloc,  "R_SPARC_UNUSED_42",false,0,0x00000000,true),
+  HOWTO(R_SPARC_7,         0,2, 7,false,0,complain_overflow_bitfield,bfd_elf_generic_reloc,  "R_SPARC_7",       false,0,0x0000007f,true),
+  HOWTO(R_SPARC_5,         0,2, 5,false,0,complain_overflow_bitfield,bfd_elf_generic_reloc,  "R_SPARC_5",       false,0,0x0000001f,true),
+  HOWTO(R_SPARC_6,         0,2, 6,false,0,complain_overflow_bitfield,bfd_elf_generic_reloc,  "R_SPARC_6",       false,0,0x0000003f,true),
+};
 
-extern void abort ();
-#define DIE    ((bfd_reloc_status_type(*)())abort)
+struct elf_reloc_map {
+  unsigned char bfd_reloc_val;
+  unsigned char elf_reloc_val;
+};
 
-static reloc_howto_type elf_sparc_howto_table[] =
+static CONST struct elf_reloc_map sparc_reloc_map[] =
 {
-  HOWTO (R_SPARC_NONE, 0, 0, 0, false, 0, complain_overflow_dont, bfd_elf_generic_reloc, "R_SPARC_NONE", false, 0, 0x00000000, true),
-  HOWTO (R_SPARC_8, 0, 0, 8, false, 0, complain_overflow_bitfield, bfd_elf_generic_reloc, "R_SPARC_8", false, 0, 0x000000ff, true),
-  HOWTO (R_SPARC_16, 0, 1, 16, false, 0, complain_overflow_bitfield, bfd_elf_generic_reloc, "R_SPARC_16", false, 0, 0x0000ffff, true),
-  HOWTO (R_SPARC_32, 0, 2, 32, false, 0, complain_overflow_bitfield, bfd_elf_generic_reloc, "R_SPARC_32", false, 0, 0xffffffff, true),
-  HOWTO (R_SPARC_DISP8, 0, 0, 8, true, 0, complain_overflow_signed, bfd_elf_generic_reloc, "R_SPARC_DISP8", false, 0, 0x000000ff, true),
-  HOWTO (R_SPARC_DISP16, 0, 1, 16, true, 0, complain_overflow_signed, bfd_elf_generic_reloc, "R_SPARC_DISP16", false, 0, 0x0000ffff, true),
-  HOWTO (R_SPARC_DISP32, 0, 2, 32, true, 0, complain_overflow_signed, bfd_elf_generic_reloc, "R_SPARC_DISP32", false, 0, 0x00ffffff, true),
-  HOWTO (R_SPARC_WDISP30, 2, 2, 30, true, 0, complain_overflow_signed, bfd_elf_generic_reloc, "R_SPARC_WDISP30", false, 0, 0x3fffffff, true),
-  HOWTO (R_SPARC_WDISP22, 2, 2, 22, true, 0, complain_overflow_signed, bfd_elf_generic_reloc, "R_SPARC_WDISP22", false, 0, 0x003fffff, true),
-  HOWTO (R_SPARC_HI22, 10, 2, 22, false, 0, complain_overflow_dont, bfd_elf_generic_reloc, "R_SPARC_HI22", false, 0, 0x003fffff, true),
-  HOWTO (R_SPARC_22, 0, 2, 22, false, 0, complain_overflow_bitfield, bfd_elf_generic_reloc, "R_SPARC_22", false, 0, 0x003fffff, true),
-  HOWTO (R_SPARC_13, 0, 2, 13, false, 0, complain_overflow_bitfield, bfd_elf_generic_reloc, "R_SPARC_13", false, 0, 0x00001fff, true),
-  HOWTO (R_SPARC_LO10, 0, 2, 10, false, 0, complain_overflow_dont, bfd_elf_generic_reloc, "R_SPARC_LO10", false, 0, 0x000003ff, true),
-  HOWTO (R_SPARC_GOT10, 0, 2, 10, false, 0, complain_overflow_bitfield, bfd_elf_generic_reloc, "R_SPARC_GOT10", false, 0, 0x000003ff, true),
-  HOWTO (R_SPARC_GOT13, 0, 2, 13, false, 0, complain_overflow_bitfield, bfd_elf_generic_reloc, "R_SPARC_GOT13", false, 0, 0x00001fff, true),
-  HOWTO (R_SPARC_GOT22, 10, 2, 22, false, 0, complain_overflow_bitfield, bfd_elf_generic_reloc, "R_SPARC_GOT22", false, 0, 0x003fffff, true),
-  HOWTO (R_SPARC_PC10, 0, 2, 10, false, 0, complain_overflow_bitfield, bfd_elf_generic_reloc, "R_SPARC_PC10", false, 0, 0x000003ff, true),
-  HOWTO (R_SPARC_PC22, 0, 2, 22, false, 0, complain_overflow_bitfield, bfd_elf_generic_reloc, "R_SPARC_PC22", false, 0, 0x003fffff, true),
-  HOWTO (R_SPARC_WPLT30, 0, 0, 00, false, 0, complain_overflow_dont, bfd_elf_generic_reloc, "R_SPARC_WPLT30", false, 0, 0x00000000, true),
-  HOWTO (R_SPARC_COPY, 0, 0, 00, false, 0, complain_overflow_dont, bfd_elf_generic_reloc, "R_SPARC_COPY", false, 0, 0x00000000, true),
-  HOWTO (R_SPARC_GLOB_DAT, 0, 0, 00, false, 0, complain_overflow_dont, bfd_elf_generic_reloc, "R_SPARC_GLOB_DAT", false, 0, 0x00000000, true),
-  HOWTO (R_SPARC_JMP_SLOT, 0, 0, 00, false, 0, complain_overflow_dont, bfd_elf_generic_reloc, "R_SPARC_JMP_SLOT", false, 0, 0x00000000, true),
-  HOWTO (R_SPARC_RELATIVE, 0, 0, 00, false, 0, complain_overflow_dont, bfd_elf_generic_reloc, "R_SPARC_RELATIVE", false, 0, 0x00000000, true),
-  HOWTO (R_SPARC_UA32, 0, 0, 00, false, 0, complain_overflow_dont, bfd_elf_generic_reloc, "R_SPARC_UA32", false, 0, 0x00000000, true),
-  HOWTO (R_SPARC_10, 0, 2, 10, false, 0, complain_overflow_bitfield, bfd_elf_generic_reloc, "R_SPARC_10", false, 0, 0x000003ff, true),
-  HOWTO (R_SPARC_11, 0, 2, 11, false, 0, complain_overflow_bitfield, bfd_elf_generic_reloc, "R_SPARC_11", false, 0, 0x000007ff, true),
-  HOWTO (R_SPARC_64, 0, 4, 00, false, 0, complain_overflow_bitfield, bfd_elf_generic_reloc, "R_SPARC_64", false, 0, (((bfd_vma) 0xffffffff) << 32) + 0xffffffff, true),
-  HOWTO (R_SPARC_OLO10, 0, 2, 10, false, 0, complain_overflow_dont, bfd_elf_generic_reloc, "R_SPARC_OLO10", false, 0, 0x000003ff, true),
-  HOWTO (R_SPARC_HH22, 42, 2, 22, false, 0, complain_overflow_dont, bfd_elf_generic_reloc, "R_SPARC_HH22", false, 0, 0x003fffff, true),
-  HOWTO (R_SPARC_HM10, 32, 2, 10, false, 0, complain_overflow_dont, bfd_elf_generic_reloc, "R_SPARC_HM10", false, 0, 0x000003ff, true),
-  HOWTO (R_SPARC_LM22, 10, 2, 22, false, 0, complain_overflow_dont, bfd_elf_generic_reloc, "R_SPARC_LM22", false, 0, 0x003fffff, true),
-  HOWTO (R_SPARC_PC_HH22, 42, 2, 22, true, 0, complain_overflow_dont, bfd_elf_generic_reloc, "R_SPARC_HH22", false, 0, 0x003fffff, true),
-  HOWTO (R_SPARC_PC_HM10, 32, 2, 10, true, 0, complain_overflow_dont, bfd_elf_generic_reloc, "R_SPARC_HM10", false, 0, 0x000003ff, true),
-  HOWTO (R_SPARC_PC_LM22, 10, 2, 22, true, 0, complain_overflow_dont, bfd_elf_generic_reloc, "R_SPARC_LM22", false, 0, 0x003fffff, true),
-  HOWTO (R_SPARC_WDISP16, 2, 2, 16, true, 0, complain_overflow_signed, sparc64_elf_wdisp16_reloc, "R_SPARC_WDISP16", false, 0, 0, true),
-  HOWTO (R_SPARC_WDISP19, 2, 2, 22, true, 0, complain_overflow_signed, bfd_elf_generic_reloc, "R_SPARC_WDISP19", false, 0, 0x0007ffff, true),
-  HOWTO (R_SPARC_GLOB_JMP, 0, 0, 00, false, 0, complain_overflow_dont, bfd_elf_generic_reloc, "R_SPARC_GLOB_DAT", false, 0, 0x00000000, true),
-  HOWTO (R_SPARC_LO7, 0, 2, 7, false, 0, complain_overflow_dont, bfd_elf_generic_reloc, "R_SPARC_LO7", false, 0, 0x0000007f, true),
+  { BFD_RELOC_NONE, R_SPARC_NONE, },
+  { BFD_RELOC_16, R_SPARC_16, },
+  { BFD_RELOC_8, R_SPARC_8 },
+  { BFD_RELOC_8_PCREL, R_SPARC_DISP8 },
+  /* ??? This might cause us to need separate functions in elf{32,64}-sparc.c
+     (we could still have just one table), but is this reloc ever used?  */
+  { BFD_RELOC_CTOR, R_SPARC_32 }, /* @@ Assumes 32 bits.  */
+  { BFD_RELOC_32, R_SPARC_32 },
+  { BFD_RELOC_32_PCREL, R_SPARC_DISP32 },
+  { BFD_RELOC_HI22, R_SPARC_HI22 },
+  { BFD_RELOC_LO10, R_SPARC_LO10, },
+  { BFD_RELOC_32_PCREL_S2, R_SPARC_WDISP30 },
+  { BFD_RELOC_SPARC22, R_SPARC_22 },
+  { BFD_RELOC_SPARC13, R_SPARC_13 },
+  { BFD_RELOC_SPARC_GOT10, R_SPARC_GOT10 },
+  { BFD_RELOC_SPARC_GOT13, R_SPARC_GOT13 },
+  { BFD_RELOC_SPARC_GOT22, R_SPARC_GOT22 },
+  { BFD_RELOC_SPARC_PC10, R_SPARC_PC10 },
+  { BFD_RELOC_SPARC_PC22, R_SPARC_PC22 },
+  { BFD_RELOC_SPARC_WPLT30, R_SPARC_WPLT30 },
+  { BFD_RELOC_SPARC_COPY, R_SPARC_COPY },
+  { BFD_RELOC_SPARC_GLOB_DAT, R_SPARC_GLOB_DAT },
+  { BFD_RELOC_SPARC_JMP_SLOT, R_SPARC_JMP_SLOT },
+  { BFD_RELOC_SPARC_RELATIVE, R_SPARC_RELATIVE },
+  { BFD_RELOC_SPARC_WDISP22, R_SPARC_WDISP22 },
+  /* ??? Doesn't dwarf use this?  */
+/*{ BFD_RELOC_SPARC_UA32, R_SPARC_UA32 }, not used?? */
+  {BFD_RELOC_SPARC_10, R_SPARC_10},
+  {BFD_RELOC_SPARC_11, R_SPARC_11},
+  {BFD_RELOC_SPARC_64, R_SPARC_64},
+  {BFD_RELOC_SPARC_OLO10, R_SPARC_OLO10},
+  {BFD_RELOC_SPARC_HH22, R_SPARC_HH22},
+  {BFD_RELOC_SPARC_HM10, R_SPARC_HM10},
+  {BFD_RELOC_SPARC_LM22, R_SPARC_LM22},
+  {BFD_RELOC_SPARC_PC_HH22, R_SPARC_PC_HH22},
+  {BFD_RELOC_SPARC_PC_HM10, R_SPARC_PC_HM10},
+  {BFD_RELOC_SPARC_PC_LM22, R_SPARC_PC_LM22},
+  {BFD_RELOC_SPARC_WDISP16, R_SPARC_WDISP16},
+  {BFD_RELOC_SPARC_WDISP19, R_SPARC_WDISP19},
+  {BFD_RELOC_SPARC_7, R_SPARC_7},
+  {BFD_RELOC_SPARC_5, R_SPARC_5},
+  {BFD_RELOC_SPARC_6, R_SPARC_6},
 };
 
+static reloc_howto_type *
+sparc64_elf_reloc_type_lookup (abfd, code)
+     bfd *abfd;
+     bfd_reloc_code_real_type code;
+{
+  unsigned int i;
+  for (i = 0; i < sizeof (sparc_reloc_map) / sizeof (struct elf_reloc_map); i++)
+    {
+      if (sparc_reloc_map[i].bfd_reloc_val == code)
+       return &sparc64_elf_howto_table[(int) sparc_reloc_map[i].elf_reloc_val];
+    }
+  return 0;
+}
+
+static void
+sparc64_elf_info_to_howto (abfd, cache_ptr, dst)
+     bfd *abfd;
+     arelent *cache_ptr;
+     Elf64_Internal_Rela *dst;
+{
+  BFD_ASSERT (ELF64_R_TYPE (dst->r_info) < (unsigned int) R_SPARC_max);
+  cache_ptr->howto = &sparc64_elf_howto_table[ELF64_R_TYPE (dst->r_info)];
+}
+\f
 /* Handle the WDISP16 reloc.  */
 
 static bfd_reloc_status_type
-sparc64_elf_wdisp16_reloc (abfd,
-                          reloc_entry,
-                          symbol,
-                          data,
-                          input_section,
-                          output_bfd,
-                          error_message)
+sparc_elf_wdisp16_reloc (abfd,
+                        reloc_entry,
+                        symbol,
+                        data,
+                        input_section,
+                        output_bfd,
+                        error_message)
      bfd *abfd;
      arelent *reloc_entry;
      asymbol *symbol;
@@ -183,79 +229,7 @@ sparc64_elf_wdisp16_reloc (abfd,
   else
     return bfd_reloc_ok;
 }
-
-struct elf_reloc_map
-  {
-    unsigned char bfd_reloc_val;
-    unsigned char elf_reloc_val;
-  };
-
-static CONST struct elf_reloc_map sparc_reloc_map[] =
-{
-  {BFD_RELOC_NONE, R_SPARC_NONE,},
-  {BFD_RELOC_16, R_SPARC_16,},
-  {BFD_RELOC_8, R_SPARC_8},
-  {BFD_RELOC_8_PCREL, R_SPARC_DISP8},
-  {BFD_RELOC_CTOR, R_SPARC_32},        /* @@ Assumes 32 bits.  */
-  {BFD_RELOC_32, R_SPARC_32},
-  {BFD_RELOC_32_PCREL, R_SPARC_DISP32},
-  {BFD_RELOC_HI22, R_SPARC_HI22},
-  {BFD_RELOC_LO10, R_SPARC_LO10,},
-  {BFD_RELOC_32_PCREL_S2, R_SPARC_WDISP30},
-  {BFD_RELOC_SPARC22, R_SPARC_22},
-  {BFD_RELOC_SPARC13, R_SPARC_13},
-  {BFD_RELOC_SPARC_GOT10, R_SPARC_GOT10},
-  {BFD_RELOC_SPARC_GOT13, R_SPARC_GOT13},
-  {BFD_RELOC_SPARC_GOT22, R_SPARC_GOT22},
-  {BFD_RELOC_SPARC_PC10, R_SPARC_PC10},
-  {BFD_RELOC_SPARC_PC22, R_SPARC_PC22},
-  {BFD_RELOC_SPARC_WPLT30, R_SPARC_WPLT30},
-  {BFD_RELOC_SPARC_COPY, R_SPARC_COPY},
-  {BFD_RELOC_SPARC_GLOB_DAT, R_SPARC_GLOB_DAT},
-  {BFD_RELOC_SPARC_JMP_SLOT, R_SPARC_JMP_SLOT},
-  {BFD_RELOC_SPARC_RELATIVE, R_SPARC_RELATIVE},
-  {BFD_RELOC_SPARC_WDISP22, R_SPARC_WDISP22},
-/*  { BFD_RELOC_SPARC_UA32, R_SPARC_UA32 }, not used?? */
-  {BFD_RELOC_SPARC_10, R_SPARC_10},
-  {BFD_RELOC_SPARC_11, R_SPARC_11},
-  {BFD_RELOC_SPARC_64, R_SPARC_64},
-  {BFD_RELOC_SPARC_OLO10, R_SPARC_OLO10},
-  {BFD_RELOC_SPARC_HH22, R_SPARC_HH22},
-  {BFD_RELOC_SPARC_HM10, R_SPARC_HM10},
-  {BFD_RELOC_SPARC_LM22, R_SPARC_LM22},
-  {BFD_RELOC_SPARC_PC_HH22, R_SPARC_PC_HH22},
-  {BFD_RELOC_SPARC_PC_HM10, R_SPARC_PC_HM10},
-  {BFD_RELOC_SPARC_PC_LM22, R_SPARC_PC_LM22},
-  {BFD_RELOC_SPARC_WDISP16, R_SPARC_WDISP16},
-  {BFD_RELOC_SPARC_WDISP19, R_SPARC_WDISP19},
-  {BFD_RELOC_SPARC_GLOB_JMP, R_SPARC_GLOB_JMP},
-  {BFD_RELOC_SPARC_LO7, R_SPARC_LO7},
-};
-
-static reloc_howto_type *
-bfd_elf64_bfd_reloc_type_lookup (abfd, code)
-     bfd *abfd;
-     bfd_reloc_code_real_type code;
-{
-  int i;
-  for (i = 0; i < sizeof (sparc_reloc_map) / sizeof (struct elf_reloc_map); i++)
-    {
-      if (sparc_reloc_map[i].bfd_reloc_val == code)
-       return &elf_sparc_howto_table[(int) sparc_reloc_map[i].elf_reloc_val];
-    }
-  return 0;
-}
-
-static void
-elf_info_to_howto (abfd, cache_ptr, dst)
-     bfd *abfd;
-     arelent *cache_ptr;
-     Elf64_Internal_Rela *dst;
-{
-  BFD_ASSERT (ELF64_R_TYPE (dst->r_info) < (unsigned int) R_SPARC_max);
-  cache_ptr->howto = &elf_sparc_howto_table[ELF64_R_TYPE (dst->r_info)];
-}
-
+\f
 /* Relocate a SPARC64 ELF section.  */
 
 static boolean
@@ -297,7 +271,7 @@ sparc64_elf_relocate_section (output_bfd, info, input_bfd, input_section,
          bfd_set_error (bfd_error_bad_value);
          return false;
        }
-      howto = elf_sparc_howto_table + r_type;
+      howto = sparc64_elf_howto_table + r_type;
 
       r_symndx = ELF64_R_SYM (rel->r_info);
 
@@ -335,6 +309,9 @@ sparc64_elf_relocate_section (output_bfd, info, input_bfd, input_section,
       else
        {
          h = sym_hashes[r_symndx - symtab_hdr->sh_info];
+         while (h->root.type == bfd_link_hash_indirect
+                || h->root.type == bfd_link_hash_warning)
+           h = (struct elf_link_hash_entry *) h->root.u.i.link;
          if (h->root.type == bfd_link_hash_defined
              || h->root.type == bfd_link_hash_defweak)
            {
@@ -432,6 +409,8 @@ sparc64_elf_object_p (abfd)
 #define ELF_MACHINE_CODE EM_SPARC64
 #define ELF_MAXPAGESIZE 0x100000
 
+#define elf_info_to_howto              sparc64_elf_info_to_howto
+#define bfd_elf64_bfd_reloc_type_lookup        sparc64_elf_reloc_type_lookup
 #define elf_backend_relocate_section   sparc64_elf_relocate_section
 #define elf_backend_object_p           sparc64_elf_object_p
 
index f22f322161f60847ae6f9c2aecaa5184337f955d..75fcdf0ee0f7906c0b28b09f9407211db8a0e26d 100644 (file)
@@ -626,7 +626,6 @@ static const char *const bfd_reloc_code_real_names[] = { "@@uninitialized@@",
   "BFD_RELOC_SPARC_PC_LM22",
   "BFD_RELOC_SPARC_WDISP16",
   "BFD_RELOC_SPARC_WDISP19",
-  "BFD_RELOC_SPARC_GLOB_JMP",
   "BFD_RELOC_SPARC_7",
   "BFD_RELOC_SPARC_6",
   "BFD_RELOC_SPARC_5",
@@ -787,6 +786,8 @@ static const char *const bfd_reloc_code_real_names[] = { "@@uninitialized@@",
   "BFD_RELOC_V850_TDA_4_4_OFFSET",
   "BFD_RELOC_V850_SDA_16_16_SPLIT_OFFSET",
   "BFD_RELOC_V850_ZDA_16_16_SPLIT_OFFSET",
+  "BFD_RELOC_V850_CALLT_6_7_OFFSET",
+  "BFD_RELOC_V850_CALLT_16_16_OFFSET",
 /* end-sanitize-v850e */
 
   "BFD_RELOC_MN10300_32_PCREL",
index 9e31e49a57c737107c7690f599ac95950f7a2a4f..6a9e8aebca1d27e84dd8cd8181042453dae72bca 100644 (file)
@@ -1869,8 +1869,6 @@ ENUMX
   BFD_RELOC_SPARC_WDISP16
 ENUMX
   BFD_RELOC_SPARC_WDISP19
-ENUMX
-  BFD_RELOC_SPARC_GLOB_JMP
 ENUMX
   BFD_RELOC_SPARC_7
 ENUMX
@@ -2439,6 +2437,14 @@ ENUM
 ENUMDOC
   This is a 16 bit offset from the zero data area pointer, with the
   bits placed non-contigously in the instruction.
+ENUM
+  BFD_RELOC_V850_CALLT_6_7_OFFSET
+ENUMDOC
+  This is a 6 bit offset from the call table base pointer.
+ENUM
+  BFD_RELOC_V850_CALLT_16_16_OFFSET
+ENUMDOC
+  This is a 16 bit offset from the call table base pointer.
 COMMENT
 {* end-sanitize-v850e *}