https://github.com/Prabhuk updated https://github.com/llvm/llvm-project/pull/162950
>From 8a39f9b18a94628a8edcfd3a176427cd31aec0c8 Mon Sep 17 00:00:00 2001 From: prabhukr <[email protected]> Date: Fri, 10 Oct 2025 15:51:51 -0700 Subject: [PATCH 1/3] [UEFI] Aarch64 support front-end changes. We have a MVP x86_64 UEFI target triple support. Now adding support for Aarch64. --- clang/lib/Basic/Targets.cpp | 2 ++ clang/lib/Basic/Targets/AArch64.cpp | 29 +++++++++++++++++ clang/lib/Basic/Targets/AArch64.h | 31 +++++++++++++++++++ clang/lib/Driver/Driver.cpp | 6 ++-- clang/lib/Driver/ToolChains/Clang.cpp | 21 +++++++++++-- clang/lib/Driver/ToolChains/CommonArgs.cpp | 5 ++- .../Driver/aarch64-uefi-constructed-args.c | 19 ++++++++++++ clang/test/Driver/unsupported-target-arch.c | 6 ---- llvm/include/llvm/TargetParser/Triple.h | 3 ++ llvm/lib/TargetParser/AArch64TargetParser.cpp | 2 +- 10 files changed, 111 insertions(+), 13 deletions(-) create mode 100644 clang/test/Driver/aarch64-uefi-constructed-args.c diff --git a/clang/lib/Basic/Targets.cpp b/clang/lib/Basic/Targets.cpp index d9aafc6c75d3b..701194a9fad93 100644 --- a/clang/lib/Basic/Targets.cpp +++ b/clang/lib/Basic/Targets.cpp @@ -175,6 +175,8 @@ std::unique_ptr<TargetInfo> AllocateTarget(const llvm::Triple &Triple, case llvm::Triple::Hurd: return std::make_unique<HurdTargetInfo<AArch64leTargetInfo>>(Triple, Opts); + case llvm::Triple::UEFI: + return std::make_unique<UEFIAArch64TargetInfo>(Triple, Opts); case llvm::Triple::Win32: switch (Triple.getEnvironment()) { case llvm::Triple::GNU: diff --git a/clang/lib/Basic/Targets/AArch64.cpp b/clang/lib/Basic/Targets/AArch64.cpp index 9e03a0846ffba..2bd8f3b4ab527 100644 --- a/clang/lib/Basic/Targets/AArch64.cpp +++ b/clang/lib/Basic/Targets/AArch64.cpp @@ -1772,6 +1772,35 @@ MinGWARM64TargetInfo::MinGWARM64TargetInfo(const llvm::Triple &Triple, TheCXXABI.set(TargetCXXABI::GenericAArch64); } +TargetInfo::BuiltinVaListKind +UEFIAArch64TargetInfo::getBuiltinVaListKind() const { + return TargetInfo::CharPtrBuiltinVaList; +} + +void UEFIAArch64TargetInfo::getTargetDefines(const LangOptions &Opts, + MacroBuilder &Builder) const { + AArch64leTargetInfo::getTargetDefines(Opts, Builder); + Builder.defineMacro("_M_ARM64", "1"); +} + +TargetInfo::CallingConvCheckResult +UEFIAArch64TargetInfo::checkCallingConvention(CallingConv CC) const { + switch (CC) { + case CC_C: + case CC_PreserveMost: + case CC_PreserveAll: + case CC_Win64: + return CCCR_OK; + default: + return CCCR_Warning; + } +} + +TargetInfo::CallingConvKind +UEFIAArch64TargetInfo::getCallingConvKind(bool ClangABICompat4) const { + return CCK_MicrosoftWin64; +} + AppleMachOAArch64TargetInfo::AppleMachOAArch64TargetInfo( const llvm::Triple &Triple, const TargetOptions &Opts) : AppleMachOTargetInfo<AArch64leTargetInfo>(Triple, Opts) {} diff --git a/clang/lib/Basic/Targets/AArch64.h b/clang/lib/Basic/Targets/AArch64.h index dfd89beeee2f3..c449c117d73ef 100644 --- a/clang/lib/Basic/Targets/AArch64.h +++ b/clang/lib/Basic/Targets/AArch64.h @@ -351,6 +351,37 @@ class LLVM_LIBRARY_VISIBILITY DarwinAArch64TargetInfo MacroBuilder &Builder) const override; }; +// aarch64 UEFI target +class LLVM_LIBRARY_VISIBILITY UEFIAArch64TargetInfo + : public UEFITargetInfo<AArch64leTargetInfo> { +public: + UEFIAArch64TargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts) + : UEFITargetInfo<AArch64leTargetInfo>(Triple, Opts) { + this->TheCXXABI.set(TargetCXXABI::Microsoft); + // This is an LLP64 platform. + // int:4, long:4, long long:8, long double:8. + IntWidth = IntAlign = 32; + LongWidth = LongAlign = 32; + DoubleAlign = LongLongAlign = 64; + LongDoubleWidth = LongDoubleAlign = 64; + LongDoubleFormat = &llvm::APFloat::IEEEdouble(); + IntMaxType = SignedLongLong; + Int64Type = SignedLongLong; + SizeType = UnsignedLongLong; + PtrDiffType = SignedLongLong; + IntPtrType = SignedLongLong; + this->resetDataLayout( + "e-m:w-p270:32:32-p271:32:32-p272:64:64-p:64:64-i32:32-" + "i64:64-i128:128-n32:64-S128-Fn32"); + } + BuiltinVaListKind getBuiltinVaListKind() const override; + void getTargetDefines(const LangOptions &Opts, + MacroBuilder &Builder) const override; + CallingConvCheckResult checkCallingConvention(CallingConv CC) const override; + TargetInfo::CallingConvKind + getCallingConvKind(bool ClangABICompat4) const override; +}; + } // namespace targets } // namespace clang diff --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp index 85a1335785542..be086f22d858a 100644 --- a/clang/lib/Driver/Driver.cpp +++ b/clang/lib/Driver/Driver.cpp @@ -698,8 +698,10 @@ static llvm::Triple computeTargetTriple(const Driver &D, } } - // Currently the only architecture supported by *-uefi triples are x86_64. - if (Target.isUEFI() && Target.getArch() != llvm::Triple::x86_64) + // Currently the only architectures supported by *-uefi triples are x86_64 + // and aarch64. + if (Target.isUEFI() && Target.getArch() != llvm::Triple::x86_64 && + Target.getArch() != llvm::Triple::aarch64) D.Diag(diag::err_target_unknown_triple) << Target.str(); // The `-maix[32|64]` flags are only valid for AIX targets. diff --git a/clang/lib/Driver/ToolChains/Clang.cpp b/clang/lib/Driver/ToolChains/Clang.cpp index d326a81feb762..adcd79367ce06 100644 --- a/clang/lib/Driver/ToolChains/Clang.cpp +++ b/clang/lib/Driver/ToolChains/Clang.cpp @@ -1178,7 +1178,7 @@ static bool isSignedCharDefault(const llvm::Triple &Triple) { case llvm::Triple::armeb: case llvm::Triple::thumb: case llvm::Triple::thumbeb: - if (Triple.isOSDarwin() || Triple.isOSWindows()) + if (Triple.isOSDarwin() || Triple.isOSWindows() || Triple.isUEFI()) return true; return false; @@ -7044,7 +7044,7 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA, if (!Args.hasFlag( options::OPT_fuse_cxa_atexit, options::OPT_fno_use_cxa_atexit, !RawTriple.isOSAIX() && - (!RawTriple.isOSWindows() || + ((!RawTriple.isOSWindows() && !RawTriple.isUEFI()) || RawTriple.isWindowsCygwinEnvironment()) && ((RawTriple.getVendor() != llvm::Triple::MipsTechnologies) || RawTriple.hasEnvironment())) || @@ -7079,10 +7079,25 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA, CmdArgs.push_back("-fkeep-system-includes"); } + if (IsUEFI) { + llvm::outs() << "IsUEFI true;\n"; + } else { + llvm::outs() << "IsUEFI false;\n"; + } + if (IsWindowsMSVC) { + llvm::outs() << "IsWindowsMSVC true;\n"; + } else { + llvm::outs() << "IsWindowsMSVC false;\n"; + } + // -fms-extensions=0 is default. if (Args.hasFlag(options::OPT_fms_extensions, options::OPT_fno_ms_extensions, - IsWindowsMSVC || IsUEFI)) + IsWindowsMSVC || IsUEFI)) { + llvm::outs() << "set OPT_fms_extensions\n"; CmdArgs.push_back("-fms-extensions"); + } else { + llvm::outs() << "DONT SET OPT_fms_extensions\n"; + } // -fms-compatibility=0 is default. bool IsMSVCCompat = Args.hasFlag( diff --git a/clang/lib/Driver/ToolChains/CommonArgs.cpp b/clang/lib/Driver/ToolChains/CommonArgs.cpp index 16cc1db0a2235..503bff1b14e51 100644 --- a/clang/lib/Driver/ToolChains/CommonArgs.cpp +++ b/clang/lib/Driver/ToolChains/CommonArgs.cpp @@ -128,6 +128,9 @@ static bool useFramePointerForTargetByDefault(const llvm::opt::ArgList &Args, } } + if (Triple.isUEFI()) + return false; + if (Triple.isOSWindows()) { switch (Triple.getArch()) { case llvm::Triple::x86: @@ -198,7 +201,7 @@ static bool mustMaintainValidFrameChain(const llvm::opt::ArgList &Args, // Arm64 Windows requires that the frame chain is valid, as there is no // way to indicate during a stack walk that a frame has used the frame // pointer as a general purpose register. - return Triple.isOSWindows(); + return Triple.isOSWindows() || Triple.isUEFI(); } } diff --git a/clang/test/Driver/aarch64-uefi-constructed-args.c b/clang/test/Driver/aarch64-uefi-constructed-args.c new file mode 100644 index 0000000000000..798af2c77bd60 --- /dev/null +++ b/clang/test/Driver/aarch64-uefi-constructed-args.c @@ -0,0 +1,19 @@ +// RUN: %clang -### --target=aarch64-unknown-uefi -g -- %s 2>&1 \ +// RUN: | FileCheck -check-prefixes=CHECK %s +// RUN: %clang_cl -### --target=aarch64-unknown-uefi -g -- %s 2>&1 \ +// RUN: | FileCheck -check-prefixes=CHECK %s +// CHECK: "-cc1" +// CHECK-SAME: "-triple" "aarch64-unknown-uefi" +// CHECK-SAME: "-mrelocation-model" "pic" "-pic-level" "2" +// CHECK-SAME: "-mframe-pointer=all" +// CHECK-SAME: "-fms-extensions" +// CHECK-NEXT: "/nologo" +// CHECK-SAME: "/subsystem:efi_application" +// CHECK-SAME: "/entry:EfiMain" +// CHECK-SAME: "/tsaware:no" +// CHECK-SAME: "/debug" + +// RUN: %clang -### --target=aarch64-unknown-uefi -print-search-dirs 2>&1 \ +// RUN: | FileCheck -check-prefixes=PROGPATH %s +// PROGPATH: InstalledDir: [[DRIVER_INSTALLED_DIR:.*]] +// PROGPATH: programs: =[[DRIVER_INSTALLED_DIR]] diff --git a/clang/test/Driver/unsupported-target-arch.c b/clang/test/Driver/unsupported-target-arch.c index 426f646db50b0..0d52f44e1eafb 100644 --- a/clang/test/Driver/unsupported-target-arch.c +++ b/clang/test/Driver/unsupported-target-arch.c @@ -60,12 +60,6 @@ // RUN: FileCheck --input-file=%t.err --check-prefix=CHECK-PPCMAC %s // CHECK-PPCMAC: error: unknown target triple 'unknown-apple-macosx{{.*}}' -// RUN: not %clang --target=aarch64-unknown-uefi -o %t.o %s 2> %t.err -// RUN: FileCheck --input-file=%t.err --check-prefix=CHECK-AARCH64 %s -// RUN: not %clang_cl --target=aarch64-unknown-uefi -o %t.o %s 2> %t.err -// RUN: FileCheck --input-file=%t.err --check-prefix=CHECK-AARCH64 %s -// CHECK-AARCH64: error: unknown target triple 'aarch64-unknown-uefi'{{$}} - // RUN: not %clang --target=arm-unknown-uefi -o %t.o %s 2> %t.err // RUN: FileCheck --input-file=%t.err -check-prefixes=CHECK-ARM %s // RUN: not %clang_cl --target=arm-unknown-uefi -o %t.o %s 2> %t.err diff --git a/llvm/include/llvm/TargetParser/Triple.h b/llvm/include/llvm/TargetParser/Triple.h index ed2e01ccb1e26..e8c855cc7ad02 100644 --- a/llvm/include/llvm/TargetParser/Triple.h +++ b/llvm/include/llvm/TargetParser/Triple.h @@ -689,6 +689,9 @@ class Triple { bool isWindowsMSVCEnvironment() const { return isKnownWindowsMSVCEnvironment() || (isOSWindows() && getEnvironment() == Triple::UnknownEnvironment); + // || + // (isUEFI() && isAArch64() && getEnvironment() == + // Triple::UnknownEnvironment); } // Checks if we're using the Windows Arm64EC ABI. diff --git a/llvm/lib/TargetParser/AArch64TargetParser.cpp b/llvm/lib/TargetParser/AArch64TargetParser.cpp index 7e3583275a734..010bd7ea65bf7 100644 --- a/llvm/lib/TargetParser/AArch64TargetParser.cpp +++ b/llvm/lib/TargetParser/AArch64TargetParser.cpp @@ -138,7 +138,7 @@ void AArch64::fillValidCPUArchList(SmallVectorImpl<StringRef> &Values) { bool AArch64::isX18ReservedByDefault(const Triple &TT) { return TT.isAndroid() || TT.isOSDarwin() || TT.isOSFuchsia() || - TT.isOSWindows() || TT.isOHOSFamily(); + TT.isOSWindows() || TT.isUEFI() || TT.isOHOSFamily(); } // Allows partial match, ex. "v8a" matches "armv8a". >From 5bd743668a2a18c32d4de38f39dd02a1a650e618 Mon Sep 17 00:00:00 2001 From: prabhukr <[email protected]> Date: Wed, 15 Oct 2025 13:27:55 -0700 Subject: [PATCH 2/3] Add backend and predefine changes. --- clang/lib/Basic/Targets/AArch64.cpp | 14 +++++++++++++ clang/lib/Basic/Targets/AArch64.h | 7 ++++--- clang/lib/Basic/Targets/OSTargets.h | 1 + clang/lib/Driver/ToolChains/Clang.cpp | 20 ------------------- clang/test/Driver/uefi-defines.c | 1 + clang/test/Preprocessor/init.c | 2 ++ .../lib/Target/AArch64/AArch64MCInstLower.cpp | 2 +- .../MCTargetDesc/AArch64MCTargetDesc.cpp | 2 +- 8 files changed, 24 insertions(+), 25 deletions(-) diff --git a/clang/lib/Basic/Targets/AArch64.cpp b/clang/lib/Basic/Targets/AArch64.cpp index 2bd8f3b4ab527..315bfd8f1fc99 100644 --- a/clang/lib/Basic/Targets/AArch64.cpp +++ b/clang/lib/Basic/Targets/AArch64.cpp @@ -1781,6 +1781,7 @@ void UEFIAArch64TargetInfo::getTargetDefines(const LangOptions &Opts, MacroBuilder &Builder) const { AArch64leTargetInfo::getTargetDefines(Opts, Builder); Builder.defineMacro("_M_ARM64", "1"); + UEFIAArch64TargetInfo::getOSDefines(Opts, getTriple(), Builder); } TargetInfo::CallingConvCheckResult @@ -1801,6 +1802,11 @@ UEFIAArch64TargetInfo::getCallingConvKind(bool ClangABICompat4) const { return CCK_MicrosoftWin64; } +void UEFIAArch64TargetInfo::setDataLayout() { + resetDataLayout("e-m:w-p270:32:32-p271:32:32-p272:64:64-p:64:64-i32:32-" + "i64:64-i128:128-n32:64-S128-Fn32"); +} + AppleMachOAArch64TargetInfo::AppleMachOAArch64TargetInfo( const llvm::Triple &Triple, const TargetOptions &Opts) : AppleMachOTargetInfo<AArch64leTargetInfo>(Triple, Opts) {} @@ -1861,6 +1867,14 @@ void DarwinAArch64TargetInfo::getOSDefines(const LangOptions &Opts, DarwinTargetInfo<AArch64leTargetInfo>::getOSDefines(Opts, Triple, Builder); } +// void UEFIAArch64TargetInfo::getOSDefines(const LangOptions &Opts, +// const llvm::Triple &Triple, +// MacroBuilder &Builder) const{ + +// UEFITargetInfo<AArch64leTargetInfo>::getOSDefines(Opts, Triple, Builder); +// // Builder.defineMacro("__UEFI__"); +// } + TargetInfo::BuiltinVaListKind DarwinAArch64TargetInfo::getBuiltinVaListKind() const { return TargetInfo::CharPtrBuiltinVaList; diff --git a/clang/lib/Basic/Targets/AArch64.h b/clang/lib/Basic/Targets/AArch64.h index c449c117d73ef..d11e8ca8e4858 100644 --- a/clang/lib/Basic/Targets/AArch64.h +++ b/clang/lib/Basic/Targets/AArch64.h @@ -357,6 +357,7 @@ class LLVM_LIBRARY_VISIBILITY UEFIAArch64TargetInfo public: UEFIAArch64TargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts) : UEFITargetInfo<AArch64leTargetInfo>(Triple, Opts) { + llvm::outs() << "In targetinfo constructor\n"; this->TheCXXABI.set(TargetCXXABI::Microsoft); // This is an LLP64 platform. // int:4, long:4, long long:8, long double:8. @@ -370,9 +371,6 @@ class LLVM_LIBRARY_VISIBILITY UEFIAArch64TargetInfo SizeType = UnsignedLongLong; PtrDiffType = SignedLongLong; IntPtrType = SignedLongLong; - this->resetDataLayout( - "e-m:w-p270:32:32-p271:32:32-p272:64:64-p:64:64-i32:32-" - "i64:64-i128:128-n32:64-S128-Fn32"); } BuiltinVaListKind getBuiltinVaListKind() const override; void getTargetDefines(const LangOptions &Opts, @@ -380,6 +378,9 @@ class LLVM_LIBRARY_VISIBILITY UEFIAArch64TargetInfo CallingConvCheckResult checkCallingConvention(CallingConv CC) const override; TargetInfo::CallingConvKind getCallingConvKind(bool ClangABICompat4) const override; + +private: + void setDataLayout() override; }; } // namespace targets diff --git a/clang/lib/Basic/Targets/OSTargets.h b/clang/lib/Basic/Targets/OSTargets.h index 6c49a09ab27f5..4f886a356f9e0 100644 --- a/clang/lib/Basic/Targets/OSTargets.h +++ b/clang/lib/Basic/Targets/OSTargets.h @@ -848,6 +848,7 @@ class LLVM_LIBRARY_VISIBILITY UEFITargetInfo : public OSTargetInfo<Target> { protected: void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple, MacroBuilder &Builder) const override { + llvm::outs() << "define macro \n"; Builder.defineMacro("__UEFI__"); } diff --git a/clang/lib/Driver/ToolChains/Clang.cpp b/clang/lib/Driver/ToolChains/Clang.cpp index adcd79367ce06..4f23f87dea9d2 100644 --- a/clang/lib/Driver/ToolChains/Clang.cpp +++ b/clang/lib/Driver/ToolChains/Clang.cpp @@ -7079,26 +7079,6 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA, CmdArgs.push_back("-fkeep-system-includes"); } - if (IsUEFI) { - llvm::outs() << "IsUEFI true;\n"; - } else { - llvm::outs() << "IsUEFI false;\n"; - } - if (IsWindowsMSVC) { - llvm::outs() << "IsWindowsMSVC true;\n"; - } else { - llvm::outs() << "IsWindowsMSVC false;\n"; - } - - // -fms-extensions=0 is default. - if (Args.hasFlag(options::OPT_fms_extensions, options::OPT_fno_ms_extensions, - IsWindowsMSVC || IsUEFI)) { - llvm::outs() << "set OPT_fms_extensions\n"; - CmdArgs.push_back("-fms-extensions"); - } else { - llvm::outs() << "DONT SET OPT_fms_extensions\n"; - } - // -fms-compatibility=0 is default. bool IsMSVCCompat = Args.hasFlag( options::OPT_fms_compatibility, options::OPT_fno_ms_compatibility, diff --git a/clang/test/Driver/uefi-defines.c b/clang/test/Driver/uefi-defines.c index 45f27bfdb9fa9..5f446853a4399 100644 --- a/clang/test/Driver/uefi-defines.c +++ b/clang/test/Driver/uefi-defines.c @@ -1,4 +1,5 @@ // RUN: %clang -target x86_64-unknown-uefi %s -emit-llvm -S -c -o - | FileCheck %s +// RUN: %clang -target aarch64-unknown-uefi %s -emit-llvm -S -c -o - | FileCheck %s // CHECK: __UEFI__defined #ifdef __UEFI__ diff --git a/clang/test/Preprocessor/init.c b/clang/test/Preprocessor/init.c index 7e0df96141364..a02e5e91bb202 100644 --- a/clang/test/Preprocessor/init.c +++ b/clang/test/Preprocessor/init.c @@ -2843,6 +2843,8 @@ // RUN: %clang_cc1 -dM -triple=x86_64-uefi -E /dev/null | FileCheck -match-full-lines -check-prefix UEFI %s // RUN: %clang_cc1 -dM -triple=x86_64-unknown-uefi -E /dev/null | FileCheck -match-full-lines -check-prefix UEFI %s +// RUN: %clang_cc1 -dM -triple=aarch64-uefi -E /dev/null | FileCheck -match-full-lines -check-prefix UEFI %s +// RUN: %clang_cc1 -dM -triple=aarch64-unknown-uefi -E /dev/null | FileCheck -match-full-lines -check-prefix UEFI %s // UEFI: #define __UEFI__ 1 diff --git a/llvm/lib/Target/AArch64/AArch64MCInstLower.cpp b/llvm/lib/Target/AArch64/AArch64MCInstLower.cpp index 39946633603f6..d7d423b4d11d2 100644 --- a/llvm/lib/Target/AArch64/AArch64MCInstLower.cpp +++ b/llvm/lib/Target/AArch64/AArch64MCInstLower.cpp @@ -49,7 +49,7 @@ MCSymbol *AArch64MCInstLower::GetGlobalValueSymbol(const GlobalValue *GV, if (!TheTriple.isOSBinFormatCOFF()) return Printer.getSymbolPreferLocal(*GV); - assert(TheTriple.isOSWindows() && + assert((TheTriple.isOSWindows() || TheTriple.isUEFI()) && "Windows is the only supported COFF target"); bool IsIndirect = diff --git a/llvm/lib/Target/AArch64/MCTargetDesc/AArch64MCTargetDesc.cpp b/llvm/lib/Target/AArch64/MCTargetDesc/AArch64MCTargetDesc.cpp index 5c8f57664a2cc..5b7c532005026 100644 --- a/llvm/lib/Target/AArch64/MCTargetDesc/AArch64MCTargetDesc.cpp +++ b/llvm/lib/Target/AArch64/MCTargetDesc/AArch64MCTargetDesc.cpp @@ -351,7 +351,7 @@ static MCAsmInfo *createAArch64MCAsmInfo(const MCRegisterInfo &MRI, MAI = new AArch64MCAsmInfoDarwin(TheTriple.getArch() == Triple::aarch64_32); else if (TheTriple.isOSBinFormatELF()) MAI = new AArch64MCAsmInfoELF(TheTriple); - else if (TheTriple.isWindowsMSVCEnvironment()) + else if (TheTriple.isWindowsMSVCEnvironment() || TheTriple.isUEFI()) MAI = new AArch64MCAsmInfoMicrosoftCOFF(); else if (TheTriple.isOSBinFormatCOFF()) MAI = new AArch64MCAsmInfoGNUCOFF(); >From 567708cbd08dca0b4203856a80d2d902670ff5fe Mon Sep 17 00:00:00 2001 From: prabhukr <[email protected]> Date: Wed, 15 Oct 2025 15:51:28 -0700 Subject: [PATCH 3/3] Further support changes for aarch64 --- clang/lib/Basic/Targets/AArch64.h | 1 - clang/lib/Basic/Targets/OSTargets.h | 1 - clang/lib/CodeGen/CodeGenModule.cpp | 2 +- clang/lib/Driver/ToolChains/Clang.cpp | 5 +++-- llvm/lib/Target/AArch64/AArch64MCInstLower.cpp | 2 +- 5 files changed, 5 insertions(+), 6 deletions(-) diff --git a/clang/lib/Basic/Targets/AArch64.h b/clang/lib/Basic/Targets/AArch64.h index d11e8ca8e4858..41e4d7a33a357 100644 --- a/clang/lib/Basic/Targets/AArch64.h +++ b/clang/lib/Basic/Targets/AArch64.h @@ -357,7 +357,6 @@ class LLVM_LIBRARY_VISIBILITY UEFIAArch64TargetInfo public: UEFIAArch64TargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts) : UEFITargetInfo<AArch64leTargetInfo>(Triple, Opts) { - llvm::outs() << "In targetinfo constructor\n"; this->TheCXXABI.set(TargetCXXABI::Microsoft); // This is an LLP64 platform. // int:4, long:4, long long:8, long double:8. diff --git a/clang/lib/Basic/Targets/OSTargets.h b/clang/lib/Basic/Targets/OSTargets.h index 4f886a356f9e0..6c49a09ab27f5 100644 --- a/clang/lib/Basic/Targets/OSTargets.h +++ b/clang/lib/Basic/Targets/OSTargets.h @@ -848,7 +848,6 @@ class LLVM_LIBRARY_VISIBILITY UEFITargetInfo : public OSTargetInfo<Target> { protected: void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple, MacroBuilder &Builder) const override { - llvm::outs() << "define macro \n"; Builder.defineMacro("__UEFI__"); } diff --git a/clang/lib/CodeGen/CodeGenModule.cpp b/clang/lib/CodeGen/CodeGenModule.cpp index 8d019d4b2da25..2eef82439665a 100644 --- a/clang/lib/CodeGen/CodeGenModule.cpp +++ b/clang/lib/CodeGen/CodeGenModule.cpp @@ -141,7 +141,7 @@ createTargetCodeGenInfo(CodeGenModule &CGM) { AArch64ABIKind Kind = AArch64ABIKind::AAPCS; if (Target.getABI() == "darwinpcs") Kind = AArch64ABIKind::DarwinPCS; - else if (Triple.isOSWindows()) + else if (Triple.isOSWindows() || Triple.isUEFI()) return createWindowsAArch64TargetCodeGenInfo(CGM, AArch64ABIKind::Win64); else if (Target.getABI() == "aapcs-soft") Kind = AArch64ABIKind::AAPCSSoft; diff --git a/clang/lib/Driver/ToolChains/Clang.cpp b/clang/lib/Driver/ToolChains/Clang.cpp index 4f23f87dea9d2..ef012365fd39e 100644 --- a/clang/lib/Driver/ToolChains/Clang.cpp +++ b/clang/lib/Driver/ToolChains/Clang.cpp @@ -7082,8 +7082,9 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA, // -fms-compatibility=0 is default. bool IsMSVCCompat = Args.hasFlag( options::OPT_fms_compatibility, options::OPT_fno_ms_compatibility, - (IsWindowsMSVC && Args.hasFlag(options::OPT_fms_extensions, - options::OPT_fno_ms_extensions, true))); + ((IsWindowsMSVC || IsUEFI) && + Args.hasFlag(options::OPT_fms_extensions, options::OPT_fno_ms_extensions, + true))); if (IsMSVCCompat) { CmdArgs.push_back("-fms-compatibility"); if (!types::isCXX(Input.getType()) && diff --git a/llvm/lib/Target/AArch64/AArch64MCInstLower.cpp b/llvm/lib/Target/AArch64/AArch64MCInstLower.cpp index d7d423b4d11d2..a85ac8186152c 100644 --- a/llvm/lib/Target/AArch64/AArch64MCInstLower.cpp +++ b/llvm/lib/Target/AArch64/AArch64MCInstLower.cpp @@ -50,7 +50,7 @@ MCSymbol *AArch64MCInstLower::GetGlobalValueSymbol(const GlobalValue *GV, return Printer.getSymbolPreferLocal(*GV); assert((TheTriple.isOSWindows() || TheTriple.isUEFI()) && - "Windows is the only supported COFF target"); + "Windows and UEFI are the only supported COFF targets"); bool IsIndirect = (TargetFlags & (AArch64II::MO_DLLIMPORT | AArch64II::MO_COFFSTUB)); _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
