diff options
author | Graham Markall <graham.markall@embecosm.com> | 2016-12-08 16:58:23 +0000 |
---|---|---|
committer | Andrew Burgess <andrew.burgess@embecosm.com> | 2017-01-10 10:55:13 +0000 |
commit | 07ccf83cf5424d019ab091a7bac0fee26564e420 (patch) | |
tree | 37eeead32cf2ae4a4720174c2ff60a4f7b4ff5f1 /ld/emulparams | |
parent | 74def31dcd248441a49755721da81ca73d99c4fb (diff) | |
download | gdb-07ccf83cf5424d019ab091a7bac0fee26564e420.zip gdb-07ccf83cf5424d019ab091a7bac0fee26564e420.tar.gz gdb-07ccf83cf5424d019ab091a7bac0fee26564e420.tar.bz2 |
[ARC] Add new linker emulation for nps
The arc700 nps variant uses some specific named sections to
facilitate its CMEM based instructions, which operate on memory
regions fixed at specific addresses.
This commit adds the arclinux_nps emulation, which is based on the
arclinux emulation. The new emulation uses the OTHER_SECTIONS
variable in the emulation parameters script to provide symbols
mapping to various locations in the CMEM space on nps.
The accompanying test ensures that all symbols are provided at the
correct address in the linker script.
ld/ChangeLog:
* Makefile.am: Add earclinux_nps.c target and add to
ALL_EMULATION_SOURCES.
* Makefile.in: Likewise, regenerated.
* configure.tgt: Add arclinux_nps as an extra emulation for
arc*-*-elf* and arc*-*-linux*.
* emulparams/arc-nps.sh: New file.
* emulparams/arclinux_nps.sh: New file.
* testsuite/ld-arc/arclinux-nps.d,
* testsuite/ld-arc/arclinux-nps.s: New test.
Diffstat (limited to 'ld/emulparams')
-rw-r--r-- | ld/emulparams/arc-nps.sh | 78 | ||||
-rw-r--r-- | ld/emulparams/arclinux_nps.sh | 3 |
2 files changed, 81 insertions, 0 deletions
diff --git a/ld/emulparams/arc-nps.sh b/ld/emulparams/arc-nps.sh new file mode 100644 index 0000000..615e6d5 --- /dev/null +++ b/ld/emulparams/arc-nps.sh @@ -0,0 +1,78 @@ +OTHER_SECTIONS=" + /* Start of symbols and sections required to support CMEM instructions + on NPS targets. */ + + PROVIDE (_cmem_start = ADDR (.cmem) ); + PROVIDE (_cmem_alter_start = ADDR (.cmem_alter) ); + PROVIDE (_cmem_shared_start = ADDR (.cmem_shared) ); + PROVIDE (_cmem_shared_alter_start = ADDR (.cmem_shared_alter) ); + PROVIDE (_fmt_slot0_start = ADDR (.fmt_slot0) ); + PROVIDE (_fmt_slot1_start = ADDR (.fmt_slot1) ); + PROVIDE (_fmt_slot2_start = ADDR (.fmt_slot2) ); + PROVIDE (_fmt_slot3_start = ADDR (.fmt_slot3) ); + PROVIDE (_fmt_slot4_start = ADDR (.fmt_slot4) ); + PROVIDE (_fmt_slot5_start = ADDR (.fmt_slot5) ); + PROVIDE (_fmt_slot6_start = ADDR (.fmt_slot6) ); + PROVIDE (_fmt_slot7_start = ADDR (.fmt_slot7) ); + PROVIDE (_fmt_slot8_start = ADDR (.fmt_slot8) ); + PROVIDE (_fmt_slot9_start = ADDR (.fmt_slot9) ); + PROVIDE (_fmt_slot10_start = ADDR (.fmt_slot10) ); + PROVIDE (_fmt_slot11_start = ADDR (.fmt_slot11) ); + PROVIDE (_fmt_slot12_start = ADDR (.fmt_slot12) ); + PROVIDE (_fmt_slot13_start = ADDR (.fmt_slot13) ); + PROVIDE (_fmt_slot14_start = ADDR (.fmt_slot14) ); + PROVIDE (_fmt_slot15_start = ADDR (.fmt_slot15) ); + + PROVIDE (_cmem_end = ADDR (.cmem) + SIZEOF (.cmem) ); + PROVIDE (_cmem_alter_end = ADDR (.cmem_alter) + SIZEOF (.cmem_alter) ); + PROVIDE (_cmem_shared_end = ADDR (.cmem_shared) + SIZEOF (.cmem_shared) ); + PROVIDE (_cmem_shared_alter_end = ADDR (.cmem_shared_alter) + SIZEOF (.cmem_shared_alter) ); + PROVIDE (_fmt_slot0_end = ADDR (.fmt_slot0) + SIZEOF (.fmt_slot0) ); + PROVIDE (_fmt_slot1_end = ADDR (.fmt_slot1) + SIZEOF (.fmt_slot1) ); + PROVIDE (_fmt_slot2_end = ADDR (.fmt_slot2) + SIZEOF (.fmt_slot2) ); + PROVIDE (_fmt_slot3_end = ADDR (.fmt_slot3) + SIZEOF (.fmt_slot3) ); + PROVIDE (_fmt_slot4_end = ADDR (.fmt_slot4) + SIZEOF (.fmt_slot4) ); + PROVIDE (_fmt_slot5_end = ADDR (.fmt_slot5) + SIZEOF (.fmt_slot5) ); + PROVIDE (_fmt_slot6_end = ADDR (.fmt_slot6) + SIZEOF (.fmt_slot6) ); + PROVIDE (_fmt_slot7_end = ADDR (.fmt_slot7) + SIZEOF (.fmt_slot7) ); + PROVIDE (_fmt_slot8_end = ADDR (.fmt_slot8) + SIZEOF (.fmt_slot8) ); + PROVIDE (_fmt_slot9_end = ADDR (.fmt_slot9) + SIZEOF (.fmt_slot9) ); + PROVIDE (_fmt_slot10_end = ADDR (.fmt_slot10) + SIZEOF (.fmt_slot10) ); + PROVIDE (_fmt_slot11_end = ADDR (.fmt_slot11) + SIZEOF (.fmt_slot11) ); + PROVIDE (_fmt_slot12_end = ADDR (.fmt_slot12) + SIZEOF (.fmt_slot12) ); + PROVIDE (_fmt_slot13_end = ADDR (.fmt_slot13) + SIZEOF (.fmt_slot13) ); + PROVIDE (_fmt_slot14_end = ADDR (.fmt_slot14) + SIZEOF (.fmt_slot14) ); + PROVIDE (_fmt_slot15_end = ADDR (.fmt_slot15) + SIZEOF (.fmt_slot15) ); + + OVERLAY 0x57f00000 : + { + .cmem { *(.cmem) } + .cmem_alter { *(.cmem_alter) } + } + + OVERLAY 0x57f08000 : + { + .cmem_shared { *(.cmem_shared) } + .cmem_shared_alter { *(.cmem_shared_alter) } + } + + .fmt_slot0 0x58000000 : { *(.fmt_slot0) } + .fmt_slot1 0x58800000 : { *(.fmt_slot1) } + .fmt_slot2 0x59000000 : { *(.fmt_slot2) } + .fmt_slot3 0x59800000 : { *(.fmt_slot3) } + .fmt_slot4 0x5a000000 : { *(.fmt_slot4) } + .fmt_slot5 0x5a800000 : { *(.fmt_slot5) } + .fmt_slot6 0x5b000000 : { *(.fmt_slot6) } + .fmt_slot7 0x5b800000 : { *(.fmt_slot7) } + .fmt_slot8 0x5c000000 : { *(.fmt_slot8) } + .fmt_slot9 0x5c800000 : { *(.fmt_slot9) } + .fmt_slot10 0x5d000000 : { *(.fmt_slot10) } + .fmt_slot11 0x5d800000 : { *(.fmt_slot11) } + .fmt_slot12 0x5e000000 : { *(.fmt_slot12) } + .fmt_slot13 0x5e800000 : { *(.fmt_slot13) } + .fmt_slot14 0x5f000000 : { *(.fmt_slot14) } + .fmt_slot15 0x5f800000 : { *(.fmt_slot15) } + + /* End of nps specific sections and symbols. */ + + ${OTHER_SECTIONS}" diff --git a/ld/emulparams/arclinux_nps.sh b/ld/emulparams/arclinux_nps.sh new file mode 100644 index 0000000..b1c6a7d --- /dev/null +++ b/ld/emulparams/arclinux_nps.sh @@ -0,0 +1,3 @@ +. ${srcdir}/emulparams/arclinux.sh +# Extend the OTHER_SECTIONS for nps. +. ${srcdir}/emulparams/arc-nps.sh |