Add support for Nuxi CloudABI.
authorEd Schouten <ed@80386.nl>
Mon, 9 Mar 2015 18:40:45 +0000 (18:40 +0000)
committerEd Schouten <ed@80386.nl>
Mon, 9 Mar 2015 18:40:45 +0000 (18:40 +0000)
CloudABI is a POSIX-like runtime environment built around the concept of
capability-based security. More details:

https://github.com/NuxiNL/cloudlibc

CloudABI uses its own ELFOSABI number. This number has been allocated by
the maintainers of ELF a couple of days ago.

Reviewed by: echristo

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@231681 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/ADT/Triple.h
include/llvm/MC/MCELFObjectWriter.h
include/llvm/Support/ELF.h
lib/Object/ELFYAML.cpp
lib/Support/Triple.cpp
tools/llvm-readobj/ELFDumper.cpp
unittests/ADT/TripleTest.cpp

index 886f6fb2924ab1dc9dd8fb0b9cf871b307ab1501..535e0cca1a4205c3f1ca165600c7f847b65c5a18 100644 (file)
@@ -120,6 +120,7 @@ public:
   enum OSType {
     UnknownOS,
 
+    CloudABI,
     Darwin,
     DragonFly,
     FreeBSD,
index 9763635b11e92c98c877eeacbb712f28d55c63d2..7493507bd1689471c598bfe9aac6a53a77412a5f 100644 (file)
@@ -41,6 +41,8 @@ protected:
 public:
   static uint8_t getOSABI(Triple::OSType OSType) {
     switch (OSType) {
+      case Triple::CloudABI:
+        return ELF::ELFOSABI_CLOUDABI;
       case Triple::PS4:
       case Triple::FreeBSD:
         return ELF::ELFOSABI_FREEBSD;
index fc6f314433a6f9feede62dbf67474e48f49fc6b2..d7f1533aa3ebe528ed5299299f84240621443093 100644 (file)
@@ -344,6 +344,7 @@ enum {
   ELFOSABI_NSK = 14,          // Hewlett-Packard Non-Stop Kernel
   ELFOSABI_AROS = 15,         // AROS
   ELFOSABI_FENIXOS = 16,      // FenixOS
+  ELFOSABI_CLOUDABI = 17,     // Nuxi CloudABI
   ELFOSABI_C6000_ELFABI = 64, // Bare-metal TMS320C6000
   ELFOSABI_C6000_LINUX = 65,  // Linux TMS320C6000
   ELFOSABI_ARM = 97,          // ARM
index cce05cf7124fc0caedbf0748cfb6199a833013ae..19527e2d040dd72dc300da21e5f471d92c3d1092 100644 (file)
@@ -235,6 +235,7 @@ void ScalarEnumerationTraits<ELFYAML::ELF_ELFOSABI>::enumeration(
   ECase(ELFOSABI_NSK)
   ECase(ELFOSABI_AROS)
   ECase(ELFOSABI_FENIXOS)
+  ECase(ELFOSABI_CLOUDABI)
   ECase(ELFOSABI_C6000_ELFABI)
   ECase(ELFOSABI_C6000_LINUX)
   ECase(ELFOSABI_ARM)
index 33472e51d17a4a7b1082daafd4cae12ca560926f..59a7ba148269585d72382d37a7c01e0ff025592d 100644 (file)
@@ -141,6 +141,7 @@ const char *Triple::getOSTypeName(OSType Kind) {
   switch (Kind) {
   case UnknownOS: return "unknown";
 
+  case CloudABI: return "cloudabi";
   case Darwin: return "darwin";
   case DragonFly: return "dragonfly";
   case FreeBSD: return "freebsd";
@@ -345,6 +346,7 @@ static Triple::VendorType parseVendor(StringRef VendorName) {
 
 static Triple::OSType parseOS(StringRef OSName) {
   return StringSwitch<Triple::OSType>(OSName)
+    .StartsWith("cloudabi", Triple::CloudABI)
     .StartsWith("darwin", Triple::Darwin)
     .StartsWith("dragonfly", Triple::DragonFly)
     .StartsWith("freebsd", Triple::FreeBSD)
index e4b760172a34b72861004a7a6ee9af709d4d9717..39fb065810f9048f3409adaa8c1e69948df30ad8 100644 (file)
@@ -207,6 +207,7 @@ static const EnumEntry<unsigned> ElfOSABI[] = {
   { "NSK",          ELF::ELFOSABI_NSK          },
   { "AROS",         ELF::ELFOSABI_AROS         },
   { "FenixOS",      ELF::ELFOSABI_FENIXOS      },
+  { "CloudABI",     ELF::ELFOSABI_CLOUDABI     },
   { "C6000_ELFABI", ELF::ELFOSABI_C6000_ELFABI },
   { "C6000_LINUX" , ELF::ELFOSABI_C6000_LINUX  },
   { "ARM",          ELF::ELFOSABI_ARM          },
index 1f9aa32aeab01bfbf019d10f2d7cd9b53c731218..230f2ab7e1e7331ae7f05452f60550db0f9cc9f0 100644 (file)
@@ -159,6 +159,12 @@ TEST(TripleTest, ParsedIDs) {
   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
   EXPECT_EQ(Triple::UnknownOS, T.getOS());
 
+  T = Triple("x86_64-unknown-cloudabi");
+  EXPECT_EQ(Triple::x86_64, T.getArch());
+  EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
+  EXPECT_EQ(Triple::CloudABI, T.getOS());
+  EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
+
   T = Triple("huh");
   EXPECT_EQ(Triple::UnknownArch, T.getArch());
 }