Add support for AArch64 CloudABI binaries.
ld * Makefile.am (ALL_64_EMULATION_SOURCES): Add support for CloudABI on aarch64. For this target we have to make sure we use ELFOSABI_CLOUDABI instead of ELFOSABI_NONE. * configure.tgt (targ_emul): Likewise. * emulparams/aarch64cloudabi.sh: New file. * emulparams/aarch64cloudabib.sh: New file. * Makefile.in: Regenerate. bfd * config.bfd (targ_defvec): Add support for CloudABI on aarch64. For this target we have to make sure we use ELFOSABI_CLOUDABI instead of ELFOSABI_NONE. * configure.ac (tb): Likewise. * elfnn-aarch64.c: Likewise. * targets.c (_bfd_target_vector): Likewise. * configure: Regenerate. gas * config/tc-aarch64.c (elf64_aarch64_target_format): Select the cloudabi format if the TARGET_OS is cloudabi.
This commit is contained in:
parent
968bc5cc86
commit
a75cf613fd
@ -1,3 +1,13 @@
|
|||||||
|
2015-10-29 Ed Schouten <ed@nuxi.nl>
|
||||||
|
|
||||||
|
* config.bfd (targ_defvec): Add support for CloudABI on aarch64.
|
||||||
|
For this target we have to make sure we use ELFOSABI_CLOUDABI
|
||||||
|
instead of ELFOSABI_NONE.
|
||||||
|
* configure.ac (tb): Likewise.
|
||||||
|
* elfnn-aarch64.c: Likewise.
|
||||||
|
* targets.c (_bfd_target_vector): Likewise.
|
||||||
|
* configure: Regenerate.
|
||||||
|
|
||||||
2015-10-29 Pedro Alves <palves@redhat.com>
|
2015-10-29 Pedro Alves <palves@redhat.com>
|
||||||
|
|
||||||
* libhppa.h (bfd_hppa_insn2fmt): Add cast.
|
* libhppa.h (bfd_hppa_insn2fmt): Add cast.
|
||||||
|
@ -184,6 +184,11 @@ case "${targ}" in
|
|||||||
targ_selvecs="aarch64_elf64_be_vec arm_elf32_le_vec arm_elf32_be_vec"
|
targ_selvecs="aarch64_elf64_be_vec arm_elf32_le_vec arm_elf32_be_vec"
|
||||||
want64=true
|
want64=true
|
||||||
;;
|
;;
|
||||||
|
aarch64-*-cloudabi*)
|
||||||
|
targ_defvec=aarch64_elf64_le_cloudabi_vec
|
||||||
|
targ_selvecs=aarch64_elf64_be_cloudabi_vec
|
||||||
|
want64=true
|
||||||
|
;;
|
||||||
aarch64-*-linux*)
|
aarch64-*-linux*)
|
||||||
targ_defvec=aarch64_elf64_le_vec
|
targ_defvec=aarch64_elf64_le_vec
|
||||||
targ_selvecs="aarch64_elf64_be_vec aarch64_elf32_le_vec aarch64_elf32_be_vec arm_elf32_le_vec arm_elf32_be_vec"
|
targ_selvecs="aarch64_elf64_be_vec aarch64_elf32_le_vec aarch64_elf32_be_vec arm_elf32_le_vec arm_elf32_be_vec"
|
||||||
|
2
bfd/configure
vendored
2
bfd/configure
vendored
@ -15250,7 +15250,9 @@ do
|
|||||||
aarch64_elf32_be_vec) tb="$tb elf32-aarch64.lo elfxx-aarch64.lo elf-ifunc.lo elf32.lo $elf"; target_size=64 ;;
|
aarch64_elf32_be_vec) tb="$tb elf32-aarch64.lo elfxx-aarch64.lo elf-ifunc.lo elf32.lo $elf"; target_size=64 ;;
|
||||||
aarch64_elf32_le_vec) tb="$tb elf32-aarch64.lo elfxx-aarch64.lo elf-ifunc.lo elf32.lo $elf"; target_size=64 ;;
|
aarch64_elf32_le_vec) tb="$tb elf32-aarch64.lo elfxx-aarch64.lo elf-ifunc.lo elf32.lo $elf"; target_size=64 ;;
|
||||||
aarch64_elf64_be_vec) tb="$tb elf64-aarch64.lo elfxx-aarch64.lo elf-ifunc.lo elf64.lo $elf"; target_size=64 ;;
|
aarch64_elf64_be_vec) tb="$tb elf64-aarch64.lo elfxx-aarch64.lo elf-ifunc.lo elf64.lo $elf"; target_size=64 ;;
|
||||||
|
aarch64_elf64_be_cloudabi_vec) tb="$tb elf64-aarch64.lo elfxx-aarch64.lo elf-ifunc.lo elf64.lo $elf"; target_size=64 ;;
|
||||||
aarch64_elf64_le_vec) tb="$tb elf64-aarch64.lo elfxx-aarch64.lo elf-ifunc.lo elf64.lo $elf"; target_size=64 ;;
|
aarch64_elf64_le_vec) tb="$tb elf64-aarch64.lo elfxx-aarch64.lo elf-ifunc.lo elf64.lo $elf"; target_size=64 ;;
|
||||||
|
aarch64_elf64_le_cloudabi_vec) tb="$tb elf64-aarch64.lo elfxx-aarch64.lo elf-ifunc.lo elf64.lo $elf"; target_size=64 ;;
|
||||||
alpha_ecoff_le_vec) tb="$tb coff-alpha.lo ecoff.lo $ecoff"; target_size=64 ;;
|
alpha_ecoff_le_vec) tb="$tb coff-alpha.lo ecoff.lo $ecoff"; target_size=64 ;;
|
||||||
alpha_elf64_vec) tb="$tb elf64-alpha.lo elf64.lo $elf"; target_size=64 ;;
|
alpha_elf64_vec) tb="$tb elf64-alpha.lo elf64.lo $elf"; target_size=64 ;;
|
||||||
alpha_elf64_fbsd_vec) tb="$tb elf64-alpha.lo elf64.lo $elf"; target_size=64 ;;
|
alpha_elf64_fbsd_vec) tb="$tb elf64-alpha.lo elf64.lo $elf"; target_size=64 ;;
|
||||||
|
@ -695,8 +695,10 @@ do
|
|||||||
# use one entry per line, even though this leads to long lines.
|
# use one entry per line, even though this leads to long lines.
|
||||||
aarch64_elf32_be_vec) tb="$tb elf32-aarch64.lo elfxx-aarch64.lo elf-ifunc.lo elf32.lo $elf"; target_size=64 ;;
|
aarch64_elf32_be_vec) tb="$tb elf32-aarch64.lo elfxx-aarch64.lo elf-ifunc.lo elf32.lo $elf"; target_size=64 ;;
|
||||||
aarch64_elf32_le_vec) tb="$tb elf32-aarch64.lo elfxx-aarch64.lo elf-ifunc.lo elf32.lo $elf"; target_size=64 ;;
|
aarch64_elf32_le_vec) tb="$tb elf32-aarch64.lo elfxx-aarch64.lo elf-ifunc.lo elf32.lo $elf"; target_size=64 ;;
|
||||||
aarch64_elf64_be_vec) tb="$tb elf64-aarch64.lo elfxx-aarch64.lo elf-ifunc.lo elf64.lo $elf"; target_size=64 ;;
|
aarch64_elf64_be_vec) tb="$tb elf64-aarch64.lo elfxx-aarch64.lo elf-ifunc.lo elf64.lo $elf"; target_size=64 ;;
|
||||||
aarch64_elf64_le_vec) tb="$tb elf64-aarch64.lo elfxx-aarch64.lo elf-ifunc.lo elf64.lo $elf"; target_size=64 ;;
|
aarch64_elf64_be_cloudabi_vec) tb="$tb elf64-aarch64.lo elfxx-aarch64.lo elf-ifunc.lo elf64.lo $elf"; target_size=64 ;;
|
||||||
|
aarch64_elf64_le_vec) tb="$tb elf64-aarch64.lo elfxx-aarch64.lo elf-ifunc.lo elf64.lo $elf"; target_size=64 ;;
|
||||||
|
aarch64_elf64_le_cloudabi_vec) tb="$tb elf64-aarch64.lo elfxx-aarch64.lo elf-ifunc.lo elf64.lo $elf"; target_size=64 ;;
|
||||||
alpha_ecoff_le_vec) tb="$tb coff-alpha.lo ecoff.lo $ecoff"; target_size=64 ;;
|
alpha_ecoff_le_vec) tb="$tb coff-alpha.lo ecoff.lo $ecoff"; target_size=64 ;;
|
||||||
alpha_elf64_vec) tb="$tb elf64-alpha.lo elf64.lo $elf"; target_size=64 ;;
|
alpha_elf64_vec) tb="$tb elf64-alpha.lo elf64.lo $elf"; target_size=64 ;;
|
||||||
alpha_elf64_fbsd_vec) tb="$tb elf64-alpha.lo elf64.lo $elf"; target_size=64 ;;
|
alpha_elf64_fbsd_vec) tb="$tb elf64-alpha.lo elf64.lo $elf"; target_size=64 ;;
|
||||||
|
@ -9385,3 +9385,22 @@ const struct elf_size_info elfNN_aarch64_size_info =
|
|||||||
#define elf_backend_obj_attrs_section ".ARM.attributes"
|
#define elf_backend_obj_attrs_section ".ARM.attributes"
|
||||||
|
|
||||||
#include "elfNN-target.h"
|
#include "elfNN-target.h"
|
||||||
|
|
||||||
|
/* CloudABI support. */
|
||||||
|
|
||||||
|
#undef TARGET_LITTLE_SYM
|
||||||
|
#define TARGET_LITTLE_SYM aarch64_elfNN_le_cloudabi_vec
|
||||||
|
#undef TARGET_LITTLE_NAME
|
||||||
|
#define TARGET_LITTLE_NAME "elfNN-littleaarch64-cloudabi"
|
||||||
|
#undef TARGET_BIG_SYM
|
||||||
|
#define TARGET_BIG_SYM aarch64_elfNN_be_cloudabi_vec
|
||||||
|
#undef TARGET_BIG_NAME
|
||||||
|
#define TARGET_BIG_NAME "elfNN-bigaarch64-cloudabi"
|
||||||
|
|
||||||
|
#undef ELF_OSABI
|
||||||
|
#define ELF_OSABI ELFOSABI_CLOUDABI
|
||||||
|
|
||||||
|
#undef elfNN_bed
|
||||||
|
#define elfNN_bed elfNN_aarch64_cloudabi_bed
|
||||||
|
|
||||||
|
#include "elfNN-target.h"
|
||||||
|
@ -568,7 +568,9 @@ to find an alternative output format that is suitable.
|
|||||||
extern const bfd_target aarch64_elf32_be_vec;
|
extern const bfd_target aarch64_elf32_be_vec;
|
||||||
extern const bfd_target aarch64_elf32_le_vec;
|
extern const bfd_target aarch64_elf32_le_vec;
|
||||||
extern const bfd_target aarch64_elf64_be_vec;
|
extern const bfd_target aarch64_elf64_be_vec;
|
||||||
|
extern const bfd_target aarch64_elf64_be_cloudabi_vec;
|
||||||
extern const bfd_target aarch64_elf64_le_vec;
|
extern const bfd_target aarch64_elf64_le_vec;
|
||||||
|
extern const bfd_target aarch64_elf64_le_cloudabi_vec;
|
||||||
extern const bfd_target alpha_ecoff_le_vec;
|
extern const bfd_target alpha_ecoff_le_vec;
|
||||||
extern const bfd_target alpha_elf64_vec;
|
extern const bfd_target alpha_elf64_vec;
|
||||||
extern const bfd_target alpha_elf64_fbsd_vec;
|
extern const bfd_target alpha_elf64_fbsd_vec;
|
||||||
@ -948,7 +950,9 @@ static const bfd_target * const _bfd_target_vector[] =
|
|||||||
&aarch64_elf32_be_vec,
|
&aarch64_elf32_be_vec,
|
||||||
&aarch64_elf32_le_vec,
|
&aarch64_elf32_le_vec,
|
||||||
&aarch64_elf64_be_vec,
|
&aarch64_elf64_be_vec,
|
||||||
|
&aarch64_elf64_be_cloudabi_vec,
|
||||||
&aarch64_elf64_le_vec,
|
&aarch64_elf64_le_vec,
|
||||||
|
&aarch64_elf64_le_cloudabi_vec,
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef BFD64
|
#ifdef BFD64
|
||||||
|
@ -1,3 +1,8 @@
|
|||||||
|
2015-10-29 Nick Clifton <nickc@redhat.com>
|
||||||
|
|
||||||
|
* config/tc-aarch64.c (elf64_aarch64_target_format): Select the
|
||||||
|
cloudabi format if the TARGET_OS is cloudabi.
|
||||||
|
|
||||||
2015-10-29 Thomas Preud'homme <thomas.preudhomme@arm.com>
|
2015-10-29 Thomas Preud'homme <thomas.preudhomme@arm.com>
|
||||||
|
|
||||||
* config/tc-arm.c (insns): Guard cps by arm_ext_v6_notm instead of
|
* config/tc-arm.c (insns): Guard cps by arm_ext_v6_notm instead of
|
||||||
|
@ -7309,6 +7309,11 @@ aarch64_force_relocation (struct fix *fixp)
|
|||||||
const char *
|
const char *
|
||||||
elf64_aarch64_target_format (void)
|
elf64_aarch64_target_format (void)
|
||||||
{
|
{
|
||||||
|
if (strcmp (TARGET_OS, "cloudabi") == 0)
|
||||||
|
{
|
||||||
|
/* FIXME: What to do for ilp32_p ? */
|
||||||
|
return target_big_endian ? "elf64-bigaarch64-cloudabi" : "elf64-littleaarch64-cloudabi";
|
||||||
|
}
|
||||||
if (target_big_endian)
|
if (target_big_endian)
|
||||||
return ilp32_p ? "elf32-bigaarch64" : "elf64-bigaarch64";
|
return ilp32_p ? "elf32-bigaarch64" : "elf64-bigaarch64";
|
||||||
else
|
else
|
||||||
|
10
ld/ChangeLog
10
ld/ChangeLog
@ -1,3 +1,13 @@
|
|||||||
|
2015-10-29 Ed Schouten <ed@nuxi.nl>
|
||||||
|
|
||||||
|
* Makefile.am (ALL_64_EMULATION_SOURCES): Add support for
|
||||||
|
CloudABI on aarch64. For this target we have to make sure we use
|
||||||
|
ELFOSABI_CLOUDABI instead of ELFOSABI_NONE.
|
||||||
|
* configure.tgt (targ_emul): Likewise.
|
||||||
|
* emulparams/aarch64cloudabi.sh: New file.
|
||||||
|
* emulparams/aarch64cloudabib.sh: New file.
|
||||||
|
* Makefile.in: Regenerate.
|
||||||
|
|
||||||
2015-10-29 Nick Clifton <nickc@redhat.com>
|
2015-10-29 Nick Clifton <nickc@redhat.com>
|
||||||
|
|
||||||
PR ld/19146
|
PR ld/19146
|
||||||
|
@ -435,6 +435,8 @@ ALL_64_EMULATION_SOURCES = \
|
|||||||
eaarch64elf32.c \
|
eaarch64elf32.c \
|
||||||
eaarch64elfb.c \
|
eaarch64elfb.c \
|
||||||
eaarch64elf32b.c \
|
eaarch64elf32b.c \
|
||||||
|
eaarch64cloudabi.c \
|
||||||
|
eaarch64cloudabib.c \
|
||||||
eaarch64fbsd.c \
|
eaarch64fbsd.c \
|
||||||
eaarch64fbsdb.c \
|
eaarch64fbsdb.c \
|
||||||
eaarch64linux.c \
|
eaarch64linux.c \
|
||||||
@ -1618,6 +1620,14 @@ eaarch64elf32b.c: $(srcdir)/emulparams/aarch64elf32b.sh $(srcdir)/emulparams/aar
|
|||||||
$(ELF_DEPS) $(srcdir)/emultempl/aarch64elf.em \
|
$(ELF_DEPS) $(srcdir)/emultempl/aarch64elf.em \
|
||||||
$(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
|
$(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
|
||||||
|
|
||||||
|
eaarch64cloudabi.c: $(srcdir)/emulparams/aarch64cloudabi.sh \
|
||||||
|
$(ELF_DEPS) $(srcdir)/emultempl/aarch64elf.em \
|
||||||
|
$(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
|
||||||
|
|
||||||
|
eaarch64cloudabib.c: $(srcdir)/emulparams/aarch64cloudabib.sh $(srcdir)/emulparams/aarch64cloudabi.sh \
|
||||||
|
$(ELF_DEPS) $(srcdir)/emultempl/aarch64elf.em \
|
||||||
|
$(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
|
||||||
|
|
||||||
eaarch64fbsd.c: $(srcdir)/emulparams/aarch64fbsd.sh \
|
eaarch64fbsd.c: $(srcdir)/emulparams/aarch64fbsd.sh \
|
||||||
$(ELF_DEPS) $(srcdir)/emultempl/aarch64elf.em \
|
$(ELF_DEPS) $(srcdir)/emultempl/aarch64elf.em \
|
||||||
$(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
|
$(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
|
||||||
|
@ -764,6 +764,8 @@ ALL_64_EMULATION_SOURCES = \
|
|||||||
eaarch64elf32.c \
|
eaarch64elf32.c \
|
||||||
eaarch64elfb.c \
|
eaarch64elfb.c \
|
||||||
eaarch64elf32b.c \
|
eaarch64elf32b.c \
|
||||||
|
eaarch64cloudabi.c \
|
||||||
|
eaarch64cloudabib.c \
|
||||||
eaarch64fbsd.c \
|
eaarch64fbsd.c \
|
||||||
eaarch64fbsdb.c \
|
eaarch64fbsdb.c \
|
||||||
eaarch64linux.c \
|
eaarch64linux.c \
|
||||||
@ -3122,6 +3124,14 @@ eaarch64elf32b.c: $(srcdir)/emulparams/aarch64elf32b.sh $(srcdir)/emulparams/aar
|
|||||||
$(ELF_DEPS) $(srcdir)/emultempl/aarch64elf.em \
|
$(ELF_DEPS) $(srcdir)/emultempl/aarch64elf.em \
|
||||||
$(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
|
$(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
|
||||||
|
|
||||||
|
eaarch64cloudabi.c: $(srcdir)/emulparams/aarch64cloudabi.sh \
|
||||||
|
$(ELF_DEPS) $(srcdir)/emultempl/aarch64elf.em \
|
||||||
|
$(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
|
||||||
|
|
||||||
|
eaarch64cloudabib.c: $(srcdir)/emulparams/aarch64cloudabib.sh $(srcdir)/emulparams/aarch64cloudabi.sh \
|
||||||
|
$(ELF_DEPS) $(srcdir)/emultempl/aarch64elf.em \
|
||||||
|
$(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
|
||||||
|
|
||||||
eaarch64fbsd.c: $(srcdir)/emulparams/aarch64fbsd.sh \
|
eaarch64fbsd.c: $(srcdir)/emulparams/aarch64fbsd.sh \
|
||||||
$(ELF_DEPS) $(srcdir)/emultempl/aarch64elf.em \
|
$(ELF_DEPS) $(srcdir)/emultempl/aarch64elf.em \
|
||||||
$(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
|
$(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
|
||||||
|
@ -49,6 +49,8 @@ aarch64_be-*-elf) targ_emul=aarch64elfb
|
|||||||
targ_extra_emuls="aarch64elf aarch64elf32 aarch64elf32b armelfb armelf" ;;
|
targ_extra_emuls="aarch64elf aarch64elf32 aarch64elf32b armelfb armelf" ;;
|
||||||
aarch64-*-elf) targ_emul=aarch64elf
|
aarch64-*-elf) targ_emul=aarch64elf
|
||||||
targ_extra_emuls="aarch64elf32 aarch64elf32b aarch64elfb armelf armelfb" ;;
|
targ_extra_emuls="aarch64elf32 aarch64elf32b aarch64elfb armelf armelfb" ;;
|
||||||
|
aarch64-*-cloudabi*) targ_emul=aarch64cloudabi
|
||||||
|
targ_extra_emuls=aarch64cloudabib ;;
|
||||||
aarch64-*-freebsd*) targ_emul=aarch64fbsd
|
aarch64-*-freebsd*) targ_emul=aarch64fbsd
|
||||||
targ_extra_emuls="aarch64fbsdb aarch64elf" ;;
|
targ_extra_emuls="aarch64fbsdb aarch64elf" ;;
|
||||||
aarch64_be-*-linux*) targ_emul=aarch64linuxb
|
aarch64_be-*-linux*) targ_emul=aarch64linuxb
|
||||||
|
37
ld/emulparams/aarch64cloudabi.sh
Normal file
37
ld/emulparams/aarch64cloudabi.sh
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
ARCH=aarch64
|
||||||
|
MACHINE=
|
||||||
|
NOP=0
|
||||||
|
|
||||||
|
SCRIPT_NAME=elf
|
||||||
|
ELFSIZE=64
|
||||||
|
OUTPUT_FORMAT="elf64-littleaarch64-cloudabi"
|
||||||
|
BIG_OUTPUT_FORMAT="elf64-bigaarch64-cloudabi"
|
||||||
|
LITTLE_OUTPUT_FORMAT="elf64-littleaarch64-cloudabi"
|
||||||
|
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=24
|
||||||
|
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)} }"
|
2
ld/emulparams/aarch64cloudabib.sh
Normal file
2
ld/emulparams/aarch64cloudabib.sh
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
. ${srcdir}/emulparams/aarch64cloudabi.sh
|
||||||
|
OUTPUT_FORMAT="elf64-bigaarch64-cloudabi"
|
Loading…
x
Reference in New Issue
Block a user