Commit d1f2ce58 authored by ed's avatar ed
Browse files

Introduce Binutils for CloudABI on aarch64.

When I added the first copy of the CloudABI toolchain to the Ports tree,
I assumed that it would be easily possible to have a single Binutils
port that would support all of the architectures of interest. It seems
that this is not really supported, or simply awkward to use.

Let's just rename the cloudabi-binutils port to cloudabi-binutils-x86_64
and add an additional cloudabi-binutils-aarch64.

Reviewed by:	emaste
Approved by:	bapt
Differential Revision:	https://reviews.freebsd.org/D3919
parent 5c646a2d
...@@ -7895,3 +7895,4 @@ x11/nvidia-driver-173||2015-10-13|Does not support xorg-server 1.15 and higher ...@@ -7895,3 +7895,4 @@ x11/nvidia-driver-173||2015-10-13|Does not support xorg-server 1.15 and higher
net-mgmt/bsnmptools||2015-10-16|Has expired: client tools (including SNMPv3 support) are part of the base system net-mgmt/bsnmptools||2015-10-16|Has expired: client tools (including SNMPv3 support) are part of the base system
security/yubikey-personalization|security/ykpers|2015-10-18|Port duplicate with security/ykpers security/yubikey-personalization|security/ykpers|2015-10-18|Port duplicate with security/ykpers
devel/rubygem-listen2||2015-10-20|Has expired: not used by other ports anymore devel/rubygem-listen2||2015-10-20|Has expired: not used by other ports anymore
devel/cloudabi-binutils|devel/cloudabi-binutils-x86_64|2015-10-21|CloudABI now supports aarch64 as well
...@@ -257,7 +257,8 @@ ...@@ -257,7 +257,8 @@
SUBDIR += clinfo SUBDIR += clinfo
SUBDIR += clisp-hyperspec SUBDIR += clisp-hyperspec
SUBDIR += clojure-cider SUBDIR += clojure-cider
SUBDIR += cloudabi-binutils SUBDIR += cloudabi-binutils-aarch64
SUBDIR += cloudabi-binutils-x86_64
SUBDIR += cloudabi-toolchain SUBDIR += cloudabi-toolchain
SUBDIR += cmake SUBDIR += cmake
SUBDIR += cmake-fedora SUBDIR += cmake-fedora
......
# Created by: Ed Schouten <ed@FreeBSD.org>
# $FreeBSD$
PKGNAMEPREFIX= cloudabi-
PKGNAMESUFFIX= -aarch64
MAINTAINER= ed@FreeBSD.org
COMMENT= GNU Binutils for CloudABI cross-development
MASTERDIR= ${.CURDIR}/../binutils
PATCHDIR= ${.CURDIR}/files
PLIST= ${.CURDIR}/pkg-plist
BUTARGET= aarch64-unknown-cloudabi
.include "${MASTERDIR}/Makefile"
--- bfd/config.bfd
+++ bfd/config.bfd
@@ -177,6 +177,11 @@
targ_selvecs="aarch64_elf64_le_vec aarch64_elf32_le_vec aarch64_elf32_be_vec arm_elf32_be_vec arm_elf32_le_vec"
want64=true
;;
+ aarch64-*-cloudabi*)
+ targ_defvec=aarch64_elf64_le_cloudabi_vec
+ targ_selvecs=aarch64_elf64_be_cloudabi_vec
+ want64=true
+ ;;
aarch64-*-linux*)
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"
--- bfd/configure
+++ bfd/configure
@@ -15288,7 +15288,9 @@
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_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_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 ecofflink.lo"; 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 ;;
--- bfd/elfnn-aarch64.c
+++ bfd/elfnn-aarch64.c
@@ -8061,3 +8061,22 @@
#define elf_backend_obj_attrs_section ".ARM.attributes"
#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"
--- bfd/targets.c
+++ bfd/targets.c
@@ -563,7 +563,9 @@
extern const bfd_target aarch64_elf32_be_vec;
extern const bfd_target aarch64_elf32_le_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_cloudabi_vec;
extern const bfd_target alpha_ecoff_le_vec;
extern const bfd_target alpha_elf64_vec;
extern const bfd_target alpha_elf64_fbsd_vec;
@@ -938,7 +940,9 @@
&aarch64_elf32_be_vec,
&aarch64_elf32_le_vec,
&aarch64_elf64_be_vec,
+ &aarch64_elf64_be_cloudabi_vec,
&aarch64_elf64_le_vec,
+ &aarch64_elf64_le_cloudabi_vec,
#endif
#ifdef BFD64
--- gas/configure.tgt
+++ gas/configure.tgt
@@ -470,6 +470,7 @@ case ${generic_target} in
z8k-*-coff | z8k-*-sim) fmt=coff ;;
*-*-aout | *-*-scout) fmt=aout ;;
+ *-*-cloudabi*) fmt=elf ;;
*-*-dragonfly*) fmt=elf em=dragonfly ;;
*-*-freebsd* | *-*-kfreebsd*-gnu) fmt=elf em=freebsd ;;
*-*-bsd*) fmt=aout em=sun3 ;;
--- include/elf/common.h
+++ include/elf/common.h
@@ -73,6 +73,7 @@
#define ELFOSABI_NSK 14 /* Hewlett-Packard Non-Stop Kernel */
#define ELFOSABI_AROS 15 /* AROS */
#define ELFOSABI_FENIXOS 16 /* FenixOS */
+#define ELFOSABI_CLOUDABI 17 /* Nuxi CloudABI */
#define ELFOSABI_C6000_ELFABI 64 /* Bare-metal TMS320C6000 */
#define ELFOSABI_C6000_LINUX 65 /* Linux TMS320C6000 */
#define ELFOSABI_ARM 97 /* ARM */
--- ld/Makefile.in
+++ ld/Makefile.in
@@ -727,6 +727,8 @@
eaarch64elf32.c \
eaarch64elfb.c \
eaarch64elf32b.c \
+ eaarch64cloudabi.c \
+ eaarch64cloudabib.c \
eaarch64linux.c \
eaarch64linuxb.c \
eaarch64linux32.c \
@@ -3001,6 +3003,14 @@
$(ELF_DEPS) $(srcdir)/emultempl/aarch64elf.em \
$(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}
+
eaarch64linux.c: $(srcdir)/emulparams/aarch64linux.sh \
$(ELF_DEPS) $(srcdir)/emultempl/aarch64elf.em \
$(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
--- ld/configure.tgt
+++ ld/configure.tgt
@@ -49,6 +49,8 @@
targ_extra_emuls="aarch64elf aarch64elf32 aarch64elf32b armelfb armelf" ;;
aarch64-*-elf) targ_emul=aarch64elf
targ_extra_emuls="aarch64elf32 aarch64elf32b aarch64elfb armelf armelfb" ;;
+aarch64-*-cloudabi*) targ_emul=aarch64cloudabi
+ targ_extra_emuls=aarch64cloudabib ;;
aarch64_be-*-linux*) targ_emul=aarch64linuxb
targ_extra_libpath="aarch64linux aarch64linux32 aarch64linux32b armelfb_linux_eabi armelf_linux_eabi"
targ_extra_emuls="aarch64elfb aarch64elf aarch64elf32 aarch64elf32b armelfb armelf $targ_extra_libpath" ;;
--- ld/emulparams/aarch64cloudabi.sh
+++ ld/emulparams/aarch64cloudabi.sh
@@ -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)} }"
--- ld/emulparams/aarch64cloudabib.sh
+++ ld/emulparams/aarch64cloudabib.sh
@@ -0,0 +1,2 @@
+. ${srcdir}/emulparams/aarch64cloudabi.sh
+OUTPUT_FORMAT="elf64-bigaarch64-cloudabi"
bin/aarch64-unknown-cloudabi-addr2line
bin/aarch64-unknown-cloudabi-ar
bin/aarch64-unknown-cloudabi-as
bin/aarch64-unknown-cloudabi-c++filt
bin/aarch64-unknown-cloudabi-elfedit
bin/aarch64-unknown-cloudabi-gprof
bin/aarch64-unknown-cloudabi-ld
bin/aarch64-unknown-cloudabi-ld.bfd
bin/aarch64-unknown-cloudabi-nm
bin/aarch64-unknown-cloudabi-objcopy
bin/aarch64-unknown-cloudabi-objdump
bin/aarch64-unknown-cloudabi-ranlib
bin/aarch64-unknown-cloudabi-readelf
bin/aarch64-unknown-cloudabi-size
bin/aarch64-unknown-cloudabi-strings
bin/aarch64-unknown-cloudabi-strip
man/man1/aarch64-unknown-cloudabi-addr2line.1.gz
man/man1/aarch64-unknown-cloudabi-ar.1.gz
man/man1/aarch64-unknown-cloudabi-as.1.gz
man/man1/aarch64-unknown-cloudabi-c++filt.1.gz
man/man1/aarch64-unknown-cloudabi-dlltool.1.gz
man/man1/aarch64-unknown-cloudabi-elfedit.1.gz
man/man1/aarch64-unknown-cloudabi-gprof.1.gz
man/man1/aarch64-unknown-cloudabi-ld.1.gz
man/man1/aarch64-unknown-cloudabi-nlmconv.1.gz
man/man1/aarch64-unknown-cloudabi-nm.1.gz
man/man1/aarch64-unknown-cloudabi-objcopy.1.gz
man/man1/aarch64-unknown-cloudabi-objdump.1.gz
man/man1/aarch64-unknown-cloudabi-ranlib.1.gz
man/man1/aarch64-unknown-cloudabi-readelf.1.gz
man/man1/aarch64-unknown-cloudabi-size.1.gz
man/man1/aarch64-unknown-cloudabi-strings.1.gz
man/man1/aarch64-unknown-cloudabi-strip.1.gz
man/man1/aarch64-unknown-cloudabi-windmc.1.gz
man/man1/aarch64-unknown-cloudabi-windres.1.gz
aarch64-unknown-cloudabi/lib/ldscripts/aarch64cloudabi.x
aarch64-unknown-cloudabi/lib/ldscripts/aarch64cloudabi.xbn
aarch64-unknown-cloudabi/lib/ldscripts/aarch64cloudabi.xc
aarch64-unknown-cloudabi/lib/ldscripts/aarch64cloudabi.xd
aarch64-unknown-cloudabi/lib/ldscripts/aarch64cloudabi.xdc
aarch64-unknown-cloudabi/lib/ldscripts/aarch64cloudabi.xdw
aarch64-unknown-cloudabi/lib/ldscripts/aarch64cloudabi.xn
aarch64-unknown-cloudabi/lib/ldscripts/aarch64cloudabi.xr
aarch64-unknown-cloudabi/lib/ldscripts/aarch64cloudabi.xs
aarch64-unknown-cloudabi/lib/ldscripts/aarch64cloudabi.xsc
aarch64-unknown-cloudabi/lib/ldscripts/aarch64cloudabi.xsw
aarch64-unknown-cloudabi/lib/ldscripts/aarch64cloudabi.xu
aarch64-unknown-cloudabi/lib/ldscripts/aarch64cloudabi.xw
aarch64-unknown-cloudabi/lib/ldscripts/aarch64cloudabib.x
aarch64-unknown-cloudabi/lib/ldscripts/aarch64cloudabib.xbn
aarch64-unknown-cloudabi/lib/ldscripts/aarch64cloudabib.xc
aarch64-unknown-cloudabi/lib/ldscripts/aarch64cloudabib.xd
aarch64-unknown-cloudabi/lib/ldscripts/aarch64cloudabib.xdc
aarch64-unknown-cloudabi/lib/ldscripts/aarch64cloudabib.xdw
aarch64-unknown-cloudabi/lib/ldscripts/aarch64cloudabib.xn
aarch64-unknown-cloudabi/lib/ldscripts/aarch64cloudabib.xr
aarch64-unknown-cloudabi/lib/ldscripts/aarch64cloudabib.xs
aarch64-unknown-cloudabi/lib/ldscripts/aarch64cloudabib.xsc
aarch64-unknown-cloudabi/lib/ldscripts/aarch64cloudabib.xsw
aarch64-unknown-cloudabi/lib/ldscripts/aarch64cloudabib.xu
aarch64-unknown-cloudabi/lib/ldscripts/aarch64cloudabib.xw
aarch64-unknown-cloudabi/bin/ar
aarch64-unknown-cloudabi/bin/as
aarch64-unknown-cloudabi/bin/ld
aarch64-unknown-cloudabi/bin/ld.bfd
aarch64-unknown-cloudabi/bin/nm
aarch64-unknown-cloudabi/bin/objcopy
aarch64-unknown-cloudabi/bin/objdump
aarch64-unknown-cloudabi/bin/ranlib
aarch64-unknown-cloudabi/bin/size
aarch64-unknown-cloudabi/bin/strip
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
# $FreeBSD$ # $FreeBSD$
PKGNAMEPREFIX= cloudabi- PKGNAMEPREFIX= cloudabi-
PORTREVISION= 1 PKGNAMESUFFIX= -x86_64
MAINTAINER= ed@FreeBSD.org MAINTAINER= ed@FreeBSD.org
COMMENT= GNU Binutils for CloudABI cross-development COMMENT= GNU Binutils for CloudABI cross-development
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
# $FreeBSD$ # $FreeBSD$
PORTNAME= cloudabi-toolchain PORTNAME= cloudabi-toolchain
PORTVERSION= 1.1 PORTVERSION= 1.2
CATEGORIES= devel CATEGORIES= devel
MAINTAINER= ed@FreeBSD.org MAINTAINER= ed@FreeBSD.org
...@@ -12,7 +12,8 @@ USES= metaport ...@@ -12,7 +12,8 @@ USES= metaport
LIBDIR= ${LOCALBASE}/x86_64-unknown-cloudabi/lib LIBDIR= ${LOCALBASE}/x86_64-unknown-cloudabi/lib
RUN_DEPENDS+= x86_64-unknown-cloudabi-ar:${PORTSDIR}/devel/cloudabi-binutils \ RUN_DEPENDS+= aarch64-unknown-cloudabi-ld:${PORTSDIR}/devel/cloudabi-binutils-aarch64 \
x86_64-unknown-cloudabi-ld:${PORTSDIR}/devel/cloudabi-binutils-x86_64 \
x86_64-unknown-cloudabi-cc:${PORTSDIR}/lang/cloudabi-clang x86_64-unknown-cloudabi-cc:${PORTSDIR}/lang/cloudabi-clang
.include <bsd.port.mk> .include <bsd.port.mk>
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
PORTNAME= cloudabi-clang PORTNAME= cloudabi-clang
PORTVERSION= 3.7 PORTVERSION= 3.7
PORTREVISION= 1 PORTREVISION= 2
CATEGORIES= lang CATEGORIES= lang
MASTER_SITES= # None MASTER_SITES= # None
DISTFILES= # None DISTFILES= # None
...@@ -14,7 +14,8 @@ COMMENT= Clang for CloudABI ...@@ -14,7 +14,8 @@ COMMENT= Clang for CloudABI
LICENSE= MIT LICENSE= MIT
RUN_DEPENDS= clang${LLVM_SUFFIX}:${PORTSDIR}/devel/llvm${LLVM_SUFFIX} \ RUN_DEPENDS= clang${LLVM_SUFFIX}:${PORTSDIR}/devel/llvm${LLVM_SUFFIX} \
x86_64-unknown-cloudabi-ld:${PORTSDIR}/devel/cloudabi-binutils aarch64-unknown-cloudabi-ld:${PORTSDIR}/devel/cloudabi-binutils-aarch64 \
x86_64-unknown-cloudabi-ld:${PORTSDIR}/devel/cloudabi-binutils-x86_64
LLVM_SUFFIX= ${DISTVERSION:S/.//} LLVM_SUFFIX= ${DISTVERSION:S/.//}
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment