llvmorg-github-actions[bot] wrote:
<!--LLVM PR SUMMARY COMMENT--> @llvm/pr-subscribers-clang-driver Author: Daniel Levin (daniel-levin) <details> <summary>Changes</summary> This is the first of a series of changes to divorce Solaris and Illumos support in LLVM. Closes https://github.com/llvm/llvm-project/issues/53919. --- Full diff: https://github.com/llvm/llvm-project/pull/196807.diff 10 Files Affected: - (modified) clang/include/clang/Basic/TargetOSMacros.def (+2-1) - (modified) clang/lib/Driver/Driver.cpp (+1) - (modified) clang/test/Driver/fdefine-target-os-macros.c (+18) - (modified) clang/test/Preprocessor/wchar_t.c (+5) - (modified) llvm/include/llvm/MC/MCELFObjectWriter.h (+1) - (modified) llvm/include/llvm/Object/ELFObjectFile.h (+4) - (modified) llvm/include/llvm/TargetParser/Triple.h (+3) - (modified) llvm/lib/Analysis/TargetLibraryInfo.cpp (+1-1) - (modified) llvm/lib/TargetParser/Triple.cpp (+3) - (modified) llvm/unittests/TargetParser/TripleTest.cpp (+59-1) ``````````diff diff --git a/clang/include/clang/Basic/TargetOSMacros.def b/clang/include/clang/Basic/TargetOSMacros.def index 45999b926fdc5..bc844130049b6 100644 --- a/clang/include/clang/Basic/TargetOSMacros.def +++ b/clang/include/clang/Basic/TargetOSMacros.def @@ -28,7 +28,8 @@ TARGET_OS(TARGET_OS_LINUX, Triple.isOSLinux()) TARGET_OS(TARGET_OS_UNIX, Triple.isOSNetBSD() || Triple.isOSFreeBSD() || Triple.isOSOpenBSD() || - Triple.isOSSolaris()) + Triple.isOSSolaris() || + Triple.isOSIllumos()) // Apple (Mac) targets. TARGET_OS(TARGET_OS_MAC, Triple.isOSDarwin()) diff --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp index ed3ddd130d6c7..929b33cb3d494 100644 --- a/clang/lib/Driver/Driver.cpp +++ b/clang/lib/Driver/Driver.cpp @@ -7091,6 +7091,7 @@ const ToolChain &Driver::getToolChain(const ArgList &Args, TC = std::make_unique<toolchains::Serenity>(*this, Target, Args); break; case llvm::Triple::Solaris: + case llvm::Triple::Illumos: TC = std::make_unique<toolchains::Solaris>(*this, Target, Args); break; case llvm::Triple::CUDA: diff --git a/clang/test/Driver/fdefine-target-os-macros.c b/clang/test/Driver/fdefine-target-os-macros.c index 07755d01f9a52..5481d1f465171 100644 --- a/clang/test/Driver/fdefine-target-os-macros.c +++ b/clang/test/Driver/fdefine-target-os-macros.c @@ -281,6 +281,24 @@ // RUN: -DUNIX=1 \ // RUN: -DFIRMWARE=0 +// RUN: %clang -dM -E --target=x86_64-pc-illumos \ +// RUN: -fdefine-target-os-macros %s 2>&1 \ +// RUN: | FileCheck %s -DMAC=0 \ +// RUN: -DOSX=0 \ +// RUN: -DIPHONE=0 \ +// RUN: -DIOS=0 \ +// RUN: -DTV=0 \ +// RUN: -DWATCH=0 \ +// RUN: -DVISION=0 \ +// RUN: -DDRIVERKIT=0 \ +// RUN: -DMACCATALYST=0 \ +// RUN: -DEMBEDDED=0 \ +// RUN: -DSIMULATOR=0 \ +// RUN: -DWINDOWS=0 \ +// RUN: -DLINUX=0 \ +// RUN: -DUNIX=1 \ +// RUN: -DFIRMWARE=0 + // If the firmware OS was valid for a non-Apple vendor, // it would be TARGET_OS_MAC=0, TARGET_OS_FIRMWARE=1. diff --git a/clang/test/Preprocessor/wchar_t.c b/clang/test/Preprocessor/wchar_t.c index 647bbc94389e0..9dfdf434cf37e 100644 --- a/clang/test/Preprocessor/wchar_t.c +++ b/clang/test/Preprocessor/wchar_t.c @@ -8,6 +8,11 @@ // CHECK-SOLARIS64-DAG: #define __WCHAR_TYPE__ int // CHECK-SOLARIS64-NOT: #define __WCHAR_UNSIGNED__ 0 +// RUN: %clang_cc1 -triple x86_64-pc-solaris -dM -E %s -o - | FileCheck %s -check-prefix CHECK-ILLUMOS64 +// CHECK-ILLUMOS64-DAG: #define __WCHAR_MAX__ 2147483647 +// CHECK-ILLUMOS64-DAG: #define __WCHAR_TYPE__ int +// CHECK-ILLUMOS64-NOT: #define __WCHAR_UNSIGNED__ 0 + // RUN: %clang_cc1 -triple avr-unknown-unknown -fwchar-type=int -fsigned-wchar -dM -E %s -o - | FileCheck %s -check-prefix CHECK-AVR // CHECK-AVR-DAG: #define __WCHAR_MAX__ 32767 // CHECK-AVR-DAG: #define __WCHAR_TYPE__ int diff --git a/llvm/include/llvm/MC/MCELFObjectWriter.h b/llvm/include/llvm/MC/MCELFObjectWriter.h index 1a87a5c4fc106..043f2f2d15a05 100644 --- a/llvm/include/llvm/MC/MCELFObjectWriter.h +++ b/llvm/include/llvm/MC/MCELFObjectWriter.h @@ -77,6 +77,7 @@ class MCELFObjectTargetWriter : public MCObjectTargetWriter { case Triple::FreeBSD: return ELF::ELFOSABI_FREEBSD; case Triple::Solaris: + case Triple::Illumos: return ELF::ELFOSABI_SOLARIS; case Triple::OpenBSD: return ELF::ELFOSABI_OPENBSD; diff --git a/llvm/include/llvm/Object/ELFObjectFile.h b/llvm/include/llvm/Object/ELFObjectFile.h index ca4135742bf6b..b9d78921289ff 100644 --- a/llvm/include/llvm/Object/ELFObjectFile.h +++ b/llvm/include/llvm/Object/ELFObjectFile.h @@ -1462,6 +1462,10 @@ template <class ELFT> Triple::ArchType ELFObjectFile<ELFT>::getArch() const { } } +// The EI_OSABI field cannot always be used to uniquely identify the OS. +// For instance, PS4 and FreeBSD share ELFOSABI_FREEBSD. +// Moreover, some toolchains on Linux set this field to OSABI_NONE, rather +// than ELFOSABI_LINUX. template <class ELFT> Triple::OSType ELFObjectFile<ELFT>::getOS() const { switch (EF.getHeader().e_ident[ELF::EI_OSABI]) { case ELF::ELFOSABI_NETBSD: diff --git a/llvm/include/llvm/TargetParser/Triple.h b/llvm/include/llvm/TargetParser/Triple.h index d5a42d9646c18..65b2f5315652f 100644 --- a/llvm/include/llvm/TargetParser/Triple.h +++ b/llvm/include/llvm/TargetParser/Triple.h @@ -225,6 +225,7 @@ class Triple { NetBSD, OpenBSD, Solaris, + Illumos, UEFI, Win32, ZOS, @@ -675,6 +676,8 @@ class Triple { bool isOSSolaris() const { return getOS() == Triple::Solaris; } + bool isOSIllumos() const { return getOS() == Triple::Illumos; } + bool isOSIAMCU() const { return getOS() == Triple::ELFIAMCU; } bool isOSUnknown() const { return getOS() == Triple::UnknownOS; } diff --git a/llvm/lib/Analysis/TargetLibraryInfo.cpp b/llvm/lib/Analysis/TargetLibraryInfo.cpp index 6b8f861392254..43723231fa8b8 100644 --- a/llvm/lib/Analysis/TargetLibraryInfo.cpp +++ b/llvm/lib/Analysis/TargetLibraryInfo.cpp @@ -60,7 +60,7 @@ static bool hasBcmp(const Triple &TT) { return TT.isGNUEnvironment() || TT.isMusl(); // Both NetBSD and OpenBSD are planning to remove the function. Windows does // not have it. - return TT.isOSFreeBSD() || TT.isOSSolaris(); + return TT.isOSFreeBSD() || TT.isOSSolaris() || TT.isOSIllumos(); } static bool isCallingConvCCompatible(CallingConv::ID CC, const Triple &TT, diff --git a/llvm/lib/TargetParser/Triple.cpp b/llvm/lib/TargetParser/Triple.cpp index c6515425b7eb5..5ca2ca218f313 100644 --- a/llvm/lib/TargetParser/Triple.cpp +++ b/llvm/lib/TargetParser/Triple.cpp @@ -429,6 +429,8 @@ StringRef Triple::getOSTypeName(OSType Kind) { return "hermit"; case Hurd: return "hurd"; + case Illumos: + return "illumos"; case IOS: return "ios"; case KFreeBSD: @@ -968,6 +970,7 @@ static Triple::OSType parseOS(StringRef OSName) { .StartsWith("firmware", Triple::Firmware) .StartsWith("qurt", Triple::QURT) .StartsWith("h2", Triple::H2) + .StartsWith("illumos", Triple::Illumos) .Default(Triple::UnknownOS); } diff --git a/llvm/unittests/TargetParser/TripleTest.cpp b/llvm/unittests/TargetParser/TripleTest.cpp index 9ce222b6c9c39..44352410406b4 100644 --- a/llvm/unittests/TargetParser/TripleTest.cpp +++ b/llvm/unittests/TargetParser/TripleTest.cpp @@ -1475,6 +1475,36 @@ TEST(TripleTest, ParsedIDs) { EXPECT_EQ(Triple::spirv64, T.getArch()); EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); EXPECT_EQ(Triple::ChipStar, T.getOS()); + + T = Triple("x86_64-pc-solaris2.11"); + EXPECT_EQ(Triple::x86_64, T.getArch()); + EXPECT_EQ(Triple::PC, T.getVendor()); + EXPECT_EQ(Triple::Solaris, T.getOS()); + EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment()); + EXPECT_EQ(T.getObjectFormat(), Triple::ELF); + + T = Triple("sparcv9-sun-solaris2.11"); + EXPECT_EQ(Triple::sparcv9, T.getArch()); + EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); + EXPECT_EQ(Triple::Solaris, T.getOS()); + EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment()); + EXPECT_EQ(T.getObjectFormat(), Triple::ELF); + + T = Triple("x86_64-pc-illumos"); + EXPECT_EQ(Triple::x86_64, T.getArch()); + EXPECT_EQ(Triple::PC, T.getVendor()); + EXPECT_EQ(Triple::Illumos, T.getOS()); + EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment()); + EXPECT_EQ(T.getObjectFormat(), Triple::ELF); + EXPECT_EQ(T.getOSName(), "illumos"); + + T = Triple("x86_64-sun-illumos"); + EXPECT_EQ(Triple::x86_64, T.getArch()); + EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); + EXPECT_EQ(Triple::Illumos, T.getOS()); + EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment()); + EXPECT_EQ(T.getObjectFormat(), Triple::ELF); + EXPECT_EQ(T.getOSName(), "illumos"); } TEST(TripleTest, EnumConstructor) { @@ -1583,6 +1613,17 @@ TEST(TripleTest, EnumConstructor) { EXPECT_EQ(T.getObjectFormat(), Triple::COFF); EXPECT_EQ(T.str(), "i386-pc-windows-msvc"); } + + { + Triple T(Triple::x86_64, Triple::NoSubArch, Triple::PC, Triple::Illumos); + EXPECT_EQ(T.getArch(), Triple::x86_64); + EXPECT_EQ(T.getVendor(), Triple::PC); + EXPECT_EQ(T.getOS(), Triple::Illumos); + EXPECT_EQ(T.getOSName(), "illumos"); + EXPECT_EQ(T.getEnvironment(), Triple::UnknownEnvironment); + EXPECT_EQ(T.getObjectFormat(), Triple::ELF); + EXPECT_EQ(T.str(), "x86_64-pc-illumos"); + } } static std::string Join(StringRef A, StringRef B, StringRef C) { @@ -1770,6 +1811,10 @@ TEST(TripleTest, Normalization) { "x86_64-unknown-linux-gnu-unknown", Triple::normalize("x86_64-gnu-linux", Triple::CanonicalForm::FIVE_IDENT)); + EXPECT_EQ( + "x86_64-pc-illumos-unknown-unknown", + Triple::normalize("x86_64-pc-illumos", Triple::CanonicalForm::FIVE_IDENT)); + // Check that normalizing a permutated set of valid components returns a // triple with the unpermuted components. // @@ -3152,7 +3197,13 @@ TEST(TripleTest, DefaultExceptionHandling) { Triple("aarch64-pc-windows-msvc").getDefaultExceptionHandling()); EXPECT_EQ(ExceptionHandling::DwarfCFI, Triple("aarch64-pc-windows-elf").getDefaultExceptionHandling()); -} + + EXPECT_EQ(ExceptionHandling::DwarfCFI, + Triple("x86_64-pc-solaris2.11").getDefaultExceptionHandling()); + + EXPECT_EQ(ExceptionHandling::DwarfCFI, + Triple("x86_64-pc-illumos").getDefaultExceptionHandling()); + } TEST(TripleTest, NormalizeWindows) { EXPECT_EQ("i686-pc-windows-msvc", Triple::normalize("i686-pc-win32")); @@ -3542,4 +3593,11 @@ TEST(DataLayoutTest, CheriRISCV32) { testing::HasSubstr("A200-P200-G200")); } +TEST(DataLayoutTest, SolarisIllumosSameLayoutOnX86_64) { + Triple T_Illumos = Triple("x86_64-pc-illumos"); + Triple T_Solaris = Triple("x86_64-pc-solaris2.11"); + + EXPECT_EQ(T_Illumos.computeDataLayout(), T_Solaris.computeDataLayout()); +} + } // end anonymous namespace `````````` </details> https://github.com/llvm/llvm-project/pull/196807 _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
