[clang] [clang] fix uefi target for aarch64 & x86_64 (PR #120632)

via cfe-commits cfe-commits at lists.llvm.org
Thu Jan 9 16:29:05 PST 2025


================
@@ -713,8 +713,8 @@ class LLVM_LIBRARY_VISIBILITY X86_64TargetInfo : public X86TargetInfo {
   X86_64TargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
       : X86TargetInfo(Triple, Opts) {
     const bool IsX32 = getTriple().isX32();
-    bool IsWinCOFF =
-        getTriple().isOSWindows() && getTriple().isOSBinFormatCOFF();
+    bool IsWinCOFF = (getTriple().isOSWindows() || getTriple().isUEFI()) &&
+                     getTriple().isOSBinFormatCOFF();
     LongWidth = LongAlign = PointerWidth = PointerAlign = IsX32 ? 32 : 64;
----------------
Prabhuk wrote:

While debugging some of our EFI workloads noticed that the integer type definitions set here are not correct for UEFI X86_64. I have a local patch which overrides the values set here to fix the problem. I am simplifying the code and pasting it here:

```
if(getTriple().isUEFI() && !IsX32) {
        LongWidth = LongAlign = 32;
        DoubleAlign = LongLongAlign = 64;
        IntMaxType = SignedLongLong;
        Int64Type = SignedLongLong;
        SizeType = UnsignedLongLong;
        PtrDiffType = SignedLongLong;
        IntPtrType = SignedLongLong;
        LongDoubleWidth = LongDoubleAlign = 64;
        LongDoubleFormat = &llvm::APFloat::IEEEdouble();
      }
```

I am starting lean towards retaining the UEFIX86_64TargetInfo to not "pollute" the X86_64TargetInfo with too many conditional overrides for UEFI. What do you think?

https://github.com/llvm/llvm-project/pull/120632


More information about the cfe-commits mailing list