llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT--> @llvm/pr-subscribers-clang Author: Tristan Ross (RossComputerGuy) <details> <summary>Changes</summary> This PR introduces some fixes where the data layout wasn't propagated correctly. To test this, feed clang any C file (I used an empty main for testing) and pass `-target aarch64-uefi` or `-target x86_64-uefi`. Before this PR, you would get an error similar to this: ``` error: backend data layout 'e-m:w-p:64:64-i32:32-i64:64-i128:128-n32:64-S128' does not match expected target description 'e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128' 1 error generated. ``` This PR also adds a new `__uefi__` macro which will hopefully let us work towards getting compiler-rt and libc working with UEFI. --- Full diff: https://github.com/llvm/llvm-project/pull/120632.diff 3 Files Affected: - (modified) clang/lib/Basic/Targets/AArch64.cpp (+4) - (modified) clang/lib/Basic/Targets/OSTargets.h (+3-1) - (modified) clang/lib/Basic/Targets/X86.h (+1-1) ``````````diff diff --git a/clang/lib/Basic/Targets/AArch64.cpp b/clang/lib/Basic/Targets/AArch64.cpp index 53e102bbe44687..d8aef4837f9267 100644 --- a/clang/lib/Basic/Targets/AArch64.cpp +++ b/clang/lib/Basic/Targets/AArch64.cpp @@ -1537,6 +1537,10 @@ void AArch64leTargetInfo::setDataLayout() { resetDataLayout("e-m:o-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-" "n32:64-S128-Fn32", "_"); + } else if (getTriple().isUEFI() && getTriple().isOSBinFormatCOFF()) { + 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"); } else resetDataLayout("e-m:e-p270:32:32-p271:32:32-p272:64:64-i8:8:32-i16:16:32-" "i64:64-i128:128-n32:64-S128-Fn32"); diff --git a/clang/lib/Basic/Targets/OSTargets.h b/clang/lib/Basic/Targets/OSTargets.h index cd9b3760ca5874..53dd23c3129636 100644 --- a/clang/lib/Basic/Targets/OSTargets.h +++ b/clang/lib/Basic/Targets/OSTargets.h @@ -790,7 +790,9 @@ template <typename Target> class LLVM_LIBRARY_VISIBILITY UEFITargetInfo : public OSTargetInfo<Target> { protected: void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple, - MacroBuilder &Builder) const override {} + MacroBuilder &Builder) const override { + Builder.defineMacro("__UEFI__"); + } public: UEFITargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts) diff --git a/clang/lib/Basic/Targets/X86.h b/clang/lib/Basic/Targets/X86.h index 3ed36c8fa724b5..bb72a92b1cf5b7 100644 --- a/clang/lib/Basic/Targets/X86.h +++ b/clang/lib/Basic/Targets/X86.h @@ -714,7 +714,7 @@ class LLVM_LIBRARY_VISIBILITY X86_64TargetInfo : public X86TargetInfo { : X86TargetInfo(Triple, Opts) { const bool IsX32 = getTriple().isX32(); bool IsWinCOFF = - getTriple().isOSWindows() && getTriple().isOSBinFormatCOFF(); + (getTriple().isOSWindows() || getTriple().isUEFI()) && getTriple().isOSBinFormatCOFF(); LongWidth = LongAlign = PointerWidth = PointerAlign = IsX32 ? 32 : 64; LongDoubleWidth = 128; LongDoubleAlign = 128; `````````` </details> https://github.com/llvm/llvm-project/pull/120632 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits