ld/ChangeLog:
authorAndrew Pinski <apinski@cavium.com>
Thu, 21 Nov 2013 00:56:20 +0000 (16:56 -0800)
committerAndrew Pinski <apinski@cavium.com>
Thu, 21 Nov 2013 19:17:50 +0000 (11:17 -0800)
* 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.

ld/ChangeLog
ld/Makefile.am
ld/Makefile.in
ld/configure.tgt
ld/emulparams/aarch64elf32.sh
ld/emulparams/aarch64linux32.sh [new file with mode: 0644]
ld/emulparams/aarch64linux32b.sh [new file with mode: 0644]

index 5397e13ecac2db3c23353cdd3f53815d25904882..768dc473edffc1007e4322875a2adab01d508373 100644 (file)
@@ -1,3 +1,17 @@
+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
index 6790f45fbed7e6a75fef003e8fc74cb4bae881c0..b2b2a6ebe3622635f981ee550b84abc07f98c7f7 100644 (file)
@@ -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)"
index 7385ef4ed68be8ab071539ee99dea14240a75f0c..b95a3d103de4d1d5671a84ed476f5312a808b5b2 100644 (file)
@@ -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)"
index 5d23732b6c168ae4ee2b428c4d7e4d4d56ec7b44..c50730b9c5144b13c6dceea6bab8b4276f8e71be 100644 (file)
@@ -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
index 68a4d8002c715371140737346a7cae72f69f881a..f85c9ffd187db416c46df2814d32043ba42c88c6 100644 (file)
@@ -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 (file)
index 0000000..573b432
--- /dev/null
@@ -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 (file)
index 0000000..f878b18
--- /dev/null
@@ -0,0 +1,2 @@
+. ${srcdir}/emulparams/aarch64linux32.sh
+OUTPUT_FORMAT="elf32-bigaarch64"