diff options
-rw-r--r-- | ld/ChangeLog | 14 | ||||
-rw-r--r-- | ld/Makefile.am | 10 | ||||
-rw-r--r-- | ld/Makefile.in | 12 | ||||
-rw-r--r-- | ld/configure.tgt | 4 | ||||
-rw-r--r-- | ld/emulparams/aarch64elf32.sh | 2 | ||||
-rw-r--r-- | ld/emulparams/aarch64linux32.sh | 47 | ||||
-rw-r--r-- | ld/emulparams/aarch64linux32b.sh | 2 |
7 files changed, 88 insertions, 3 deletions
diff --git a/ld/ChangeLog b/ld/ChangeLog index 5397e13..768dc47 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,5 +1,19 @@ 2013-11-21 Andrew Pinski <apinski@cavium.com> + * Makefile.am (ALL_64_EMULATION_SOURCES): Add eaarch64linux32.c + and eaarch64linux32b.c + (eaarch64linux32.c): New target. + (eaarch64linux32b.c): Likewise. + * Makefile.in: Regenerate. + * configure.tgt (aarch64_be-*-linux*): Add + aarch64linux32 and aarch64linux32b to targ_extra_libpath. + (aarch64-*-linux*): Likewise. + * emulparams/aarch64elf32.sh (SEPARATE_GOTPLT): Change to 12 (3 words). + * emulparams/aarch64linux32.sh: New file. + * emulparams/aarch64linux32b.sh: New file. + +2013-11-21 Andrew Pinski <apinski@cavium.com> + * configure.tgt (aarch64_be-*-linux*): Split out the linux targets into targ_extra_libpath. (aarch64-*-linux*): Likewise. diff --git a/ld/Makefile.am b/ld/Makefile.am index 6790f45..b2b2a6e 100644 --- a/ld/Makefile.am +++ b/ld/Makefile.am @@ -468,6 +468,8 @@ ALL_64_EMULATION_SOURCES = \ eaarch64elf32b.c \ eaarch64linux.c \ eaarch64linuxb.c \ + eaarch64linux32.c \ + eaarch64linux32b.c \ eelf32_x86_64.c \ eelf32_x86_64_nacl.c \ eelf32b4300.c \ @@ -1787,6 +1789,14 @@ eaarch64linuxb.c: $(srcdir)/emulparams/aarch64linuxb.sh $(srcdir)/emulparams/aar $(ELF_DEPS) $(srcdir)/emultempl/aarch64elf.em \ $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS} ${GENSCRIPTS} aarch64linuxb "$(tdir_aarch64linuxb)" +eaarch64linux32.c: $(srcdir)/emulparams/aarch64linux32.sh \ + $(ELF_DEPS) $(srcdir)/emultempl/aarch64elf.em \ + $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS} + ${GENSCRIPTS} aarch64linux32 "$(tdir_aarch64linux32)" +eaarch64linux32b.c: $(srcdir)/emulparams/aarch64linux32b.sh $(srcdir)/emulparams/aarch64linux32.sh \ + $(ELF_DEPS) $(srcdir)/emultempl/aarch64elf.em \ + $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS} + ${GENSCRIPTS} aarch64linux32b "$(tdir_aarch64linux32b)" eor32.c: $(srcdir)/emulparams/or32.sh \ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/or32.sc ${GEN_DEPENDS} ${GENSCRIPTS} or32 "$(tdir_or32)" diff --git a/ld/Makefile.in b/ld/Makefile.in index 7385ef4..b95a3d1 100644 --- a/ld/Makefile.in +++ b/ld/Makefile.in @@ -775,6 +775,8 @@ ALL_64_EMULATION_SOURCES = \ eaarch64elf32b.c \ eaarch64linux.c \ eaarch64linuxb.c \ + eaarch64linux32.c \ + eaarch64linux32b.c \ eelf32_x86_64.c \ eelf32_x86_64_nacl.c \ eelf32b4300.c \ @@ -1084,6 +1086,8 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eaarch64elf32b.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eaarch64elfb.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eaarch64linux.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eaarch64linux32.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eaarch64linux32b.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eaarch64linuxb.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eaix5ppc.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eaix5rs6.Po@am__quote@ @@ -3269,6 +3273,14 @@ eaarch64linuxb.c: $(srcdir)/emulparams/aarch64linuxb.sh $(srcdir)/emulparams/aar $(ELF_DEPS) $(srcdir)/emultempl/aarch64elf.em \ $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS} ${GENSCRIPTS} aarch64linuxb "$(tdir_aarch64linuxb)" +eaarch64linux32.c: $(srcdir)/emulparams/aarch64linux32.sh \ + $(ELF_DEPS) $(srcdir)/emultempl/aarch64elf.em \ + $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS} + ${GENSCRIPTS} aarch64linux32 "$(tdir_aarch64linux32)" +eaarch64linux32b.c: $(srcdir)/emulparams/aarch64linux32b.sh $(srcdir)/emulparams/aarch64linux32.sh \ + $(ELF_DEPS) $(srcdir)/emultempl/aarch64elf.em \ + $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS} + ${GENSCRIPTS} aarch64linux32b "$(tdir_aarch64linux32b)" eor32.c: $(srcdir)/emulparams/or32.sh \ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/or32.sc ${GEN_DEPENDS} ${GENSCRIPTS} or32 "$(tdir_or32)" diff --git a/ld/configure.tgt b/ld/configure.tgt index 5d23732..c50730b 100644 --- a/ld/configure.tgt +++ b/ld/configure.tgt @@ -50,10 +50,10 @@ aarch64_be-*-elf) targ_emul=aarch64elfb aarch64-*-elf) targ_emul=aarch64elf targ_extra_emuls="aarch64elf32 aarch64elf32b aarch64elfb armelf armelfb" ;; aarch64_be-*-linux*) targ_emul=aarch64linuxb - targ_extra_libpath="aarch64linux armelfb_linux_eabi armelf_linux_eabi" + targ_extra_libpath="aarch64linux aarch64linux32 aarch64linux32b armelfb_linux_eabi armelf_linux_eabi" targ_extra_emuls="aarch64elfb aarch64elf aarch64elf32 aarch64elf32b armelfb armelf $targ_extra_libpath" ;; aarch64-*-linux*) targ_emul=aarch64linux - targ_extra_libpath="aarch64linuxb armelfb_linux_eabi armelf_linux_eabi" + targ_extra_libpath="aarch64linuxb aarch64linux32 aarch64linux32b armelfb_linux_eabi armelf_linux_eabi" targ_extra_emuls="aarch64elf aarch64elf32 aarch64elf32b aarch64elfb armelf armelfb $targ_extra_libpath" ;; alpha*-*-freebsd* | alpha*-*-kfreebsd*-gnu) targ_emul=elf64alpha_fbsd diff --git a/ld/emulparams/aarch64elf32.sh b/ld/emulparams/aarch64elf32.sh index 68a4d80..f85c9ff 100644 --- a/ld/emulparams/aarch64elf32.sh +++ b/ld/emulparams/aarch64elf32.sh @@ -17,7 +17,7 @@ MAXPAGESIZE="CONSTANT (MAXPAGESIZE)" ENTRY=_start EMBEDDED=yes -SEPARATE_GOTPLT=24 +SEPARATE_GOTPLT=12 IREL_IN_PLT= TEXT_START_ADDR=0x00400000 diff --git a/ld/emulparams/aarch64linux32.sh b/ld/emulparams/aarch64linux32.sh new file mode 100644 index 0000000..573b432 --- /dev/null +++ b/ld/emulparams/aarch64linux32.sh @@ -0,0 +1,47 @@ +ARCH="aarch64:ilp32" +MACHINE= +NOP=0 + +SCRIPT_NAME=elf +ELFSIZE=32 +OUTPUT_FORMAT="elf32-littleaarch64" +BIG_OUTPUT_FORMAT="elf32-bigaarch64" +LITTLE_OUTPUT_FORMAT="elf32-littleaarch64" +NO_REL_RELOCS=yes + +TEMPLATE_NAME=elf32 +EXTRA_EM_FILE=aarch64elf + +GENERATE_SHLIB_SCRIPT=yes +GENERATE_PIE_SCRIPT=yes + +MAXPAGESIZE="CONSTANT (MAXPAGESIZE)" +COMMONPAGESIZE="CONSTANT (COMMONPAGESIZE)" +SEPARATE_GOTPLT=12 +IREL_IN_PLT= + +TEXT_START_ADDR=0x400000 + +DATA_START_SYMBOLS='PROVIDE (__data_start = .);'; + +# AArch64 does not support .s* sections. +NO_SMALL_DATA=yes + +OTHER_BSS_SYMBOLS='__bss_start__ = .;' +OTHER_BSS_END_SYMBOLS='_bss_end__ = . ; __bss_end__ = . ;' +OTHER_END_SYMBOLS='__end__ = . ;' + +OTHER_SECTIONS='.note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }' +ATTRS_SECTIONS='.ARM.attributes 0 : { KEEP (*(.ARM.attributes)) KEEP (*(.gnu.attributes)) }' +# Ensure each PLT entry is aligned to a cache line. +PLT=".plt ${RELOCATING-0} : ALIGN(16) { *(.plt)${IREL_IN_PLT+ *(.iplt)} }" + +# Linux modifies the default library search path to first include +# a 32-bit specific directory. +case "$target" in + aarch64*-linux*) + case "$EMULATION_NAME" in + aarch64linux*) LIBPATH_SUFFIX=32 ;; + esac + ;; +esac diff --git a/ld/emulparams/aarch64linux32b.sh b/ld/emulparams/aarch64linux32b.sh new file mode 100644 index 0000000..f878b18 --- /dev/null +++ b/ld/emulparams/aarch64linux32b.sh @@ -0,0 +1,2 @@ +. ${srcdir}/emulparams/aarch64linux32.sh +OUTPUT_FORMAT="elf32-bigaarch64" |