* elf32-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.
	* 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.
This commit is contained in:
David Edelsohn 1997-09-30 21:33:19 +00:00
parent f2c2ab6bf8
commit 3869b11f87
5 changed files with 167 additions and 184 deletions

View File

@ -1245,10 +1245,8 @@ enum bfd_architecture
#define bfd_mach_v850 0 #define bfd_mach_v850 0
/* start-sanitize-v850e */ /* start-sanitize-v850e */
#define bfd_mach_v850e 'E' #define bfd_mach_v850e 'E'
/* end-sanitize-v850e */
/* start-sanitize-v850eq */
#define bfd_mach_v850eq 'Q' #define bfd_mach_v850eq 'Q'
/* end-sanitize-v850eq */ /* end-sanitize-v850e */
bfd_arch_arc, /* Argonaut RISC Core */ bfd_arch_arc, /* Argonaut RISC Core */
#define bfd_mach_arc_base 0 #define bfd_mach_arc_base 0
bfd_arch_m32r, /* Mitsubishi M32R/D */ bfd_arch_m32r, /* Mitsubishi M32R/D */
@ -1629,7 +1627,6 @@ relocation types already defined. */
BFD_RELOC_SPARC_PC_LM22, BFD_RELOC_SPARC_PC_LM22,
BFD_RELOC_SPARC_WDISP16, BFD_RELOC_SPARC_WDISP16,
BFD_RELOC_SPARC_WDISP19, BFD_RELOC_SPARC_WDISP19,
BFD_RELOC_SPARC_GLOB_JMP,
BFD_RELOC_SPARC_7, BFD_RELOC_SPARC_7,
BFD_RELOC_SPARC_6, BFD_RELOC_SPARC_6,
BFD_RELOC_SPARC_5, BFD_RELOC_SPARC_5,

View File

@ -126,7 +126,7 @@ reloc_howto_type _bfd_sparc_elf_howto_table[] =
#endif #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_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_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_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_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), 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_PC_LM22, R_SPARC_PC_LM22},
{BFD_RELOC_SPARC_WDISP16, R_SPARC_WDISP16}, {BFD_RELOC_SPARC_WDISP16, R_SPARC_WDISP16},
{BFD_RELOC_SPARC_WDISP19, R_SPARC_WDISP19}, {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_7, R_SPARC_7},
{BFD_RELOC_SPARC_5, R_SPARC_5}, {BFD_RELOC_SPARC_5, R_SPARC_5},
{BFD_RELOC_SPARC_6, R_SPARC_6}, {BFD_RELOC_SPARC_6, R_SPARC_6},
@ -819,7 +818,8 @@ elf32_sparc_size_dynamic_sections (output_bfd, info)
s->output_section); s->output_section);
target = bfd_get_section_by_name (output_bfd, outname + 5); target = bfd_get_section_by_name (output_bfd, outname + 5);
if (target != NULL if (target != NULL
&& (target->flags & SEC_READONLY) != 0) && (target->flags & SEC_READONLY) != 0
&& (target->flags & SEC_ALLOC) != 0)
reltext = true; reltext = true;
if (strcmp (name, ".rela.plt") == 0) if (strcmp (name, ".rela.plt") == 0)

View File

@ -1,5 +1,5 @@
/* SPARC-specific support for 64-bit ELF /* 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. 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 "libbfd.h"
#include "elf-bfd.h" #include "elf-bfd.h"
static bfd_reloc_status_type sparc64_elf_wdisp16_reloc #define SPARC64_OLD_RELOCS
PARAMS ((bfd *, arelent *, asymbol *, PTR, asection *, bfd *, char **)); #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 static boolean sparc64_elf_relocate_section
PARAMS ((bfd *, struct bfd_link_info *, bfd *, asection *, bfd_byte *, PARAMS ((bfd *, struct bfd_link_info *, bfd *, asection *, bfd_byte *,
Elf_Internal_Rela *, Elf_Internal_Sym *, asection **)); Elf_Internal_Rela *, Elf_Internal_Sym *, asection **));
static boolean sparc64_elf_object_p PARAMS ((bfd *)); static boolean sparc64_elf_object_p PARAMS ((bfd *));
enum reloc_type /* The howto table and associated functions.
{ ??? Some of the relocation values have changed. Until we're ready
R_SPARC_NONE = 0, to upgrade, we have our own copy. At some point a non upward compatible
R_SPARC_8, R_SPARC_16, R_SPARC_32, change will be made at which point this table can be deleted and we'll
R_SPARC_DISP8, R_SPARC_DISP16, R_SPARC_DISP32, use the one in elf32-sparc.c. */
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 */ static bfd_reloc_status_type sparc_elf_wdisp16_reloc
R_SPARC_10, R_SPARC_11, R_SPARC_64, PARAMS ((bfd *, arelent *, asymbol *, PTR, asection *, bfd *, char **));
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 static reloc_howto_type sparc64_elf_howto_table[] =
};
#if 0
static CONST char *CONST reloc_type_names[] =
{ {
"R_SPARC_NONE", HOWTO(R_SPARC_NONE, 0,0, 0,false,0,complain_overflow_dont, bfd_elf_generic_reloc, "R_SPARC_NONE", false,0,0x00000000,true),
"R_SPARC_8", "R_SPARC_16", "R_SPARC_32", HOWTO(R_SPARC_8, 0,0, 8,false,0,complain_overflow_bitfield,bfd_elf_generic_reloc, "R_SPARC_8", false,0,0x000000ff,true),
"R_SPARC_DISP8", "R_SPARC_DISP16", "R_SPARC_DISP32", HOWTO(R_SPARC_16, 0,1,16,false,0,complain_overflow_bitfield,bfd_elf_generic_reloc, "R_SPARC_16", false,0,0x0000ffff,true),
"R_SPARC_WDISP30", "R_SPARC_WDISP22", HOWTO(R_SPARC_32, 0,2,32,false,0,complain_overflow_bitfield,bfd_elf_generic_reloc, "R_SPARC_32", false,0,0xffffffff,true),
"R_SPARC_HI22", "R_SPARC_22", HOWTO(R_SPARC_DISP8, 0,0, 8,true, 0,complain_overflow_signed, bfd_elf_generic_reloc, "R_SPARC_DISP8", false,0,0x000000ff,true),
"R_SPARC_13", "R_SPARC_LO10", HOWTO(R_SPARC_DISP16, 0,1,16,true, 0,complain_overflow_signed, bfd_elf_generic_reloc, "R_SPARC_DISP16", false,0,0x0000ffff,true),
"R_SPARC_GOT10", "R_SPARC_GOT13", "R_SPARC_GOT22", HOWTO(R_SPARC_DISP32, 0,2,32,true, 0,complain_overflow_signed, bfd_elf_generic_reloc, "R_SPARC_DISP32", false,0,0x00ffffff,true),
"R_SPARC_PC10", "R_SPARC_PC22", HOWTO(R_SPARC_WDISP30, 2,2,30,true, 0,complain_overflow_signed, bfd_elf_generic_reloc, "R_SPARC_WDISP30", false,0,0x3fffffff,true),
"R_SPARC_WPLT30", HOWTO(R_SPARC_WDISP22, 2,2,22,true, 0,complain_overflow_signed, bfd_elf_generic_reloc, "R_SPARC_WDISP22", false,0,0x003fffff,true),
"R_SPARC_COPY", HOWTO(R_SPARC_HI22, 10,2,22,false,0,complain_overflow_dont, bfd_elf_generic_reloc, "R_SPARC_HI22", false,0,0x003fffff,true),
"R_SPARC_GLOB_DAT", "R_SPARC_JMP_SLOT", HOWTO(R_SPARC_22, 0,2,22,false,0,complain_overflow_bitfield,bfd_elf_generic_reloc, "R_SPARC_22", false,0,0x003fffff,true),
"R_SPARC_RELATIVE", HOWTO(R_SPARC_13, 0,2,13,false,0,complain_overflow_bitfield,bfd_elf_generic_reloc, "R_SPARC_13", false,0,0x00001fff,true),
"R_SPARC_UA32", 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),
"R_SPARC_10", "R_SPARC_11", "R_SPARC_64", HOWTO(R_SPARC_GOT13, 0,2,13,false,0,complain_overflow_signed, bfd_elf_generic_reloc, "R_SPARC_GOT13", false,0,0x00001fff,true),
"R_SPARC_OLO10", "R_SPARC_HH22", "R_SPARC_HM10", "R_SPARC_LM22", HOWTO(R_SPARC_GOT22, 10,2,22,false,0,complain_overflow_dont, bfd_elf_generic_reloc, "R_SPARC_GOT22", false,0,0x003fffff,true),
"R_SPARC_PC_HH22", "R_SPARC_PC_HM10", "R_SPARC_PC_LM22", HOWTO(R_SPARC_PC10, 0,2,10,true, 0,complain_overflow_dont, bfd_elf_generic_reloc, "R_SPARC_PC10", false,0,0x000003ff,true),
"R_SPARC_WDISP16", "R_SPARC_WDISP19", HOWTO(R_SPARC_PC22, 10,2,22,true, 0,complain_overflow_bitfield,bfd_elf_generic_reloc, "R_SPARC_PC22", false,0,0x003fffff,true),
"R_SPARC_GLOB_JMP", "R_SPARC_LO7", 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 #endif
HOWTO(R_SPARC_10, 0,2,10,false,0,complain_overflow_bitfield,bfd_elf_generic_reloc, "R_SPARC_10", false,0,0x000003ff,true),
extern void abort (); HOWTO(R_SPARC_11, 0,2,11,false,0,complain_overflow_bitfield,bfd_elf_generic_reloc, "R_SPARC_11", false,0,0x000007ff,true),
#define DIE ((bfd_reloc_status_type(*)())abort) 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),
static reloc_howto_type elf_sparc_howto_table[] = 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_NONE, 0, 0, 0, false, 0, complain_overflow_dont, bfd_elf_generic_reloc, "R_SPARC_NONE", false, 0, 0x00000000, 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_8, 0, 0, 8, false, 0, complain_overflow_bitfield, bfd_elf_generic_reloc, "R_SPARC_8", false, 0, 0x000000ff, 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_16, 0, 1, 16, false, 0, complain_overflow_bitfield, bfd_elf_generic_reloc, "R_SPARC_16", false, 0, 0x0000ffff, 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_32, 0, 2, 32, false, 0, complain_overflow_bitfield, bfd_elf_generic_reloc, "R_SPARC_32", false, 0, 0xffffffff, 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_DISP8, 0, 0, 8, true, 0, complain_overflow_signed, bfd_elf_generic_reloc, "R_SPARC_DISP8", false, 0, 0x000000ff, 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_DISP16, 0, 1, 16, true, 0, complain_overflow_signed, bfd_elf_generic_reloc, "R_SPARC_DISP16", false, 0, 0x0000ffff, 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_DISP32, 0, 2, 32, true, 0, complain_overflow_signed, bfd_elf_generic_reloc, "R_SPARC_DISP32", false, 0, 0x00ffffff, 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_WDISP30, 2, 2, 30, true, 0, complain_overflow_signed, bfd_elf_generic_reloc, "R_SPARC_WDISP30", false, 0, 0x3fffffff, 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_WDISP22, 2, 2, 22, true, 0, complain_overflow_signed, bfd_elf_generic_reloc, "R_SPARC_WDISP22", false, 0, 0x003fffff, 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_HI22, 10, 2, 22, false, 0, complain_overflow_dont, bfd_elf_generic_reloc, "R_SPARC_HI22", false, 0, 0x003fffff, true), HOWTO(R_SPARC_6, 0,2, 6,false,0,complain_overflow_bitfield,bfd_elf_generic_reloc, "R_SPARC_6", false,0,0x0000003f,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),
}; };
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 },
/* ??? 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)];
}
/* Handle the WDISP16 reloc. */ /* Handle the WDISP16 reloc. */
static bfd_reloc_status_type static bfd_reloc_status_type
sparc64_elf_wdisp16_reloc (abfd, sparc_elf_wdisp16_reloc (abfd,
reloc_entry, reloc_entry,
symbol, symbol,
data, data,
input_section, input_section,
output_bfd, output_bfd,
error_message) error_message)
bfd *abfd; bfd *abfd;
arelent *reloc_entry; arelent *reloc_entry;
asymbol *symbol; asymbol *symbol;
@ -183,79 +229,7 @@ sparc64_elf_wdisp16_reloc (abfd,
else else
return bfd_reloc_ok; 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)];
}
/* Relocate a SPARC64 ELF section. */ /* Relocate a SPARC64 ELF section. */
static boolean static boolean
@ -297,7 +271,7 @@ sparc64_elf_relocate_section (output_bfd, info, input_bfd, input_section,
bfd_set_error (bfd_error_bad_value); bfd_set_error (bfd_error_bad_value);
return false; return false;
} }
howto = elf_sparc_howto_table + r_type; howto = sparc64_elf_howto_table + r_type;
r_symndx = ELF64_R_SYM (rel->r_info); r_symndx = ELF64_R_SYM (rel->r_info);
@ -335,6 +309,9 @@ sparc64_elf_relocate_section (output_bfd, info, input_bfd, input_section,
else else
{ {
h = sym_hashes[r_symndx - symtab_hdr->sh_info]; 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 if (h->root.type == bfd_link_hash_defined
|| h->root.type == bfd_link_hash_defweak) || h->root.type == bfd_link_hash_defweak)
{ {
@ -432,6 +409,8 @@ sparc64_elf_object_p (abfd)
#define ELF_MACHINE_CODE EM_SPARC64 #define ELF_MACHINE_CODE EM_SPARC64
#define ELF_MAXPAGESIZE 0x100000 #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_relocate_section sparc64_elf_relocate_section
#define elf_backend_object_p sparc64_elf_object_p #define elf_backend_object_p sparc64_elf_object_p

View File

@ -626,7 +626,6 @@ static const char *const bfd_reloc_code_real_names[] = { "@@uninitialized@@",
"BFD_RELOC_SPARC_PC_LM22", "BFD_RELOC_SPARC_PC_LM22",
"BFD_RELOC_SPARC_WDISP16", "BFD_RELOC_SPARC_WDISP16",
"BFD_RELOC_SPARC_WDISP19", "BFD_RELOC_SPARC_WDISP19",
"BFD_RELOC_SPARC_GLOB_JMP",
"BFD_RELOC_SPARC_7", "BFD_RELOC_SPARC_7",
"BFD_RELOC_SPARC_6", "BFD_RELOC_SPARC_6",
"BFD_RELOC_SPARC_5", "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_TDA_4_4_OFFSET",
"BFD_RELOC_V850_SDA_16_16_SPLIT_OFFSET", "BFD_RELOC_V850_SDA_16_16_SPLIT_OFFSET",
"BFD_RELOC_V850_ZDA_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 */ /* end-sanitize-v850e */
"BFD_RELOC_MN10300_32_PCREL", "BFD_RELOC_MN10300_32_PCREL",

View File

@ -1869,8 +1869,6 @@ ENUMX
BFD_RELOC_SPARC_WDISP16 BFD_RELOC_SPARC_WDISP16
ENUMX ENUMX
BFD_RELOC_SPARC_WDISP19 BFD_RELOC_SPARC_WDISP19
ENUMX
BFD_RELOC_SPARC_GLOB_JMP
ENUMX ENUMX
BFD_RELOC_SPARC_7 BFD_RELOC_SPARC_7
ENUMX ENUMX
@ -2439,6 +2437,14 @@ ENUM
ENUMDOC ENUMDOC
This is a 16 bit offset from the zero data area pointer, with the This is a 16 bit offset from the zero data area pointer, with the
bits placed non-contigously in the instruction. 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 COMMENT
{* end-sanitize-v850e *} {* end-sanitize-v850e *}