Skip to content

Commit 5bd7436

Browse files
committed
Add backend and predefine changes.
1 parent 8a39f9b commit 5bd7436

File tree

8 files changed

+24
-25
lines changed

8 files changed

+24
-25
lines changed

clang/lib/Basic/Targets/AArch64.cpp

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1781,6 +1781,7 @@ void UEFIAArch64TargetInfo::getTargetDefines(const LangOptions &Opts,
17811781
MacroBuilder &Builder) const {
17821782
AArch64leTargetInfo::getTargetDefines(Opts, Builder);
17831783
Builder.defineMacro("_M_ARM64", "1");
1784+
UEFIAArch64TargetInfo::getOSDefines(Opts, getTriple(), Builder);
17841785
}
17851786

17861787
TargetInfo::CallingConvCheckResult
@@ -1801,6 +1802,11 @@ UEFIAArch64TargetInfo::getCallingConvKind(bool ClangABICompat4) const {
18011802
return CCK_MicrosoftWin64;
18021803
}
18031804

1805+
void UEFIAArch64TargetInfo::setDataLayout() {
1806+
resetDataLayout("e-m:w-p270:32:32-p271:32:32-p272:64:64-p:64:64-i32:32-"
1807+
"i64:64-i128:128-n32:64-S128-Fn32");
1808+
}
1809+
18041810
AppleMachOAArch64TargetInfo::AppleMachOAArch64TargetInfo(
18051811
const llvm::Triple &Triple, const TargetOptions &Opts)
18061812
: AppleMachOTargetInfo<AArch64leTargetInfo>(Triple, Opts) {}
@@ -1861,6 +1867,14 @@ void DarwinAArch64TargetInfo::getOSDefines(const LangOptions &Opts,
18611867
DarwinTargetInfo<AArch64leTargetInfo>::getOSDefines(Opts, Triple, Builder);
18621868
}
18631869

1870+
// void UEFIAArch64TargetInfo::getOSDefines(const LangOptions &Opts,
1871+
// const llvm::Triple &Triple,
1872+
// MacroBuilder &Builder) const{
1873+
1874+
// UEFITargetInfo<AArch64leTargetInfo>::getOSDefines(Opts, Triple, Builder);
1875+
// // Builder.defineMacro("__UEFI__");
1876+
// }
1877+
18641878
TargetInfo::BuiltinVaListKind
18651879
DarwinAArch64TargetInfo::getBuiltinVaListKind() const {
18661880
return TargetInfo::CharPtrBuiltinVaList;

clang/lib/Basic/Targets/AArch64.h

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -357,6 +357,7 @@ class LLVM_LIBRARY_VISIBILITY UEFIAArch64TargetInfo
357357
public:
358358
UEFIAArch64TargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
359359
: UEFITargetInfo<AArch64leTargetInfo>(Triple, Opts) {
360+
llvm::outs() << "In targetinfo constructor\n";
360361
this->TheCXXABI.set(TargetCXXABI::Microsoft);
361362
// This is an LLP64 platform.
362363
// int:4, long:4, long long:8, long double:8.
@@ -370,16 +371,16 @@ class LLVM_LIBRARY_VISIBILITY UEFIAArch64TargetInfo
370371
SizeType = UnsignedLongLong;
371372
PtrDiffType = SignedLongLong;
372373
IntPtrType = SignedLongLong;
373-
this->resetDataLayout(
374-
"e-m:w-p270:32:32-p271:32:32-p272:64:64-p:64:64-i32:32-"
375-
"i64:64-i128:128-n32:64-S128-Fn32");
376374
}
377375
BuiltinVaListKind getBuiltinVaListKind() const override;
378376
void getTargetDefines(const LangOptions &Opts,
379377
MacroBuilder &Builder) const override;
380378
CallingConvCheckResult checkCallingConvention(CallingConv CC) const override;
381379
TargetInfo::CallingConvKind
382380
getCallingConvKind(bool ClangABICompat4) const override;
381+
382+
private:
383+
void setDataLayout() override;
383384
};
384385

385386
} // namespace targets

clang/lib/Basic/Targets/OSTargets.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -848,6 +848,7 @@ class LLVM_LIBRARY_VISIBILITY UEFITargetInfo : public OSTargetInfo<Target> {
848848
protected:
849849
void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple,
850850
MacroBuilder &Builder) const override {
851+
llvm::outs() << "define macro \n";
851852
Builder.defineMacro("__UEFI__");
852853
}
853854

clang/lib/Driver/ToolChains/Clang.cpp

Lines changed: 0 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -7079,26 +7079,6 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA,
70797079
CmdArgs.push_back("-fkeep-system-includes");
70807080
}
70817081

7082-
if (IsUEFI) {
7083-
llvm::outs() << "IsUEFI true;\n";
7084-
} else {
7085-
llvm::outs() << "IsUEFI false;\n";
7086-
}
7087-
if (IsWindowsMSVC) {
7088-
llvm::outs() << "IsWindowsMSVC true;\n";
7089-
} else {
7090-
llvm::outs() << "IsWindowsMSVC false;\n";
7091-
}
7092-
7093-
// -fms-extensions=0 is default.
7094-
if (Args.hasFlag(options::OPT_fms_extensions, options::OPT_fno_ms_extensions,
7095-
IsWindowsMSVC || IsUEFI)) {
7096-
llvm::outs() << "set OPT_fms_extensions\n";
7097-
CmdArgs.push_back("-fms-extensions");
7098-
} else {
7099-
llvm::outs() << "DONT SET OPT_fms_extensions\n";
7100-
}
7101-
71027082
// -fms-compatibility=0 is default.
71037083
bool IsMSVCCompat = Args.hasFlag(
71047084
options::OPT_fms_compatibility, options::OPT_fno_ms_compatibility,

clang/test/Driver/uefi-defines.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
// RUN: %clang -target x86_64-unknown-uefi %s -emit-llvm -S -c -o - | FileCheck %s
2+
// RUN: %clang -target aarch64-unknown-uefi %s -emit-llvm -S -c -o - | FileCheck %s
23

34
// CHECK: __UEFI__defined
45
#ifdef __UEFI__

clang/test/Preprocessor/init.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2843,6 +2843,8 @@
28432843

28442844
// RUN: %clang_cc1 -dM -triple=x86_64-uefi -E /dev/null | FileCheck -match-full-lines -check-prefix UEFI %s
28452845
// RUN: %clang_cc1 -dM -triple=x86_64-unknown-uefi -E /dev/null | FileCheck -match-full-lines -check-prefix UEFI %s
2846+
// RUN: %clang_cc1 -dM -triple=aarch64-uefi -E /dev/null | FileCheck -match-full-lines -check-prefix UEFI %s
2847+
// RUN: %clang_cc1 -dM -triple=aarch64-unknown-uefi -E /dev/null | FileCheck -match-full-lines -check-prefix UEFI %s
28462848

28472849
// UEFI: #define __UEFI__ 1
28482850

llvm/lib/Target/AArch64/AArch64MCInstLower.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ MCSymbol *AArch64MCInstLower::GetGlobalValueSymbol(const GlobalValue *GV,
4949
if (!TheTriple.isOSBinFormatCOFF())
5050
return Printer.getSymbolPreferLocal(*GV);
5151

52-
assert(TheTriple.isOSWindows() &&
52+
assert((TheTriple.isOSWindows() || TheTriple.isUEFI()) &&
5353
"Windows is the only supported COFF target");
5454

5555
bool IsIndirect =

llvm/lib/Target/AArch64/MCTargetDesc/AArch64MCTargetDesc.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -351,7 +351,7 @@ static MCAsmInfo *createAArch64MCAsmInfo(const MCRegisterInfo &MRI,
351351
MAI = new AArch64MCAsmInfoDarwin(TheTriple.getArch() == Triple::aarch64_32);
352352
else if (TheTriple.isOSBinFormatELF())
353353
MAI = new AArch64MCAsmInfoELF(TheTriple);
354-
else if (TheTriple.isWindowsMSVCEnvironment())
354+
else if (TheTriple.isWindowsMSVCEnvironment() || TheTriple.isUEFI())
355355
MAI = new AArch64MCAsmInfoMicrosoftCOFF();
356356
else if (TheTriple.isOSBinFormatCOFF())
357357
MAI = new AArch64MCAsmInfoGNUCOFF();

0 commit comments

Comments
 (0)