arc/nps400 : New cmem instructions and associated relocation
authorAndrew Burgess <andrew.burgess@embecosm.com>
Tue, 29 Mar 2016 23:02:19 +0000 (00:02 +0100)
committerAndrew Burgess <andrew.burgess@embecosm.com>
Thu, 14 Apr 2016 16:16:46 +0000 (17:16 +0100)
commit4b0c052e456421a3c6d7b4c98be3ad0b3bd2ad27
treeba2ad6919a72787b533fdc37c2694aa49522995d
parent33cbe6c07ed7e66d65c106cffb496eff5d7e8fb5
arc/nps400 : New cmem instructions and associated relocation

Add support for arc/nps400 cmem instructions, these load and store
instructions are hard-wired to access "0x57f00000 + 16-bit-offset".

Supporting this relocation required some additions to the arc relocation
handling in the bfd library, as well as the standard changes required to
add a new relocation type.

There's a test of the new instructions in the assembler, and a test of
the relocation in the linker.

bfd/ChangeLog:

* reloc.c: Add BFD_RELOC_ARC_NPS_CMEM16 entry.
* bfd-in2.h: Regenerate.
* libbfd.h: Regenerate.
* elf32-arc.c: Add 'opcode/arc.h' include.
(struct arc_relocation_data): Add symbol_name.
(arc_special_overflow_checks): New function.
(arc_do_relocation): Use arc_special_overflow_checks, reindent as
required, add an extra comment.
(elf_arc_relocate_section): Setup symbol_name in reloc_data.

gas/ChangeLog:

* testsuite/gas/arc/nps400-3.d: New file.
* testsuite/gas/arc/nps400-3.s: New file.

include/ChangeLog:

* elf/arc-reloc.def: Add ARC_NPS_CMEM16 reloc.
* opcode/arc.h (NPS_CMEM_HIGH_VALUE): Define.

ld/ChangeLog:

* testsuite/ld-arc/arc.exp: New file.
* testsuite/ld-arc/nps-1.s: New file.
* testsuite/ld-arc/nps-1a.d: New file.
* testsuite/ld-arc/nps-1b.d: New file.
* testsuite/ld-arc/nps-1b.err: New file.

opcodes/ChangeLog:

* arc-nps400-tbl.h: Add xldb, xldw, xld, xstb, xstw, and xst
instructions.
* arc-opc.c (insert_nps_cmem_uimm16): New function.
(extract_nps_cmem_uimm16): New function.
(arc_operands): Add NPS_XLDST_UIMM16 operand.
20 files changed:
bfd/ChangeLog
bfd/bfd-in2.h
bfd/elf32-arc.c
bfd/libbfd.h
bfd/reloc.c
gas/ChangeLog
gas/testsuite/gas/arc/nps400-3.d [new file with mode: 0644]
gas/testsuite/gas/arc/nps400-3.s [new file with mode: 0644]
include/ChangeLog
include/elf/arc-reloc.def
include/opcode/arc.h
ld/ChangeLog
ld/testsuite/ld-arc/arc.exp [new file with mode: 0644]
ld/testsuite/ld-arc/nps-1.s [new file with mode: 0644]
ld/testsuite/ld-arc/nps-1a.d [new file with mode: 0644]
ld/testsuite/ld-arc/nps-1b.d [new file with mode: 0644]
ld/testsuite/ld-arc/nps-1b.err [new file with mode: 0644]
opcodes/ChangeLog
opcodes/arc-nps400-tbl.h
opcodes/arc-opc.c