or1k: Add relocations for high-signed and low-stores
authorRichard Henderson <rth@redhat.com>
Fri, 5 Oct 2018 02:41:40 +0000 (11:41 +0900)
committerStafford Horne <shorne@gmail.com>
Fri, 5 Oct 2018 02:41:40 +0000 (11:41 +0900)
commit1c4f3780f7d939402cfe555007ebff45c8e38951
treee4707fb11ce08c16f01e8dbee9504e2b29b43ddd
parent4677effd9e320d9f09337ef17bf0dc0377a9e8ce
or1k: Add relocations for high-signed and low-stores

This patch adds the following target relocations:

 - BFD_RELOC_HI16_S High 16-bit relocation, for used with signed
   asm: ha() lower.
 - BFD_RELOC_HI16_S_GOTOFF High 16-bit GOT offset relocation for local
   asm: gotoffha() symbols, for use with signed lower.
 - BFD_RELOC_OR1K_TLS_IE_AHI16 High 16-bit TLS relocation with initial
   asm: gottpoffha() executable calculation, for use with signed
lower.
 - BFD_RELOC_OR1K_TLS_LE_AHI16 High 16-bit TLS relocation for local executable
   asm: tpoffha() variables, for use with signed lower.

 - BFD_RELOC_OR1K_SLO16 Split lower 16-bit relocation, used with
   asm: lo() OpenRISC store instructions.
 - BFD_RELOC_OR1K_GOTOFF_SLO16 Split lower 16-bit GOT offset relocation for
   asm: gotofflo() local symbols, used with OpenRISC store
instructions.
 - BFD_RELOC_OR1K_TLS_LE_SLO16 Split lower 16-bit relocation for TLS local
   asm: tpofflo() executable variables, used with OpenRISC store
instructions.

bfd/ChangeLog:

yyyy-mm-dd  Richard Henderson  <rth@twiddle.net>
    Stafford Horne  <shorne@gmail.com>

* bfd-in2.h: Regenerated.
* elf32-or1k.c (N_ONES): New macro.
(or1k_elf_howto_table): Fix R_OR1K_PLT26 to complain on overflow.
Add definitions for R_OR1K_TLS_TPOFF, R_OR1K_TLS_DTPOFF,
R_OR1K_TLS_DTPMOD, R_OR1K_AHI16, R_OR1K_GOTOFF_AHI16,
R_OR1K_TLS_IE_AHI16, R_OR1K_TLS_LE_AHI16, R_OR1K_SLO16,
R_OR1K_GOTOFF_SLO16, R_OR1K_TLS_LE_SLO16.
(or1k_reloc_map): Add entries for BFD_RELOC_HI16_S,
BFD_RELOC_LO16_GOTOFF, BFD_RELOC_HI16_GOTOFF, BFD_RELOC_HI16_S_GOTOFF,
BFD_RELOC_OR1K_TLS_IE_AHI16, BFD_RELOC_OR1K_TLS_LE_AHI16,
BFD_RELOC_OR1K_SLO16, BFD_RELOC_OR1K_GOTOFF_SLO16,
BFD_RELOC_OR1K_TLS_LE_SLO16.
(or1k_reloc_type_lookup): Change search loop to start ad index 0 and
also check results before returning.
(or1k_reloc_name_lookup): Simplify loop to use R_OR1K_max as index
limit.
(or1k_final_link_relocate): New function.
(or1k_elf_relocate_section): Add support for new AHI and SLO
relocations.  Use or1k_final_link_relocate instead of generic
_bfd_final_link_relocate.
(or1k_elf_check_relocs): Add support for new AHI and SLO relocations.
* reloc.c: Add new enums for BFD_RELOC_OR1K_SLO16,
BFD_RELOC_OR1K_GOTOFF_SLO16, BFD_RELOC_OR1K_TLS_IE_AHI16,
BFD_RELOC_OR1K_TLS_IE_AHI16, BFD_RELOC_OR1K_TLS_LE_AHI16,
BFD_RELOC_OR1K_TLS_LE_SLO16.  Remove unused BFD_RELOC_OR1K_GOTOFF_HI16
and BFD_RELOC_OR1K_GOTOFF_LO16.
* libbfd.h: Regenerated.

cpu/ChangeLog:

yyyy-mm-dd  Richard Henderson  <rth@twiddle.net>

* or1k.opc: Add RTYPE_ enum.
(INVALID_STORE_RELOC): New string.
(or1k_imm16_relocs): New array array.
(parse_reloc): New static function that just does the parsing.
(parse_imm16): New static function for generic parsing.
(parse_simm16): Change to just call parse_imm16.
(parse_simm16_split): New function.
(parse_uimm16): Change to call parse_imm16.
(parse_uimm16_split): New function.
* or1korbis.cpu (simm16-split): Change to use new simm16_split.
(uimm16-split): Change to use new uimm16_split.

gas/ChangeLog:

yyyy-mm-dd  Richard Henderson  <rth@twiddle.net>

* testsuite/gas/or1k/allinsn.d (l_ha): Add result for ha() relocation.
* testsuite/gas/or1k/allinsn.s (l_ha): Add test for ha() relocations.
* testsuite/gas/or1k/allinsn.exp: Renamed to or1k.exp.
* testsuite/gas/or1k/or1k.exp: Add reloc-2 list test.
* testsuite/gas/or1k/reloc-1.d: New file.
* testsuite/gas/or1k/reloc-1.s: New file.
* testsuite/gas/or1k/reloc-2.l: New file.
* testsuite/gas/or1k/reloc-2.s: New file.

include/ChangeLog:

yyyy-mm-dd  Richard Henderson  <rth@twiddle.net>

* elf/or1k.h (elf_or1k_reloc_type): Add R_OR1K_AHI16,
R_OR1K_GOTOFF_AHI16, R_OR1K_TLS_IE_AHI16, R_OR1K_TLS_LE_AHI16,
R_OR1K_SLO16, R_OR1K_GOTOFF_SLO16, R_OR1K_TLS_LE_SLO16.

ld/ChangeLog:

yyyy-mm-dd  Richard Henderson  <rth@twiddle.net>

* testsuite/ld-or1k/offsets1.d: New file.
* testsuite/ld-or1k/offsets1.s: New file.
* testsuite/ld-or1k/or1k.exp: New file.

opcodes/ChangeLog:

yyyy-mm-dd  Richard Henderson  <rth@twiddle.net>

* or1k-asm.c: Regenerate.
24 files changed:
bfd/ChangeLog
bfd/bfd-in2.h
bfd/elf32-or1k.c
bfd/libbfd.h
bfd/reloc.c
cpu/ChangeLog
cpu/or1k.opc
cpu/or1korbis.cpu
gas/ChangeLog
gas/testsuite/gas/or1k/allinsn.d
gas/testsuite/gas/or1k/allinsn.s
gas/testsuite/gas/or1k/or1k.exp [moved from gas/testsuite/gas/or1k/allinsn.exp with 83% similarity]
gas/testsuite/gas/or1k/reloc-1.d [new file with mode: 0644]
gas/testsuite/gas/or1k/reloc-1.s [new file with mode: 0644]
gas/testsuite/gas/or1k/reloc-2.l [new file with mode: 0644]
gas/testsuite/gas/or1k/reloc-2.s [new file with mode: 0644]
include/ChangeLog
include/elf/or1k.h
ld/ChangeLog
ld/testsuite/ld-or1k/offsets1.d [new file with mode: 0644]
ld/testsuite/ld-or1k/offsets1.s [new file with mode: 0644]
ld/testsuite/ld-or1k/or1k.exp [new file with mode: 0644]
opcodes/ChangeLog
opcodes/or1k-asm.c