Improve TLS support on TILE-Gx/TILEPro:
- Add support for TLS LE references. - Support linker optimization of TLS references. - Delete relocations of GOT/tp relative offsets beyond 32-bits. This brings binutils in line with the support expected in gcc 4.7, for TILE-Gx/TILEPro. bfd/ * reloc.c: Add BFD_RELOC_TILEPRO_TLS_GD_CALL, BFD_RELOC_TILEPRO_IMM8_X0_TLS_GD_ADD, BFD_RELOC_TILEPRO_IMM8_X1_TLS_GD_ADD, BFD_RELOC_TILEPRO_IMM8_Y0_TLS_GD_ADD, BFD_RELOC_TILEPRO_IMM8_Y1_TLS_GD_ADD, BFD_RELOC_TILEPRO_TLS_IE_LOAD, BFD_RELOC_TILEPRO_IMM16_X0_TLS_LE, BFD_RELOC_TILEPRO_IMM16_X1_TLS_LE, BFD_RELOC_TILEPRO_IMM16_X0_TLS_LE_LO, BFD_RELOC_TILEPRO_IMM16_X1_TLS_LE_LO, BFD_RELOC_TILEPRO_IMM16_X0_TLS_LE_HI, BFD_RELOC_TILEPRO_IMM16_X1_TLS_LE_HI, BFD_RELOC_TILEPRO_IMM16_X0_TLS_LE_HA, BFD_RELOC_TILEPRO_IMM16_X1_TLS_LE_HA, BFD_RELOC_TILEGX_IMM16_X0_HW0_TLS_LE, BFD_RELOC_TILEGX_IMM16_X1_HW0_TLS_LE, BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST_TLS_LE, BFD_RELOC_TILEGX_IMM16_X1_HW0_LAST_TLS_LE, BFD_RELOC_TILEGX_IMM16_X0_HW1_LAST_TLS_LE, BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST_TLS_LE, BFD_RELOC_TILEGX_TLS_GD_CALL, BFD_RELOC_TILEGX_IMM8_X0_TLS_GD_ADD, BFD_RELOC_TILEGX_IMM8_X1_TLS_GD_ADD, BFD_RELOC_TILEGX_IMM8_Y0_TLS_GD_ADD, BFD_RELOC_TILEGX_IMM8_Y1_TLS_GD_ADD, BFD_RELOC_TILEGX_TLS_IE_LOAD, BFD_RELOC_TILEGX_IMM8_X0_TLS_ADD, BFD_RELOC_TILEGX_IMM8_X1_TLS_ADD, BFD_RELOC_TILEGX_IMM8_Y0_TLS_ADD, BFD_RELOC_TILEGX_IMM8_Y1_TLS_ADD. Delete BFD_RELOC_TILEGX_IMM16_X0_HW1_GOT, BFD_RELOC_TILEGX_IMM16_X1_HW1_GOT, BFD_RELOC_TILEGX_IMM16_X0_HW2_GOT, BFD_RELOC_TILEGX_IMM16_X1_HW2_GOT, BFD_RELOC_TILEGX_IMM16_X0_HW3_GOT, BFD_RELOC_TILEGX_IMM16_X1_HW3_GOT, BFD_RELOC_TILEGX_IMM16_X0_HW2_LAST_GOT, BFD_RELOC_TILEGX_IMM16_X1_HW2_LAST_GOT, BFD_RELOC_TILEGX_IMM16_X0_HW1_TLS_GD, BFD_RELOC_TILEGX_IMM16_X1_HW1_TLS_GD, BFD_RELOC_TILEGX_IMM16_X0_HW2_TLS_GD, BFD_RELOC_TILEGX_IMM16_X1_HW2_TLS_GD, BFD_RELOC_TILEGX_IMM16_X0_HW3_TLS_GD, BFD_RELOC_TILEGX_IMM16_X1_HW3_TLS_GD, BFD_RELOC_TILEGX_IMM16_X0_HW2_LAST_TLS_GD, BFD_RELOC_TILEGX_IMM16_X1_HW2_LAST_TLS_GD, BFD_RELOC_TILEGX_IMM16_X0_HW1_TLS_IE, BFD_RELOC_TILEGX_IMM16_X1_HW1_TLS_IE, BFD_RELOC_TILEGX_IMM16_X0_HW2_TLS_IE, BFD_RELOC_TILEGX_IMM16_X1_HW2_TLS_IE, BFD_RELOC_TILEGX_IMM16_X0_HW3_TLS_IE, BFD_RELOC_TILEGX_IMM16_X1_HW3_TLS_IE, BFD_RELOC_TILEGX_IMM16_X0_HW2_LAST_TLS_IE, BFD_RELOC_TILEGX_IMM16_X1_HW2_LAST_TLS_IE. * elf32-tilepro.c (tilepro_elf_howto_table): Update tilepro relocations. (tilepro_reloc_map): Ditto. (tilepro_info_to_howto_rela): Ditto. (reloc_to_create_func): Ditto. (tilepro_tls_translate_to_le): New. (tilepro_tls_translate_to_ie): New. (tilepro_elf_tls_transition): New. (tilepro_elf_check_relocs): Handle new tls relocations. (tilepro_elf_gc_sweep_hook): Ditto. (allocate_dynrelocs): Ditto. (tilepro_elf_relocate_section): Ditto. (tilepro_replace_insn): New. (insn_mask_X1): New. (insn_mask_X0_no_dest_no_srca): New (insn_mask_X1_no_dest_no_srca): New (insn_mask_Y0_no_dest_no_srca): New (insn_mask_Y1_no_dest_no_srca): New (srca_mask_X0): New (srca_mask_X1): New (insn_tls_le_move_X1): New (insn_tls_le_move_zero_X0X1): New (insn_tls_ie_lw_X1): New (insn_tls_ie_add_X0X1): New (insn_tls_ie_add_Y0Y1): New (insn_tls_gd_add_X0X1): New (insn_tls_gd_add_Y0Y1): New * elfxx-tilegx.c (tilegx_elf_howto_table): Update tilegx relocations. (tilegx_reloc_map): Ditto. (tilegx_info_to_howto_rela): Ditto. (reloc_to_create_func): Ditto. (tilegx_elf_link_hash_table): New field disable_le_transition. (tilegx_tls_translate_to_le): New. (tilegx_tls_translate_to_ie): New. (tilegx_elf_tls_transition): New. (tilegx_elf_check_relocs): Handle new tls relocations. (tilegx_elf_gc_sweep_hook): Ditto. (allocate_dynrelocs): Ditto. (tilegx_elf_relocate_section): Ditto. (tilegx_copy_bits): New. (tilegx_replace_insn): New. (insn_mask_X1): New. (insn_mask_X0_no_dest_no_srca): New. (insn_mask_X1_no_dest_no_srca): New. (insn_mask_Y0_no_dest_no_srca): New. (insn_mask_Y1_no_dest_no_srca): New. (insn_mask_X0_no_operand): New. (insn_mask_X1_no_operand): New. (insn_mask_Y0_no_operand): New. (insn_mask_Y1_no_operand): New. (insn_tls_ie_ld_X1): New. (insn_tls_ie_ld4s_X1): New. (insn_tls_ie_add_X0X1): New. (insn_tls_ie_add_Y0Y1): New. (insn_tls_ie_addx_X0X1): New. (insn_tls_ie_addx_Y0Y1): New. (insn_tls_gd_add_X0X1): New. (insn_tls_gd_add_Y0Y1): New. (insn_move_X0X1): New. (insn_move_Y0Y1): New. (insn_add_X0X1): New. (insn_add_Y0Y1): New. (insn_addx_X0X1): New. (insn_addx_Y0Y1): New. * libbfd.h: Regenerate. * bfd-in2.h: Regenerate. gas/ * tc-tilepro.c (O_tls_le): Define operator. (O_tls_le_lo16): Ditto. (O_tls_le_hi16): Ditto. (O_tls_le_ha16): Ditto. (O_tls_gd_call): Ditto. (O_tls_gd_add): Ditto. (O_tls_ie_load): Ditto. (md_begin): Delete old operators; handle new operators. (emit_tilepro_instruction): Ditto. (md_apply_fix): Ditto. * tc-tilegx.c (O_hw1_got): Delete operator. (O_hw2_got): Ditto. (O_hw3_got): Ditto. (O_hw2_last_got): Ditto. (O_hw1_tls_gd): Ditto. (O_hw2_tls_gd): Ditto. (O_hw3_tls_gd): Ditto. (O_hw2_last_tls_gd): Ditto. (O_hw1_tls_ie): Ditto. (O_hw2_tls_ie): Ditto. (O_hw3_tls_ie): Ditto. (O_hw2_last_tls_ie): Ditto. (O_hw0_tls_le): Define operator. (O_hw0_last_tls_le): Ditto. (O_hw1_last_tls_le): Ditto. (O_tls_gd_call): Ditto. (O_tls_gd_add): Ditto. (O_tls_ie_load): Ditto. (O_tls_add): Ditto. (md_begin): Delete old operators; handle new operators. (emit_tilegx_instruction): Ditto. (md_apply_fix): Ditto. * doc/c-tilegx.texi: Delete old operators; document new operators. * doc/c-tilepro.texi: Ditto. include/elf/ * tilegx.h (R_TILEGX_IMM16_X0_HW1_GOT): Delete. (R_TILEGX_IMM16_X1_HW1_GOT): Ditto. (R_TILEGX_IMM16_X0_HW2_GOT): Ditto. (R_TILEGX_IMM16_X1_HW2_GOT): Ditto. (R_TILEGX_IMM16_X0_HW3_GOT): Ditto. (R_TILEGX_IMM16_X1_HW3_GOT): Ditto. (R_TILEGX_IMM16_X0_HW2_LAST_GOT): Ditto. (R_TILEGX_IMM16_X1_HW2_LAST_GOT): Ditto. (R_TILEGX_IMM16_X0_HW1_TLS_GD): Ditto. (R_TILEGX_IMM16_X1_HW1_TLS_GD): Ditto. (R_TILEGX_IMM16_X0_HW2_TLS_GD): Ditto. (R_TILEGX_IMM16_X1_HW2_TLS_GD): Ditto. (R_TILEGX_IMM16_X0_HW3_TLS_GD): Ditto. (R_TILEGX_IMM16_X1_HW3_TLS_GD): Ditto. (R_TILEGX_IMM16_X0_HW2_LAST_TLS_GD): Ditto. (R_TILEGX_IMM16_X1_HW2_LAST_TLS_GD): Ditto. (R_TILEGX_IMM16_X0_HW1_TLS_IE): Ditto. (R_TILEGX_IMM16_X1_HW1_TLS_IE): Ditto. (R_TILEGX_IMM16_X0_HW2_TLS_IE): Ditto. (R_TILEGX_IMM16_X1_HW2_TLS_IE): Ditto. (R_TILEGX_IMM16_X0_HW3_TLS_IE): Ditto. (R_TILEGX_IMM16_X1_HW3_TLS_IE): Ditto. (R_TILEGX_IMM16_X0_HW2_LAST_TLS_IE): Ditto. (R_TILEGX_IMM16_X1_HW2_LAST_TLS_IE): Ditto. (R_TILEGX_IMM16_X0_HW0_TLS_LE): New relocation. (R_TILEGX_IMM16_X1_HW0_TLS_LE): Ditto. (R_TILEGX_IMM16_X0_HW0_LAST_TLS_LE): Ditto. (R_TILEGX_IMM16_X1_HW0_LAST_TLS_LE): Ditto. (R_TILEGX_IMM16_X0_HW1_LAST_TLS_LE): Ditto. (R_TILEGX_IMM16_X1_HW1_LAST_TLS_LE): Ditto. (R_TILEGX_TLS_GD_CALL): Ditto. (R_TILEGX_IMM8_X0_TLS_GD_ADD): Ditto. (R_TILEGX_IMM8_X1_TLS_GD_ADD): Ditto. (R_TILEGX_IMM8_Y0_TLS_GD_ADD): Ditto. (R_TILEGX_IMM8_Y1_TLS_GD_ADD): Ditto. (R_TILEGX_TLS_IE_LOAD): Ditto. (R_TILEGX_IMM8_X0_TLS_ADD): Ditto. (R_TILEGX_IMM8_X1_TLS_ADD): Ditto. (R_TILEGX_IMM8_Y0_TLS_ADD): Ditto. (R_TILEGX_IMM8_Y1_TLS_ADD): Ditto. * tilepro.h (R_TILEPRO_TLS_GD_CALL): New relocation. (R_TILEPRO_IMM8_X0_TLS_GD_ADD): Ditto. (R_TILEPRO_IMM8_X1_TLS_GD_ADD): Ditto. (R_TILEPRO_IMM8_Y0_TLS_GD_ADD): Ditto. (R_TILEPRO_IMM8_Y1_TLS_GD_ADD): Ditto. (R_TILEPRO_TLS_IE_LOAD): Ditto. (R_TILEPRO_IMM16_X0_TLS_LE): Ditto. (R_TILEPRO_IMM16_X1_TLS_LE): Ditto. (R_TILEPRO_IMM16_X0_TLS_LE_LO): Ditto. (R_TILEPRO_IMM16_X1_TLS_LE_LO): Ditto. (R_TILEPRO_IMM16_X0_TLS_LE_HI): Ditto. (R_TILEPRO_IMM16_X1_TLS_LE_HI): Ditto. (R_TILEPRO_IMM16_X0_TLS_LE_HA): Ditto. (R_TILEPRO_IMM16_X1_TLS_LE_HA): Ditto. include/opcode/ * tilegx.h (tilegx_mnemonic): Add TILEGX_OPC_LD4S_TLS, TILEGX_OPC_LD_TLS. * tilepro.h (tilepro_mnemonic): Add TILEPRO_OPC_LW_TLS, TILEPRO_OPC_LW_TLS_SN. opcodes/ * tilegx-opc.c: Handle TILEGX_OPC_LD4S_TLS and TILEGX_OPC_LD_TLS. * tilepro-opc.c: Handle TILEPRO_OPC_LW_TLS and TILEPRO_OPC_LW_TLS_SN.
This commit is contained in:
parent
5414dbefea
commit
6f7be9592d
119
bfd/ChangeLog
119
bfd/ChangeLog
|
@ -1,3 +1,122 @@
|
|||
2012-02-25 Walter Lee <walt@tilera.com>
|
||||
* reloc.c: Add BFD_RELOC_TILEPRO_TLS_GD_CALL,
|
||||
BFD_RELOC_TILEPRO_IMM8_X0_TLS_GD_ADD,
|
||||
BFD_RELOC_TILEPRO_IMM8_X1_TLS_GD_ADD,
|
||||
BFD_RELOC_TILEPRO_IMM8_Y0_TLS_GD_ADD,
|
||||
BFD_RELOC_TILEPRO_IMM8_Y1_TLS_GD_ADD,
|
||||
BFD_RELOC_TILEPRO_TLS_IE_LOAD, BFD_RELOC_TILEPRO_IMM16_X0_TLS_LE,
|
||||
BFD_RELOC_TILEPRO_IMM16_X1_TLS_LE,
|
||||
BFD_RELOC_TILEPRO_IMM16_X0_TLS_LE_LO,
|
||||
BFD_RELOC_TILEPRO_IMM16_X1_TLS_LE_LO,
|
||||
BFD_RELOC_TILEPRO_IMM16_X0_TLS_LE_HI,
|
||||
BFD_RELOC_TILEPRO_IMM16_X1_TLS_LE_HI,
|
||||
BFD_RELOC_TILEPRO_IMM16_X0_TLS_LE_HA,
|
||||
BFD_RELOC_TILEPRO_IMM16_X1_TLS_LE_HA,
|
||||
BFD_RELOC_TILEGX_IMM16_X0_HW0_TLS_LE,
|
||||
BFD_RELOC_TILEGX_IMM16_X1_HW0_TLS_LE,
|
||||
BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST_TLS_LE,
|
||||
BFD_RELOC_TILEGX_IMM16_X1_HW0_LAST_TLS_LE,
|
||||
BFD_RELOC_TILEGX_IMM16_X0_HW1_LAST_TLS_LE,
|
||||
BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST_TLS_LE,
|
||||
BFD_RELOC_TILEGX_TLS_GD_CALL, BFD_RELOC_TILEGX_IMM8_X0_TLS_GD_ADD,
|
||||
BFD_RELOC_TILEGX_IMM8_X1_TLS_GD_ADD,
|
||||
BFD_RELOC_TILEGX_IMM8_Y0_TLS_GD_ADD,
|
||||
BFD_RELOC_TILEGX_IMM8_Y1_TLS_GD_ADD, BFD_RELOC_TILEGX_TLS_IE_LOAD,
|
||||
BFD_RELOC_TILEGX_IMM8_X0_TLS_ADD,
|
||||
BFD_RELOC_TILEGX_IMM8_X1_TLS_ADD,
|
||||
BFD_RELOC_TILEGX_IMM8_Y0_TLS_ADD, BFD_RELOC_TILEGX_IMM8_Y1_TLS_ADD.
|
||||
Delete BFD_RELOC_TILEGX_IMM16_X0_HW1_GOT,
|
||||
BFD_RELOC_TILEGX_IMM16_X1_HW1_GOT,
|
||||
BFD_RELOC_TILEGX_IMM16_X0_HW2_GOT,
|
||||
BFD_RELOC_TILEGX_IMM16_X1_HW2_GOT,
|
||||
BFD_RELOC_TILEGX_IMM16_X0_HW3_GOT,
|
||||
BFD_RELOC_TILEGX_IMM16_X1_HW3_GOT,
|
||||
BFD_RELOC_TILEGX_IMM16_X0_HW2_LAST_GOT,
|
||||
BFD_RELOC_TILEGX_IMM16_X1_HW2_LAST_GOT,
|
||||
BFD_RELOC_TILEGX_IMM16_X0_HW1_TLS_GD,
|
||||
BFD_RELOC_TILEGX_IMM16_X1_HW1_TLS_GD,
|
||||
BFD_RELOC_TILEGX_IMM16_X0_HW2_TLS_GD,
|
||||
BFD_RELOC_TILEGX_IMM16_X1_HW2_TLS_GD,
|
||||
BFD_RELOC_TILEGX_IMM16_X0_HW3_TLS_GD,
|
||||
BFD_RELOC_TILEGX_IMM16_X1_HW3_TLS_GD,
|
||||
BFD_RELOC_TILEGX_IMM16_X0_HW2_LAST_TLS_GD,
|
||||
BFD_RELOC_TILEGX_IMM16_X1_HW2_LAST_TLS_GD,
|
||||
BFD_RELOC_TILEGX_IMM16_X0_HW1_TLS_IE,
|
||||
BFD_RELOC_TILEGX_IMM16_X1_HW1_TLS_IE,
|
||||
BFD_RELOC_TILEGX_IMM16_X0_HW2_TLS_IE,
|
||||
BFD_RELOC_TILEGX_IMM16_X1_HW2_TLS_IE,
|
||||
BFD_RELOC_TILEGX_IMM16_X0_HW3_TLS_IE,
|
||||
BFD_RELOC_TILEGX_IMM16_X1_HW3_TLS_IE,
|
||||
BFD_RELOC_TILEGX_IMM16_X0_HW2_LAST_TLS_IE,
|
||||
BFD_RELOC_TILEGX_IMM16_X1_HW2_LAST_TLS_IE.
|
||||
* elf32-tilepro.c (tilepro_elf_howto_table): Update tilepro
|
||||
relocations.
|
||||
(tilepro_reloc_map): Ditto.
|
||||
(tilepro_info_to_howto_rela): Ditto.
|
||||
(reloc_to_create_func): Ditto.
|
||||
(tilepro_tls_translate_to_le): New.
|
||||
(tilepro_tls_translate_to_ie): New.
|
||||
(tilepro_elf_tls_transition): New.
|
||||
(tilepro_elf_check_relocs): Handle new tls relocations.
|
||||
(tilepro_elf_gc_sweep_hook): Ditto.
|
||||
(allocate_dynrelocs): Ditto.
|
||||
(tilepro_elf_relocate_section): Ditto.
|
||||
(tilepro_replace_insn): New.
|
||||
(insn_mask_X1): New.
|
||||
(insn_mask_X0_no_dest_no_srca): New
|
||||
(insn_mask_X1_no_dest_no_srca): New
|
||||
(insn_mask_Y0_no_dest_no_srca): New
|
||||
(insn_mask_Y1_no_dest_no_srca): New
|
||||
(srca_mask_X0): New
|
||||
(srca_mask_X1): New
|
||||
(insn_tls_le_move_X1): New
|
||||
(insn_tls_le_move_zero_X0X1): New
|
||||
(insn_tls_ie_lw_X1): New
|
||||
(insn_tls_ie_add_X0X1): New
|
||||
(insn_tls_ie_add_Y0Y1): New
|
||||
(insn_tls_gd_add_X0X1): New
|
||||
(insn_tls_gd_add_Y0Y1): New
|
||||
* elfxx-tilegx.c (tilegx_elf_howto_table): Update tilegx
|
||||
relocations.
|
||||
(tilegx_reloc_map): Ditto.
|
||||
(tilegx_info_to_howto_rela): Ditto.
|
||||
(reloc_to_create_func): Ditto.
|
||||
(tilegx_elf_link_hash_table): New field disable_le_transition.
|
||||
(tilegx_tls_translate_to_le): New.
|
||||
(tilegx_tls_translate_to_ie): New.
|
||||
(tilegx_elf_tls_transition): New.
|
||||
(tilegx_elf_check_relocs): Handle new tls relocations.
|
||||
(tilegx_elf_gc_sweep_hook): Ditto.
|
||||
(allocate_dynrelocs): Ditto.
|
||||
(tilegx_elf_relocate_section): Ditto.
|
||||
(tilegx_copy_bits): New.
|
||||
(tilegx_replace_insn): New.
|
||||
(insn_mask_X1): New.
|
||||
(insn_mask_X0_no_dest_no_srca): New.
|
||||
(insn_mask_X1_no_dest_no_srca): New.
|
||||
(insn_mask_Y0_no_dest_no_srca): New.
|
||||
(insn_mask_Y1_no_dest_no_srca): New.
|
||||
(insn_mask_X0_no_operand): New.
|
||||
(insn_mask_X1_no_operand): New.
|
||||
(insn_mask_Y0_no_operand): New.
|
||||
(insn_mask_Y1_no_operand): New.
|
||||
(insn_tls_ie_ld_X1): New.
|
||||
(insn_tls_ie_ld4s_X1): New.
|
||||
(insn_tls_ie_add_X0X1): New.
|
||||
(insn_tls_ie_add_Y0Y1): New.
|
||||
(insn_tls_ie_addx_X0X1): New.
|
||||
(insn_tls_ie_addx_Y0Y1): New.
|
||||
(insn_tls_gd_add_X0X1): New.
|
||||
(insn_tls_gd_add_Y0Y1): New.
|
||||
(insn_move_X0X1): New.
|
||||
(insn_move_Y0Y1): New.
|
||||
(insn_add_X0X1): New.
|
||||
(insn_add_Y0Y1): New.
|
||||
(insn_addx_X0X1): New.
|
||||
(insn_addx_Y0Y1): New.
|
||||
* libbfd.h: Regenerate.
|
||||
* bfd-in2.h: Regenerate.
|
||||
|
||||
2012-02-25 Walter Lee <walt@tilera.com>
|
||||
|
||||
* config.bfd (tilegx-*-*): rename little endian vector; add big
|
||||
|
|
|
@ -4959,6 +4959,12 @@ the dynamic object into the runtime process image. */
|
|||
BFD_RELOC_TILEPRO_SHAMT_X1,
|
||||
BFD_RELOC_TILEPRO_SHAMT_Y0,
|
||||
BFD_RELOC_TILEPRO_SHAMT_Y1,
|
||||
BFD_RELOC_TILEPRO_TLS_GD_CALL,
|
||||
BFD_RELOC_TILEPRO_IMM8_X0_TLS_GD_ADD,
|
||||
BFD_RELOC_TILEPRO_IMM8_X1_TLS_GD_ADD,
|
||||
BFD_RELOC_TILEPRO_IMM8_Y0_TLS_GD_ADD,
|
||||
BFD_RELOC_TILEPRO_IMM8_Y1_TLS_GD_ADD,
|
||||
BFD_RELOC_TILEPRO_TLS_IE_LOAD,
|
||||
BFD_RELOC_TILEPRO_IMM16_X0_TLS_GD,
|
||||
BFD_RELOC_TILEPRO_IMM16_X1_TLS_GD,
|
||||
BFD_RELOC_TILEPRO_IMM16_X0_TLS_GD_LO,
|
||||
|
@ -4978,6 +4984,14 @@ the dynamic object into the runtime process image. */
|
|||
BFD_RELOC_TILEPRO_TLS_DTPMOD32,
|
||||
BFD_RELOC_TILEPRO_TLS_DTPOFF32,
|
||||
BFD_RELOC_TILEPRO_TLS_TPOFF32,
|
||||
BFD_RELOC_TILEPRO_IMM16_X0_TLS_LE,
|
||||
BFD_RELOC_TILEPRO_IMM16_X1_TLS_LE,
|
||||
BFD_RELOC_TILEPRO_IMM16_X0_TLS_LE_LO,
|
||||
BFD_RELOC_TILEPRO_IMM16_X1_TLS_LE_LO,
|
||||
BFD_RELOC_TILEPRO_IMM16_X0_TLS_LE_HI,
|
||||
BFD_RELOC_TILEPRO_IMM16_X1_TLS_LE_HI,
|
||||
BFD_RELOC_TILEPRO_IMM16_X0_TLS_LE_HA,
|
||||
BFD_RELOC_TILEPRO_IMM16_X1_TLS_LE_HA,
|
||||
|
||||
/* Tilera TILE-Gx Relocations. */
|
||||
BFD_RELOC_TILEGX_HW0,
|
||||
|
@ -5037,52 +5051,44 @@ the dynamic object into the runtime process image. */
|
|||
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_HW1_GOT,
|
||||
BFD_RELOC_TILEGX_IMM16_X1_HW1_GOT,
|
||||
BFD_RELOC_TILEGX_IMM16_X0_HW2_GOT,
|
||||
BFD_RELOC_TILEGX_IMM16_X1_HW2_GOT,
|
||||
BFD_RELOC_TILEGX_IMM16_X0_HW3_GOT,
|
||||
BFD_RELOC_TILEGX_IMM16_X1_HW3_GOT,
|
||||
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_HW2_LAST_GOT,
|
||||
BFD_RELOC_TILEGX_IMM16_X1_HW2_LAST_GOT,
|
||||
BFD_RELOC_TILEGX_IMM16_X0_HW0_TLS_GD,
|
||||
BFD_RELOC_TILEGX_IMM16_X1_HW0_TLS_GD,
|
||||
BFD_RELOC_TILEGX_IMM16_X0_HW1_TLS_GD,
|
||||
BFD_RELOC_TILEGX_IMM16_X1_HW1_TLS_GD,
|
||||
BFD_RELOC_TILEGX_IMM16_X0_HW2_TLS_GD,
|
||||
BFD_RELOC_TILEGX_IMM16_X1_HW2_TLS_GD,
|
||||
BFD_RELOC_TILEGX_IMM16_X0_HW3_TLS_GD,
|
||||
BFD_RELOC_TILEGX_IMM16_X1_HW3_TLS_GD,
|
||||
BFD_RELOC_TILEGX_IMM16_X0_HW0_TLS_LE,
|
||||
BFD_RELOC_TILEGX_IMM16_X1_HW0_TLS_LE,
|
||||
BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST_TLS_LE,
|
||||
BFD_RELOC_TILEGX_IMM16_X1_HW0_LAST_TLS_LE,
|
||||
BFD_RELOC_TILEGX_IMM16_X0_HW1_LAST_TLS_LE,
|
||||
BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST_TLS_LE,
|
||||
BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST_TLS_GD,
|
||||
BFD_RELOC_TILEGX_IMM16_X1_HW0_LAST_TLS_GD,
|
||||
BFD_RELOC_TILEGX_IMM16_X0_HW1_LAST_TLS_GD,
|
||||
BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST_TLS_GD,
|
||||
BFD_RELOC_TILEGX_IMM16_X0_HW2_LAST_TLS_GD,
|
||||
BFD_RELOC_TILEGX_IMM16_X1_HW2_LAST_TLS_GD,
|
||||
BFD_RELOC_TILEGX_IMM16_X0_HW0_TLS_IE,
|
||||
BFD_RELOC_TILEGX_IMM16_X1_HW0_TLS_IE,
|
||||
BFD_RELOC_TILEGX_IMM16_X0_HW1_TLS_IE,
|
||||
BFD_RELOC_TILEGX_IMM16_X1_HW1_TLS_IE,
|
||||
BFD_RELOC_TILEGX_IMM16_X0_HW2_TLS_IE,
|
||||
BFD_RELOC_TILEGX_IMM16_X1_HW2_TLS_IE,
|
||||
BFD_RELOC_TILEGX_IMM16_X0_HW3_TLS_IE,
|
||||
BFD_RELOC_TILEGX_IMM16_X1_HW3_TLS_IE,
|
||||
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,
|
||||
BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST_TLS_IE,
|
||||
BFD_RELOC_TILEGX_IMM16_X0_HW2_LAST_TLS_IE,
|
||||
BFD_RELOC_TILEGX_IMM16_X1_HW2_LAST_TLS_IE,
|
||||
BFD_RELOC_TILEGX_TLS_DTPMOD64,
|
||||
BFD_RELOC_TILEGX_TLS_DTPOFF64,
|
||||
BFD_RELOC_TILEGX_TLS_TPOFF64,
|
||||
BFD_RELOC_TILEGX_TLS_DTPMOD32,
|
||||
BFD_RELOC_TILEGX_TLS_DTPOFF32,
|
||||
BFD_RELOC_TILEGX_TLS_TPOFF32,
|
||||
BFD_RELOC_TILEGX_TLS_GD_CALL,
|
||||
BFD_RELOC_TILEGX_IMM8_X0_TLS_GD_ADD,
|
||||
BFD_RELOC_TILEGX_IMM8_X1_TLS_GD_ADD,
|
||||
BFD_RELOC_TILEGX_IMM8_Y0_TLS_GD_ADD,
|
||||
BFD_RELOC_TILEGX_IMM8_Y1_TLS_GD_ADD,
|
||||
BFD_RELOC_TILEGX_TLS_IE_LOAD,
|
||||
BFD_RELOC_TILEGX_IMM8_X0_TLS_ADD,
|
||||
BFD_RELOC_TILEGX_IMM8_X1_TLS_ADD,
|
||||
BFD_RELOC_TILEGX_IMM8_Y0_TLS_ADD,
|
||||
BFD_RELOC_TILEGX_IMM8_Y1_TLS_ADD,
|
||||
|
||||
/* Adapteva EPIPHANY - 8 bit signed pc-relative displacement */
|
||||
BFD_RELOC_EPIPHANY_SIMM8,
|
||||
|
|
|
@ -380,12 +380,26 @@ static reloc_howto_type tilepro_elf_howto_table [] =
|
|||
EMPTY_HOWTO (57),
|
||||
EMPTY_HOWTO (58),
|
||||
EMPTY_HOWTO (59),
|
||||
EMPTY_HOWTO (60),
|
||||
EMPTY_HOWTO (61),
|
||||
EMPTY_HOWTO (62),
|
||||
EMPTY_HOWTO (63),
|
||||
EMPTY_HOWTO (64),
|
||||
EMPTY_HOWTO (65),
|
||||
|
||||
HOWTO (R_TILEPRO_TLS_GD_CALL, /* type */
|
||||
TILEPRO_LOG2_BUNDLE_ALIGNMENT_IN_BYTES, /* rightshift */
|
||||
2, /* size (0 = byte, 1 = short, 2 = long) */
|
||||
29, /* bitsize */
|
||||
TRUE, /* pc_relative */
|
||||
0, /* bitpos */
|
||||
complain_overflow_signed,/* complain_on_overflow */
|
||||
bfd_elf_generic_reloc, /* special_function */
|
||||
"R_TILEPRO_TLS_GD_CALL", /* name */
|
||||
FALSE, /* partial_inplace */
|
||||
0, /* src_mask */
|
||||
-1, /* dst_mask */
|
||||
TRUE), /* pcrel_offset */
|
||||
|
||||
TILEPRO_IMM_HOWTO(R_TILEPRO_IMM8_X0_TLS_GD_ADD, 0, 8),
|
||||
TILEPRO_IMM_HOWTO(R_TILEPRO_IMM8_X1_TLS_GD_ADD, 0, 8),
|
||||
TILEPRO_IMM_HOWTO(R_TILEPRO_IMM8_Y0_TLS_GD_ADD, 0, 8),
|
||||
TILEPRO_IMM_HOWTO(R_TILEPRO_IMM8_Y1_TLS_GD_ADD, 0, 8),
|
||||
TILEPRO_IMM_HOWTO(R_TILEPRO_TLS_IE_LOAD, 0, 8),
|
||||
|
||||
/* Offsets into the GOT of TLS Descriptors. */
|
||||
|
||||
|
@ -454,17 +468,12 @@ static reloc_howto_type tilepro_elf_howto_table [] =
|
|||
-1, /* dst_mask */
|
||||
TRUE), /* pcrel_offset */
|
||||
|
||||
#define TILEPRO_IMM16_HOWTO_TLS_IE(name, rshift) \
|
||||
HOWTO (name, rshift, 1, 16, FALSE, 0, \
|
||||
complain_overflow_dont, bfd_elf_generic_reloc, \
|
||||
#name, FALSE, 0, 0xffff, TRUE)
|
||||
|
||||
TILEPRO_IMM16_HOWTO_TLS_IE (R_TILEPRO_IMM16_X0_TLS_IE_LO, 0),
|
||||
TILEPRO_IMM16_HOWTO_TLS_IE (R_TILEPRO_IMM16_X1_TLS_IE_LO, 0),
|
||||
TILEPRO_IMM16_HOWTO_TLS_IE (R_TILEPRO_IMM16_X0_TLS_IE_HI, 16),
|
||||
TILEPRO_IMM16_HOWTO_TLS_IE (R_TILEPRO_IMM16_X1_TLS_IE_HI, 16),
|
||||
TILEPRO_IMM16_HOWTO_TLS_IE (R_TILEPRO_IMM16_X0_TLS_IE_HA, 16),
|
||||
TILEPRO_IMM16_HOWTO_TLS_IE (R_TILEPRO_IMM16_X1_TLS_IE_HA, 16),
|
||||
TILEPRO_IMM16_HOWTO (R_TILEPRO_IMM16_X0_TLS_IE_LO, 0),
|
||||
TILEPRO_IMM16_HOWTO (R_TILEPRO_IMM16_X1_TLS_IE_LO, 0),
|
||||
TILEPRO_IMM16_HOWTO (R_TILEPRO_IMM16_X0_TLS_IE_HI, 16),
|
||||
TILEPRO_IMM16_HOWTO (R_TILEPRO_IMM16_X1_TLS_IE_HI, 16),
|
||||
TILEPRO_IMM16_HOWTO (R_TILEPRO_IMM16_X0_TLS_IE_HA, 16),
|
||||
TILEPRO_IMM16_HOWTO (R_TILEPRO_IMM16_X1_TLS_IE_HA, 16),
|
||||
|
||||
/* These are common with the Solaris TLS implementation. */
|
||||
HOWTO(R_TILEPRO_TLS_DTPMOD32, 0, 0, 0, FALSE, 0, complain_overflow_dont,
|
||||
|
@ -475,8 +484,42 @@ static reloc_howto_type tilepro_elf_howto_table [] =
|
|||
FALSE, 0, 0xFFFFFFFF, TRUE),
|
||||
HOWTO(R_TILEPRO_TLS_TPOFF32, 0, 0, 0, FALSE, 0, complain_overflow_dont,
|
||||
bfd_elf_generic_reloc, "R_TILEPRO_TLS_TPOFF32",
|
||||
FALSE, 0, 0, TRUE)
|
||||
FALSE, 0, 0, TRUE),
|
||||
|
||||
HOWTO (R_TILEPRO_IMM16_X0_TLS_LE,/* type */
|
||||
0, /* rightshift */
|
||||
1, /* size (0 = byte, 1 = short, 2 = long) */
|
||||
16, /* bitsize */
|
||||
FALSE, /* pc_relative */
|
||||
0, /* bitpos */
|
||||
complain_overflow_signed, /* complain_on_overflow */
|
||||
bfd_elf_generic_reloc, /* special_function */
|
||||
"R_TILEPRO_IMM16_X0_TLS_LE",/* name */
|
||||
FALSE, /* partial_inplace */
|
||||
0, /* src_mask */
|
||||
-1, /* dst_mask */
|
||||
TRUE), /* pcrel_offset */
|
||||
|
||||
HOWTO (R_TILEPRO_IMM16_X1_TLS_LE,/* type */
|
||||
0, /* rightshift */
|
||||
1, /* size (0 = byte, 1 = short, 2 = long) */
|
||||
16, /* bitsize */
|
||||
FALSE, /* pc_relative */
|
||||
0, /* bitpos */
|
||||
complain_overflow_signed, /* complain_on_overflow */
|
||||
bfd_elf_generic_reloc, /* special_function */
|
||||
"R_TILEPRO_IMM16_X1_TLS_LE",/* name */
|
||||
FALSE, /* partial_inplace */
|
||||
0, /* src_mask */
|
||||
-1, /* dst_mask */
|
||||
TRUE), /* pcrel_offset */
|
||||
|
||||
TILEPRO_IMM16_HOWTO (R_TILEPRO_IMM16_X0_TLS_LE_LO, 0),
|
||||
TILEPRO_IMM16_HOWTO (R_TILEPRO_IMM16_X1_TLS_LE_LO, 0),
|
||||
TILEPRO_IMM16_HOWTO (R_TILEPRO_IMM16_X0_TLS_LE_HI, 16),
|
||||
TILEPRO_IMM16_HOWTO (R_TILEPRO_IMM16_X1_TLS_LE_HI, 16),
|
||||
TILEPRO_IMM16_HOWTO (R_TILEPRO_IMM16_X0_TLS_LE_HA, 16),
|
||||
TILEPRO_IMM16_HOWTO (R_TILEPRO_IMM16_X1_TLS_LE_HA, 16),
|
||||
};
|
||||
|
||||
static reloc_howto_type tilepro_elf_howto_table2 [] =
|
||||
|
@ -590,6 +633,13 @@ static const reloc_map tilepro_reloc_map [] =
|
|||
TH_REMAP (BFD_RELOC_TILEPRO_SHAMT_Y0, R_TILEPRO_SHAMT_Y0)
|
||||
TH_REMAP (BFD_RELOC_TILEPRO_SHAMT_Y1, R_TILEPRO_SHAMT_Y1)
|
||||
|
||||
TH_REMAP (BFD_RELOC_TILEPRO_TLS_GD_CALL, R_TILEPRO_TLS_GD_CALL)
|
||||
TH_REMAP (BFD_RELOC_TILEPRO_IMM8_X0_TLS_GD_ADD, R_TILEPRO_IMM8_X0_TLS_GD_ADD)
|
||||
TH_REMAP (BFD_RELOC_TILEPRO_IMM8_X1_TLS_GD_ADD, R_TILEPRO_IMM8_X1_TLS_GD_ADD)
|
||||
TH_REMAP (BFD_RELOC_TILEPRO_IMM8_Y0_TLS_GD_ADD, R_TILEPRO_IMM8_Y0_TLS_GD_ADD)
|
||||
TH_REMAP (BFD_RELOC_TILEPRO_IMM8_Y1_TLS_GD_ADD, R_TILEPRO_IMM8_Y1_TLS_GD_ADD)
|
||||
TH_REMAP (BFD_RELOC_TILEPRO_TLS_IE_LOAD, R_TILEPRO_TLS_IE_LOAD)
|
||||
|
||||
TH_REMAP (BFD_RELOC_TILEPRO_IMM16_X0_TLS_GD, R_TILEPRO_IMM16_X0_TLS_GD)
|
||||
TH_REMAP (BFD_RELOC_TILEPRO_IMM16_X1_TLS_GD, R_TILEPRO_IMM16_X1_TLS_GD)
|
||||
TH_REMAP (BFD_RELOC_TILEPRO_IMM16_X0_TLS_GD_LO, R_TILEPRO_IMM16_X0_TLS_GD_LO)
|
||||
|
@ -612,6 +662,15 @@ static const reloc_map tilepro_reloc_map [] =
|
|||
TH_REMAP (BFD_RELOC_TILEPRO_TLS_DTPOFF32, R_TILEPRO_TLS_DTPOFF32)
|
||||
TH_REMAP (BFD_RELOC_TILEPRO_TLS_TPOFF32, R_TILEPRO_TLS_TPOFF32)
|
||||
|
||||
TH_REMAP (BFD_RELOC_TILEPRO_IMM16_X0_TLS_LE, R_TILEPRO_IMM16_X0_TLS_LE)
|
||||
TH_REMAP (BFD_RELOC_TILEPRO_IMM16_X1_TLS_LE, R_TILEPRO_IMM16_X1_TLS_LE)
|
||||
TH_REMAP (BFD_RELOC_TILEPRO_IMM16_X0_TLS_LE_LO, R_TILEPRO_IMM16_X0_TLS_LE_LO)
|
||||
TH_REMAP (BFD_RELOC_TILEPRO_IMM16_X1_TLS_LE_LO, R_TILEPRO_IMM16_X1_TLS_LE_LO)
|
||||
TH_REMAP (BFD_RELOC_TILEPRO_IMM16_X0_TLS_LE_HI, R_TILEPRO_IMM16_X0_TLS_LE_HI)
|
||||
TH_REMAP (BFD_RELOC_TILEPRO_IMM16_X1_TLS_LE_HI, R_TILEPRO_IMM16_X1_TLS_LE_HI)
|
||||
TH_REMAP (BFD_RELOC_TILEPRO_IMM16_X0_TLS_LE_HA, R_TILEPRO_IMM16_X0_TLS_LE_HA)
|
||||
TH_REMAP (BFD_RELOC_TILEPRO_IMM16_X1_TLS_LE_HA, R_TILEPRO_IMM16_X1_TLS_LE_HA)
|
||||
|
||||
#undef TH_REMAP
|
||||
|
||||
{ BFD_RELOC_VTABLE_INHERIT, R_TILEPRO_GNU_VTINHERIT, tilepro_elf_howto_table2 },
|
||||
|
@ -745,7 +804,7 @@ tilepro_info_to_howto_rela (bfd * abfd ATTRIBUTE_UNUSED,
|
|||
{
|
||||
unsigned int r_type = ELF32_R_TYPE (dst->r_info);
|
||||
|
||||
if (r_type <= (unsigned int) R_TILEPRO_TLS_TPOFF32)
|
||||
if (r_type <= (unsigned int) R_TILEPRO_IMM16_X1_TLS_LE_HA)
|
||||
cache_ptr->howto = &tilepro_elf_howto_table [r_type];
|
||||
else if (r_type - R_TILEPRO_GNU_VTINHERIT
|
||||
<= (unsigned int) R_TILEPRO_GNU_VTENTRY)
|
||||
|
@ -845,7 +904,20 @@ static const tilepro_create_func reloc_to_create_func[] =
|
|||
create_Imm16_X0,
|
||||
create_Imm16_X1,
|
||||
create_Imm16_X0,
|
||||
create_Imm16_X1
|
||||
create_Imm16_X1,
|
||||
|
||||
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,
|
||||
};
|
||||
|
||||
#define NELEMS(a) ((int) (sizeof (a) / sizeof ((a)[0])))
|
||||
|
@ -1288,6 +1360,99 @@ tilepro_elf_copy_indirect_symbol (struct bfd_link_info *info,
|
|||
_bfd_elf_link_hash_copy_indirect (info, dir, ind);
|
||||
}
|
||||
|
||||
static int
|
||||
tilepro_tls_translate_to_le (int r_type)
|
||||
{
|
||||
switch (r_type)
|
||||
{
|
||||
case R_TILEPRO_IMM16_X0_TLS_GD:
|
||||
case R_TILEPRO_IMM16_X0_TLS_IE:
|
||||
return R_TILEPRO_IMM16_X0_TLS_LE;
|
||||
|
||||
case R_TILEPRO_IMM16_X1_TLS_GD:
|
||||
case R_TILEPRO_IMM16_X1_TLS_IE:
|
||||
return R_TILEPRO_IMM16_X1_TLS_LE;
|
||||
|
||||
case R_TILEPRO_IMM16_X0_TLS_GD_LO:
|
||||
case R_TILEPRO_IMM16_X0_TLS_IE_LO:
|
||||
return R_TILEPRO_IMM16_X0_TLS_LE_LO;
|
||||
|
||||
case R_TILEPRO_IMM16_X1_TLS_GD_LO:
|
||||
case R_TILEPRO_IMM16_X1_TLS_IE_LO:
|
||||
return R_TILEPRO_IMM16_X1_TLS_LE_LO;
|
||||
|
||||
case R_TILEPRO_IMM16_X0_TLS_GD_HI:
|
||||
case R_TILEPRO_IMM16_X0_TLS_IE_HI:
|
||||
return R_TILEPRO_IMM16_X0_TLS_LE_HI;
|
||||
|
||||
case R_TILEPRO_IMM16_X1_TLS_GD_HI:
|
||||
case R_TILEPRO_IMM16_X1_TLS_IE_HI:
|
||||
return R_TILEPRO_IMM16_X1_TLS_LE_HI;
|
||||
|
||||
case R_TILEPRO_IMM16_X0_TLS_GD_HA:
|
||||
case R_TILEPRO_IMM16_X0_TLS_IE_HA:
|
||||
return R_TILEPRO_IMM16_X0_TLS_LE_HA;
|
||||
|
||||
case R_TILEPRO_IMM16_X1_TLS_GD_HA:
|
||||
case R_TILEPRO_IMM16_X1_TLS_IE_HA:
|
||||
return R_TILEPRO_IMM16_X1_TLS_LE_HA;
|
||||
}
|
||||
return r_type;
|
||||
}
|
||||
|
||||
static int
|
||||
tilepro_tls_translate_to_ie (int r_type)
|
||||
{
|
||||
switch (r_type)
|
||||
{
|
||||
case R_TILEPRO_IMM16_X0_TLS_GD:
|
||||
case R_TILEPRO_IMM16_X0_TLS_IE:
|
||||
return R_TILEPRO_IMM16_X0_TLS_IE;
|
||||
|
||||
case R_TILEPRO_IMM16_X1_TLS_GD:
|
||||
case R_TILEPRO_IMM16_X1_TLS_IE:
|
||||
return R_TILEPRO_IMM16_X1_TLS_IE;
|
||||
|
||||
case R_TILEPRO_IMM16_X0_TLS_GD_LO:
|
||||
case R_TILEPRO_IMM16_X0_TLS_IE_LO:
|
||||
return R_TILEPRO_IMM16_X0_TLS_IE_LO;
|
||||
|
||||
case R_TILEPRO_IMM16_X1_TLS_GD_LO:
|
||||
case R_TILEPRO_IMM16_X1_TLS_IE_LO:
|
||||
return R_TILEPRO_IMM16_X1_TLS_IE_LO;
|
||||
|
||||
case R_TILEPRO_IMM16_X0_TLS_GD_HI:
|
||||
case R_TILEPRO_IMM16_X0_TLS_IE_HI:
|
||||
return R_TILEPRO_IMM16_X0_TLS_IE_HI;
|
||||
|
||||
case R_TILEPRO_IMM16_X1_TLS_GD_HI:
|
||||
case R_TILEPRO_IMM16_X1_TLS_IE_HI:
|
||||
return R_TILEPRO_IMM16_X1_TLS_IE_HI;
|
||||
|
||||
case R_TILEPRO_IMM16_X0_TLS_GD_HA:
|
||||
case R_TILEPRO_IMM16_X0_TLS_IE_HA:
|
||||
return R_TILEPRO_IMM16_X0_TLS_IE_HA;
|
||||
|
||||
case R_TILEPRO_IMM16_X1_TLS_GD_HA:
|
||||
case R_TILEPRO_IMM16_X1_TLS_IE_HA:
|
||||
return R_TILEPRO_IMM16_X1_TLS_IE_HA;
|
||||
}
|
||||
return r_type;
|
||||
}
|
||||
|
||||
static int
|
||||
tilepro_elf_tls_transition (struct bfd_link_info *info, int r_type,
|
||||
int is_local)
|
||||
{
|
||||
if (info->shared)
|
||||
return r_type;
|
||||
|
||||
if (is_local)
|
||||
return tilepro_tls_translate_to_le (r_type);
|
||||
else
|
||||
return tilepro_tls_translate_to_ie (r_type);
|
||||
}
|
||||
|
||||
/* Look through the relocs for a section during the first phase, and
|
||||
allocate space in the global offset table or procedure linkage
|
||||
table. */
|
||||
|
@ -1348,8 +1513,21 @@ tilepro_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
|
|||
h = (struct elf_link_hash_entry *) h->root.u.i.link;
|
||||
}
|
||||
|
||||
r_type = tilepro_elf_tls_transition (info, r_type, h == NULL);
|
||||
switch (r_type)
|
||||
{
|
||||
case R_TILEPRO_IMM16_X0_TLS_LE:
|
||||
case R_TILEPRO_IMM16_X1_TLS_LE:
|
||||
case R_TILEPRO_IMM16_X0_TLS_LE_LO:
|
||||
case R_TILEPRO_IMM16_X1_TLS_LE_LO:
|
||||
case R_TILEPRO_IMM16_X0_TLS_LE_HI:
|
||||
case R_TILEPRO_IMM16_X1_TLS_LE_HI:
|
||||
case R_TILEPRO_IMM16_X0_TLS_LE_HA:
|
||||
case R_TILEPRO_IMM16_X1_TLS_LE_HA:
|
||||
if (info->shared)
|
||||
goto r_tilepro_plt32;
|
||||
break;
|
||||
|
||||
case R_TILEPRO_IMM16_X0_TLS_GD:
|
||||
case R_TILEPRO_IMM16_X1_TLS_GD:
|
||||
case R_TILEPRO_IMM16_X0_TLS_GD_LO:
|
||||
|
@ -1358,7 +1536,8 @@ tilepro_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
|
|||
case R_TILEPRO_IMM16_X1_TLS_GD_HI:
|
||||
case R_TILEPRO_IMM16_X0_TLS_GD_HA:
|
||||
case R_TILEPRO_IMM16_X1_TLS_GD_HA:
|
||||
tls_type = GOT_TLS_GD;
|
||||
BFD_ASSERT (info->shared);
|
||||
tls_type = GOT_TLS_GD;
|
||||
goto have_got_reference;
|
||||
|
||||
case R_TILEPRO_IMM16_X0_TLS_IE:
|
||||
|
@ -1454,6 +1633,24 @@ tilepro_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
|
|||
}
|
||||
break;
|
||||
|
||||
case R_TILEPRO_TLS_GD_CALL:
|
||||
if (info->shared)
|
||||
{
|
||||
/* These are basically R_TILEPRO_JOFFLONG_X1_PLT relocs
|
||||
against __tls_get_addr. */
|
||||
struct bfd_link_hash_entry *bh = NULL;
|
||||
if (! _bfd_generic_link_add_one_symbol (info, abfd,
|
||||
"__tls_get_addr", 0,
|
||||
bfd_und_section_ptr, 0,
|
||||
NULL, FALSE, FALSE,
|
||||
&bh))
|
||||
return FALSE;
|
||||
h = (struct elf_link_hash_entry *) bh;
|
||||
}
|
||||
else
|
||||
break;
|
||||
/* Fall through */
|
||||
|
||||
case R_TILEPRO_JOFFLONG_X1_PLT:
|
||||
/* This symbol requires a procedure linkage table entry. We
|
||||
actually build the entry in adjust_dynamic_symbol,
|
||||
|
@ -1523,15 +1720,14 @@ tilepro_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
|
|||
case R_TILEPRO_SHAMT_Y0:
|
||||
case R_TILEPRO_SHAMT_Y1:
|
||||
if (h != NULL)
|
||||
{
|
||||
h->non_got_ref = 1;
|
||||
|
||||
if (!info->shared)
|
||||
{
|
||||
/* We may need a .plt entry if the function this reloc
|
||||
refers to is in a shared lib. */
|
||||
h->plt.refcount += 1;
|
||||
}
|
||||
r_tilepro_plt32:
|
||||
if (h != NULL && !info->shared)
|
||||
{
|
||||
/* We may need a .plt entry if the function this reloc
|
||||
refers to is in a shared lib. */
|
||||
h->plt.refcount += 1;
|
||||
}
|
||||
|
||||
/* If we are creating a shared library, and this is a reloc
|
||||
|
@ -1725,6 +1921,7 @@ tilepro_elf_gc_sweep_hook (bfd *abfd, struct bfd_link_info *info,
|
|||
}
|
||||
|
||||
r_type = ELF32_R_TYPE (rel->r_info);
|
||||
r_type = tilepro_elf_tls_transition (info, r_type, h != NULL);
|
||||
switch (r_type)
|
||||
{
|
||||
case R_TILEPRO_IMM16_X0_GOT:
|
||||
|
@ -1758,7 +1955,8 @@ tilepro_elf_gc_sweep_hook (bfd *abfd, struct bfd_link_info *info,
|
|||
}
|
||||
else
|
||||
{
|
||||
if (local_got_refcounts[r_symndx] > 0)
|
||||
if (local_got_refcounts &&
|
||||
local_got_refcounts[r_symndx] > 0)
|
||||
local_got_refcounts[r_symndx]--;
|
||||
}
|
||||
break;
|
||||
|
@ -2040,7 +2238,14 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
|
|||
h->needs_plt = 0;
|
||||
}
|
||||
|
||||
if (h->got.refcount > 0)
|
||||
/* If a TLS_IE symbol is now local to the binary, make it a TLS_LE
|
||||
requiring no TLS entry. */
|
||||
if (h->got.refcount > 0
|
||||
&& !info->shared
|
||||
&& h->dynindx == -1
|
||||
&& tilepro_elf_hash_entry(h)->tls_type == GOT_TLS_IE)
|
||||
h->got.offset = (bfd_vma) -1;
|
||||
else if (h->got.refcount > 0)
|
||||
{
|
||||
asection *s;
|
||||
bfd_boolean dyn;
|
||||
|
@ -2467,6 +2672,87 @@ tpoff (struct bfd_link_info *info, bfd_vma address)
|
|||
return (address - htab->tls_sec->vma);
|
||||
}
|
||||
|
||||
/* Replace the MASK bits in ADDR with those in INSN, for the next
|
||||
TILEPRO_BUNDLE_SIZE_IN_BYTES bytes. */
|
||||
|
||||
static void
|
||||
tilepro_replace_insn (bfd_byte *addr, const bfd_byte *mask,
|
||||
const bfd_byte *insn)
|
||||
{
|
||||
int i;
|
||||
for (i = 0; i < TILEPRO_BUNDLE_SIZE_IN_BYTES; i++)
|
||||
{
|
||||
addr[i] = (addr[i] & ~mask[i]) | (insn[i] & mask[i]);
|
||||
}
|
||||
}
|
||||
|
||||
/* Mask to extract the bits corresponding to an instruction in a
|
||||
specific pipe of a bundle. */
|
||||
static const bfd_byte insn_mask_X1[] = {
|
||||
0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xff, 0x7f
|
||||
};
|
||||
|
||||
/* Mask to extract the bits corresponding to an instruction in a
|
||||
specific pipe of a bundle, minus the destination operand and the
|
||||
first source operand. */
|
||||
static const bfd_byte insn_mask_X0_no_dest_no_srca[] = {
|
||||
0x00, 0xf0, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00
|
||||
};
|
||||
|
||||
static const bfd_byte insn_mask_X1_no_dest_no_srca[] = {
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0x7f
|
||||
};
|
||||
|
||||
static const bfd_byte insn_mask_Y0_no_dest_no_srca[] = {
|
||||
0x00, 0xf0, 0x0f, 0x78, 0x00, 0x00, 0x00, 0x00
|
||||
};
|
||||
|
||||
static const bfd_byte insn_mask_Y1_no_dest_no_srca[] = {
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x07, 0x78
|
||||
};
|
||||
|
||||
/* Mask to extract the first source operand of an instruction. */
|
||||
static const bfd_byte srca_mask_X0[] = {
|
||||
0xc0, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||
};
|
||||
|
||||
static const bfd_byte srca_mask_X1[] = {
|
||||
0x00, 0x00, 0x00, 0x00, 0xe0, 0x07, 0x00, 0x00
|
||||
};
|
||||
|
||||
/* Various instructions synthesized to support tls references. */
|
||||
|
||||
/* move r0, r0 in the X1 pipe, used for tls le. */
|
||||
static const bfd_byte insn_tls_le_move_X1[] = {
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x33, 0x08
|
||||
};
|
||||
|
||||
/* move r0, zero in the X0 and X1 pipe, used for tls le. */
|
||||
static const bfd_byte insn_tls_le_move_zero_X0X1[] = {
|
||||
0xc0, 0xff, 0xcf, 0x00, 0xe0, 0xff, 0x33, 0x08
|
||||
};
|
||||
|
||||
/* lw r0, r0 in the X1 pipe, used for tls ie. */
|
||||
static const bfd_byte insn_tls_ie_lw_X1[] = {
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x0b, 0x40
|
||||
};
|
||||
|
||||
/* add r0, r0, tp in various pipes, used for tls ie. */
|
||||
static const bfd_byte insn_tls_ie_add_X0X1[] = {
|
||||
0x00, 0x50, 0x0f, 0x00, 0x00, 0xa8, 0x07, 0x08
|
||||
};
|
||||
static const bfd_byte insn_tls_ie_add_Y0Y1[] = {
|
||||
0x00, 0x50, 0x03, 0x08, 0x00, 0xa8, 0x01, 0x8c
|
||||
};
|
||||
|
||||
/* move r0, r0 in various pipes, used for tls gd. */
|
||||
static const bfd_byte insn_tls_gd_add_X0X1[] = {
|
||||
0x00, 0xf0, 0xcf, 0x00, 0x00, 0xf8, 0x33, 0x08
|
||||
};
|
||||
static const bfd_byte insn_tls_gd_add_Y0Y1[] = {
|
||||
0x00, 0xf0, 0x0b, 0x18, 0x00, 0xf8, 0x05, 0x9c
|
||||
};
|
||||
|
||||
/* Relocate an TILEPRO ELF section.
|
||||
|
||||
The RELOCATE_SECTION function is called by the new ELF backend linker
|
||||
|
@ -2531,6 +2817,7 @@ tilepro_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
|
|||
for (; rel < relend; rel++)
|
||||
{
|
||||
int r_type, tls_type;
|
||||
bfd_boolean is_tls_iele, is_tls_le;
|
||||
reloc_howto_type *howto;
|
||||
unsigned long r_symndx;
|
||||
struct elf_link_hash_entry *h;
|
||||
|
@ -2611,6 +2898,118 @@ tilepro_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
|
|||
name = bfd_section_name (input_bfd, sec);
|
||||
}
|
||||
|
||||
switch (r_type)
|
||||
{
|
||||
case R_TILEPRO_TLS_GD_CALL:
|
||||
case R_TILEPRO_IMM8_X0_TLS_GD_ADD:
|
||||
case R_TILEPRO_IMM8_Y0_TLS_GD_ADD:
|
||||
case R_TILEPRO_IMM8_X1_TLS_GD_ADD:
|
||||
case R_TILEPRO_IMM8_Y1_TLS_GD_ADD:
|
||||
case R_TILEPRO_IMM16_X0_TLS_GD_HA:
|
||||
case R_TILEPRO_IMM16_X1_TLS_GD_HA:
|
||||
case R_TILEPRO_IMM16_X0_TLS_IE_HA:
|
||||
case R_TILEPRO_IMM16_X1_TLS_IE_HA:
|
||||
tls_type = GOT_UNKNOWN;
|
||||
if (h == NULL && local_got_offsets)
|
||||
tls_type =
|
||||
_bfd_tilepro_elf_local_got_tls_type (input_bfd) [r_symndx];
|
||||
else if (h != NULL)
|
||||
tls_type = tilepro_elf_hash_entry(h)->tls_type;
|
||||
|
||||
is_tls_iele = (! info->shared || tls_type == GOT_TLS_IE);
|
||||
is_tls_le = is_tls_iele && (!info->shared
|
||||
&& (h == NULL || h->dynindx == -1));
|
||||
|
||||
if (r_type == R_TILEPRO_TLS_GD_CALL)
|
||||
{
|
||||
if (is_tls_le)
|
||||
{
|
||||
/* GD -> LE */
|
||||
tilepro_replace_insn (contents + rel->r_offset,
|
||||
insn_mask_X1, insn_tls_le_move_X1);
|
||||
continue;
|
||||
}
|
||||
else if (is_tls_iele)
|
||||
{
|
||||
/* GD -> IE */
|
||||
tilepro_replace_insn (contents + rel->r_offset,
|
||||
insn_mask_X1, insn_tls_ie_lw_X1);
|
||||
continue;
|
||||
}
|
||||
|
||||
/* GD -> GD */
|
||||
h = (struct elf_link_hash_entry *)
|
||||
bfd_link_hash_lookup (info->hash, "__tls_get_addr", FALSE,
|
||||
FALSE, TRUE);
|
||||
BFD_ASSERT (h != NULL);
|
||||
r_type = R_TILEPRO_JOFFLONG_X1_PLT;
|
||||
howto = tilepro_elf_howto_table + r_type;
|
||||
}
|
||||
else if (r_type == R_TILEPRO_IMM16_X0_TLS_GD_HA
|
||||
|| r_type == R_TILEPRO_IMM16_X0_TLS_IE_HA)
|
||||
{
|
||||
if (is_tls_le)
|
||||
tilepro_replace_insn (contents + rel->r_offset, srca_mask_X0,
|
||||
insn_tls_le_move_zero_X0X1);
|
||||
}
|
||||
else if (r_type == R_TILEPRO_IMM16_X1_TLS_GD_HA
|
||||
|| r_type == R_TILEPRO_IMM16_X1_TLS_IE_HA)
|
||||
{
|
||||
if (is_tls_le)
|
||||
tilepro_replace_insn (contents + rel->r_offset, srca_mask_X1,
|
||||
insn_tls_le_move_zero_X0X1);
|
||||
}
|
||||
else
|
||||
{
|
||||
const bfd_byte *mask = NULL;
|
||||
const bfd_byte *add_insn = NULL;
|
||||
|
||||
switch (r_type)
|
||||
{
|
||||
case R_TILEPRO_IMM8_X0_TLS_GD_ADD:
|
||||
add_insn = is_tls_iele ? insn_tls_ie_add_X0X1
|
||||
: insn_tls_gd_add_X0X1;
|
||||
mask = insn_mask_X0_no_dest_no_srca;
|
||||
break;
|
||||
case R_TILEPRO_IMM8_X1_TLS_GD_ADD:
|
||||
add_insn = is_tls_iele ? insn_tls_ie_add_X0X1
|
||||
: insn_tls_gd_add_X0X1;
|
||||
mask = insn_mask_X1_no_dest_no_srca;
|
||||
break;
|
||||
case R_TILEPRO_IMM8_Y0_TLS_GD_ADD:
|
||||
add_insn = is_tls_iele ? insn_tls_ie_add_Y0Y1
|
||||
: insn_tls_gd_add_Y0Y1;
|
||||
mask = insn_mask_Y0_no_dest_no_srca;
|
||||
break;
|
||||
case R_TILEPRO_IMM8_Y1_TLS_GD_ADD:
|
||||
add_insn = is_tls_iele ? insn_tls_ie_add_Y0Y1
|
||||
: insn_tls_gd_add_Y0Y1;
|
||||
mask = insn_mask_Y1_no_dest_no_srca;
|
||||
break;
|
||||
}
|
||||
|
||||
tilepro_replace_insn (contents + rel->r_offset, mask, add_insn);
|
||||
|
||||
continue;
|
||||
}
|
||||
break;
|
||||
case R_TILEPRO_TLS_IE_LOAD:
|
||||
if (!info->shared && (h == NULL || h->dynindx == -1))
|
||||
/* IE -> LE */
|
||||
tilepro_replace_insn (contents + rel->r_offset,
|
||||
insn_mask_X1_no_dest_no_srca,
|
||||
insn_tls_le_move_X1);
|
||||
else
|
||||
/* IE -> IE */
|
||||
tilepro_replace_insn (contents + rel->r_offset,
|
||||
insn_mask_X1_no_dest_no_srca,
|
||||
insn_tls_ie_lw_X1);
|
||||
continue;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
switch (r_type)
|
||||
{
|
||||
case R_TILEPRO_IMM16_X0_GOT:
|
||||
|
@ -2908,6 +3307,45 @@ tilepro_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
|
|||
}
|
||||
break;
|
||||
|
||||
case R_TILEPRO_IMM16_X0_TLS_LE:
|
||||
case R_TILEPRO_IMM16_X1_TLS_LE:
|
||||
case R_TILEPRO_IMM16_X0_TLS_LE_LO:
|
||||
case R_TILEPRO_IMM16_X1_TLS_LE_LO:
|
||||
case R_TILEPRO_IMM16_X0_TLS_LE_HI:
|
||||
case R_TILEPRO_IMM16_X1_TLS_LE_HI:
|
||||
case R_TILEPRO_IMM16_X0_TLS_LE_HA:
|
||||
case R_TILEPRO_IMM16_X1_TLS_LE_HA:
|
||||
if (info->shared)
|
||||
{
|
||||
Elf_Internal_Rela outrel;
|
||||
bfd_boolean skip;
|
||||
|
||||
BFD_ASSERT (sreloc != NULL);
|
||||
skip = FALSE;
|
||||
outrel.r_offset =
|
||||
_bfd_elf_section_offset (output_bfd, info, input_section,
|
||||
rel->r_offset);
|
||||
if (outrel.r_offset == (bfd_vma) -1)
|
||||
skip = TRUE;
|
||||
else if (outrel.r_offset == (bfd_vma) -2)
|
||||
skip = TRUE;
|
||||
outrel.r_offset += (input_section->output_section->vma
|
||||
+ input_section->output_offset);
|
||||
if (skip)
|
||||
memset (&outrel, 0, sizeof outrel);
|
||||
else
|
||||
{
|
||||
outrel.r_info = ELF32_R_INFO (0, r_type);
|
||||
outrel.r_addend = relocation - dtpoff_base (info)
|
||||
+ rel->r_addend;
|
||||
}
|
||||
|
||||
tilepro_elf_append_rela_32 (output_bfd, sreloc, &outrel);
|
||||
continue;
|
||||
}
|
||||
relocation = tpoff (info, relocation);
|
||||
break;
|
||||
|
||||
case R_TILEPRO_IMM16_X0_TLS_GD:
|
||||
case R_TILEPRO_IMM16_X1_TLS_GD:
|
||||
case R_TILEPRO_IMM16_X0_TLS_GD_LO:
|
||||
|
@ -2916,9 +3354,6 @@ tilepro_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
|
|||
case R_TILEPRO_IMM16_X1_TLS_GD_HI:
|
||||
case R_TILEPRO_IMM16_X0_TLS_GD_HA:
|
||||
case R_TILEPRO_IMM16_X1_TLS_GD_HA:
|
||||
tls_type = GOT_TLS_GD;
|
||||
goto have_tls_reference;
|
||||
|
||||
case R_TILEPRO_IMM16_X0_TLS_IE:
|
||||
case R_TILEPRO_IMM16_X1_TLS_IE:
|
||||
case R_TILEPRO_IMM16_X0_TLS_IE_LO:
|
||||
|
@ -2927,45 +3362,32 @@ tilepro_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
|
|||
case R_TILEPRO_IMM16_X1_TLS_IE_HI:
|
||||
case R_TILEPRO_IMM16_X0_TLS_IE_HA:
|
||||
case R_TILEPRO_IMM16_X1_TLS_IE_HA:
|
||||
tls_type = GOT_TLS_IE;
|
||||
/* Fall through. */
|
||||
|
||||
have_tls_reference:
|
||||
r_type = tilepro_elf_tls_transition (info, r_type, h == NULL);
|
||||
tls_type = GOT_UNKNOWN;
|
||||
if (h == NULL && local_got_offsets)
|
||||
tls_type
|
||||
= _bfd_tilepro_elf_local_got_tls_type (input_bfd) [r_symndx];
|
||||
else if (h != NULL)
|
||||
{
|
||||
tls_type = tilepro_elf_hash_entry(h)->tls_type;
|
||||
if (!info->shared && h->dynindx == -1 && tls_type == GOT_TLS_IE)
|
||||
r_type = tilepro_tls_translate_to_le (r_type);
|
||||
}
|
||||
if (tls_type == GOT_TLS_IE)
|
||||
switch (r_type)
|
||||
{
|
||||
case R_TILEPRO_IMM16_X0_TLS_GD:
|
||||
r_type = R_TILEPRO_IMM16_X0_TLS_IE;
|
||||
break;
|
||||
case R_TILEPRO_IMM16_X1_TLS_GD:
|
||||
r_type = R_TILEPRO_IMM16_X1_TLS_IE;
|
||||
break;
|
||||
case R_TILEPRO_IMM16_X0_TLS_GD_LO:
|
||||
r_type = R_TILEPRO_IMM16_X0_TLS_IE_LO;
|
||||
break;
|
||||
case R_TILEPRO_IMM16_X1_TLS_GD_LO:
|
||||
r_type = R_TILEPRO_IMM16_X1_TLS_IE_LO;
|
||||
break;
|
||||
case R_TILEPRO_IMM16_X0_TLS_GD_HI:
|
||||
r_type = R_TILEPRO_IMM16_X0_TLS_IE_HI;
|
||||
break;
|
||||
case R_TILEPRO_IMM16_X1_TLS_GD_HI:
|
||||
r_type = R_TILEPRO_IMM16_X1_TLS_IE_HI;
|
||||
break;
|
||||
case R_TILEPRO_IMM16_X0_TLS_GD_HA:
|
||||
r_type = R_TILEPRO_IMM16_X0_TLS_IE_HA;
|
||||
break;
|
||||
case R_TILEPRO_IMM16_X1_TLS_GD_HA:
|
||||
r_type = R_TILEPRO_IMM16_X1_TLS_IE_HA;
|
||||
break;
|
||||
}
|
||||
r_type = tilepro_tls_translate_to_ie (r_type);
|
||||
|
||||
if (r_type == R_TILEPRO_IMM16_X0_TLS_LE
|
||||
|| r_type == R_TILEPRO_IMM16_X1_TLS_LE
|
||||
|| r_type == R_TILEPRO_IMM16_X0_TLS_LE_LO
|
||||
|| r_type == R_TILEPRO_IMM16_X1_TLS_LE_LO
|
||||
|| r_type == R_TILEPRO_IMM16_X0_TLS_LE_HI
|
||||
|| r_type == R_TILEPRO_IMM16_X1_TLS_LE_HI
|
||||
|| r_type == R_TILEPRO_IMM16_X0_TLS_LE_HA
|
||||
|| r_type == R_TILEPRO_IMM16_X1_TLS_LE_HA)
|
||||
{
|
||||
relocation = tpoff (info, relocation);
|
||||
break;
|
||||
}
|
||||
|
||||
if (h != NULL)
|
||||
{
|
||||
|
|
File diff suppressed because it is too large
Load Diff
54
bfd/libbfd.h
54
bfd/libbfd.h
|
@ -2406,6 +2406,12 @@ static const char *const bfd_reloc_code_real_names[] = { "@@uninitialized@@",
|
|||
"BFD_RELOC_TILEPRO_SHAMT_X1",
|
||||
"BFD_RELOC_TILEPRO_SHAMT_Y0",
|
||||
"BFD_RELOC_TILEPRO_SHAMT_Y1",
|
||||
"BFD_RELOC_TILEPRO_TLS_GD_CALL",
|
||||
"BFD_RELOC_TILEPRO_IMM8_X0_TLS_GD_ADD",
|
||||
"BFD_RELOC_TILEPRO_IMM8_X1_TLS_GD_ADD",
|
||||
"BFD_RELOC_TILEPRO_IMM8_Y0_TLS_GD_ADD",
|
||||
"BFD_RELOC_TILEPRO_IMM8_Y1_TLS_GD_ADD",
|
||||
"BFD_RELOC_TILEPRO_TLS_IE_LOAD",
|
||||
"BFD_RELOC_TILEPRO_IMM16_X0_TLS_GD",
|
||||
"BFD_RELOC_TILEPRO_IMM16_X1_TLS_GD",
|
||||
"BFD_RELOC_TILEPRO_IMM16_X0_TLS_GD_LO",
|
||||
|
@ -2425,6 +2431,14 @@ static const char *const bfd_reloc_code_real_names[] = { "@@uninitialized@@",
|
|||
"BFD_RELOC_TILEPRO_TLS_DTPMOD32",
|
||||
"BFD_RELOC_TILEPRO_TLS_DTPOFF32",
|
||||
"BFD_RELOC_TILEPRO_TLS_TPOFF32",
|
||||
"BFD_RELOC_TILEPRO_IMM16_X0_TLS_LE",
|
||||
"BFD_RELOC_TILEPRO_IMM16_X1_TLS_LE",
|
||||
"BFD_RELOC_TILEPRO_IMM16_X0_TLS_LE_LO",
|
||||
"BFD_RELOC_TILEPRO_IMM16_X1_TLS_LE_LO",
|
||||
"BFD_RELOC_TILEPRO_IMM16_X0_TLS_LE_HI",
|
||||
"BFD_RELOC_TILEPRO_IMM16_X1_TLS_LE_HI",
|
||||
"BFD_RELOC_TILEPRO_IMM16_X0_TLS_LE_HA",
|
||||
"BFD_RELOC_TILEPRO_IMM16_X1_TLS_LE_HA",
|
||||
"BFD_RELOC_TILEGX_HW0",
|
||||
"BFD_RELOC_TILEGX_HW1",
|
||||
"BFD_RELOC_TILEGX_HW2",
|
||||
|
@ -2482,52 +2496,44 @@ 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_HW1_GOT",
|
||||
"BFD_RELOC_TILEGX_IMM16_X1_HW1_GOT",
|
||||
"BFD_RELOC_TILEGX_IMM16_X0_HW2_GOT",
|
||||
"BFD_RELOC_TILEGX_IMM16_X1_HW2_GOT",
|
||||
"BFD_RELOC_TILEGX_IMM16_X0_HW3_GOT",
|
||||
"BFD_RELOC_TILEGX_IMM16_X1_HW3_GOT",
|
||||
"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_HW2_LAST_GOT",
|
||||
"BFD_RELOC_TILEGX_IMM16_X1_HW2_LAST_GOT",
|
||||
"BFD_RELOC_TILEGX_IMM16_X0_HW0_TLS_GD",
|
||||
"BFD_RELOC_TILEGX_IMM16_X1_HW0_TLS_GD",
|
||||
"BFD_RELOC_TILEGX_IMM16_X0_HW1_TLS_GD",
|
||||
"BFD_RELOC_TILEGX_IMM16_X1_HW1_TLS_GD",
|
||||
"BFD_RELOC_TILEGX_IMM16_X0_HW2_TLS_GD",
|
||||
"BFD_RELOC_TILEGX_IMM16_X1_HW2_TLS_GD",
|
||||
"BFD_RELOC_TILEGX_IMM16_X0_HW3_TLS_GD",
|
||||
"BFD_RELOC_TILEGX_IMM16_X1_HW3_TLS_GD",
|
||||
"BFD_RELOC_TILEGX_IMM16_X0_HW0_TLS_LE",
|
||||
"BFD_RELOC_TILEGX_IMM16_X1_HW0_TLS_LE",
|
||||
"BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST_TLS_LE",
|
||||
"BFD_RELOC_TILEGX_IMM16_X1_HW0_LAST_TLS_LE",
|
||||
"BFD_RELOC_TILEGX_IMM16_X0_HW1_LAST_TLS_LE",
|
||||
"BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST_TLS_LE",
|
||||
"BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST_TLS_GD",
|
||||
"BFD_RELOC_TILEGX_IMM16_X1_HW0_LAST_TLS_GD",
|
||||
"BFD_RELOC_TILEGX_IMM16_X0_HW1_LAST_TLS_GD",
|
||||
"BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST_TLS_GD",
|
||||
"BFD_RELOC_TILEGX_IMM16_X0_HW2_LAST_TLS_GD",
|
||||
"BFD_RELOC_TILEGX_IMM16_X1_HW2_LAST_TLS_GD",
|
||||
"BFD_RELOC_TILEGX_IMM16_X0_HW0_TLS_IE",
|
||||
"BFD_RELOC_TILEGX_IMM16_X1_HW0_TLS_IE",
|
||||
"BFD_RELOC_TILEGX_IMM16_X0_HW1_TLS_IE",
|
||||
"BFD_RELOC_TILEGX_IMM16_X1_HW1_TLS_IE",
|
||||
"BFD_RELOC_TILEGX_IMM16_X0_HW2_TLS_IE",
|
||||
"BFD_RELOC_TILEGX_IMM16_X1_HW2_TLS_IE",
|
||||
"BFD_RELOC_TILEGX_IMM16_X0_HW3_TLS_IE",
|
||||
"BFD_RELOC_TILEGX_IMM16_X1_HW3_TLS_IE",
|
||||
"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",
|
||||
"BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST_TLS_IE",
|
||||
"BFD_RELOC_TILEGX_IMM16_X0_HW2_LAST_TLS_IE",
|
||||
"BFD_RELOC_TILEGX_IMM16_X1_HW2_LAST_TLS_IE",
|
||||
"BFD_RELOC_TILEGX_TLS_DTPMOD64",
|
||||
"BFD_RELOC_TILEGX_TLS_DTPOFF64",
|
||||
"BFD_RELOC_TILEGX_TLS_TPOFF64",
|
||||
"BFD_RELOC_TILEGX_TLS_DTPMOD32",
|
||||
"BFD_RELOC_TILEGX_TLS_DTPOFF32",
|
||||
"BFD_RELOC_TILEGX_TLS_TPOFF32",
|
||||
"BFD_RELOC_TILEGX_TLS_GD_CALL",
|
||||
"BFD_RELOC_TILEGX_IMM8_X0_TLS_GD_ADD",
|
||||
"BFD_RELOC_TILEGX_IMM8_X1_TLS_GD_ADD",
|
||||
"BFD_RELOC_TILEGX_IMM8_Y0_TLS_GD_ADD",
|
||||
"BFD_RELOC_TILEGX_IMM8_Y1_TLS_GD_ADD",
|
||||
"BFD_RELOC_TILEGX_TLS_IE_LOAD",
|
||||
"BFD_RELOC_TILEGX_IMM8_X0_TLS_ADD",
|
||||
"BFD_RELOC_TILEGX_IMM8_X1_TLS_ADD",
|
||||
"BFD_RELOC_TILEGX_IMM8_Y0_TLS_ADD",
|
||||
"BFD_RELOC_TILEGX_IMM8_Y1_TLS_ADD",
|
||||
"BFD_RELOC_EPIPHANY_SIMM8",
|
||||
"BFD_RELOC_EPIPHANY_SIMM24",
|
||||
"BFD_RELOC_EPIPHANY_HIGH",
|
||||
|
|
96
bfd/reloc.c
96
bfd/reloc.c
|
@ -5798,6 +5798,18 @@ ENUMX
|
|||
BFD_RELOC_TILEPRO_SHAMT_Y0
|
||||
ENUMX
|
||||
BFD_RELOC_TILEPRO_SHAMT_Y1
|
||||
ENUMX
|
||||
BFD_RELOC_TILEPRO_TLS_GD_CALL
|
||||
ENUMX
|
||||
BFD_RELOC_TILEPRO_IMM8_X0_TLS_GD_ADD
|
||||
ENUMX
|
||||
BFD_RELOC_TILEPRO_IMM8_X1_TLS_GD_ADD
|
||||
ENUMX
|
||||
BFD_RELOC_TILEPRO_IMM8_Y0_TLS_GD_ADD
|
||||
ENUMX
|
||||
BFD_RELOC_TILEPRO_IMM8_Y1_TLS_GD_ADD
|
||||
ENUMX
|
||||
BFD_RELOC_TILEPRO_TLS_IE_LOAD
|
||||
ENUMX
|
||||
BFD_RELOC_TILEPRO_IMM16_X0_TLS_GD
|
||||
ENUMX
|
||||
|
@ -5836,6 +5848,22 @@ ENUMX
|
|||
BFD_RELOC_TILEPRO_TLS_DTPOFF32
|
||||
ENUMX
|
||||
BFD_RELOC_TILEPRO_TLS_TPOFF32
|
||||
ENUMX
|
||||
BFD_RELOC_TILEPRO_IMM16_X0_TLS_LE
|
||||
ENUMX
|
||||
BFD_RELOC_TILEPRO_IMM16_X1_TLS_LE
|
||||
ENUMX
|
||||
BFD_RELOC_TILEPRO_IMM16_X0_TLS_LE_LO
|
||||
ENUMX
|
||||
BFD_RELOC_TILEPRO_IMM16_X1_TLS_LE_LO
|
||||
ENUMX
|
||||
BFD_RELOC_TILEPRO_IMM16_X0_TLS_LE_HI
|
||||
ENUMX
|
||||
BFD_RELOC_TILEPRO_IMM16_X1_TLS_LE_HI
|
||||
ENUMX
|
||||
BFD_RELOC_TILEPRO_IMM16_X0_TLS_LE_HA
|
||||
ENUMX
|
||||
BFD_RELOC_TILEPRO_IMM16_X1_TLS_LE_HA
|
||||
ENUMDOC
|
||||
Tilera TILEPro Relocations.
|
||||
|
||||
|
@ -5953,18 +5981,6 @@ ENUMX
|
|||
BFD_RELOC_TILEGX_IMM16_X0_HW0_GOT
|
||||
ENUMX
|
||||
BFD_RELOC_TILEGX_IMM16_X1_HW0_GOT
|
||||
ENUMX
|
||||
BFD_RELOC_TILEGX_IMM16_X0_HW1_GOT
|
||||
ENUMX
|
||||
BFD_RELOC_TILEGX_IMM16_X1_HW1_GOT
|
||||
ENUMX
|
||||
BFD_RELOC_TILEGX_IMM16_X0_HW2_GOT
|
||||
ENUMX
|
||||
BFD_RELOC_TILEGX_IMM16_X1_HW2_GOT
|
||||
ENUMX
|
||||
BFD_RELOC_TILEGX_IMM16_X0_HW3_GOT
|
||||
ENUMX
|
||||
BFD_RELOC_TILEGX_IMM16_X1_HW3_GOT
|
||||
ENUMX
|
||||
BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST_GOT
|
||||
ENUMX
|
||||
|
@ -5973,26 +5989,22 @@ ENUMX
|
|||
BFD_RELOC_TILEGX_IMM16_X0_HW1_LAST_GOT
|
||||
ENUMX
|
||||
BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST_GOT
|
||||
ENUMX
|
||||
BFD_RELOC_TILEGX_IMM16_X0_HW2_LAST_GOT
|
||||
ENUMX
|
||||
BFD_RELOC_TILEGX_IMM16_X1_HW2_LAST_GOT
|
||||
ENUMX
|
||||
BFD_RELOC_TILEGX_IMM16_X0_HW0_TLS_GD
|
||||
ENUMX
|
||||
BFD_RELOC_TILEGX_IMM16_X1_HW0_TLS_GD
|
||||
ENUMX
|
||||
BFD_RELOC_TILEGX_IMM16_X0_HW1_TLS_GD
|
||||
BFD_RELOC_TILEGX_IMM16_X0_HW0_TLS_LE
|
||||
ENUMX
|
||||
BFD_RELOC_TILEGX_IMM16_X1_HW1_TLS_GD
|
||||
BFD_RELOC_TILEGX_IMM16_X1_HW0_TLS_LE
|
||||
ENUMX
|
||||
BFD_RELOC_TILEGX_IMM16_X0_HW2_TLS_GD
|
||||
BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST_TLS_LE
|
||||
ENUMX
|
||||
BFD_RELOC_TILEGX_IMM16_X1_HW2_TLS_GD
|
||||
BFD_RELOC_TILEGX_IMM16_X1_HW0_LAST_TLS_LE
|
||||
ENUMX
|
||||
BFD_RELOC_TILEGX_IMM16_X0_HW3_TLS_GD
|
||||
BFD_RELOC_TILEGX_IMM16_X0_HW1_LAST_TLS_LE
|
||||
ENUMX
|
||||
BFD_RELOC_TILEGX_IMM16_X1_HW3_TLS_GD
|
||||
BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST_TLS_LE
|
||||
ENUMX
|
||||
BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST_TLS_GD
|
||||
ENUMX
|
||||
|
@ -6001,26 +6013,10 @@ ENUMX
|
|||
BFD_RELOC_TILEGX_IMM16_X0_HW1_LAST_TLS_GD
|
||||
ENUMX
|
||||
BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST_TLS_GD
|
||||
ENUMX
|
||||
BFD_RELOC_TILEGX_IMM16_X0_HW2_LAST_TLS_GD
|
||||
ENUMX
|
||||
BFD_RELOC_TILEGX_IMM16_X1_HW2_LAST_TLS_GD
|
||||
ENUMX
|
||||
BFD_RELOC_TILEGX_IMM16_X0_HW0_TLS_IE
|
||||
ENUMX
|
||||
BFD_RELOC_TILEGX_IMM16_X1_HW0_TLS_IE
|
||||
ENUMX
|
||||
BFD_RELOC_TILEGX_IMM16_X0_HW1_TLS_IE
|
||||
ENUMX
|
||||
BFD_RELOC_TILEGX_IMM16_X1_HW1_TLS_IE
|
||||
ENUMX
|
||||
BFD_RELOC_TILEGX_IMM16_X0_HW2_TLS_IE
|
||||
ENUMX
|
||||
BFD_RELOC_TILEGX_IMM16_X1_HW2_TLS_IE
|
||||
ENUMX
|
||||
BFD_RELOC_TILEGX_IMM16_X0_HW3_TLS_IE
|
||||
ENUMX
|
||||
BFD_RELOC_TILEGX_IMM16_X1_HW3_TLS_IE
|
||||
ENUMX
|
||||
BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST_TLS_IE
|
||||
ENUMX
|
||||
|
@ -6029,10 +6025,6 @@ ENUMX
|
|||
BFD_RELOC_TILEGX_IMM16_X0_HW1_LAST_TLS_IE
|
||||
ENUMX
|
||||
BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST_TLS_IE
|
||||
ENUMX
|
||||
BFD_RELOC_TILEGX_IMM16_X0_HW2_LAST_TLS_IE
|
||||
ENUMX
|
||||
BFD_RELOC_TILEGX_IMM16_X1_HW2_LAST_TLS_IE
|
||||
ENUMX
|
||||
BFD_RELOC_TILEGX_TLS_DTPMOD64
|
||||
ENUMX
|
||||
|
@ -6045,6 +6037,26 @@ ENUMX
|
|||
BFD_RELOC_TILEGX_TLS_DTPOFF32
|
||||
ENUMX
|
||||
BFD_RELOC_TILEGX_TLS_TPOFF32
|
||||
ENUMX
|
||||
BFD_RELOC_TILEGX_TLS_GD_CALL
|
||||
ENUMX
|
||||
BFD_RELOC_TILEGX_IMM8_X0_TLS_GD_ADD
|
||||
ENUMX
|
||||
BFD_RELOC_TILEGX_IMM8_X1_TLS_GD_ADD
|
||||
ENUMX
|
||||
BFD_RELOC_TILEGX_IMM8_Y0_TLS_GD_ADD
|
||||
ENUMX
|
||||
BFD_RELOC_TILEGX_IMM8_Y1_TLS_GD_ADD
|
||||
ENUMX
|
||||
BFD_RELOC_TILEGX_TLS_IE_LOAD
|
||||
ENUMX
|
||||
BFD_RELOC_TILEGX_IMM8_X0_TLS_ADD
|
||||
ENUMX
|
||||
BFD_RELOC_TILEGX_IMM8_X1_TLS_ADD
|
||||
ENUMX
|
||||
BFD_RELOC_TILEGX_IMM8_Y0_TLS_ADD
|
||||
ENUMX
|
||||
BFD_RELOC_TILEGX_IMM8_Y1_TLS_ADD
|
||||
ENUMDOC
|
||||
Tilera TILE-Gx Relocations.
|
||||
|
||||
|
|
|
@ -1,3 +1,40 @@
|
|||
2012-02-25 Walter Lee <walt@tilera.com>
|
||||
|
||||
* tc-tilepro.c (O_tls_le): Define operator.
|
||||
(O_tls_le_lo16): Ditto.
|
||||
(O_tls_le_hi16): Ditto.
|
||||
(O_tls_le_ha16): Ditto.
|
||||
(O_tls_gd_call): Ditto.
|
||||
(O_tls_gd_add): Ditto.
|
||||
(O_tls_ie_load): Ditto.
|
||||
(md_begin): Delete old operators; handle new operators.
|
||||
(emit_tilepro_instruction): Ditto.
|
||||
(md_apply_fix): Ditto.
|
||||
* tc-tilegx.c (O_hw1_got): Delete operator.
|
||||
(O_hw2_got): Ditto.
|
||||
(O_hw3_got): Ditto.
|
||||
(O_hw2_last_got): Ditto.
|
||||
(O_hw1_tls_gd): Ditto.
|
||||
(O_hw2_tls_gd): Ditto.
|
||||
(O_hw3_tls_gd): Ditto.
|
||||
(O_hw2_last_tls_gd): Ditto.
|
||||
(O_hw1_tls_ie): Ditto.
|
||||
(O_hw2_tls_ie): Ditto.
|
||||
(O_hw3_tls_ie): Ditto.
|
||||
(O_hw2_last_tls_ie): Ditto.
|
||||
(O_hw0_tls_le): Define operator.
|
||||
(O_hw0_last_tls_le): Ditto.
|
||||
(O_hw1_last_tls_le): Ditto.
|
||||
(O_tls_gd_call): Ditto.
|
||||
(O_tls_gd_add): Ditto.
|
||||
(O_tls_ie_load): Ditto.
|
||||
(O_tls_add): Ditto.
|
||||
(md_begin): Delete old operators; handle new operators.
|
||||
(emit_tilegx_instruction): Ditto.
|
||||
(md_apply_fix): Ditto.
|
||||
* doc/c-tilegx.texi: Delete old operators; document new operators.
|
||||
* doc/c-tilepro.texi: Ditto.
|
||||
|
||||
2012-02-25 Walter Lee <walt@tilera.com>
|
||||
|
||||
* tc-tilepro.c (apply_special_operator): delete cases for
|
||||
|
|
|
@ -157,27 +157,22 @@ md_show_usage (FILE *stream)
|
|||
#define O_hw1_last O_md6
|
||||
#define O_hw2_last O_md7
|
||||
#define O_hw0_got O_md8
|
||||
#define O_hw1_got O_md9
|
||||
#define O_hw2_got O_md10
|
||||
#define O_hw3_got O_md11
|
||||
#define O_hw0_last_got O_md12
|
||||
#define O_hw1_last_got O_md13
|
||||
#define O_hw2_last_got O_md14
|
||||
#define O_plt O_md15
|
||||
#define O_hw0_tls_gd O_md16
|
||||
#define O_hw1_tls_gd O_md17
|
||||
#define O_hw2_tls_gd O_md18
|
||||
#define O_hw3_tls_gd O_md19
|
||||
#define O_hw0_last_tls_gd O_md20
|
||||
#define O_hw1_last_tls_gd O_md21
|
||||
#define O_hw2_last_tls_gd O_md22
|
||||
#define O_hw0_tls_ie O_md23
|
||||
#define O_hw1_tls_ie O_md24
|
||||
#define O_hw2_tls_ie O_md25
|
||||
#define O_hw3_tls_ie O_md26
|
||||
#define O_hw0_last_tls_ie O_md27
|
||||
#define O_hw1_last_tls_ie O_md28
|
||||
#define O_hw2_last_tls_ie O_md29
|
||||
#define O_hw0_last_got O_md9
|
||||
#define O_hw1_last_got O_md10
|
||||
#define O_plt O_md11
|
||||
#define O_hw0_tls_gd O_md12
|
||||
#define O_hw0_last_tls_gd O_md13
|
||||
#define O_hw1_last_tls_gd O_md14
|
||||
#define O_hw0_tls_ie O_md15
|
||||
#define O_hw0_last_tls_ie O_md16
|
||||
#define O_hw1_last_tls_ie O_md17
|
||||
#define O_hw0_tls_le O_md18
|
||||
#define O_hw0_last_tls_le O_md19
|
||||
#define O_hw1_last_tls_le O_md20
|
||||
#define O_tls_gd_call O_md21
|
||||
#define O_tls_gd_add O_md22
|
||||
#define O_tls_ie_load O_md23
|
||||
#define O_tls_add O_md24
|
||||
|
||||
static struct hash_control *special_operator_hash;
|
||||
|
||||
|
@ -289,27 +284,22 @@ md_begin (void)
|
|||
/* hw3_last is a convenience alias for the equivalent hw3. */
|
||||
hash_insert (special_operator_hash, "hw3_last", (void*)O_hw3);
|
||||
INSERT_SPECIAL_OP (hw0_got);
|
||||
INSERT_SPECIAL_OP (hw1_got);
|
||||
INSERT_SPECIAL_OP (hw2_got);
|
||||
INSERT_SPECIAL_OP (hw3_got);
|
||||
INSERT_SPECIAL_OP (hw0_last_got);
|
||||
INSERT_SPECIAL_OP (hw1_last_got);
|
||||
INSERT_SPECIAL_OP (hw2_last_got);
|
||||
INSERT_SPECIAL_OP(plt);
|
||||
INSERT_SPECIAL_OP (hw0_tls_gd);
|
||||
INSERT_SPECIAL_OP (hw1_tls_gd);
|
||||
INSERT_SPECIAL_OP (hw2_tls_gd);
|
||||
INSERT_SPECIAL_OP (hw3_tls_gd);
|
||||
INSERT_SPECIAL_OP (hw0_last_tls_gd);
|
||||
INSERT_SPECIAL_OP (hw1_last_tls_gd);
|
||||
INSERT_SPECIAL_OP (hw2_last_tls_gd);
|
||||
INSERT_SPECIAL_OP (hw0_tls_ie);
|
||||
INSERT_SPECIAL_OP (hw1_tls_ie);
|
||||
INSERT_SPECIAL_OP (hw2_tls_ie);
|
||||
INSERT_SPECIAL_OP (hw3_tls_ie);
|
||||
INSERT_SPECIAL_OP (hw0_last_tls_ie);
|
||||
INSERT_SPECIAL_OP (hw1_last_tls_ie);
|
||||
INSERT_SPECIAL_OP (hw2_last_tls_ie);
|
||||
INSERT_SPECIAL_OP (hw0_tls_le);
|
||||
INSERT_SPECIAL_OP (hw0_last_tls_le);
|
||||
INSERT_SPECIAL_OP (hw1_last_tls_le);
|
||||
INSERT_SPECIAL_OP (tls_gd_call);
|
||||
INSERT_SPECIAL_OP (tls_gd_add);
|
||||
INSERT_SPECIAL_OP (tls_ie_load);
|
||||
INSERT_SPECIAL_OP (tls_add);
|
||||
#undef INSERT_SPECIAL_OP
|
||||
|
||||
/* Initialize op_hash hash table. */
|
||||
|
@ -566,21 +556,6 @@ emit_tilegx_instruction (tilegx_bundle_bits bits,
|
|||
require_symbol = 1;
|
||||
break;
|
||||
|
||||
case O_hw1_got:
|
||||
HANDLE_OP16 (HW1_GOT);
|
||||
require_symbol = 1;
|
||||
break;
|
||||
|
||||
case O_hw2_got:
|
||||
HANDLE_OP16 (HW2_GOT);
|
||||
require_symbol = 1;
|
||||
break;
|
||||
|
||||
case O_hw3_got:
|
||||
HANDLE_OP16 (HW3_GOT);
|
||||
require_symbol = 1;
|
||||
break;
|
||||
|
||||
case O_hw0_last_got:
|
||||
HANDLE_OP16 (HW0_LAST_GOT);
|
||||
require_symbol = 1;
|
||||
|
@ -591,31 +566,11 @@ emit_tilegx_instruction (tilegx_bundle_bits bits,
|
|||
require_symbol = 1;
|
||||
break;
|
||||
|
||||
case O_hw2_last_got:
|
||||
HANDLE_OP16 (HW2_LAST_GOT);
|
||||
require_symbol = 1;
|
||||
break;
|
||||
|
||||
case O_hw0_tls_gd:
|
||||
HANDLE_OP16 (HW0_TLS_GD);
|
||||
require_symbol = 1;
|
||||
break;
|
||||
|
||||
case O_hw1_tls_gd:
|
||||
HANDLE_OP16 (HW1_TLS_GD);
|
||||
require_symbol = 1;
|
||||
break;
|
||||
|
||||
case O_hw2_tls_gd:
|
||||
HANDLE_OP16 (HW2_TLS_GD);
|
||||
require_symbol = 1;
|
||||
break;
|
||||
|
||||
case O_hw3_tls_gd:
|
||||
HANDLE_OP16 (HW3_TLS_GD);
|
||||
require_symbol = 1;
|
||||
break;
|
||||
|
||||
case O_hw0_last_tls_gd:
|
||||
HANDLE_OP16 (HW0_LAST_TLS_GD);
|
||||
require_symbol = 1;
|
||||
|
@ -626,31 +581,11 @@ emit_tilegx_instruction (tilegx_bundle_bits bits,
|
|||
require_symbol = 1;
|
||||
break;
|
||||
|
||||
case O_hw2_last_tls_gd:
|
||||
HANDLE_OP16 (HW2_LAST_TLS_GD);
|
||||
require_symbol = 1;
|
||||
break;
|
||||
|
||||
case O_hw0_tls_ie:
|
||||
HANDLE_OP16 (HW0_TLS_IE);
|
||||
require_symbol = 1;
|
||||
break;
|
||||
|
||||
case O_hw1_tls_ie:
|
||||
HANDLE_OP16 (HW1_TLS_IE);
|
||||
require_symbol = 1;
|
||||
break;
|
||||
|
||||
case O_hw2_tls_ie:
|
||||
HANDLE_OP16 (HW2_TLS_IE);
|
||||
require_symbol = 1;
|
||||
break;
|
||||
|
||||
case O_hw3_tls_ie:
|
||||
HANDLE_OP16 (HW3_TLS_IE);
|
||||
require_symbol = 1;
|
||||
break;
|
||||
|
||||
case O_hw0_last_tls_ie:
|
||||
HANDLE_OP16 (HW0_LAST_TLS_IE);
|
||||
require_symbol = 1;
|
||||
|
@ -661,8 +596,18 @@ emit_tilegx_instruction (tilegx_bundle_bits bits,
|
|||
require_symbol = 1;
|
||||
break;
|
||||
|
||||
case O_hw2_last_tls_ie:
|
||||
HANDLE_OP16 (HW2_LAST_TLS_IE);
|
||||
case O_hw0_tls_le:
|
||||
HANDLE_OP16 (HW0_TLS_LE);
|
||||
require_symbol = 1;
|
||||
break;
|
||||
|
||||
case O_hw0_last_tls_le:
|
||||
HANDLE_OP16 (HW0_LAST_TLS_LE);
|
||||
require_symbol = 1;
|
||||
break;
|
||||
|
||||
case O_hw1_last_tls_le:
|
||||
HANDLE_OP16 (HW1_LAST_TLS_LE);
|
||||
require_symbol = 1;
|
||||
break;
|
||||
|
||||
|
@ -682,6 +627,80 @@ emit_tilegx_instruction (tilegx_bundle_bits bits,
|
|||
require_symbol = 1;
|
||||
break;
|
||||
|
||||
case O_tls_gd_call:
|
||||
switch (reloc)
|
||||
{
|
||||
case BFD_RELOC_TILEGX_JUMPOFF_X1:
|
||||
reloc = BFD_RELOC_TILEGX_TLS_GD_CALL;
|
||||
break;
|
||||
default:
|
||||
die = 1;
|
||||
break;
|
||||
}
|
||||
use_subexp = 1;
|
||||
require_symbol = 1;
|
||||
break;
|
||||
|
||||
case O_tls_gd_add:
|
||||
switch (reloc)
|
||||
{
|
||||
case BFD_RELOC_TILEGX_IMM8_X0:
|
||||
reloc = BFD_RELOC_TILEGX_IMM8_X0_TLS_GD_ADD;
|
||||
break;
|
||||
case BFD_RELOC_TILEGX_IMM8_X1:
|
||||
reloc = BFD_RELOC_TILEGX_IMM8_X1_TLS_GD_ADD;
|
||||
break;
|
||||
case BFD_RELOC_TILEGX_IMM8_Y0:
|
||||
reloc = BFD_RELOC_TILEGX_IMM8_Y0_TLS_GD_ADD;
|
||||
break;
|
||||
case BFD_RELOC_TILEGX_IMM8_Y1:
|
||||
reloc = BFD_RELOC_TILEGX_IMM8_Y1_TLS_GD_ADD;
|
||||
break;
|
||||
default:
|
||||
die = 1;
|
||||
break;
|
||||
}
|
||||
use_subexp = 1;
|
||||
require_symbol = 1;
|
||||
break;
|
||||
|
||||
case O_tls_ie_load:
|
||||
switch (reloc)
|
||||
{
|
||||
case BFD_RELOC_TILEGX_IMM8_X1:
|
||||
reloc = BFD_RELOC_TILEGX_TLS_IE_LOAD;
|
||||
break;
|
||||
default:
|
||||
die = 1;
|
||||
break;
|
||||
}
|
||||
use_subexp = 1;
|
||||
require_symbol = 1;
|
||||
break;
|
||||
|
||||
case O_tls_add:
|
||||
switch (reloc)
|
||||
{
|
||||
case BFD_RELOC_TILEGX_IMM8_X0:
|
||||
reloc = BFD_RELOC_TILEGX_IMM8_X0_TLS_ADD;
|
||||
break;
|
||||
case BFD_RELOC_TILEGX_IMM8_X1:
|
||||
reloc = BFD_RELOC_TILEGX_IMM8_X1_TLS_ADD;
|
||||
break;
|
||||
case BFD_RELOC_TILEGX_IMM8_Y0:
|
||||
reloc = BFD_RELOC_TILEGX_IMM8_Y0_TLS_ADD;
|
||||
break;
|
||||
case BFD_RELOC_TILEGX_IMM8_Y1:
|
||||
reloc = BFD_RELOC_TILEGX_IMM8_Y1_TLS_ADD;
|
||||
break;
|
||||
default:
|
||||
die = 1;
|
||||
break;
|
||||
}
|
||||
use_subexp = 1;
|
||||
require_symbol = 1;
|
||||
break;
|
||||
|
||||
default:
|
||||
/* Do nothing. */
|
||||
break;
|
||||
|
@ -1486,34 +1505,34 @@ md_apply_fix (fixS *fixP, valueT * valP, segT seg ATTRIBUTE_UNUSED)
|
|||
#ifdef OBJ_ELF
|
||||
switch (fixP->fx_r_type)
|
||||
{
|
||||
case BFD_RELOC_TILEGX_IMM8_X0_TLS_ADD:
|
||||
case BFD_RELOC_TILEGX_IMM8_X1_TLS_ADD:
|
||||
case BFD_RELOC_TILEGX_IMM8_Y0_TLS_ADD:
|
||||
case BFD_RELOC_TILEGX_IMM8_Y1_TLS_ADD:
|
||||
case BFD_RELOC_TILEGX_IMM8_X0_TLS_GD_ADD:
|
||||
case BFD_RELOC_TILEGX_IMM8_X1_TLS_GD_ADD:
|
||||
case BFD_RELOC_TILEGX_IMM8_Y0_TLS_GD_ADD:
|
||||
case BFD_RELOC_TILEGX_IMM8_Y1_TLS_GD_ADD:
|
||||
case BFD_RELOC_TILEGX_IMM16_X0_HW0_TLS_GD:
|
||||
case BFD_RELOC_TILEGX_IMM16_X1_HW0_TLS_GD:
|
||||
case BFD_RELOC_TILEGX_IMM16_X0_HW0_TLS_IE:
|
||||
case BFD_RELOC_TILEGX_IMM16_X1_HW0_TLS_IE:
|
||||
case BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST_TLS_GD:
|
||||
case BFD_RELOC_TILEGX_IMM16_X1_HW0_LAST_TLS_GD:
|
||||
case BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST_TLS_IE:
|
||||
case BFD_RELOC_TILEGX_IMM16_X1_HW0_LAST_TLS_IE:
|
||||
case BFD_RELOC_TILEGX_IMM16_X0_HW1_TLS_GD:
|
||||
case BFD_RELOC_TILEGX_IMM16_X1_HW1_TLS_GD:
|
||||
case BFD_RELOC_TILEGX_IMM16_X0_HW1_TLS_IE:
|
||||
case BFD_RELOC_TILEGX_IMM16_X1_HW1_TLS_IE:
|
||||
case BFD_RELOC_TILEGX_IMM16_X0_HW1_LAST_TLS_GD:
|
||||
case BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST_TLS_GD:
|
||||
case BFD_RELOC_TILEGX_IMM16_X0_HW0_TLS_IE:
|
||||
case BFD_RELOC_TILEGX_IMM16_X1_HW0_TLS_IE:
|
||||
case BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST_TLS_IE:
|
||||
case BFD_RELOC_TILEGX_IMM16_X1_HW0_LAST_TLS_IE:
|
||||
case BFD_RELOC_TILEGX_IMM16_X0_HW1_LAST_TLS_IE:
|
||||
case BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST_TLS_IE:
|
||||
case BFD_RELOC_TILEGX_IMM16_X0_HW2_TLS_GD:
|
||||
case BFD_RELOC_TILEGX_IMM16_X1_HW2_TLS_GD:
|
||||
case BFD_RELOC_TILEGX_IMM16_X0_HW2_TLS_IE:
|
||||
case BFD_RELOC_TILEGX_IMM16_X1_HW2_TLS_IE:
|
||||
case BFD_RELOC_TILEGX_IMM16_X0_HW2_LAST_TLS_GD:
|
||||
case BFD_RELOC_TILEGX_IMM16_X1_HW2_LAST_TLS_GD:
|
||||
case BFD_RELOC_TILEGX_IMM16_X0_HW2_LAST_TLS_IE:
|
||||
case BFD_RELOC_TILEGX_IMM16_X1_HW2_LAST_TLS_IE:
|
||||
case BFD_RELOC_TILEGX_IMM16_X0_HW3_TLS_GD:
|
||||
case BFD_RELOC_TILEGX_IMM16_X1_HW3_TLS_GD:
|
||||
case BFD_RELOC_TILEGX_IMM16_X0_HW3_TLS_IE:
|
||||
case BFD_RELOC_TILEGX_IMM16_X1_HW3_TLS_IE:
|
||||
case BFD_RELOC_TILEGX_IMM16_X0_HW0_TLS_LE:
|
||||
case BFD_RELOC_TILEGX_IMM16_X1_HW0_TLS_LE:
|
||||
case BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST_TLS_LE:
|
||||
case BFD_RELOC_TILEGX_IMM16_X1_HW0_LAST_TLS_LE:
|
||||
case BFD_RELOC_TILEGX_IMM16_X0_HW1_LAST_TLS_LE:
|
||||
case BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST_TLS_LE:
|
||||
case BFD_RELOC_TILEGX_TLS_GD_CALL:
|
||||
case BFD_RELOC_TILEGX_TLS_IE_LOAD:
|
||||
case BFD_RELOC_TILEGX_TLS_DTPMOD64:
|
||||
case BFD_RELOC_TILEGX_TLS_DTPOFF64:
|
||||
case BFD_RELOC_TILEGX_TLS_TPOFF64:
|
||||
|
|
|
@ -103,14 +103,14 @@ md_show_usage (FILE *stream)
|
|||
|
||||
/* Extra expression types. */
|
||||
|
||||
#define O_lo16 O_md1
|
||||
#define O_hi16 O_md2
|
||||
#define O_ha16 O_md3
|
||||
#define O_got O_md4
|
||||
#define O_lo16 O_md1
|
||||
#define O_hi16 O_md2
|
||||
#define O_ha16 O_md3
|
||||
#define O_got O_md4
|
||||
#define O_got_lo16 O_md5
|
||||
#define O_got_hi16 O_md6
|
||||
#define O_got_ha16 O_md7
|
||||
#define O_plt O_md8
|
||||
#define O_plt O_md8
|
||||
#define O_tls_gd O_md9
|
||||
#define O_tls_gd_lo16 O_md10
|
||||
#define O_tls_gd_hi16 O_md11
|
||||
|
@ -119,6 +119,13 @@ md_show_usage (FILE *stream)
|
|||
#define O_tls_ie_lo16 O_md14
|
||||
#define O_tls_ie_hi16 O_md15
|
||||
#define O_tls_ie_ha16 O_md16
|
||||
#define O_tls_le O_md17
|
||||
#define O_tls_le_lo16 O_md18
|
||||
#define O_tls_le_hi16 O_md19
|
||||
#define O_tls_le_ha16 O_md20
|
||||
#define O_tls_gd_call O_md21
|
||||
#define O_tls_gd_add O_md22
|
||||
#define O_tls_ie_load O_md23
|
||||
|
||||
static struct hash_control *special_operator_hash;
|
||||
|
||||
|
@ -230,6 +237,13 @@ md_begin (void)
|
|||
INSERT_SPECIAL_OP(tls_ie_lo16);
|
||||
INSERT_SPECIAL_OP(tls_ie_hi16);
|
||||
INSERT_SPECIAL_OP(tls_ie_ha16);
|
||||
INSERT_SPECIAL_OP(tls_le);
|
||||
INSERT_SPECIAL_OP(tls_le_lo16);
|
||||
INSERT_SPECIAL_OP(tls_le_hi16);
|
||||
INSERT_SPECIAL_OP(tls_le_ha16);
|
||||
INSERT_SPECIAL_OP(tls_gd_call);
|
||||
INSERT_SPECIAL_OP(tls_gd_add);
|
||||
INSERT_SPECIAL_OP(tls_ie_load);
|
||||
#undef INSERT_SPECIAL_OP
|
||||
|
||||
/* Initialize op_hash hash table. */
|
||||
|
@ -516,6 +530,26 @@ emit_tilepro_instruction (tilepro_bundle_bits bits,
|
|||
require_symbol = 1;
|
||||
break;
|
||||
|
||||
case O_tls_le:
|
||||
HANDLE_OP16 (TLS_LE);
|
||||
require_symbol = 1;
|
||||
break;
|
||||
|
||||
case O_tls_le_lo16:
|
||||
HANDLE_OP16 (TLS_LE_LO);
|
||||
require_symbol = 1;
|
||||
break;
|
||||
|
||||
case O_tls_le_hi16:
|
||||
HANDLE_OP16 (TLS_LE_HI);
|
||||
require_symbol = 1;
|
||||
break;
|
||||
|
||||
case O_tls_le_ha16:
|
||||
HANDLE_OP16 (TLS_LE_HA);
|
||||
require_symbol = 1;
|
||||
break;
|
||||
|
||||
#undef HANDLE_OP16
|
||||
|
||||
case O_plt:
|
||||
|
@ -532,6 +566,57 @@ emit_tilepro_instruction (tilepro_bundle_bits bits,
|
|||
require_symbol = 1;
|
||||
break;
|
||||
|
||||
case O_tls_gd_call:
|
||||
switch (reloc)
|
||||
{
|
||||
case BFD_RELOC_TILEPRO_JOFFLONG_X1:
|
||||
reloc = BFD_RELOC_TILEPRO_TLS_GD_CALL;
|
||||
break;
|
||||
default:
|
||||
die = 1;
|
||||
break;
|
||||
}
|
||||
use_subexp = 1;
|
||||
require_symbol = 1;
|
||||
break;
|
||||
|
||||
case O_tls_gd_add:
|
||||
switch (reloc)
|
||||
{
|
||||
case BFD_RELOC_TILEPRO_IMM8_X0:
|
||||
reloc = BFD_RELOC_TILEPRO_IMM8_X0_TLS_GD_ADD;
|
||||
break;
|
||||
case BFD_RELOC_TILEPRO_IMM8_X1:
|
||||
reloc = BFD_RELOC_TILEPRO_IMM8_X1_TLS_GD_ADD;
|
||||
break;
|
||||
case BFD_RELOC_TILEPRO_IMM8_Y0:
|
||||
reloc = BFD_RELOC_TILEPRO_IMM8_Y0_TLS_GD_ADD;
|
||||
break;
|
||||
case BFD_RELOC_TILEPRO_IMM8_Y1:
|
||||
reloc = BFD_RELOC_TILEPRO_IMM8_Y1_TLS_GD_ADD;
|
||||
break;
|
||||
default:
|
||||
die = 1;
|
||||
break;
|
||||
}
|
||||
use_subexp = 1;
|
||||
require_symbol = 1;
|
||||
break;
|
||||
|
||||
case O_tls_ie_load:
|
||||
switch (reloc)
|
||||
{
|
||||
case BFD_RELOC_TILEPRO_IMM8_X1:
|
||||
reloc = BFD_RELOC_TILEPRO_TLS_IE_LOAD;
|
||||
break;
|
||||
default:
|
||||
die = 1;
|
||||
break;
|
||||
}
|
||||
use_subexp = 1;
|
||||
require_symbol = 1;
|
||||
break;
|
||||
|
||||
default:
|
||||
/* Do nothing. */
|
||||
break;
|
||||
|
@ -1298,22 +1383,36 @@ md_apply_fix (fixS *fixP, valueT * valP, segT seg ATTRIBUTE_UNUSED)
|
|||
#ifdef OBJ_ELF
|
||||
switch (fixP->fx_r_type)
|
||||
{
|
||||
case BFD_RELOC_TILEPRO_IMM8_X0_TLS_GD_ADD:
|
||||
case BFD_RELOC_TILEPRO_IMM8_X1_TLS_GD_ADD:
|
||||
case BFD_RELOC_TILEPRO_IMM8_Y0_TLS_GD_ADD:
|
||||
case BFD_RELOC_TILEPRO_IMM8_Y1_TLS_GD_ADD:
|
||||
case BFD_RELOC_TILEPRO_IMM16_X0_TLS_GD:
|
||||
case BFD_RELOC_TILEPRO_IMM16_X1_TLS_GD:
|
||||
case BFD_RELOC_TILEPRO_IMM16_X0_TLS_IE:
|
||||
case BFD_RELOC_TILEPRO_IMM16_X1_TLS_IE:
|
||||
case BFD_RELOC_TILEPRO_IMM16_X0_TLS_GD_LO:
|
||||
case BFD_RELOC_TILEPRO_IMM16_X1_TLS_GD_LO:
|
||||
case BFD_RELOC_TILEPRO_IMM16_X0_TLS_IE_LO:
|
||||
case BFD_RELOC_TILEPRO_IMM16_X1_TLS_IE_LO:
|
||||
case BFD_RELOC_TILEPRO_IMM16_X0_TLS_GD_HI:
|
||||
case BFD_RELOC_TILEPRO_IMM16_X1_TLS_GD_HI:
|
||||
case BFD_RELOC_TILEPRO_IMM16_X0_TLS_IE_HI:
|
||||
case BFD_RELOC_TILEPRO_IMM16_X1_TLS_IE_HI:
|
||||
case BFD_RELOC_TILEPRO_IMM16_X0_TLS_GD_HA:
|
||||
case BFD_RELOC_TILEPRO_IMM16_X1_TLS_GD_HA:
|
||||
case BFD_RELOC_TILEPRO_IMM16_X0_TLS_IE:
|
||||
case BFD_RELOC_TILEPRO_IMM16_X1_TLS_IE:
|
||||
case BFD_RELOC_TILEPRO_IMM16_X0_TLS_IE_LO:
|
||||
case BFD_RELOC_TILEPRO_IMM16_X1_TLS_IE_LO:
|
||||
case BFD_RELOC_TILEPRO_IMM16_X0_TLS_IE_HI:
|
||||
case BFD_RELOC_TILEPRO_IMM16_X1_TLS_IE_HI:
|
||||
case BFD_RELOC_TILEPRO_IMM16_X0_TLS_IE_HA:
|
||||
case BFD_RELOC_TILEPRO_IMM16_X1_TLS_IE_HA:
|
||||
case BFD_RELOC_TILEPRO_IMM16_X0_TLS_LE:
|
||||
case BFD_RELOC_TILEPRO_IMM16_X1_TLS_LE:
|
||||
case BFD_RELOC_TILEPRO_IMM16_X0_TLS_LE_LO:
|
||||
case BFD_RELOC_TILEPRO_IMM16_X1_TLS_LE_LO:
|
||||
case BFD_RELOC_TILEPRO_IMM16_X0_TLS_LE_HI:
|
||||
case BFD_RELOC_TILEPRO_IMM16_X1_TLS_LE_HI:
|
||||
case BFD_RELOC_TILEPRO_IMM16_X0_TLS_LE_HA:
|
||||
case BFD_RELOC_TILEPRO_IMM16_X1_TLS_LE_HA:
|
||||
case BFD_RELOC_TILEPRO_TLS_GD_CALL:
|
||||
case BFD_RELOC_TILEPRO_TLS_IE_LOAD:
|
||||
case BFD_RELOC_TILEPRO_TLS_DTPMOD32:
|
||||
case BFD_RELOC_TILEPRO_TLS_DTPOFF32:
|
||||
case BFD_RELOC_TILEPRO_TLS_TPOFF32:
|
||||
|
|
|
@ -218,21 +218,6 @@ shl16insli r0, r0, hw0(sym)
|
|||
This modifier is used to load bits 0-15 of the symbol's offset in the
|
||||
GOT entry corresponding to the symbol.
|
||||
|
||||
@item hw1_got
|
||||
|
||||
This modifier is used to load bits 16-31 of the symbol's offset in the
|
||||
GOT entry corresponding to the symbol.
|
||||
|
||||
@item hw2_got
|
||||
|
||||
This modifier is used to load bits 32-47 of the symbol's offset in the
|
||||
GOT entry corresponding to the symbol.
|
||||
|
||||
@item hw3_got
|
||||
|
||||
This modifier is used to load bits 48-63 of the symbol's offset in the
|
||||
GOT entry corresponding to the symbol.
|
||||
|
||||
@item hw0_last_got
|
||||
|
||||
This modifier yields the same value as @code{hw0_got}, but it also
|
||||
|
@ -240,13 +225,9 @@ checks that the value does not overflow.
|
|||
|
||||
@item hw1_last_got
|
||||
|
||||
This modifier yields the same value as @code{hw1_got}, but it also
|
||||
checks that the value does not overflow.
|
||||
|
||||
@item hw2_last_got
|
||||
|
||||
This modifier yields the same value as @code{hw2_got}, but it also
|
||||
checks that the value does not overflow.
|
||||
This modifier is used to load bits 16-31 of the symbol's offset in the
|
||||
GOT entry corresponding to the symbol, and it also checks that the
|
||||
value does not overflow.
|
||||
|
||||
@item plt
|
||||
|
||||
|
@ -267,24 +248,6 @@ This modifier is used to load bits 0-15 of the offset of the GOT entry
|
|||
of the symbol's TLS descriptor, to be used for general-dynamic TLS
|
||||
accesses.
|
||||
|
||||
@item hw1_tls_gd
|
||||
|
||||
This modifier is used to load bits 16-31 of the offset of the GOT
|
||||
entry of the symbol's TLS descriptor, to be used for general-dynamic
|
||||
TLS accesses.
|
||||
|
||||
@item hw2_tls_gd
|
||||
|
||||
This modifier is used to load bits 32-47 of the offset of the GOT
|
||||
entry of the symbol's TLS descriptor, to be used for general-dynamic
|
||||
TLS accesses.
|
||||
|
||||
@item hw3_tls_gd
|
||||
|
||||
This modifier is used to load bits 48-63 of the offset of the GOT
|
||||
entry of the symbol's TLS descriptor, to be used for general-dynamic
|
||||
TLS accesses.
|
||||
|
||||
@item hw0_last_tls_gd
|
||||
|
||||
This modifier yields the same value as @code{hw0_tls_gd}, but it also
|
||||
|
@ -292,13 +255,9 @@ checks that the value does not overflow.
|
|||
|
||||
@item hw1_last_tls_gd
|
||||
|
||||
This modifier yields the same value as @code{hw1_tls_gd}, but it also
|
||||
checks that the value does not overflow.
|
||||
|
||||
@item hw2_last_tls_gd
|
||||
|
||||
This modifier yields the same value as @code{hw2_tls_gd}, but it also
|
||||
checks that the value does not overflow.
|
||||
This modifier is used to load bits 16-31 of the offset of the GOT
|
||||
entry of the symbol's TLS descriptor, to be used for general-dynamic
|
||||
TLS accesses. It also checks that the value does not overflow.
|
||||
|
||||
@item hw0_tls_ie
|
||||
|
||||
|
@ -306,24 +265,6 @@ This modifier is used to load bits 0-15 of the offset of the GOT entry
|
|||
containing the offset of the symbol's address from the TCB, to be used
|
||||
for initial-exec TLS accesses.
|
||||
|
||||
@item hw1_tls_ie
|
||||
|
||||
This modifier is used to load bits 16-31 of the offset of the GOT
|
||||
entry containing the offset of the symbol's address from the TCB, to
|
||||
be used for initial-exec TLS accesses.
|
||||
|
||||
@item hw2_tls_ie
|
||||
|
||||
This modifier is used to load bits 32-47 of the offset of the GOT entry
|
||||
containing the offset of the symbol's address from the TCB, to be used
|
||||
for initial-exec TLS accesses.
|
||||
|
||||
@item hw3_tls_ie
|
||||
|
||||
This modifier is used to load bits 48-63 of the offset of the GOT
|
||||
entry containing the offset of the symbol's address from the TCB, to
|
||||
be used for initial-exec TLS accesses.
|
||||
|
||||
@item hw0_last_tls_ie
|
||||
|
||||
This modifier yields the same value as @code{hw0_tls_ie}, but it also
|
||||
|
@ -331,13 +272,41 @@ checks that the value does not overflow.
|
|||
|
||||
@item hw1_last_tls_ie
|
||||
|
||||
This modifier yields the same value as @code{hw1_tls_ie}, but it also
|
||||
This modifier is used to load bits 16-31 of the offset of the GOT
|
||||
entry containing the offset of the symbol's address from the TCB, to
|
||||
be used for initial-exec TLS accesses. It also checks that the value
|
||||
does not overflow.
|
||||
|
||||
@item hw0_tls_le
|
||||
|
||||
This modifier is used to load bits 0-15 of the offset of the symbol's
|
||||
address from the TCB, to be used for local-exec TLS accesses.
|
||||
|
||||
@item hw0_last_tls_le
|
||||
|
||||
This modifier yields the same value as @code{hw0_tls_le}, but it also
|
||||
checks that the value does not overflow.
|
||||
|
||||
@item hw2_last_tls_ie
|
||||
@item hw1_last_tls_le
|
||||
|
||||
This modifier yields the same value as @code{hw2_tls_ie}, but it also
|
||||
checks that the value does not overflow.
|
||||
This modifier is used to load bits 16-31 of the offset of the symbol's
|
||||
address from the TCB, to be used for local-exec TLS accesses. It
|
||||
also checks that the value does not overflow.
|
||||
|
||||
@item tls_gd_call
|
||||
|
||||
This modifier is used to tag an instrution as the ``call'' part of a
|
||||
calling sequence for a TLS GD reference of its operand.
|
||||
|
||||
@item tls_gd_add
|
||||
|
||||
This modifier is used to tag an instruction as the ``add'' part of a
|
||||
calling sequence for a TLS GD reference of its operand.
|
||||
|
||||
@item tls_ie_load
|
||||
|
||||
This modifier is used to tag an instruction as the ``load'' part of a
|
||||
calling sequence for a TLS IE reference of its operand.
|
||||
|
||||
@end table
|
||||
|
||||
|
|
|
@ -261,6 +261,41 @@ to be used for initial-exec TLS accesses.
|
|||
This modifier is like @code{tls_ie_hi16}, but it adds one to the value
|
||||
if @code{tls_ie_lo16} of the input value is negative.
|
||||
|
||||
@item tls_le
|
||||
|
||||
This modifier is used to load the offset of the symbol's address from
|
||||
the TCB, to be used for local-exec TLS accesses.
|
||||
|
||||
@item tls_le_lo16
|
||||
|
||||
This modifier is used to load the low 16 bits of the offset of the
|
||||
symbol's address from the TCB, to be used for local-exec TLS accesses.
|
||||
|
||||
@item tls_le_hi16
|
||||
|
||||
This modifier is used to load the high 16 bits of the offset of the
|
||||
symbol's address from the TCB, to be used for local-exec TLS accesses.
|
||||
|
||||
@item tls_le_ha16
|
||||
|
||||
This modifier is like @code{tls_le_hi16}, but it adds one to the value
|
||||
if @code{tls_le_lo16} of the input value is negative.
|
||||
|
||||
@item tls_gd_call
|
||||
|
||||
This modifier is used to tag an instrution as the ``call'' part of a
|
||||
calling sequence for a TLS GD reference of its operand.
|
||||
|
||||
@item tls_gd_add
|
||||
|
||||
This modifier is used to tag an instruction as the ``add'' part of a
|
||||
calling sequence for a TLS GD reference of its operand.
|
||||
|
||||
@item tls_ie_load
|
||||
|
||||
This modifier is used to tag an instruction as the ``load'' part of a
|
||||
calling sequence for a TLS IE reference of its operand.
|
||||
|
||||
@end table
|
||||
|
||||
@node TILEPro Directives
|
||||
|
|
|
@ -1,3 +1,60 @@
|
|||
2012-02-25 Walter Lee <walt@tilera.com>
|
||||
|
||||
* tilegx.h (R_TILEGX_IMM16_X0_HW1_GOT): Delete.
|
||||
(R_TILEGX_IMM16_X1_HW1_GOT): Ditto.
|
||||
(R_TILEGX_IMM16_X0_HW2_GOT): Ditto.
|
||||
(R_TILEGX_IMM16_X1_HW2_GOT): Ditto.
|
||||
(R_TILEGX_IMM16_X0_HW3_GOT): Ditto.
|
||||
(R_TILEGX_IMM16_X1_HW3_GOT): Ditto.
|
||||
(R_TILEGX_IMM16_X0_HW2_LAST_GOT): Ditto.
|
||||
(R_TILEGX_IMM16_X1_HW2_LAST_GOT): Ditto.
|
||||
(R_TILEGX_IMM16_X0_HW1_TLS_GD): Ditto.
|
||||
(R_TILEGX_IMM16_X1_HW1_TLS_GD): Ditto.
|
||||
(R_TILEGX_IMM16_X0_HW2_TLS_GD): Ditto.
|
||||
(R_TILEGX_IMM16_X1_HW2_TLS_GD): Ditto.
|
||||
(R_TILEGX_IMM16_X0_HW3_TLS_GD): Ditto.
|
||||
(R_TILEGX_IMM16_X1_HW3_TLS_GD): Ditto.
|
||||
(R_TILEGX_IMM16_X0_HW2_LAST_TLS_GD): Ditto.
|
||||
(R_TILEGX_IMM16_X1_HW2_LAST_TLS_GD): Ditto.
|
||||
(R_TILEGX_IMM16_X0_HW1_TLS_IE): Ditto.
|
||||
(R_TILEGX_IMM16_X1_HW1_TLS_IE): Ditto.
|
||||
(R_TILEGX_IMM16_X0_HW2_TLS_IE): Ditto.
|
||||
(R_TILEGX_IMM16_X1_HW2_TLS_IE): Ditto.
|
||||
(R_TILEGX_IMM16_X0_HW3_TLS_IE): Ditto.
|
||||
(R_TILEGX_IMM16_X1_HW3_TLS_IE): Ditto.
|
||||
(R_TILEGX_IMM16_X0_HW2_LAST_TLS_IE): Ditto.
|
||||
(R_TILEGX_IMM16_X1_HW2_LAST_TLS_IE): Ditto.
|
||||
(R_TILEGX_IMM16_X0_HW0_TLS_LE): New relocation.
|
||||
(R_TILEGX_IMM16_X1_HW0_TLS_LE): Ditto.
|
||||
(R_TILEGX_IMM16_X0_HW0_LAST_TLS_LE): Ditto.
|
||||
(R_TILEGX_IMM16_X1_HW0_LAST_TLS_LE): Ditto.
|
||||
(R_TILEGX_IMM16_X0_HW1_LAST_TLS_LE): Ditto.
|
||||
(R_TILEGX_IMM16_X1_HW1_LAST_TLS_LE): Ditto.
|
||||
(R_TILEGX_TLS_GD_CALL): Ditto.
|
||||
(R_TILEGX_IMM8_X0_TLS_GD_ADD): Ditto.
|
||||
(R_TILEGX_IMM8_X1_TLS_GD_ADD): Ditto.
|
||||
(R_TILEGX_IMM8_Y0_TLS_GD_ADD): Ditto.
|
||||
(R_TILEGX_IMM8_Y1_TLS_GD_ADD): Ditto.
|
||||
(R_TILEGX_TLS_IE_LOAD): Ditto.
|
||||
(R_TILEGX_IMM8_X0_TLS_ADD): Ditto.
|
||||
(R_TILEGX_IMM8_X1_TLS_ADD): Ditto.
|
||||
(R_TILEGX_IMM8_Y0_TLS_ADD): Ditto.
|
||||
(R_TILEGX_IMM8_Y1_TLS_ADD): Ditto.
|
||||
* tilepro.h (R_TILEPRO_TLS_GD_CALL): New relocation.
|
||||
(R_TILEPRO_IMM8_X0_TLS_GD_ADD): Ditto.
|
||||
(R_TILEPRO_IMM8_X1_TLS_GD_ADD): Ditto.
|
||||
(R_TILEPRO_IMM8_Y0_TLS_GD_ADD): Ditto.
|
||||
(R_TILEPRO_IMM8_Y1_TLS_GD_ADD): Ditto.
|
||||
(R_TILEPRO_TLS_IE_LOAD): Ditto.
|
||||
(R_TILEPRO_IMM16_X0_TLS_LE): Ditto.
|
||||
(R_TILEPRO_IMM16_X1_TLS_LE): Ditto.
|
||||
(R_TILEPRO_IMM16_X0_TLS_LE_LO): Ditto.
|
||||
(R_TILEPRO_IMM16_X1_TLS_LE_LO): Ditto.
|
||||
(R_TILEPRO_IMM16_X0_TLS_LE_HI): Ditto.
|
||||
(R_TILEPRO_IMM16_X1_TLS_LE_HI): Ditto.
|
||||
(R_TILEPRO_IMM16_X0_TLS_LE_HA): Ditto.
|
||||
(R_TILEPRO_IMM16_X1_TLS_LE_HA): Ditto.
|
||||
|
||||
2011-12-22 DJ Delorie <dj@redhat.com>
|
||||
|
||||
* rl78.h (R_RL78_RH_RELAX, R_RL78_RH_SFR, R_RL78_RH_SADDR): New.
|
||||
|
|
|
@ -104,48 +104,37 @@ 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)
|
||||
RELOC_NUMBER (R_TILEGX_IMM16_X0_HW1_GOT, 66)
|
||||
RELOC_NUMBER (R_TILEGX_IMM16_X1_HW1_GOT, 67)
|
||||
RELOC_NUMBER (R_TILEGX_IMM16_X0_HW2_GOT, 68)
|
||||
RELOC_NUMBER (R_TILEGX_IMM16_X1_HW2_GOT, 69)
|
||||
RELOC_NUMBER (R_TILEGX_IMM16_X0_HW3_GOT, 70)
|
||||
RELOC_NUMBER (R_TILEGX_IMM16_X1_HW3_GOT, 71)
|
||||
/* Relocs 66-71 are currently not defined. */
|
||||
|
||||
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)
|
||||
RELOC_NUMBER (R_TILEGX_IMM16_X0_HW2_LAST_GOT, 76)
|
||||
RELOC_NUMBER (R_TILEGX_IMM16_X1_HW2_LAST_GOT, 77)
|
||||
/* Relocs 76-77 are currently not defined. */
|
||||
|
||||
RELOC_NUMBER (R_TILEGX_IMM16_X0_HW0_TLS_GD, 78)
|
||||
RELOC_NUMBER (R_TILEGX_IMM16_X1_HW0_TLS_GD, 79)
|
||||
RELOC_NUMBER (R_TILEGX_IMM16_X0_HW1_TLS_GD, 80)
|
||||
RELOC_NUMBER (R_TILEGX_IMM16_X1_HW1_TLS_GD, 81)
|
||||
RELOC_NUMBER (R_TILEGX_IMM16_X0_HW2_TLS_GD, 82)
|
||||
RELOC_NUMBER (R_TILEGX_IMM16_X1_HW2_TLS_GD, 83)
|
||||
RELOC_NUMBER (R_TILEGX_IMM16_X0_HW3_TLS_GD, 84)
|
||||
RELOC_NUMBER (R_TILEGX_IMM16_X1_HW3_TLS_GD, 85)
|
||||
RELOC_NUMBER (R_TILEGX_IMM16_X0_HW0_TLS_LE, 80)
|
||||
RELOC_NUMBER (R_TILEGX_IMM16_X1_HW0_TLS_LE, 81)
|
||||
RELOC_NUMBER (R_TILEGX_IMM16_X0_HW0_LAST_TLS_LE, 82)
|
||||
RELOC_NUMBER (R_TILEGX_IMM16_X1_HW0_LAST_TLS_LE, 83)
|
||||
RELOC_NUMBER (R_TILEGX_IMM16_X0_HW1_LAST_TLS_LE, 84)
|
||||
RELOC_NUMBER (R_TILEGX_IMM16_X1_HW1_LAST_TLS_LE, 85)
|
||||
RELOC_NUMBER (R_TILEGX_IMM16_X0_HW0_LAST_TLS_GD, 86)
|
||||
RELOC_NUMBER (R_TILEGX_IMM16_X1_HW0_LAST_TLS_GD, 87)
|
||||
RELOC_NUMBER (R_TILEGX_IMM16_X0_HW1_LAST_TLS_GD, 88)
|
||||
RELOC_NUMBER (R_TILEGX_IMM16_X1_HW1_LAST_TLS_GD, 89)
|
||||
RELOC_NUMBER (R_TILEGX_IMM16_X0_HW2_LAST_TLS_GD, 90)
|
||||
RELOC_NUMBER (R_TILEGX_IMM16_X1_HW2_LAST_TLS_GD, 91)
|
||||
/* Relocs 90-91 are currently not defined. */
|
||||
|
||||
RELOC_NUMBER (R_TILEGX_IMM16_X0_HW0_TLS_IE, 92)
|
||||
RELOC_NUMBER (R_TILEGX_IMM16_X1_HW0_TLS_IE, 93)
|
||||
RELOC_NUMBER (R_TILEGX_IMM16_X0_HW1_TLS_IE, 94)
|
||||
RELOC_NUMBER (R_TILEGX_IMM16_X1_HW1_TLS_IE, 95)
|
||||
RELOC_NUMBER (R_TILEGX_IMM16_X0_HW2_TLS_IE, 96)
|
||||
RELOC_NUMBER (R_TILEGX_IMM16_X1_HW2_TLS_IE, 97)
|
||||
RELOC_NUMBER (R_TILEGX_IMM16_X0_HW3_TLS_IE, 98)
|
||||
RELOC_NUMBER (R_TILEGX_IMM16_X1_HW3_TLS_IE, 99)
|
||||
/* Relocs 94-99 are currently not defined. */
|
||||
|
||||
RELOC_NUMBER (R_TILEGX_IMM16_X0_HW0_LAST_TLS_IE, 100)
|
||||
RELOC_NUMBER (R_TILEGX_IMM16_X1_HW0_LAST_TLS_IE, 101)
|
||||
RELOC_NUMBER (R_TILEGX_IMM16_X0_HW1_LAST_TLS_IE, 102)
|
||||
RELOC_NUMBER (R_TILEGX_IMM16_X1_HW1_LAST_TLS_IE, 103)
|
||||
RELOC_NUMBER (R_TILEGX_IMM16_X0_HW2_LAST_TLS_IE, 104)
|
||||
RELOC_NUMBER (R_TILEGX_IMM16_X1_HW2_LAST_TLS_IE, 105)
|
||||
/* Relocs 104-105 are currently not defined. */
|
||||
|
||||
RELOC_NUMBER (R_TILEGX_TLS_DTPMOD64, 106)
|
||||
RELOC_NUMBER (R_TILEGX_TLS_DTPOFF64, 107)
|
||||
|
@ -154,6 +143,17 @@ START_RELOC_NUMBERS (elf_tilegx_reloc_type)
|
|||
RELOC_NUMBER (R_TILEGX_TLS_DTPOFF32, 110)
|
||||
RELOC_NUMBER (R_TILEGX_TLS_TPOFF32, 111)
|
||||
|
||||
RELOC_NUMBER (R_TILEGX_TLS_GD_CALL, 112)
|
||||
RELOC_NUMBER (R_TILEGX_IMM8_X0_TLS_GD_ADD, 113)
|
||||
RELOC_NUMBER (R_TILEGX_IMM8_X1_TLS_GD_ADD, 114)
|
||||
RELOC_NUMBER (R_TILEGX_IMM8_Y0_TLS_GD_ADD, 115)
|
||||
RELOC_NUMBER (R_TILEGX_IMM8_Y1_TLS_GD_ADD, 116)
|
||||
RELOC_NUMBER (R_TILEGX_TLS_IE_LOAD, 117)
|
||||
RELOC_NUMBER (R_TILEGX_IMM8_X0_TLS_ADD, 118)
|
||||
RELOC_NUMBER (R_TILEGX_IMM8_X1_TLS_ADD, 119)
|
||||
RELOC_NUMBER (R_TILEGX_IMM8_Y0_TLS_ADD, 120)
|
||||
RELOC_NUMBER (R_TILEGX_IMM8_Y1_TLS_ADD, 121)
|
||||
|
||||
/* These are GNU extensions to enable C++ vtable garbage collection. */
|
||||
RELOC_NUMBER (R_TILEGX_GNU_VTINHERIT, 128)
|
||||
RELOC_NUMBER (R_TILEGX_GNU_VTENTRY, 129)
|
||||
|
|
|
@ -96,7 +96,14 @@ START_RELOC_NUMBERS (elf_tilepro_reloc_type)
|
|||
|
||||
RELOC_NUMBER (R_TILEPRO_DEST_IMM8_X1, 55)
|
||||
|
||||
/* Relocs 56-65 are currently not defined. */
|
||||
/* Relocs 56-59 are currently not defined. */
|
||||
|
||||
RELOC_NUMBER (R_TILEPRO_TLS_GD_CALL, 60)
|
||||
RELOC_NUMBER (R_TILEPRO_IMM8_X0_TLS_GD_ADD, 61)
|
||||
RELOC_NUMBER (R_TILEPRO_IMM8_X1_TLS_GD_ADD, 62)
|
||||
RELOC_NUMBER (R_TILEPRO_IMM8_Y0_TLS_GD_ADD, 63)
|
||||
RELOC_NUMBER (R_TILEPRO_IMM8_Y1_TLS_GD_ADD, 64)
|
||||
RELOC_NUMBER (R_TILEPRO_TLS_IE_LOAD, 65)
|
||||
|
||||
RELOC_NUMBER (R_TILEPRO_IMM16_X0_TLS_GD, 66)
|
||||
RELOC_NUMBER (R_TILEPRO_IMM16_X1_TLS_GD, 67)
|
||||
|
@ -120,6 +127,15 @@ START_RELOC_NUMBERS (elf_tilepro_reloc_type)
|
|||
RELOC_NUMBER (R_TILEPRO_TLS_DTPOFF32, 83)
|
||||
RELOC_NUMBER (R_TILEPRO_TLS_TPOFF32, 84)
|
||||
|
||||
RELOC_NUMBER (R_TILEPRO_IMM16_X0_TLS_LE, 85)
|
||||
RELOC_NUMBER (R_TILEPRO_IMM16_X1_TLS_LE, 86)
|
||||
RELOC_NUMBER (R_TILEPRO_IMM16_X0_TLS_LE_LO, 87)
|
||||
RELOC_NUMBER (R_TILEPRO_IMM16_X1_TLS_LE_LO, 88)
|
||||
RELOC_NUMBER (R_TILEPRO_IMM16_X0_TLS_LE_HI, 89)
|
||||
RELOC_NUMBER (R_TILEPRO_IMM16_X1_TLS_LE_HI, 90)
|
||||
RELOC_NUMBER (R_TILEPRO_IMM16_X0_TLS_LE_HA, 91)
|
||||
RELOC_NUMBER (R_TILEPRO_IMM16_X1_TLS_LE_HA, 92)
|
||||
|
||||
/* These are GNU extensions to enable C++ vtable garbage collection. */
|
||||
RELOC_NUMBER (R_TILEPRO_GNU_VTINHERIT, 128)
|
||||
RELOC_NUMBER (R_TILEPRO_GNU_VTENTRY, 129)
|
||||
|
|
|
@ -1,3 +1,10 @@
|
|||
2012-02-25 Walter Lee <walt@tilera.com>
|
||||
|
||||
* tilegx.h (tilegx_mnemonic): Add TILEGX_OPC_LD4S_TLS,
|
||||
TILEGX_OPC_LD_TLS.
|
||||
* tilepro.h (tilepro_mnemonic): Add TILEPRO_OPC_LW_TLS,
|
||||
TILEPRO_OPC_LW_TLS_SN.
|
||||
|
||||
2012-02-08 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
* i386.h (XACQUIRE_PREFIX_OPCODE): New.
|
||||
|
|
|
@ -34,6 +34,8 @@ typedef enum
|
|||
TILEGX_OPC_BPT,
|
||||
TILEGX_OPC_INFO,
|
||||
TILEGX_OPC_INFOL,
|
||||
TILEGX_OPC_LD4S_TLS,
|
||||
TILEGX_OPC_LD_TLS,
|
||||
TILEGX_OPC_MOVE,
|
||||
TILEGX_OPC_MOVEI,
|
||||
TILEGX_OPC_MOVELI,
|
||||
|
|
|
@ -36,6 +36,8 @@ typedef enum
|
|||
TILEPRO_OPC_INFOL,
|
||||
TILEPRO_OPC_J,
|
||||
TILEPRO_OPC_JAL,
|
||||
TILEPRO_OPC_LW_TLS,
|
||||
TILEPRO_OPC_LW_TLS_SN,
|
||||
TILEPRO_OPC_MOVE,
|
||||
TILEPRO_OPC_MOVE_SN,
|
||||
TILEPRO_OPC_MOVEI,
|
||||
|
|
|
@ -1,3 +1,9 @@
|
|||
2012-02-25 Walter Lee <walt@tilera.com>
|
||||
|
||||
* tilegx-opc.c: Handle TILEGX_OPC_LD4S_TLS and TILEGX_OPC_LD_TLS.
|
||||
* tilepro-opc.c: Handle TILEPRO_OPC_LW_TLS and
|
||||
TILEPRO_OPC_LW_TLS_SN.
|
||||
|
||||
2012-02-21 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
* i386-opc.h (HLEPrefixNone): New.
|
||||
|
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue