[PATCH] Add support for Nuxi CloudABI
Ed Schouten
ed@nuxi.nl
Thu Mar 26 13:58:00 GMT 2015
Hello all,
The last couple of months my company been working on a system called
CloudABI. To summarize, it is a POSIX-like system purely built on the
concepts of capability-based security, similar to FreeBSD's Capsicum.
More details can be found here:
https://github.com/NuxiNL/cloudlibc
CloudABI has its own ELFOSABI constant that has been allocated by
SCO/Caldera, ELFOSABI_CLOUDABI, having value 17.
Attached is a small patch for Binutils to add support for this target.
The changes from config.sub have already been upstreamed:
http://git.savannah.gnu.org/gitweb/?p=config.git;a=commit;h=37d9d9d48e410d718ddeced7ffb605111780ea91
Essentially there is no need to modify Binutils to support CloudABI,
apart from modifying the linker to use a different ELFOSABI in the
generated executables. The code for this is mostly identical to how
this is done for FreeBSD.
Best regards,
--
Ed Schouten <ed@nuxi.nl>
-------------- next part --------------
diff --git a/bfd/config.bfd b/bfd/config.bfd
index b79c711..4799da8 100644
--- a/bfd/config.bfd
+++ b/bfd/config.bfd
@@ -645,6 +645,10 @@ case "${targ}" in
targ_archs="$targ_archs bfd_arm_arch"
;;
#ifdef BFD64
+ x86_64-*-cloudabi*)
+ targ_defvec=x86_64_elf64_cloudabi_vec
+ want64=true
+ ;;
x86_64-*-darwin*)
targ_defvec=x86_64_mach_o_vec
targ_selvecs="i386_mach_o_vec mach_o_le_vec mach_o_be_vec mach_o_fat_vec pef_vec pef_xlib_vec sym_vec"
diff --git a/bfd/configure.ac b/bfd/configure.ac
index a1b2035..8ac36de 100644
--- a/bfd/configure.ac
+++ b/bfd/configure.ac
@@ -1008,6 +1008,7 @@ do
x86_64_elf32_vec) tb="$tb elf64-x86-64.lo elf-ifunc.lo elf-nacl.lo elf64.lo elf32.lo $elf"; target_size=64 ;;
x86_64_elf32_nacl_vec) tb="$tb elf64-x86-64.lo elf-ifunc.lo elf-nacl.lo elf64.lo elf32.lo $elf"; target_size=64 ;;
x86_64_elf64_vec) tb="$tb elf64-x86-64.lo elf-ifunc.lo elf-nacl.lo elf64.lo $elf"; target_size=64 ;;
+ x86_64_elf64_cloudabi_vec) tb="$tb elf64-x86-64.lo elf-ifunc.lo elf-nacl.lo elf64.lo $elf"; target_size=64 ;;
x86_64_elf64_fbsd_vec) tb="$tb elf64-x86-64.lo elf-ifunc.lo elf-nacl.lo elf64.lo $elf"; target_size=64 ;;
x86_64_elf64_nacl_vec) tb="$tb elf64-x86-64.lo elf-ifunc.lo elf-nacl.lo elf64.lo $elf"; target_size=64 ;;
x86_64_elf64_sol2_vec) tb="$tb elf64-x86-64.lo elf-ifunc.lo elf-nacl.lo elf64.lo $elf"; target_size=64 ;;
diff --git a/bfd/elf64-x86-64.c b/bfd/elf64-x86-64.c
index 74d1d06..ab72306 100644
--- a/bfd/elf64-x86-64.c
+++ b/bfd/elf64-x86-64.c
@@ -5927,6 +5927,21 @@ static const struct bfd_elf_special_section
#include "elf64-target.h"
+/* CloudABI support. */
+
+#undef TARGET_LITTLE_SYM
+#define TARGET_LITTLE_SYM x86_64_elf64_cloudabi_vec
+#undef TARGET_LITTLE_NAME
+#define TARGET_LITTLE_NAME "elf64-x86-64-cloudabi"
+
+#undef ELF_OSABI
+#define ELF_OSABI ELFOSABI_CLOUDABI
+
+#undef elf64_bed
+#define elf64_bed elf64_x86_64_cloudabi_bed
+
+#include "elf64-target.h"
+
/* FreeBSD support. */
#undef TARGET_LITTLE_SYM
diff --git a/bfd/targets.c b/bfd/targets.c
index 9b5458e..2319d23 100644
--- a/bfd/targets.c
+++ b/bfd/targets.c
@@ -885,6 +885,7 @@ extern const bfd_target x86_64_coff_vec;
extern const bfd_target x86_64_elf32_vec;
extern const bfd_target x86_64_elf32_nacl_vec;
extern const bfd_target x86_64_elf64_vec;
+extern const bfd_target x86_64_elf64_cloudabi_vec;
extern const bfd_target x86_64_elf64_fbsd_vec;
extern const bfd_target x86_64_elf64_nacl_vec;
extern const bfd_target x86_64_elf64_sol2_vec;
@@ -1402,6 +1403,7 @@ static const bfd_target * const _bfd_target_vector[] =
&x86_64_elf32_vec,
&x86_64_elf32_nacl_vec,
&x86_64_elf64_vec,
+ &x86_64_elf64_cloudabi_vec,
&x86_64_elf64_fbsd_vec,
&x86_64_elf64_nacl_vec,
&x86_64_elf64_sol2_vec,
diff --git a/config.sub b/config.sub
index 6d2e94c..cb1e0c7 100755
--- a/config.sub
+++ b/config.sub
@@ -1373,7 +1373,7 @@ case $os in
| -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \
| -sym* | -kopensolaris* | -plan9* \
| -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
- | -aos* | -aros* \
+ | -aos* | -aros* | -cloudabi* \
| -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
| -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
| -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \
diff --git a/gas/configure.tgt b/gas/configure.tgt
index bfff2d7..7969970 100644
--- a/gas/configure.tgt
+++ b/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 ;;
diff --git a/include/elf/common.h b/include/elf/common.h
index 70778bf..0c7a530 100644
--- a/include/elf/common.h
+++ b/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 /* CloudABI */
#define ELFOSABI_C6000_ELFABI 64 /* Bare-metal TMS320C6000 */
#define ELFOSABI_C6000_LINUX 65 /* Linux TMS320C6000 */
#define ELFOSABI_ARM 97 /* ARM */
diff --git a/ld/Makefile.am b/ld/Makefile.am
index 22b0419..474fc07 100644
--- a/ld/Makefile.am
+++ b/ld/Makefile.am
@@ -483,6 +483,7 @@ ALL_64_EMULATION_SOURCES = \
eelf_k1om.c \
eelf_k1om_fbsd.c \
eelf_x86_64.c \
+ eelf_x86_64_cloudabi.c \
eelf_x86_64_fbsd.c \
eelf_x86_64_nacl.c \
eelf_x86_64_sol2.c \
@@ -1938,6 +1939,10 @@ eelf_k1om_fbsd.c: $(srcdir)/emulparams/elf_k1om_fbsd.sh \
eelf_x86_64.c: $(srcdir)/emulparams/elf_x86_64.sh \
$(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+eelf_x86_64_cloudabi.c: $(srcdir)/emulparams/elf_x86_64_cloudabi.sh \
+ $(srcdir)/emulparams/elf_x86_64.sh \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+
eelf_x86_64_fbsd.c: $(srcdir)/emulparams/elf_x86_64_fbsd.sh \
$(srcdir)/emulparams/elf_x86_64.sh \
$(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
diff --git a/ld/configure.tgt b/ld/configure.tgt
index a46fbca..4b967fe 100644
--- a/ld/configure.tgt
+++ b/ld/configure.tgt
@@ -228,6 +228,7 @@ i[3-7]86-*-rtems*) targ_emul=elf_i386 ;;
i[3-7]86-*-aros*) targ_emul=elf_i386 ;;
i[3-7]86-*-rdos*) targ_emul=elf_i386 ;;
x86_64-*-rdos*) targ_emul=elf64rdos ;;
+x86_64-*-cloudabi*) targ_emul=elf_x86_64_cloudabi ;;
i[3-7]86-*-bsd) targ_emul=i386bsd ;;
i[3-7]86-*-bsd386) targ_emul=i386bsd ;;
i[3-7]86-*-bsdi*) targ_emul=i386bsd ;;
More information about the Binutils
mailing list