From 4deb1ee57fdb711cac6f36fed75b3c8cb5112d99 Mon Sep 17 00:00:00 2001 From: Claudiu Zissulescu Date: Mon, 25 Sep 2023 10:55:51 +0300 Subject: [PATCH] arc: Add new linker emulation and scripts for ARCv3 ISA. Add ARCv3's linker bits. Remove obsolete tests. ld/ xxxx-xx-xx Claudiu Zissulescu * ld/Makefile.am: Add ARC64 targets. * ld/configure.tgt: Likewise. * ld/Makefile.in: Regenerate. * ld/emulparams/arc64elf32.sh: New file. * ld/emulparams/arc64elf64.sh: Likewise. * ld/emulparams/arc64linux32.sh: Likewise. * ld/emulparams/arc64linux64.sh: Likewise. * ld/scripttempl/elfarc.sc: Update stack and heap definitions. * ld/testsuite/ld-arc/got-weak.d: Deleted file. * ld/testsuite/ld-arc/got-weak.s: Likewise. Signed-off-by: Claudiu Zissulescu --- ld/Makefile.am | 4 ++++ ld/Makefile.in | 8 ++++++++ ld/configure.tgt | 21 +++++++++++++++++++-- ld/emulparams/arc64elf32.sh | 12 ++++++++++++ ld/emulparams/arc64elf64.sh | 12 ++++++++++++ ld/emulparams/arc64linux32.sh | 22 ++++++++++++++++++++++ ld/emulparams/arc64linux64.sh | 22 ++++++++++++++++++++++ ld/scripttempl/elfarc.sc | 18 ++++-------------- ld/testsuite/ld-arc/got-weak.d | 12 ------------ ld/testsuite/ld-arc/got-weak.s | 7 ------- 10 files changed, 103 insertions(+), 35 deletions(-) create mode 100644 ld/emulparams/arc64elf32.sh create mode 100644 ld/emulparams/arc64elf64.sh create mode 100644 ld/emulparams/arc64linux32.sh create mode 100644 ld/emulparams/arc64linux64.sh delete mode 100644 ld/testsuite/ld-arc/got-weak.d delete mode 100644 ld/testsuite/ld-arc/got-weak.s diff --git a/ld/Makefile.am b/ld/Makefile.am index 9664d4c7709..1efb1726f65 100644 --- a/ld/Makefile.am +++ b/ld/Makefile.am @@ -391,6 +391,10 @@ ALL_64_EMULATION_SOURCES = \ eaarch64nto.c \ eaarch64pe.c \ earm64pe.c \ + earc64elf32.c \ + earc64elf64.c \ + earc64linux32.c \ + earc64linux64.c \ eelf32_x86_64.c \ eelf32b4300.c \ eelf32bmip.c \ diff --git a/ld/Makefile.in b/ld/Makefile.in index afd22d479ec..ce2fb16ec83 100644 --- a/ld/Makefile.in +++ b/ld/Makefile.in @@ -890,6 +890,10 @@ ALL_64_EMULATION_SOURCES = \ eaarch64nto.c \ eaarch64pe.c \ earm64pe.c \ + earc64elf32.c \ + earc64elf64.c \ + earc64linux32.c \ + earc64linux64.c \ eelf32_x86_64.c \ eelf32b4300.c \ eelf32bmip.c \ @@ -1279,6 +1283,10 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eaixrs6.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ealpha.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ealphavms.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/earc64elf32.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/earc64elf64.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/earc64linux32.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/earc64linux64.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/earcelf.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@ diff --git a/ld/configure.tgt b/ld/configure.tgt index ff0aaaae257..d69dee8c355 100644 --- a/ld/configure.tgt +++ b/ld/configure.tgt @@ -153,10 +153,27 @@ alpha*-*-*vms*) targ_emul=alphavms ;; am33_2.0-*-linux*) targ_emul=elf32am33lin # mn10300 variant ;; -arc*-*-elf*) targ_emul=arcelf +arc-*-elf* | arc[be]*-*-elf*) targ_emul=arcelf targ_extra_emuls="arclinux arclinux_nps arcv2elf arcv2elfx" ;; -arc*-*-linux*) case "${with_cpu}" in +arc64-*-elf*) targ_emul=arc64elf64 + targ_extra_emuls="arc64elf32 arc64linux64 arc64linux32" + targ_extra_libpath=$targ_extra_emuls + ;; +arc32-*-elf*) targ_emul=arc64elf32 + targ_extra_emuls="arc64linux32 arc64elf64 arc64linux64" + targ_extra_libpath=$targ_extra_emuls + ;; +arc64-*-linux*) targ_emul=arc64linux64 + targ_extra_emuls="arc64elf64 arc64elf32 arc64linux32" + targ_extra_libpath=$targ_extra_emuls + ;; +arc32-*-linux*) targ_emul=arc64linux32 + targ_extra_emuls="arc64elf32 arc64elf64 arc64linux64" + targ_extra_libpath=$targ_extra_emuls + ;; +arc-*-linux* | arc[eb]*-linux*) + case "${with_cpu}" in nps400) targ_emul=arclinux_nps targ_extra_emuls=arclinux ;; diff --git a/ld/emulparams/arc64elf32.sh b/ld/emulparams/arc64elf32.sh new file mode 100644 index 00000000000..0f8389a0a6f --- /dev/null +++ b/ld/emulparams/arc64elf32.sh @@ -0,0 +1,12 @@ +SCRIPT_NAME=elf +ELFSIZE=32 +SCRIPT_NAME=elfarc +TEMPLATE_NAME=elf +OUTPUT_FORMAT="elf32-littlearc64" + +TEXT_START_ADDR=0x00 + +MAXPAGESIZE="CONSTANT (MAXPAGESIZE)" +ARCH="arc64:32" +ENTRY=__start +EMBEDDED=yes diff --git a/ld/emulparams/arc64elf64.sh b/ld/emulparams/arc64elf64.sh new file mode 100644 index 00000000000..d4291345206 --- /dev/null +++ b/ld/emulparams/arc64elf64.sh @@ -0,0 +1,12 @@ +SCRIPT_NAME=elf +ELFSIZE=64 +SCRIPT_NAME=elfarc +TEMPLATE_NAME=elf +OUTPUT_FORMAT="elf64-littlearc64" + +TEXT_START_ADDR=0x00 + +MAXPAGESIZE="CONSTANT (MAXPAGESIZE)" +ARCH="arc64:64" +ENTRY=__start +EMBEDDED=yes diff --git a/ld/emulparams/arc64linux32.sh b/ld/emulparams/arc64linux32.sh new file mode 100644 index 00000000000..1ad8f3de41e --- /dev/null +++ b/ld/emulparams/arc64linux32.sh @@ -0,0 +1,22 @@ +ARCH="arc64:32" + +SCRIPT_NAME=elf +ELFSIZE=32 +OUTPUT_FORMAT="elf32-littlearc64" + +TEMPLATE_NAME=elf + +GENERATE_SHLIB_SCRIPT=yes +GENERATE_PIE_SCRIPT=yes + +MAXPAGESIZE="CONSTANT (MAXPAGESIZE)" +COMMONPAGESIZE="CONSTANT (COMMONPAGESIZE)" + +TEXT_START_ADDR=0x10000 + +ENTRY=__start + +# To support RELRO security feature. +NO_SMALL_DATA=yes +SEPARATE_GOTPLT="SIZEOF (.got.plt) >= 12 ? 12 : 0" +GENERATE_COMBRELOC_SCRIPT=yes diff --git a/ld/emulparams/arc64linux64.sh b/ld/emulparams/arc64linux64.sh new file mode 100644 index 00000000000..89ff73dc4f2 --- /dev/null +++ b/ld/emulparams/arc64linux64.sh @@ -0,0 +1,22 @@ +ARCH="arc64:64" + +SCRIPT_NAME=elf +ELFSIZE=64 +OUTPUT_FORMAT="elf64-littlearc64" + +TEMPLATE_NAME=elf + +GENERATE_SHLIB_SCRIPT=yes +GENERATE_PIE_SCRIPT=yes + +MAXPAGESIZE="CONSTANT (MAXPAGESIZE)" +COMMONPAGESIZE="CONSTANT (COMMONPAGESIZE)" + +TEXT_START_ADDR=0x10000 + +ENTRY=__start + +# To support RELRO security feature. +NO_SMALL_DATA=yes +SEPARATE_GOTPLT=8 #FIXME! what is the true value here? +GENERATE_COMBRELOC_SCRIPT=yes diff --git a/ld/scripttempl/elfarc.sc b/ld/scripttempl/elfarc.sc index 1ae0248a900..78cb0fa9540 100644 --- a/ld/scripttempl/elfarc.sc +++ b/ld/scripttempl/elfarc.sc @@ -394,20 +394,10 @@ test -n "${RELOCATING}" && cat <: -^\s+[0-9a-f]+:\s+2730\s7f80\s[0-9a-f]+\s[0-9a-f]+\s+ld\s+r\d+,\[pcl,.* diff --git a/ld/testsuite/ld-arc/got-weak.s b/ld/testsuite/ld-arc/got-weak.s deleted file mode 100644 index 8ea18be3780..00000000000 --- a/ld/testsuite/ld-arc/got-weak.s +++ /dev/null @@ -1,7 +0,0 @@ - .cpu archs - - .weak symb - .global __start - .text -__start: - ld r0,[pcl,@symb@gotpc] -- 2.30.2