mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-11-27 03:51:15 +08:00
bfd/
* elfarm-nabi.c (elf32_arm_howto_table): Add new EABI relocations. (elf32_arm_reloc_map): Add BFD_RELOC_ARM_RELABS32, BFD_RELOC_ARM_ROSEGREL32 and BFD_RELOC_ARM_SBREL32. * reloc.c: Add BFD_RELOC_ARM_RELABS32, BFD_RELOC_ARM_ROSEGREL32 and BFD_RELOC_ARM_SBREL32. * bfd-in2.h, bbfd.h: Regenerate. gas/ * config/tc-arm.c (md_apply_fix3, tc_gen_reloc, arm_parse_reloc): Handle new relocations. * include/elf/arm.h (elf_arm_reloc_type): Add new EABI relocations. gas/testsuite/ * gas/arm/pic.s,d: Test RELABS and SBREL relocations.
This commit is contained in:
parent
deaa6723d2
commit
db6579d415
@ -1,3 +1,12 @@
|
||||
2004-08-06 Paul Brook <paul@codesourcery.com>
|
||||
|
||||
* elfarm-nabi.c (elf32_arm_howto_table): Add new EABI relocations.
|
||||
(elf32_arm_reloc_map): Add BFD_RELOC_ARM_RELABS32,
|
||||
BFD_RELOC_ARM_ROSEGREL32 and BFD_RELOC_ARM_SBREL32.
|
||||
* reloc.c: Add BFD_RELOC_ARM_RELABS32, BFD_RELOC_ARM_ROSEGREL32
|
||||
and BFD_RELOC_ARM_SBREL32.
|
||||
* bfd-in2.h, bbfd.h: Regenerate.
|
||||
|
||||
2004-08-01 Thiemo Seufer <seufer@csv.ica.uni-stuttgart.de>
|
||||
|
||||
* elfxx-mips.c (mips_elf_calculate_relocation): Test only for
|
||||
|
@ -2639,6 +2639,16 @@ field in the instruction. */
|
||||
BFD_RELOC_ARM_GOTOFF,
|
||||
BFD_RELOC_ARM_GOTPC,
|
||||
|
||||
/* PC-relative or absolute relocation depending on target. Used for
|
||||
entries in .init_array sections. */
|
||||
BFD_RELOC_ARM_RELABS32,
|
||||
|
||||
/* Read-only segment base relative address. */
|
||||
BFD_RELOC_ARM_ROSEGREL32,
|
||||
|
||||
/* Data segment base relative address. */
|
||||
BFD_RELOC_ARM_SBREL32,
|
||||
|
||||
/* Renesas / SuperH SH relocs. Not all of these appear in object files. */
|
||||
BFD_RELOC_SH_PCDISP8BY2,
|
||||
BFD_RELOC_SH_PCDISP12BY2,
|
||||
|
@ -188,16 +188,16 @@ static reloc_howto_type elf32_arm_howto_table[] =
|
||||
|
||||
HOWTO (R_ARM_SBREL32, /* type */
|
||||
0, /* rightshift */
|
||||
0, /* size (0 = byte, 1 = short, 2 = long) */
|
||||
0, /* bitsize */
|
||||
2, /* size (0 = byte, 1 = short, 2 = long) */
|
||||
32, /* bitsize */
|
||||
FALSE, /* pc_relative */
|
||||
0, /* bitpos */
|
||||
complain_overflow_dont,/* complain_on_overflow */
|
||||
bfd_elf_generic_reloc, /* special_function */
|
||||
"R_ARM_SBREL32", /* name */
|
||||
FALSE, /* partial_inplace */
|
||||
0, /* src_mask */
|
||||
0, /* dst_mask */
|
||||
0xffffffff, /* src_mask */
|
||||
0xffffffff, /* dst_mask */
|
||||
FALSE), /* pcrel_offset */
|
||||
|
||||
HOWTO (R_ARM_THM_PC22, /* type */
|
||||
@ -557,6 +557,90 @@ static reloc_howto_type elf32_arm_howto_table[] =
|
||||
0x00000fff, /* src_mask */
|
||||
0x00000fff, /* dst_mask */
|
||||
TRUE), /* pcrel_offset */
|
||||
|
||||
HOWTO (R_ARM_LDR_SBREL_11_0, /* type */
|
||||
0, /* rightshift */
|
||||
2, /* size (0 = byte, 1 = short, 2 = long) */
|
||||
12, /* bitsize */
|
||||
FALSE, /* pc_relative */
|
||||
0, /* bitpos */
|
||||
complain_overflow_dont,/* complain_on_overflow */
|
||||
bfd_elf_generic_reloc, /* special_function */
|
||||
"R_ARM_LDR_SBREL_11_0",/* name */
|
||||
FALSE, /* partial_inplace */
|
||||
0x00000fff, /* src_mask */
|
||||
0x00000fff, /* dst_mask */
|
||||
FALSE), /* pcrel_offset */
|
||||
|
||||
HOWTO (R_ARM_ALU_SBREL_19_12, /* type */
|
||||
0, /* rightshift */
|
||||
2, /* size (0 = byte, 1 = short, 2 = long) */
|
||||
8, /* bitsize */
|
||||
FALSE, /* pc_relative */
|
||||
12, /* bitpos */
|
||||
complain_overflow_dont,/* complain_on_overflow */
|
||||
bfd_elf_generic_reloc, /* special_function */
|
||||
"R_ARM_ALU_SBREL_19_12",/* name */
|
||||
FALSE, /* partial_inplace */
|
||||
0x000ff000, /* src_mask */
|
||||
0x000ff000, /* dst_mask */
|
||||
FALSE), /* pcrel_offset */
|
||||
|
||||
HOWTO (R_ARM_ALU_SBREL_27_20, /* type */
|
||||
0, /* rightshift */
|
||||
2, /* size (0 = byte, 1 = short, 2 = long) */
|
||||
8, /* bitsize */
|
||||
FALSE, /* pc_relative */
|
||||
20, /* bitpos */
|
||||
complain_overflow_dont,/* complain_on_overflow */
|
||||
bfd_elf_generic_reloc, /* special_function */
|
||||
"R_ARM_ALU_SBREL_27_20",/* name */
|
||||
FALSE, /* partial_inplace */
|
||||
0x0ff00000, /* src_mask */
|
||||
0x0ff00000, /* dst_mask */
|
||||
FALSE), /* pcrel_offset */
|
||||
|
||||
HOWTO (R_ARM_RELABS32, /* type */
|
||||
0, /* rightshift */
|
||||
2, /* size (0 = byte, 1 = short, 2 = long) */
|
||||
32, /* bitsize */
|
||||
FALSE, /* pc_relative */
|
||||
0, /* bitpos */
|
||||
complain_overflow_dont,/* complain_on_overflow */
|
||||
bfd_elf_generic_reloc, /* special_function */
|
||||
"R_ARM_RELABS32", /* name */
|
||||
FALSE, /* partial_inplace */
|
||||
0xffffffff, /* src_mask */
|
||||
0xffffffff, /* dst_mask */
|
||||
FALSE), /* pcrel_offset */
|
||||
|
||||
HOWTO (R_ARM_ROSEGREL32, /* type */
|
||||
0, /* rightshift */
|
||||
2, /* size (0 = byte, 1 = short, 2 = long) */
|
||||
32, /* bitsize */
|
||||
FALSE, /* pc_relative */
|
||||
0, /* bitpos */
|
||||
complain_overflow_dont,/* complain_on_overflow */
|
||||
bfd_elf_generic_reloc, /* special_function */
|
||||
"R_ARM_ROSEGREL32", /* name */
|
||||
FALSE, /* partial_inplace */
|
||||
0xffffffff, /* src_mask */
|
||||
0xffffffff, /* dst_mask */
|
||||
FALSE), /* pcrel_offset */
|
||||
|
||||
HOWTO (R_ARM_V4BX, /* type */
|
||||
0, /* rightshift */
|
||||
2, /* size (0 = byte, 1 = short, 2 = long) */
|
||||
32, /* bitsize */
|
||||
FALSE, /* pc_relative */
|
||||
0, /* bitpos */
|
||||
complain_overflow_dont,/* complain_on_overflow */
|
||||
bfd_elf_generic_reloc, /* special_function */
|
||||
"R_ARM_V4BX", /* name */
|
||||
FALSE, /* partial_inplace */
|
||||
0xffffffff, /* src_mask */
|
||||
0xffffffff, /* dst_mask */
|
||||
FALSE), /* pcrel_offset */
|
||||
};
|
||||
|
||||
/* GNU extension to record C++ vtable hierarchy */
|
||||
@ -689,7 +773,10 @@ static const struct elf32_arm_reloc_map elf32_arm_reloc_map[] =
|
||||
{BFD_RELOC_ARM_GOTOFF, R_ARM_GOTOFF},
|
||||
{BFD_RELOC_ARM_GOTPC, R_ARM_GOTPC},
|
||||
{BFD_RELOC_ARM_GOT32, R_ARM_GOT32},
|
||||
{BFD_RELOC_ARM_PLT32, R_ARM_PLT32}
|
||||
{BFD_RELOC_ARM_PLT32, R_ARM_PLT32},
|
||||
{BFD_RELOC_ARM_RELABS32, R_ARM_RELABS32},
|
||||
{BFD_RELOC_ARM_ROSEGREL32, R_ARM_ROSEGREL32},
|
||||
{BFD_RELOC_ARM_SBREL32, R_ARM_SBREL32}
|
||||
};
|
||||
|
||||
static reloc_howto_type *
|
||||
|
@ -1134,6 +1134,9 @@ static const char *const bfd_reloc_code_real_names[] = { "@@uninitialized@@",
|
||||
"BFD_RELOC_ARM_RELATIVE",
|
||||
"BFD_RELOC_ARM_GOTOFF",
|
||||
"BFD_RELOC_ARM_GOTPC",
|
||||
"BFD_RELOC_ARM_RELABS32",
|
||||
"BFD_RELOC_ARM_ROSEGREL32",
|
||||
"BFD_RELOC_ARM_SBREL32",
|
||||
"BFD_RELOC_SH_PCDISP8BY2",
|
||||
"BFD_RELOC_SH_PCDISP12BY2",
|
||||
"BFD_RELOC_SH_IMM3",
|
||||
|
13
bfd/reloc.c
13
bfd/reloc.c
@ -2608,6 +2608,19 @@ ENUMX
|
||||
ENUMDOC
|
||||
These relocs are only used within the ARM assembler. They are not
|
||||
(at present) written to any object files.
|
||||
ENUM
|
||||
BFD_RELOC_ARM_RELABS32
|
||||
ENUMDOC
|
||||
Pc-relative or absolute relocation depending on target. Used for
|
||||
entries in .init_array sections.
|
||||
ENUM
|
||||
BFD_RELOC_ARM_ROSEGREL32
|
||||
ENUMDOC
|
||||
Read-only segment base relative address.
|
||||
ENUM
|
||||
BFD_RELOC_ARM_SBREL32
|
||||
ENUMDOC
|
||||
Data segment base relative address.
|
||||
|
||||
ENUM
|
||||
BFD_RELOC_SH_PCDISP8BY2
|
||||
|
@ -1,3 +1,9 @@
|
||||
2004-08-06 Paul Brook <paul@codesourcery.com>
|
||||
|
||||
* config/tc-arm.c (md_apply_fix3, tc_gen_reloc, arm_parse_reloc):
|
||||
Handle new relocations.
|
||||
* include/elf/arm.h (elf_arm_reloc_type): Add new EABI relocations.
|
||||
|
||||
2004-08-05 Bob Wilson <bob.wilson@acm.org>
|
||||
|
||||
* write.c (relax_segment): Use was_address instead of address when
|
||||
|
@ -12487,6 +12487,9 @@ md_apply_fix3 (fixP, valP, seg)
|
||||
|
||||
case BFD_RELOC_RVA:
|
||||
case BFD_RELOC_32:
|
||||
case BFD_RELOC_ARM_RELABS32:
|
||||
case BFD_RELOC_ARM_ROSEGREL32:
|
||||
case BFD_RELOC_ARM_SBREL32:
|
||||
if (fixP->fx_done || fixP->fx_pcrel)
|
||||
md_number_to_chars (buf, value, 4);
|
||||
#ifdef OBJ_ELF
|
||||
@ -12774,6 +12777,9 @@ tc_gen_reloc (section, fixp)
|
||||
case BFD_RELOC_ARM_GOT32:
|
||||
case BFD_RELOC_ARM_GOTOFF:
|
||||
case BFD_RELOC_ARM_PLT32:
|
||||
case BFD_RELOC_ARM_RELABS32:
|
||||
case BFD_RELOC_ARM_ROSEGREL32:
|
||||
case BFD_RELOC_ARM_SBREL32:
|
||||
code = fixp->fx_r_type;
|
||||
break;
|
||||
#endif
|
||||
@ -14132,6 +14138,8 @@ arm_parse_reloc ()
|
||||
/* ScottB: Jan 30, 1998 - Added support for parsing "var(PLT)"
|
||||
branch instructions generated by GCC for PLT relocs. */
|
||||
MAP ("(plt)", BFD_RELOC_ARM_PLT32),
|
||||
MAP ("(relabs)", BFD_RELOC_ARM_RELABS32),
|
||||
MAP ("(sbrel)", BFD_RELOC_ARM_SBREL32),
|
||||
{ NULL, 0, BFD_RELOC_UNUSED }
|
||||
#undef MAP
|
||||
};
|
||||
|
@ -1,3 +1,7 @@
|
||||
2004-08-06 Paul Brook <paul@codesourcery.com>
|
||||
|
||||
* gas/arm/pic.s,d: Test RELABS and SBREL relocations.
|
||||
|
||||
2004-08-05 Nitin Yewale <nitiny@kpitcummins.com>
|
||||
|
||||
* h8300/h8300.exp: Addition of new test case to check rx
|
||||
|
@ -15,3 +15,5 @@ Disassembly of section .text:
|
||||
c: R_ARM_GOT32 sym
|
||||
10: R_ARM_GOTOFF sym
|
||||
14: R_ARM_GOTPC _GLOBAL_OFFSET_TABLE_
|
||||
18: R_ARM_RELABS32 foo2
|
||||
1c: R_ARM_SBREL32 foo3
|
||||
|
@ -9,3 +9,5 @@
|
||||
.word sym(GOTOFF)
|
||||
1:
|
||||
.word _GLOBAL_OFFSET_TABLE_ - 1b
|
||||
.word foo2(RELABS)
|
||||
.word foo3(SBREL)
|
||||
|
@ -124,10 +124,15 @@ START_RELOC_NUMBERS (elf_arm_reloc_type)
|
||||
RELOC_NUMBER (R_ARM_ALU_PCREL7_0, 32)
|
||||
RELOC_NUMBER (R_ARM_ALU_PCREL15_8, 33)
|
||||
RELOC_NUMBER (R_ARM_ALU_PCREL23_15, 34)
|
||||
RELOC_NUMBER (R_ARM_LDR_SBREL11_0, 35)
|
||||
RELOC_NUMBER (R_ARM_ALU_SBREL19_12, 36)
|
||||
RELOC_NUMBER (R_ARM_ALU_SBREL27_20, 37)
|
||||
FAKE_RELOC (FIRST_INVALID_RELOC2, 38)
|
||||
RELOC_NUMBER (R_ARM_LDR_SBREL_11_0, 35)
|
||||
RELOC_NUMBER (R_ARM_ALU_SBREL_19_12, 36)
|
||||
RELOC_NUMBER (R_ARM_ALU_SBREL_27_20, 37)
|
||||
RELOC_NUMBER (R_ARM_RELABS32, 38)
|
||||
RELOC_NUMBER (R_ARM_ROSEGREL32, 39)
|
||||
RELOC_NUMBER (R_ARM_V4BX, 40)
|
||||
RELOC_NUMBER (R_ARM_STKCHK, 41)
|
||||
RELOC_NUMBER (R_ARM_THM_STKCHK, 42)
|
||||
FAKE_RELOC (FIRST_INVALID_RELOC2, 43)
|
||||
FAKE_RELOC (LAST_INVALID_RELOC2, 99)
|
||||
RELOC_NUMBER (R_ARM_GNU_VTENTRY, 100)
|
||||
RELOC_NUMBER (R_ARM_GNU_VTINHERIT, 101)
|
||||
|
Loading…
Reference in New Issue
Block a user