aboutsummaryrefslogtreecommitdiff
path: root/ld
diff options
context:
space:
mode:
Diffstat (limited to 'ld')
-rw-r--r--ld/ChangeLog13
-rw-r--r--ld/Makefile.am6
-rw-r--r--ld/Makefile.in7
-rw-r--r--ld/configure.tgt4
-rw-r--r--ld/emulparams/arc-nps.sh78
-rw-r--r--ld/emulparams/arclinux_nps.sh3
-rw-r--r--ld/testsuite/ld-arc/arclinux-nps.d50
-rw-r--r--ld/testsuite/ld-arc/arclinux-nps.s46
8 files changed, 205 insertions, 2 deletions
diff --git a/ld/ChangeLog b/ld/ChangeLog
index 1ea2cb0..b1c6993 100644
--- a/ld/ChangeLog
+++ b/ld/ChangeLog
@@ -1,3 +1,16 @@
+2016-12-09 Graham Markall <graham.markall@embecosm.com>
+ Andrew Burgess <andrew.burgess@embecosm.com>
+
+ * 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.
+
2017-01-04 Dilan Palauzov <dilyan.palauzov@aegee.org>
PR 20958
diff --git a/ld/Makefile.am b/ld/Makefile.am
index 5bd0016..9dd31ff 100644
--- a/ld/Makefile.am
+++ b/ld/Makefile.am
@@ -164,6 +164,7 @@ ALL_EMULATION_SOURCES = \
earcelf.c \
earcelf_prof.c \
earclinux.c \
+ earclinux_nps.c \
earclinux_prof.c \
earm_epoc_pe.c \
earm_wince_pe.c \
@@ -731,6 +732,11 @@ earclinux.c: $(srcdir)/emulparams/arclinux.sh \
$(ELF_DEPS) $(srcdir)/emultempl/arclinux.em \
$(srcdir)/scripttempl/arclinux.sc ${GEN_DEPENDS}
+earclinux_nps.c: $(srcdir)/emulparams/arclinux_nps.sh \
+ $(srcdir)/emulparams/arc-nps.sh \
+ $(ELF_DEPS) $(srcdir)/emultempl/arclinux.em \
+ $(srcdir)/scripttempl/arclinux.sc ${GEN_DEPENDS}
+
earclinux_prof.c: $(srcdir)/emulparams/arclinux_prof.sh \
$(ELF_DEPS) $(srcdir)/emultempl/arclinux.em \
$(srcdir)/scripttempl/arclinux.sc ${GEN_DEPENDS}
diff --git a/ld/Makefile.in b/ld/Makefile.in
index 9364402..c464302 100644
--- a/ld/Makefile.in
+++ b/ld/Makefile.in
@@ -533,6 +533,7 @@ ALL_EMULATION_SOURCES = \
earcelf.c \
earcelf_prof.c \
earclinux.c \
+ earclinux_nps.c \
earclinux_prof.c \
earm_epoc_pe.c \
earm_wince_pe.c \
@@ -1142,6 +1143,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/earcelf.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/earcelf_prof.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/earclinux.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/earclinux_nps.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/earclinux_prof.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/earcv2elf.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/earcv2elfx.Po@am__quote@
@@ -2294,6 +2296,11 @@ earclinux.c: $(srcdir)/emulparams/arclinux.sh \
$(ELF_DEPS) $(srcdir)/emultempl/arclinux.em \
$(srcdir)/scripttempl/arclinux.sc ${GEN_DEPENDS}
+earclinux_nps.c: $(srcdir)/emulparams/arclinux_nps.sh \
+ $(srcdir)/emulparams/arc-nps.sh \
+ $(ELF_DEPS) $(srcdir)/emultempl/arclinux.em \
+ $(srcdir)/scripttempl/arclinux.sc ${GEN_DEPENDS}
+
earclinux_prof.c: $(srcdir)/emulparams/arclinux_prof.sh \
$(ELF_DEPS) $(srcdir)/emultempl/arclinux.em \
$(srcdir)/scripttempl/arclinux.sc ${GEN_DEPENDS}
diff --git a/ld/configure.tgt b/ld/configure.tgt
index 8f01b51..7eb53ce 100644
--- a/ld/configure.tgt
+++ b/ld/configure.tgt
@@ -78,10 +78,10 @@ alpha*-*-openbsd*) targ_emul=elf64alpha ;;
alpha*-*-*vms*) targ_emul=alphavms
;;
arc*-*-elf*) targ_emul=arcelf
- targ_extra_emuls="arcelf_prof arclinux arclinux_prof arcv2elf arcv2elfx"
+ targ_extra_emuls="arcelf_prof arclinux arclinux_nps arclinux_prof arcv2elf arcv2elfx"
;;
arc*-*-linux*) targ_emul=arclinux
- targ_extra_emuls="arclinux_prof arcelf arcelf_prof arcv2elf arcv2elfx"
+ targ_extra_emuls="arclinux_nps arclinux_prof arcelf arcelf_prof arcv2elf arcv2elfx"
;;
arm-epoc-pe) targ_emul=arm_epoc_pe ; targ_extra_ofiles="deffilep.o pe-dll.o" ;;
arm*-*-cegcc*) targ_emul=arm_wince_pe ; targ_extra_ofiles="deffilep.o pe-dll.o"
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
diff --git a/ld/testsuite/ld-arc/arclinux-nps.d b/ld/testsuite/ld-arc/arclinux-nps.d
new file mode 100644
index 0000000..5ccd7fc
--- /dev/null
+++ b/ld/testsuite/ld-arc/arclinux-nps.d
@@ -0,0 +1,50 @@
+#source: arclinux-nps.s
+#as: -mnps400
+#ld: -marclinux_nps
+#objdump: -dr
+
+.*: +file format .*arc.*
+
+Disassembly of section .text:
+
+[0-9a-f]+ <.*>:
+ [0-9a-f]+: 200a 0f80 57f0 0000 mov r0,0x57f00000
+ [0-9a-f]+: 200a 0f80 57f0 0000 mov r0,0x57f00000
+ [0-9a-f]+: 200a 0f80 57f0 8000 mov r0,0x57f08000
+ [0-9a-f]+: 200a 0f80 57f0 8000 mov r0,0x57f08000
+ [0-9a-f]+: 200a 0f80 5800 0000 mov r0,0x58000000
+ [0-9a-f]+: 200a 0f80 5880 0000 mov r0,0x58800000
+ [0-9a-f]+: 200a 0f80 5900 0000 mov r0,0x59000000
+ [0-9a-f]+: 200a 0f80 5980 0000 mov r0,0x59800000
+ [0-9a-f]+: 200a 0f80 5a00 0000 mov r0,0x5a000000
+ [0-9a-f]+: 200a 0f80 5a80 0000 mov r0,0x5a800000
+ [0-9a-f]+: 200a 0f80 5b00 0000 mov r0,0x5b000000
+ [0-9a-f]+: 200a 0f80 5b80 0000 mov r0,0x5b800000
+ [0-9a-f]+: 200a 0f80 5c00 0000 mov r0,0x5c000000
+ [0-9a-f]+: 200a 0f80 5c80 0000 mov r0,0x5c800000
+ [0-9a-f]+: 200a 0f80 5d00 0000 mov r0,0x5d000000
+ [0-9a-f]+: 200a 0f80 5d80 0000 mov r0,0x5d800000
+ [0-9a-f]+: 200a 0f80 5e00 0000 mov r0,0x5e000000
+ [0-9a-f]+: 200a 0f80 5e80 0000 mov r0,0x5e800000
+ [0-9a-f]+: 200a 0f80 5f00 0000 mov r0,0x5f000000
+ [0-9a-f]+: 200a 0f80 5f80 0000 mov r0,0x5f800000
+ [0-9a-f]+: 200a 0f80 57f0 0000 mov r0,0x57f00000
+ [0-9a-f]+: 200a 0f80 57f0 0000 mov r0,0x57f00000
+ [0-9a-f]+: 200a 0f80 57f0 8000 mov r0,0x57f08000
+ [0-9a-f]+: 200a 0f80 57f0 8000 mov r0,0x57f08000
+ [0-9a-f]+: 200a 0f80 5800 0000 mov r0,0x58000000
+ [0-9a-f]+: 200a 0f80 5880 0000 mov r0,0x58800000
+ [0-9a-f]+: 200a 0f80 5900 0000 mov r0,0x59000000
+ [0-9a-f]+: 200a 0f80 5980 0000 mov r0,0x59800000
+ [0-9a-f]+: 200a 0f80 5a00 0000 mov r0,0x5a000000
+ [0-9a-f]+: 200a 0f80 5a80 0000 mov r0,0x5a800000
+ [0-9a-f]+: 200a 0f80 5b00 0000 mov r0,0x5b000000
+ [0-9a-f]+: 200a 0f80 5b80 0000 mov r0,0x5b800000
+ [0-9a-f]+: 200a 0f80 5c00 0000 mov r0,0x5c000000
+ [0-9a-f]+: 200a 0f80 5c80 0000 mov r0,0x5c800000
+ [0-9a-f]+: 200a 0f80 5d00 0000 mov r0,0x5d000000
+ [0-9a-f]+: 200a 0f80 5d80 0000 mov r0,0x5d800000
+ [0-9a-f]+: 200a 0f80 5e00 0000 mov r0,0x5e000000
+ [0-9a-f]+: 200a 0f80 5e80 0000 mov r0,0x5e800000
+ [0-9a-f]+: 200a 0f80 5f00 0000 mov r0,0x5f000000
+ [0-9a-f]+: 200a 0f80 5f80 0000 mov r0,0x5f800000
diff --git a/ld/testsuite/ld-arc/arclinux-nps.s b/ld/testsuite/ld-arc/arclinux-nps.s
new file mode 100644
index 0000000..38bf897
--- /dev/null
+++ b/ld/testsuite/ld-arc/arclinux-nps.s
@@ -0,0 +1,46 @@
+ .text
+ .global __start
+__start:
+ mov r0, _cmem_start
+ mov r0, _cmem_alter_start
+ mov r0, _cmem_shared_start
+ mov r0, _cmem_shared_alter_start
+
+ mov r0, _fmt_slot0_start
+ mov r0, _fmt_slot1_start
+ mov r0, _fmt_slot2_start
+ mov r0, _fmt_slot3_start
+ mov r0, _fmt_slot4_start
+ mov r0, _fmt_slot5_start
+ mov r0, _fmt_slot6_start
+ mov r0, _fmt_slot7_start
+ mov r0, _fmt_slot8_start
+ mov r0, _fmt_slot9_start
+ mov r0, _fmt_slot10_start
+ mov r0, _fmt_slot11_start
+ mov r0, _fmt_slot12_start
+ mov r0, _fmt_slot13_start
+ mov r0, _fmt_slot14_start
+ mov r0, _fmt_slot15_start
+
+ mov r0, _cmem_end
+ mov r0, _cmem_alter_end
+ mov r0, _cmem_shared_end
+ mov r0, _cmem_shared_alter_end
+
+ mov r0, _fmt_slot0_end
+ mov r0, _fmt_slot1_end
+ mov r0, _fmt_slot2_end
+ mov r0, _fmt_slot3_end
+ mov r0, _fmt_slot4_end
+ mov r0, _fmt_slot5_end
+ mov r0, _fmt_slot6_end
+ mov r0, _fmt_slot7_end
+ mov r0, _fmt_slot8_end
+ mov r0, _fmt_slot9_end
+ mov r0, _fmt_slot10_end
+ mov r0, _fmt_slot11_end
+ mov r0, _fmt_slot12_end
+ mov r0, _fmt_slot13_end
+ mov r0, _fmt_slot14_end
+ mov r0, _fmt_slot15_end