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
11 changed files with 158 additions and 9 deletions
|
@ -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>
|
2004-08-01 Thiemo Seufer <seufer@csv.ica.uni-stuttgart.de>
|
||||||
|
|
||||||
* elfxx-mips.c (mips_elf_calculate_relocation): Test only for
|
* 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_GOTOFF,
|
||||||
BFD_RELOC_ARM_GOTPC,
|
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. */
|
/* Renesas / SuperH SH relocs. Not all of these appear in object files. */
|
||||||
BFD_RELOC_SH_PCDISP8BY2,
|
BFD_RELOC_SH_PCDISP8BY2,
|
||||||
BFD_RELOC_SH_PCDISP12BY2,
|
BFD_RELOC_SH_PCDISP12BY2,
|
||||||
|
|
|
@ -188,16 +188,16 @@ static reloc_howto_type elf32_arm_howto_table[] =
|
||||||
|
|
||||||
HOWTO (R_ARM_SBREL32, /* type */
|
HOWTO (R_ARM_SBREL32, /* type */
|
||||||
0, /* rightshift */
|
0, /* rightshift */
|
||||||
0, /* size (0 = byte, 1 = short, 2 = long) */
|
2, /* size (0 = byte, 1 = short, 2 = long) */
|
||||||
0, /* bitsize */
|
32, /* bitsize */
|
||||||
FALSE, /* pc_relative */
|
FALSE, /* pc_relative */
|
||||||
0, /* bitpos */
|
0, /* bitpos */
|
||||||
complain_overflow_dont,/* complain_on_overflow */
|
complain_overflow_dont,/* complain_on_overflow */
|
||||||
bfd_elf_generic_reloc, /* special_function */
|
bfd_elf_generic_reloc, /* special_function */
|
||||||
"R_ARM_SBREL32", /* name */
|
"R_ARM_SBREL32", /* name */
|
||||||
FALSE, /* partial_inplace */
|
FALSE, /* partial_inplace */
|
||||||
0, /* src_mask */
|
0xffffffff, /* src_mask */
|
||||||
0, /* dst_mask */
|
0xffffffff, /* dst_mask */
|
||||||
FALSE), /* pcrel_offset */
|
FALSE), /* pcrel_offset */
|
||||||
|
|
||||||
HOWTO (R_ARM_THM_PC22, /* type */
|
HOWTO (R_ARM_THM_PC22, /* type */
|
||||||
|
@ -557,6 +557,90 @@ static reloc_howto_type elf32_arm_howto_table[] =
|
||||||
0x00000fff, /* src_mask */
|
0x00000fff, /* src_mask */
|
||||||
0x00000fff, /* dst_mask */
|
0x00000fff, /* dst_mask */
|
||||||
TRUE), /* pcrel_offset */
|
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 */
|
/* 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_GOTOFF, R_ARM_GOTOFF},
|
||||||
{BFD_RELOC_ARM_GOTPC, R_ARM_GOTPC},
|
{BFD_RELOC_ARM_GOTPC, R_ARM_GOTPC},
|
||||||
{BFD_RELOC_ARM_GOT32, R_ARM_GOT32},
|
{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 *
|
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_RELATIVE",
|
||||||
"BFD_RELOC_ARM_GOTOFF",
|
"BFD_RELOC_ARM_GOTOFF",
|
||||||
"BFD_RELOC_ARM_GOTPC",
|
"BFD_RELOC_ARM_GOTPC",
|
||||||
|
"BFD_RELOC_ARM_RELABS32",
|
||||||
|
"BFD_RELOC_ARM_ROSEGREL32",
|
||||||
|
"BFD_RELOC_ARM_SBREL32",
|
||||||
"BFD_RELOC_SH_PCDISP8BY2",
|
"BFD_RELOC_SH_PCDISP8BY2",
|
||||||
"BFD_RELOC_SH_PCDISP12BY2",
|
"BFD_RELOC_SH_PCDISP12BY2",
|
||||||
"BFD_RELOC_SH_IMM3",
|
"BFD_RELOC_SH_IMM3",
|
||||||
|
|
13
bfd/reloc.c
13
bfd/reloc.c
|
@ -2608,6 +2608,19 @@ ENUMX
|
||||||
ENUMDOC
|
ENUMDOC
|
||||||
These relocs are only used within the ARM assembler. They are not
|
These relocs are only used within the ARM assembler. They are not
|
||||||
(at present) written to any object files.
|
(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
|
ENUM
|
||||||
BFD_RELOC_SH_PCDISP8BY2
|
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>
|
2004-08-05 Bob Wilson <bob.wilson@acm.org>
|
||||||
|
|
||||||
* write.c (relax_segment): Use was_address instead of address when
|
* 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_RVA:
|
||||||
case BFD_RELOC_32:
|
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)
|
if (fixP->fx_done || fixP->fx_pcrel)
|
||||||
md_number_to_chars (buf, value, 4);
|
md_number_to_chars (buf, value, 4);
|
||||||
#ifdef OBJ_ELF
|
#ifdef OBJ_ELF
|
||||||
|
@ -12774,6 +12777,9 @@ tc_gen_reloc (section, fixp)
|
||||||
case BFD_RELOC_ARM_GOT32:
|
case BFD_RELOC_ARM_GOT32:
|
||||||
case BFD_RELOC_ARM_GOTOFF:
|
case BFD_RELOC_ARM_GOTOFF:
|
||||||
case BFD_RELOC_ARM_PLT32:
|
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;
|
code = fixp->fx_r_type;
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
|
@ -14132,6 +14138,8 @@ arm_parse_reloc ()
|
||||||
/* ScottB: Jan 30, 1998 - Added support for parsing "var(PLT)"
|
/* ScottB: Jan 30, 1998 - Added support for parsing "var(PLT)"
|
||||||
branch instructions generated by GCC for PLT relocs. */
|
branch instructions generated by GCC for PLT relocs. */
|
||||||
MAP ("(plt)", BFD_RELOC_ARM_PLT32),
|
MAP ("(plt)", BFD_RELOC_ARM_PLT32),
|
||||||
|
MAP ("(relabs)", BFD_RELOC_ARM_RELABS32),
|
||||||
|
MAP ("(sbrel)", BFD_RELOC_ARM_SBREL32),
|
||||||
{ NULL, 0, BFD_RELOC_UNUSED }
|
{ NULL, 0, BFD_RELOC_UNUSED }
|
||||||
#undef MAP
|
#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>
|
2004-08-05 Nitin Yewale <nitiny@kpitcummins.com>
|
||||||
|
|
||||||
* h8300/h8300.exp: Addition of new test case to check rx
|
* h8300/h8300.exp: Addition of new test case to check rx
|
||||||
|
|
|
@ -15,3 +15,5 @@ Disassembly of section .text:
|
||||||
c: R_ARM_GOT32 sym
|
c: R_ARM_GOT32 sym
|
||||||
10: R_ARM_GOTOFF sym
|
10: R_ARM_GOTOFF sym
|
||||||
14: R_ARM_GOTPC _GLOBAL_OFFSET_TABLE_
|
14: R_ARM_GOTPC _GLOBAL_OFFSET_TABLE_
|
||||||
|
18: R_ARM_RELABS32 foo2
|
||||||
|
1c: R_ARM_SBREL32 foo3
|
||||||
|
|
|
@ -9,3 +9,5 @@
|
||||||
.word sym(GOTOFF)
|
.word sym(GOTOFF)
|
||||||
1:
|
1:
|
||||||
.word _GLOBAL_OFFSET_TABLE_ - 1b
|
.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_PCREL7_0, 32)
|
||||||
RELOC_NUMBER (R_ARM_ALU_PCREL15_8, 33)
|
RELOC_NUMBER (R_ARM_ALU_PCREL15_8, 33)
|
||||||
RELOC_NUMBER (R_ARM_ALU_PCREL23_15, 34)
|
RELOC_NUMBER (R_ARM_ALU_PCREL23_15, 34)
|
||||||
RELOC_NUMBER (R_ARM_LDR_SBREL11_0, 35)
|
RELOC_NUMBER (R_ARM_LDR_SBREL_11_0, 35)
|
||||||
RELOC_NUMBER (R_ARM_ALU_SBREL19_12, 36)
|
RELOC_NUMBER (R_ARM_ALU_SBREL_19_12, 36)
|
||||||
RELOC_NUMBER (R_ARM_ALU_SBREL27_20, 37)
|
RELOC_NUMBER (R_ARM_ALU_SBREL_27_20, 37)
|
||||||
FAKE_RELOC (FIRST_INVALID_RELOC2, 38)
|
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)
|
FAKE_RELOC (LAST_INVALID_RELOC2, 99)
|
||||||
RELOC_NUMBER (R_ARM_GNU_VTENTRY, 100)
|
RELOC_NUMBER (R_ARM_GNU_VTENTRY, 100)
|
||||||
RELOC_NUMBER (R_ARM_GNU_VTINHERIT, 101)
|
RELOC_NUMBER (R_ARM_GNU_VTINHERIT, 101)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue