Add support for constructing pc-relative addresses to the plt, by
adding the necessary assembly operators and relocations. bfd: * reloc.c (Add BFD_RELOC_TILEGX_IMM16_X0_HW0_PLT_PCREL, BFD_RELOC_TILEGX_IMM16_X1_HW0_PLT_PCREL, BFD_RELOC_TILEGX_IMM16_X0_HW1_PLT_PCREL, BFD_RELOC_TILEGX_IMM16_X1_HW1_PLT_PCREL, BFD_RELOC_TILEGX_IMM16_X0_HW2_PLT_PCREL, BFD_RELOC_TILEGX_IMM16_X1_HW2_PLT_PCREL, BFD_RELOC_TILEGX_IMM16_X0_HW3_PLT_PCREL, BFD_RELOC_TILEGX_IMM16_X1_HW3_PLT_PCREL, BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST_PLT_PCREL, BFD_RELOC_TILEGX_IMM16_X1_HW0_LAST_PLT_PCREL, BFD_RELOC_TILEGX_IMM16_X0_HW1_LAST_PLT_PCREL, BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST_PLT_PCREL, BFD_RELOC_TILEGX_IMM16_X0_HW2_LAST_PLT_PCREL, BFD_RELOC_TILEGX_IMM16_X1_HW2_LAST_PLT_PCREL): new relocations. * elfxx-tilegx.c (tilegx_elf_howto_table): Handle new relocations. (tilegx_reloc_map): Ditto. (reloc_to_create_func): Ditto. (tilegx_elf_check_relocs): Ditto. (tilegx_elf_gc_sweep_hook): Ditto. (tilegx_elf_relocate_section): Ditto. * libbfd.h: Regenerate. * bfd-in2.h: Regenerate. gas: * tc-tilegx.c (O_hw0_plt): Define operator. (O_hw1_plt): Ditto. (O_hw1_last_plt): Ditto. (O_hw2_last_plt): Ditto. (md_begin): Handle new operators. (emit_tilegx_instruction): Ditto. (md_apply_fix): Ditto. * doc/c-tilegx.texi: Document new operators. include/elf: * tilegx.h (R_TILEGX_IMM16_X0_HW0_PLT_PCREL): New relocation. (R_TILEGX_IMM16_X1_HW0_PLT_PCREL): Ditto. (R_TILEGX_IMM16_X0_HW1_PLT_PCREL): Ditto. (R_TILEGX_IMM16_X1_HW1_PLT_PCREL): Ditto. (R_TILEGX_IMM16_X0_HW2_PLT_PCREL): Ditto. (R_TILEGX_IMM16_X1_HW2_PLT_PCREL): Ditto. (R_TILEGX_IMM16_X0_HW3_PLT_PCREL): Ditto. (R_TILEGX_IMM16_X1_HW3_PLT_PCREL): Ditto. (R_TILEGX_IMM16_X0_HW0_LAST_PLT_PCREL): Ditto. (R_TILEGX_IMM16_X1_HW0_LAST_PLT_PCREL): Ditto. (R_TILEGX_IMM16_X0_HW1_LAST_PLT_PCREL): Ditto. (R_TILEGX_IMM16_X1_HW1_LAST_PLT_PCREL): Ditto. (R_TILEGX_IMM16_X0_HW2_LAST_PLT_PCREL ): Ditto. (R_TILEGX_IMM16_X1_HW2_LAST_PLT_PCREL): Ditto.
This commit is contained in:
parent
aedbcd6364
commit
e5b95258d9
@ -1,3 +1,28 @@
|
||||
2012-08-27 Walter Lee <walt@tilera.com>
|
||||
|
||||
* reloc.c (Add BFD_RELOC_TILEGX_IMM16_X0_HW0_PLT_PCREL,
|
||||
BFD_RELOC_TILEGX_IMM16_X1_HW0_PLT_PCREL,
|
||||
BFD_RELOC_TILEGX_IMM16_X0_HW1_PLT_PCREL,
|
||||
BFD_RELOC_TILEGX_IMM16_X1_HW1_PLT_PCREL,
|
||||
BFD_RELOC_TILEGX_IMM16_X0_HW2_PLT_PCREL,
|
||||
BFD_RELOC_TILEGX_IMM16_X1_HW2_PLT_PCREL,
|
||||
BFD_RELOC_TILEGX_IMM16_X0_HW3_PLT_PCREL,
|
||||
BFD_RELOC_TILEGX_IMM16_X1_HW3_PLT_PCREL,
|
||||
BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST_PLT_PCREL,
|
||||
BFD_RELOC_TILEGX_IMM16_X1_HW0_LAST_PLT_PCREL,
|
||||
BFD_RELOC_TILEGX_IMM16_X0_HW1_LAST_PLT_PCREL,
|
||||
BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST_PLT_PCREL,
|
||||
BFD_RELOC_TILEGX_IMM16_X0_HW2_LAST_PLT_PCREL,
|
||||
BFD_RELOC_TILEGX_IMM16_X1_HW2_LAST_PLT_PCREL): new relocations.
|
||||
* elfxx-tilegx.c (tilegx_elf_howto_table): Handle new relocations.
|
||||
(tilegx_reloc_map): Ditto.
|
||||
(reloc_to_create_func): Ditto.
|
||||
(tilegx_elf_check_relocs): Ditto.
|
||||
(tilegx_elf_gc_sweep_hook): Ditto.
|
||||
(tilegx_elf_relocate_section): Ditto.
|
||||
* libbfd.h: Regenerate.
|
||||
* bfd-in2.h: Regenerate.
|
||||
|
||||
2012-08-24 Matthew Gretton-Dann <matthew.gretton-dann@arm.com>
|
||||
|
||||
* elf32-arm.c (v8): New array.
|
||||
|
@ -5421,10 +5421,18 @@ giving a 16 bit signed byte offset. */
|
||||
BFD_RELOC_TILEGX_IMM16_X1_HW2_LAST_PCREL,
|
||||
BFD_RELOC_TILEGX_IMM16_X0_HW0_GOT,
|
||||
BFD_RELOC_TILEGX_IMM16_X1_HW0_GOT,
|
||||
BFD_RELOC_TILEGX_IMM16_X0_HW0_PLT_PCREL,
|
||||
BFD_RELOC_TILEGX_IMM16_X1_HW0_PLT_PCREL,
|
||||
BFD_RELOC_TILEGX_IMM16_X0_HW1_PLT_PCREL,
|
||||
BFD_RELOC_TILEGX_IMM16_X1_HW1_PLT_PCREL,
|
||||
BFD_RELOC_TILEGX_IMM16_X0_HW2_PLT_PCREL,
|
||||
BFD_RELOC_TILEGX_IMM16_X1_HW2_PLT_PCREL,
|
||||
BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST_GOT,
|
||||
BFD_RELOC_TILEGX_IMM16_X1_HW0_LAST_GOT,
|
||||
BFD_RELOC_TILEGX_IMM16_X0_HW1_LAST_GOT,
|
||||
BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST_GOT,
|
||||
BFD_RELOC_TILEGX_IMM16_X0_HW3_PLT_PCREL,
|
||||
BFD_RELOC_TILEGX_IMM16_X1_HW3_PLT_PCREL,
|
||||
BFD_RELOC_TILEGX_IMM16_X0_HW0_TLS_GD,
|
||||
BFD_RELOC_TILEGX_IMM16_X1_HW0_TLS_GD,
|
||||
BFD_RELOC_TILEGX_IMM16_X0_HW0_TLS_LE,
|
||||
@ -5439,6 +5447,12 @@ giving a 16 bit signed byte offset. */
|
||||
BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST_TLS_GD,
|
||||
BFD_RELOC_TILEGX_IMM16_X0_HW0_TLS_IE,
|
||||
BFD_RELOC_TILEGX_IMM16_X1_HW0_TLS_IE,
|
||||
BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST_PLT_PCREL,
|
||||
BFD_RELOC_TILEGX_IMM16_X1_HW0_LAST_PLT_PCREL,
|
||||
BFD_RELOC_TILEGX_IMM16_X0_HW1_LAST_PLT_PCREL,
|
||||
BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST_PLT_PCREL,
|
||||
BFD_RELOC_TILEGX_IMM16_X0_HW2_LAST_PLT_PCREL,
|
||||
BFD_RELOC_TILEGX_IMM16_X1_HW2_LAST_PLT_PCREL,
|
||||
BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST_TLS_IE,
|
||||
BFD_RELOC_TILEGX_IMM16_X1_HW0_LAST_TLS_IE,
|
||||
BFD_RELOC_TILEGX_IMM16_X0_HW1_LAST_TLS_IE,
|
||||
|
@ -490,21 +490,21 @@ static reloc_howto_type tilegx_elf_howto_table [] =
|
||||
|
||||
TILEGX_IMM16_HOWTO (R_TILEGX_IMM16_X0_HW0_GOT, 0),
|
||||
TILEGX_IMM16_HOWTO (R_TILEGX_IMM16_X1_HW0_GOT, 0),
|
||||
/* These relocs are currently not defined. */
|
||||
EMPTY_HOWTO (66),
|
||||
EMPTY_HOWTO (67),
|
||||
EMPTY_HOWTO (68),
|
||||
EMPTY_HOWTO (69),
|
||||
EMPTY_HOWTO (70),
|
||||
EMPTY_HOWTO (71),
|
||||
|
||||
TILEGX_IMM16_HOWTO_PCREL (R_TILEGX_IMM16_X0_HW0_PLT_PCREL, 0),
|
||||
TILEGX_IMM16_HOWTO_PCREL (R_TILEGX_IMM16_X1_HW0_PLT_PCREL, 0),
|
||||
TILEGX_IMM16_HOWTO_PCREL (R_TILEGX_IMM16_X0_HW1_PLT_PCREL, 16),
|
||||
TILEGX_IMM16_HOWTO_PCREL (R_TILEGX_IMM16_X1_HW1_PLT_PCREL, 16),
|
||||
TILEGX_IMM16_HOWTO_PCREL (R_TILEGX_IMM16_X0_HW2_PLT_PCREL, 32),
|
||||
TILEGX_IMM16_HOWTO_PCREL (R_TILEGX_IMM16_X1_HW2_PLT_PCREL, 32),
|
||||
|
||||
TILEGX_IMM16_HOWTO_LAST (R_TILEGX_IMM16_X0_HW0_LAST_GOT, 0),
|
||||
TILEGX_IMM16_HOWTO_LAST (R_TILEGX_IMM16_X1_HW0_LAST_GOT, 0),
|
||||
TILEGX_IMM16_HOWTO_LAST (R_TILEGX_IMM16_X0_HW1_LAST_GOT, 16),
|
||||
TILEGX_IMM16_HOWTO_LAST (R_TILEGX_IMM16_X1_HW1_LAST_GOT, 16),
|
||||
/* These relocs are currently not defined. */
|
||||
EMPTY_HOWTO (76),
|
||||
EMPTY_HOWTO (77),
|
||||
|
||||
TILEGX_IMM16_HOWTO_PCREL (R_TILEGX_IMM16_X0_HW3_PLT_PCREL, 48),
|
||||
TILEGX_IMM16_HOWTO_PCREL (R_TILEGX_IMM16_X1_HW3_PLT_PCREL, 48),
|
||||
|
||||
TILEGX_IMM16_HOWTO (R_TILEGX_IMM16_X0_HW0_TLS_GD, 0),
|
||||
TILEGX_IMM16_HOWTO (R_TILEGX_IMM16_X1_HW0_TLS_GD, 0),
|
||||
@ -530,12 +530,13 @@ static reloc_howto_type tilegx_elf_howto_table [] =
|
||||
|
||||
TILEGX_IMM16_HOWTO_TLS_IE (R_TILEGX_IMM16_X0_HW0_TLS_IE, 0),
|
||||
TILEGX_IMM16_HOWTO_TLS_IE (R_TILEGX_IMM16_X1_HW0_TLS_IE, 0),
|
||||
EMPTY_HOWTO (94),
|
||||
EMPTY_HOWTO (95),
|
||||
EMPTY_HOWTO (96),
|
||||
EMPTY_HOWTO (97),
|
||||
EMPTY_HOWTO (98),
|
||||
EMPTY_HOWTO (99),
|
||||
|
||||
TILEGX_IMM16_HOWTO_LAST_PCREL (R_TILEGX_IMM16_X0_HW0_LAST_PLT_PCREL, 0),
|
||||
TILEGX_IMM16_HOWTO_LAST_PCREL (R_TILEGX_IMM16_X1_HW0_LAST_PLT_PCREL, 0),
|
||||
TILEGX_IMM16_HOWTO_LAST_PCREL (R_TILEGX_IMM16_X0_HW1_LAST_PLT_PCREL, 16),
|
||||
TILEGX_IMM16_HOWTO_LAST_PCREL (R_TILEGX_IMM16_X1_HW1_LAST_PLT_PCREL, 16),
|
||||
TILEGX_IMM16_HOWTO_LAST_PCREL (R_TILEGX_IMM16_X0_HW2_LAST_PLT_PCREL, 32),
|
||||
TILEGX_IMM16_HOWTO_LAST_PCREL (R_TILEGX_IMM16_X1_HW2_LAST_PLT_PCREL, 32),
|
||||
|
||||
#define TILEGX_IMM16_HOWTO_LAST_TLS_IE(name, rshift) \
|
||||
HOWTO (name, rshift, 1, 16, FALSE, 0, \
|
||||
@ -713,10 +714,18 @@ static const reloc_map tilegx_reloc_map [] =
|
||||
SIMPLE_REMAP (TILEGX_IMM16_X1_HW2_LAST_PCREL)
|
||||
SIMPLE_REMAP (TILEGX_IMM16_X0_HW0_GOT)
|
||||
SIMPLE_REMAP (TILEGX_IMM16_X1_HW0_GOT)
|
||||
SIMPLE_REMAP (TILEGX_IMM16_X0_HW0_PLT_PCREL)
|
||||
SIMPLE_REMAP (TILEGX_IMM16_X1_HW0_PLT_PCREL)
|
||||
SIMPLE_REMAP (TILEGX_IMM16_X0_HW1_PLT_PCREL)
|
||||
SIMPLE_REMAP (TILEGX_IMM16_X1_HW1_PLT_PCREL)
|
||||
SIMPLE_REMAP (TILEGX_IMM16_X0_HW2_PLT_PCREL)
|
||||
SIMPLE_REMAP (TILEGX_IMM16_X1_HW2_PLT_PCREL)
|
||||
SIMPLE_REMAP (TILEGX_IMM16_X0_HW0_LAST_GOT)
|
||||
SIMPLE_REMAP (TILEGX_IMM16_X1_HW0_LAST_GOT)
|
||||
SIMPLE_REMAP (TILEGX_IMM16_X0_HW1_LAST_GOT)
|
||||
SIMPLE_REMAP (TILEGX_IMM16_X1_HW1_LAST_GOT)
|
||||
SIMPLE_REMAP (TILEGX_IMM16_X0_HW3_PLT_PCREL)
|
||||
SIMPLE_REMAP (TILEGX_IMM16_X1_HW3_PLT_PCREL)
|
||||
SIMPLE_REMAP (TILEGX_IMM16_X0_HW0_TLS_GD)
|
||||
SIMPLE_REMAP (TILEGX_IMM16_X1_HW0_TLS_GD)
|
||||
SIMPLE_REMAP (TILEGX_IMM16_X0_HW0_TLS_LE)
|
||||
@ -731,6 +740,12 @@ static const reloc_map tilegx_reloc_map [] =
|
||||
SIMPLE_REMAP (TILEGX_IMM16_X1_HW1_LAST_TLS_GD)
|
||||
SIMPLE_REMAP (TILEGX_IMM16_X0_HW0_TLS_IE)
|
||||
SIMPLE_REMAP (TILEGX_IMM16_X1_HW0_TLS_IE)
|
||||
SIMPLE_REMAP (TILEGX_IMM16_X0_HW0_LAST_PLT_PCREL)
|
||||
SIMPLE_REMAP (TILEGX_IMM16_X1_HW0_LAST_PLT_PCREL)
|
||||
SIMPLE_REMAP (TILEGX_IMM16_X0_HW1_LAST_PLT_PCREL)
|
||||
SIMPLE_REMAP (TILEGX_IMM16_X1_HW1_LAST_PLT_PCREL)
|
||||
SIMPLE_REMAP (TILEGX_IMM16_X0_HW2_LAST_PLT_PCREL)
|
||||
SIMPLE_REMAP (TILEGX_IMM16_X1_HW2_LAST_PLT_PCREL)
|
||||
SIMPLE_REMAP (TILEGX_IMM16_X0_HW0_LAST_TLS_IE)
|
||||
SIMPLE_REMAP (TILEGX_IMM16_X1_HW0_LAST_TLS_IE)
|
||||
SIMPLE_REMAP (TILEGX_IMM16_X0_HW1_LAST_TLS_IE)
|
||||
@ -1027,18 +1042,18 @@ static const tilegx_create_func reloc_to_create_func[] =
|
||||
create_Imm16_X1,
|
||||
create_Imm16_X0,
|
||||
create_Imm16_X1,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
create_Imm16_X0,
|
||||
create_Imm16_X1,
|
||||
create_Imm16_X0,
|
||||
create_Imm16_X1,
|
||||
NULL,
|
||||
NULL,
|
||||
create_Imm16_X0,
|
||||
create_Imm16_X1,
|
||||
create_Imm16_X0,
|
||||
create_Imm16_X1,
|
||||
create_Imm16_X0,
|
||||
create_Imm16_X1,
|
||||
create_Imm16_X0,
|
||||
create_Imm16_X1,
|
||||
create_Imm16_X0,
|
||||
create_Imm16_X1,
|
||||
create_Imm16_X0,
|
||||
@ -1055,12 +1070,12 @@ static const tilegx_create_func reloc_to_create_func[] =
|
||||
NULL,
|
||||
create_Imm16_X0,
|
||||
create_Imm16_X1,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
create_Imm16_X0,
|
||||
create_Imm16_X1,
|
||||
create_Imm16_X0,
|
||||
create_Imm16_X1,
|
||||
create_Imm16_X0,
|
||||
create_Imm16_X1,
|
||||
create_Imm16_X0,
|
||||
create_Imm16_X1,
|
||||
create_Imm16_X0,
|
||||
@ -1855,6 +1870,20 @@ tilegx_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
|
||||
/* Fall through */
|
||||
|
||||
case R_TILEGX_JUMPOFF_X1_PLT:
|
||||
case R_TILEGX_IMM16_X0_HW0_PLT_PCREL:
|
||||
case R_TILEGX_IMM16_X1_HW0_PLT_PCREL:
|
||||
case R_TILEGX_IMM16_X0_HW1_PLT_PCREL:
|
||||
case R_TILEGX_IMM16_X1_HW1_PLT_PCREL:
|
||||
case R_TILEGX_IMM16_X0_HW2_PLT_PCREL:
|
||||
case R_TILEGX_IMM16_X1_HW2_PLT_PCREL:
|
||||
case R_TILEGX_IMM16_X0_HW3_PLT_PCREL:
|
||||
case R_TILEGX_IMM16_X1_HW3_PLT_PCREL:
|
||||
case R_TILEGX_IMM16_X0_HW0_LAST_PLT_PCREL:
|
||||
case R_TILEGX_IMM16_X1_HW0_LAST_PLT_PCREL:
|
||||
case R_TILEGX_IMM16_X0_HW1_LAST_PLT_PCREL:
|
||||
case R_TILEGX_IMM16_X1_HW1_LAST_PLT_PCREL:
|
||||
case R_TILEGX_IMM16_X0_HW2_LAST_PLT_PCREL:
|
||||
case R_TILEGX_IMM16_X1_HW2_LAST_PLT_PCREL:
|
||||
/* This symbol requires a procedure linkage table entry. We
|
||||
actually build the entry in adjust_dynamic_symbol,
|
||||
because this might be a case of linking PIC code without
|
||||
@ -2248,6 +2277,20 @@ tilegx_elf_gc_sweep_hook (bfd *abfd, struct bfd_link_info *info,
|
||||
/* Fall through. */
|
||||
|
||||
case R_TILEGX_JUMPOFF_X1_PLT:
|
||||
case R_TILEGX_IMM16_X0_HW0_PLT_PCREL:
|
||||
case R_TILEGX_IMM16_X1_HW0_PLT_PCREL:
|
||||
case R_TILEGX_IMM16_X0_HW1_PLT_PCREL:
|
||||
case R_TILEGX_IMM16_X1_HW1_PLT_PCREL:
|
||||
case R_TILEGX_IMM16_X0_HW2_PLT_PCREL:
|
||||
case R_TILEGX_IMM16_X1_HW2_PLT_PCREL:
|
||||
case R_TILEGX_IMM16_X0_HW3_PLT_PCREL:
|
||||
case R_TILEGX_IMM16_X1_HW3_PLT_PCREL:
|
||||
case R_TILEGX_IMM16_X0_HW0_LAST_PLT_PCREL:
|
||||
case R_TILEGX_IMM16_X1_HW0_LAST_PLT_PCREL:
|
||||
case R_TILEGX_IMM16_X0_HW1_LAST_PLT_PCREL:
|
||||
case R_TILEGX_IMM16_X1_HW1_LAST_PLT_PCREL:
|
||||
case R_TILEGX_IMM16_X0_HW2_LAST_PLT_PCREL:
|
||||
case R_TILEGX_IMM16_X1_HW2_LAST_PLT_PCREL:
|
||||
if (h != NULL)
|
||||
{
|
||||
if (h->plt.refcount > 0)
|
||||
@ -3440,6 +3483,20 @@ tilegx_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
|
||||
break;
|
||||
|
||||
case R_TILEGX_JUMPOFF_X1_PLT:
|
||||
case R_TILEGX_IMM16_X0_HW0_PLT_PCREL:
|
||||
case R_TILEGX_IMM16_X1_HW0_PLT_PCREL:
|
||||
case R_TILEGX_IMM16_X0_HW1_PLT_PCREL:
|
||||
case R_TILEGX_IMM16_X1_HW1_PLT_PCREL:
|
||||
case R_TILEGX_IMM16_X0_HW2_PLT_PCREL:
|
||||
case R_TILEGX_IMM16_X1_HW2_PLT_PCREL:
|
||||
case R_TILEGX_IMM16_X0_HW3_PLT_PCREL:
|
||||
case R_TILEGX_IMM16_X1_HW3_PLT_PCREL:
|
||||
case R_TILEGX_IMM16_X0_HW0_LAST_PLT_PCREL:
|
||||
case R_TILEGX_IMM16_X1_HW0_LAST_PLT_PCREL:
|
||||
case R_TILEGX_IMM16_X0_HW1_LAST_PLT_PCREL:
|
||||
case R_TILEGX_IMM16_X1_HW1_LAST_PLT_PCREL:
|
||||
case R_TILEGX_IMM16_X0_HW2_LAST_PLT_PCREL:
|
||||
case R_TILEGX_IMM16_X1_HW2_LAST_PLT_PCREL:
|
||||
/* Relocation is to the entry for this symbol in the
|
||||
procedure linkage table. */
|
||||
BFD_ASSERT (h != NULL);
|
||||
|
14
bfd/libbfd.h
14
bfd/libbfd.h
@ -2613,10 +2613,18 @@ static const char *const bfd_reloc_code_real_names[] = { "@@uninitialized@@",
|
||||
"BFD_RELOC_TILEGX_IMM16_X1_HW2_LAST_PCREL",
|
||||
"BFD_RELOC_TILEGX_IMM16_X0_HW0_GOT",
|
||||
"BFD_RELOC_TILEGX_IMM16_X1_HW0_GOT",
|
||||
"BFD_RELOC_TILEGX_IMM16_X0_HW0_PLT_PCREL",
|
||||
"BFD_RELOC_TILEGX_IMM16_X1_HW0_PLT_PCREL",
|
||||
"BFD_RELOC_TILEGX_IMM16_X0_HW1_PLT_PCREL",
|
||||
"BFD_RELOC_TILEGX_IMM16_X1_HW1_PLT_PCREL",
|
||||
"BFD_RELOC_TILEGX_IMM16_X0_HW2_PLT_PCREL",
|
||||
"BFD_RELOC_TILEGX_IMM16_X1_HW2_PLT_PCREL",
|
||||
"BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST_GOT",
|
||||
"BFD_RELOC_TILEGX_IMM16_X1_HW0_LAST_GOT",
|
||||
"BFD_RELOC_TILEGX_IMM16_X0_HW1_LAST_GOT",
|
||||
"BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST_GOT",
|
||||
"BFD_RELOC_TILEGX_IMM16_X0_HW3_PLT_PCREL",
|
||||
"BFD_RELOC_TILEGX_IMM16_X1_HW3_PLT_PCREL",
|
||||
"BFD_RELOC_TILEGX_IMM16_X0_HW0_TLS_GD",
|
||||
"BFD_RELOC_TILEGX_IMM16_X1_HW0_TLS_GD",
|
||||
"BFD_RELOC_TILEGX_IMM16_X0_HW0_TLS_LE",
|
||||
@ -2631,6 +2639,12 @@ static const char *const bfd_reloc_code_real_names[] = { "@@uninitialized@@",
|
||||
"BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST_TLS_GD",
|
||||
"BFD_RELOC_TILEGX_IMM16_X0_HW0_TLS_IE",
|
||||
"BFD_RELOC_TILEGX_IMM16_X1_HW0_TLS_IE",
|
||||
"BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST_PLT_PCREL",
|
||||
"BFD_RELOC_TILEGX_IMM16_X1_HW0_LAST_PLT_PCREL",
|
||||
"BFD_RELOC_TILEGX_IMM16_X0_HW1_LAST_PLT_PCREL",
|
||||
"BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST_PLT_PCREL",
|
||||
"BFD_RELOC_TILEGX_IMM16_X0_HW2_LAST_PLT_PCREL",
|
||||
"BFD_RELOC_TILEGX_IMM16_X1_HW2_LAST_PLT_PCREL",
|
||||
"BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST_TLS_IE",
|
||||
"BFD_RELOC_TILEGX_IMM16_X1_HW0_LAST_TLS_IE",
|
||||
"BFD_RELOC_TILEGX_IMM16_X0_HW1_LAST_TLS_IE",
|
||||
|
28
bfd/reloc.c
28
bfd/reloc.c
@ -6429,6 +6429,18 @@ ENUMX
|
||||
BFD_RELOC_TILEGX_IMM16_X0_HW0_GOT
|
||||
ENUMX
|
||||
BFD_RELOC_TILEGX_IMM16_X1_HW0_GOT
|
||||
ENUMX
|
||||
BFD_RELOC_TILEGX_IMM16_X0_HW0_PLT_PCREL
|
||||
ENUMX
|
||||
BFD_RELOC_TILEGX_IMM16_X1_HW0_PLT_PCREL
|
||||
ENUMX
|
||||
BFD_RELOC_TILEGX_IMM16_X0_HW1_PLT_PCREL
|
||||
ENUMX
|
||||
BFD_RELOC_TILEGX_IMM16_X1_HW1_PLT_PCREL
|
||||
ENUMX
|
||||
BFD_RELOC_TILEGX_IMM16_X0_HW2_PLT_PCREL
|
||||
ENUMX
|
||||
BFD_RELOC_TILEGX_IMM16_X1_HW2_PLT_PCREL
|
||||
ENUMX
|
||||
BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST_GOT
|
||||
ENUMX
|
||||
@ -6437,6 +6449,10 @@ ENUMX
|
||||
BFD_RELOC_TILEGX_IMM16_X0_HW1_LAST_GOT
|
||||
ENUMX
|
||||
BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST_GOT
|
||||
ENUMX
|
||||
BFD_RELOC_TILEGX_IMM16_X0_HW3_PLT_PCREL
|
||||
ENUMX
|
||||
BFD_RELOC_TILEGX_IMM16_X1_HW3_PLT_PCREL
|
||||
ENUMX
|
||||
BFD_RELOC_TILEGX_IMM16_X0_HW0_TLS_GD
|
||||
ENUMX
|
||||
@ -6465,6 +6481,18 @@ ENUMX
|
||||
BFD_RELOC_TILEGX_IMM16_X0_HW0_TLS_IE
|
||||
ENUMX
|
||||
BFD_RELOC_TILEGX_IMM16_X1_HW0_TLS_IE
|
||||
ENUMX
|
||||
BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST_PLT_PCREL
|
||||
ENUMX
|
||||
BFD_RELOC_TILEGX_IMM16_X1_HW0_LAST_PLT_PCREL
|
||||
ENUMX
|
||||
BFD_RELOC_TILEGX_IMM16_X0_HW1_LAST_PLT_PCREL
|
||||
ENUMX
|
||||
BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST_PLT_PCREL
|
||||
ENUMX
|
||||
BFD_RELOC_TILEGX_IMM16_X0_HW2_LAST_PLT_PCREL
|
||||
ENUMX
|
||||
BFD_RELOC_TILEGX_IMM16_X1_HW2_LAST_PLT_PCREL
|
||||
ENUMX
|
||||
BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST_TLS_IE
|
||||
ENUMX
|
||||
|
@ -1,3 +1,14 @@
|
||||
2012-08-27 Walter Lee <walt@tilera.com>
|
||||
|
||||
* tc-tilegx.c (O_hw0_plt): Define operator.
|
||||
(O_hw1_plt): Ditto.
|
||||
(O_hw1_last_plt): Ditto.
|
||||
(O_hw2_last_plt): Ditto.
|
||||
(md_begin): Handle new operators.
|
||||
(emit_tilegx_instruction): Ditto.
|
||||
(md_apply_fix): Ditto.
|
||||
* doc/c-tilegx.texi: Document new operators.
|
||||
|
||||
2012-08-24 Matthew Gretton-Dann <matthew.gretton-dann@arm.com>
|
||||
|
||||
* config/tc-arm.c (ARM_ENC_TAB): Add sha1h and sha2op entries.
|
||||
|
@ -173,6 +173,10 @@ md_show_usage (FILE *stream)
|
||||
#define O_tls_gd_add O_md22
|
||||
#define O_tls_ie_load O_md23
|
||||
#define O_tls_add O_md24
|
||||
#define O_hw0_plt O_md25
|
||||
#define O_hw1_plt O_md26
|
||||
#define O_hw1_last_plt O_md27
|
||||
#define O_hw2_last_plt O_md28
|
||||
|
||||
static struct hash_control *special_operator_hash;
|
||||
|
||||
@ -300,6 +304,10 @@ md_begin (void)
|
||||
INSERT_SPECIAL_OP (tls_gd_add);
|
||||
INSERT_SPECIAL_OP (tls_ie_load);
|
||||
INSERT_SPECIAL_OP (tls_add);
|
||||
INSERT_SPECIAL_OP (hw0_plt);
|
||||
INSERT_SPECIAL_OP (hw1_plt);
|
||||
INSERT_SPECIAL_OP (hw1_last_plt);
|
||||
INSERT_SPECIAL_OP (hw2_last_plt);
|
||||
#undef INSERT_SPECIAL_OP
|
||||
|
||||
/* Initialize op_hash hash table. */
|
||||
@ -611,6 +619,22 @@ emit_tilegx_instruction (tilegx_bundle_bits bits,
|
||||
require_symbol = 1;
|
||||
break;
|
||||
|
||||
case O_hw0_plt:
|
||||
HANDLE_OP16 (HW0_PLT_PCREL);
|
||||
break;
|
||||
|
||||
case O_hw1_plt:
|
||||
HANDLE_OP16 (HW1_PLT_PCREL);
|
||||
break;
|
||||
|
||||
case O_hw1_last_plt:
|
||||
HANDLE_OP16 (HW1_LAST_PLT_PCREL);
|
||||
break;
|
||||
|
||||
case O_hw2_last_plt:
|
||||
HANDLE_OP16 (HW2_LAST_PLT_PCREL);
|
||||
break;
|
||||
|
||||
#undef HANDLE_OP16
|
||||
|
||||
case O_plt:
|
||||
@ -1475,6 +1499,13 @@ md_apply_fix (fixS *fixP, valueT * valP, segT seg ATTRIBUTE_UNUSED)
|
||||
fixP->fx_r_type = rtype; \
|
||||
break
|
||||
|
||||
#define FIX_PLT_PCREL(rtype) \
|
||||
case rtype##_PLT_PCREL: \
|
||||
if (!fixP->fx_pcrel) \
|
||||
fixP->fx_r_type = rtype; \
|
||||
\
|
||||
break;
|
||||
|
||||
FIX_PCREL (BFD_RELOC_8);
|
||||
FIX_PCREL (BFD_RELOC_16);
|
||||
FIX_PCREL (BFD_RELOC_32);
|
||||
@ -1493,6 +1524,14 @@ md_apply_fix (fixS *fixP, valueT * valP, segT seg ATTRIBUTE_UNUSED)
|
||||
FIX_PCREL (BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST);
|
||||
FIX_PCREL (BFD_RELOC_TILEGX_IMM16_X0_HW2_LAST);
|
||||
FIX_PCREL (BFD_RELOC_TILEGX_IMM16_X1_HW2_LAST);
|
||||
FIX_PLT_PCREL (BFD_RELOC_TILEGX_IMM16_X0_HW0);
|
||||
FIX_PLT_PCREL (BFD_RELOC_TILEGX_IMM16_X1_HW0);
|
||||
FIX_PLT_PCREL (BFD_RELOC_TILEGX_IMM16_X0_HW1);
|
||||
FIX_PLT_PCREL (BFD_RELOC_TILEGX_IMM16_X1_HW1);
|
||||
FIX_PLT_PCREL (BFD_RELOC_TILEGX_IMM16_X0_HW1_LAST);
|
||||
FIX_PLT_PCREL (BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST);
|
||||
FIX_PLT_PCREL (BFD_RELOC_TILEGX_IMM16_X0_HW2_LAST);
|
||||
FIX_PLT_PCREL (BFD_RELOC_TILEGX_IMM16_X1_HW2_LAST);
|
||||
|
||||
#undef FIX_PCREL
|
||||
|
||||
@ -1560,6 +1599,8 @@ md_apply_fix (fixS *fixP, valueT * valP, segT seg ATTRIBUTE_UNUSED)
|
||||
case BFD_RELOC_TILEGX_IMM16_X1_HW0:
|
||||
case BFD_RELOC_TILEGX_IMM16_X0_HW0_PCREL:
|
||||
case BFD_RELOC_TILEGX_IMM16_X1_HW0_PCREL:
|
||||
case BFD_RELOC_TILEGX_IMM16_X0_HW0_PLT_PCREL:
|
||||
case BFD_RELOC_TILEGX_IMM16_X1_HW0_PLT_PCREL:
|
||||
special = O_hw0;
|
||||
break;
|
||||
|
||||
@ -1568,6 +1609,8 @@ md_apply_fix (fixS *fixP, valueT * valP, segT seg ATTRIBUTE_UNUSED)
|
||||
case BFD_RELOC_TILEGX_IMM16_X1_HW0_LAST:
|
||||
case BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST_PCREL:
|
||||
case BFD_RELOC_TILEGX_IMM16_X1_HW0_LAST_PCREL:
|
||||
case BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST_PLT_PCREL:
|
||||
case BFD_RELOC_TILEGX_IMM16_X1_HW0_LAST_PLT_PCREL:
|
||||
special = O_hw0_last;
|
||||
break;
|
||||
|
||||
@ -1576,6 +1619,8 @@ md_apply_fix (fixS *fixP, valueT * valP, segT seg ATTRIBUTE_UNUSED)
|
||||
case BFD_RELOC_TILEGX_IMM16_X1_HW1:
|
||||
case BFD_RELOC_TILEGX_IMM16_X0_HW1_PCREL:
|
||||
case BFD_RELOC_TILEGX_IMM16_X1_HW1_PCREL:
|
||||
case BFD_RELOC_TILEGX_IMM16_X0_HW1_PLT_PCREL:
|
||||
case BFD_RELOC_TILEGX_IMM16_X1_HW1_PLT_PCREL:
|
||||
special = O_hw1;
|
||||
break;
|
||||
|
||||
@ -1584,6 +1629,8 @@ md_apply_fix (fixS *fixP, valueT * valP, segT seg ATTRIBUTE_UNUSED)
|
||||
case BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST:
|
||||
case BFD_RELOC_TILEGX_IMM16_X0_HW1_LAST_PCREL:
|
||||
case BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST_PCREL:
|
||||
case BFD_RELOC_TILEGX_IMM16_X0_HW1_LAST_PLT_PCREL:
|
||||
case BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST_PLT_PCREL:
|
||||
special = O_hw1_last;
|
||||
break;
|
||||
|
||||
@ -1592,6 +1639,8 @@ md_apply_fix (fixS *fixP, valueT * valP, segT seg ATTRIBUTE_UNUSED)
|
||||
case BFD_RELOC_TILEGX_IMM16_X1_HW2:
|
||||
case BFD_RELOC_TILEGX_IMM16_X0_HW2_PCREL:
|
||||
case BFD_RELOC_TILEGX_IMM16_X1_HW2_PCREL:
|
||||
case BFD_RELOC_TILEGX_IMM16_X0_HW2_PLT_PCREL:
|
||||
case BFD_RELOC_TILEGX_IMM16_X1_HW2_PLT_PCREL:
|
||||
special = O_hw2;
|
||||
break;
|
||||
|
||||
@ -1600,6 +1649,8 @@ md_apply_fix (fixS *fixP, valueT * valP, segT seg ATTRIBUTE_UNUSED)
|
||||
case BFD_RELOC_TILEGX_IMM16_X1_HW2_LAST:
|
||||
case BFD_RELOC_TILEGX_IMM16_X0_HW2_LAST_PCREL:
|
||||
case BFD_RELOC_TILEGX_IMM16_X1_HW2_LAST_PCREL:
|
||||
case BFD_RELOC_TILEGX_IMM16_X0_HW2_LAST_PLT_PCREL:
|
||||
case BFD_RELOC_TILEGX_IMM16_X1_HW2_LAST_PLT_PCREL:
|
||||
special = O_hw2_last;
|
||||
break;
|
||||
|
||||
@ -1608,6 +1659,8 @@ md_apply_fix (fixS *fixP, valueT * valP, segT seg ATTRIBUTE_UNUSED)
|
||||
case BFD_RELOC_TILEGX_IMM16_X1_HW3:
|
||||
case BFD_RELOC_TILEGX_IMM16_X0_HW3_PCREL:
|
||||
case BFD_RELOC_TILEGX_IMM16_X1_HW3_PCREL:
|
||||
case BFD_RELOC_TILEGX_IMM16_X0_HW3_PLT_PCREL:
|
||||
case BFD_RELOC_TILEGX_IMM16_X1_HW3_PLT_PCREL:
|
||||
special = O_hw3;
|
||||
break;
|
||||
|
||||
|
@ -242,6 +242,26 @@ called (at latest; depending environment variables). It is only safe
|
||||
to leave the symbol unresolved this way if all references are function
|
||||
calls.
|
||||
|
||||
@item hw0_plt
|
||||
|
||||
This modifier is used to load bits 0-15 of the pc-relative address of
|
||||
a plt entry.
|
||||
|
||||
@item hw1_plt
|
||||
|
||||
This modifier is used to load bits 16-31 of the pc-relative address of
|
||||
a plt entry.
|
||||
|
||||
@item hw1_last_plt
|
||||
|
||||
This modifier yields the same value as @code{hw1_plt}, but it also
|
||||
checks that the value does not overflow.
|
||||
|
||||
@item hw2_last_plt
|
||||
|
||||
This modifier is used to load bits 32-47 of the pc-relative address of
|
||||
a plt entry, and it also checks that the value does not overflow.
|
||||
|
||||
@item hw0_tls_gd
|
||||
|
||||
This modifier is used to load bits 0-15 of the offset of the GOT entry
|
||||
|
@ -1,3 +1,20 @@
|
||||
2012-08-27 Walter Lee <walt@tilera.com>
|
||||
|
||||
* tilegx.h (R_TILEGX_IMM16_X0_HW0_PLT_PCREL): New relocation.
|
||||
(R_TILEGX_IMM16_X1_HW0_PLT_PCREL): Ditto.
|
||||
(R_TILEGX_IMM16_X0_HW1_PLT_PCREL): Ditto.
|
||||
(R_TILEGX_IMM16_X1_HW1_PLT_PCREL): Ditto.
|
||||
(R_TILEGX_IMM16_X0_HW2_PLT_PCREL): Ditto.
|
||||
(R_TILEGX_IMM16_X1_HW2_PLT_PCREL): Ditto.
|
||||
(R_TILEGX_IMM16_X0_HW3_PLT_PCREL): Ditto.
|
||||
(R_TILEGX_IMM16_X1_HW3_PLT_PCREL): Ditto.
|
||||
(R_TILEGX_IMM16_X0_HW0_LAST_PLT_PCREL): Ditto.
|
||||
(R_TILEGX_IMM16_X1_HW0_LAST_PLT_PCREL): Ditto.
|
||||
(R_TILEGX_IMM16_X0_HW1_LAST_PLT_PCREL): Ditto.
|
||||
(R_TILEGX_IMM16_X1_HW1_LAST_PLT_PCREL): Ditto.
|
||||
(R_TILEGX_IMM16_X0_HW2_LAST_PLT_PCREL ): Ditto.
|
||||
(R_TILEGX_IMM16_X1_HW2_LAST_PLT_PCREL): Ditto.
|
||||
|
||||
2012-08-13 Ian Bolton <ian.bolton@arm.com>
|
||||
Laurent Desnogues <laurent.desnogues@arm.com>
|
||||
Jim MacArthur <jim.macarthur@arm.com>
|
||||
|
@ -104,13 +104,21 @@ START_RELOC_NUMBERS (elf_tilegx_reloc_type)
|
||||
|
||||
RELOC_NUMBER (R_TILEGX_IMM16_X0_HW0_GOT, 64)
|
||||
RELOC_NUMBER (R_TILEGX_IMM16_X1_HW0_GOT, 65)
|
||||
/* Relocs 66-71 are currently not defined. */
|
||||
|
||||
RELOC_NUMBER (R_TILEGX_IMM16_X0_HW0_PLT_PCREL, 66)
|
||||
RELOC_NUMBER (R_TILEGX_IMM16_X1_HW0_PLT_PCREL, 67)
|
||||
RELOC_NUMBER (R_TILEGX_IMM16_X0_HW1_PLT_PCREL, 68)
|
||||
RELOC_NUMBER (R_TILEGX_IMM16_X1_HW1_PLT_PCREL, 69)
|
||||
RELOC_NUMBER (R_TILEGX_IMM16_X0_HW2_PLT_PCREL, 70)
|
||||
RELOC_NUMBER (R_TILEGX_IMM16_X1_HW2_PLT_PCREL, 71)
|
||||
|
||||
RELOC_NUMBER (R_TILEGX_IMM16_X0_HW0_LAST_GOT, 72)
|
||||
RELOC_NUMBER (R_TILEGX_IMM16_X1_HW0_LAST_GOT, 73)
|
||||
RELOC_NUMBER (R_TILEGX_IMM16_X0_HW1_LAST_GOT, 74)
|
||||
RELOC_NUMBER (R_TILEGX_IMM16_X1_HW1_LAST_GOT, 75)
|
||||
/* Relocs 76-77 are currently not defined. */
|
||||
|
||||
RELOC_NUMBER (R_TILEGX_IMM16_X0_HW3_PLT_PCREL, 76)
|
||||
RELOC_NUMBER (R_TILEGX_IMM16_X1_HW3_PLT_PCREL, 77)
|
||||
|
||||
RELOC_NUMBER (R_TILEGX_IMM16_X0_HW0_TLS_GD, 78)
|
||||
RELOC_NUMBER (R_TILEGX_IMM16_X1_HW0_TLS_GD, 79)
|
||||
@ -128,7 +136,13 @@ START_RELOC_NUMBERS (elf_tilegx_reloc_type)
|
||||
|
||||
RELOC_NUMBER (R_TILEGX_IMM16_X0_HW0_TLS_IE, 92)
|
||||
RELOC_NUMBER (R_TILEGX_IMM16_X1_HW0_TLS_IE, 93)
|
||||
/* Relocs 94-99 are currently not defined. */
|
||||
|
||||
RELOC_NUMBER (R_TILEGX_IMM16_X0_HW0_LAST_PLT_PCREL, 94)
|
||||
RELOC_NUMBER (R_TILEGX_IMM16_X1_HW0_LAST_PLT_PCREL, 95)
|
||||
RELOC_NUMBER (R_TILEGX_IMM16_X0_HW1_LAST_PLT_PCREL, 96)
|
||||
RELOC_NUMBER (R_TILEGX_IMM16_X1_HW1_LAST_PLT_PCREL, 97)
|
||||
RELOC_NUMBER (R_TILEGX_IMM16_X0_HW2_LAST_PLT_PCREL, 98)
|
||||
RELOC_NUMBER (R_TILEGX_IMM16_X1_HW2_LAST_PLT_PCREL, 99)
|
||||
|
||||
RELOC_NUMBER (R_TILEGX_IMM16_X0_HW0_LAST_TLS_IE, 100)
|
||||
RELOC_NUMBER (R_TILEGX_IMM16_X1_HW0_LAST_TLS_IE, 101)
|
||||
|
Loading…
Reference in New Issue
Block a user