From 49be8c9572924ec74e697a059f1af7ebd44c2857 Mon Sep 17 00:00:00 2001 From: prabhukr Date: Mon, 27 Jan 2025 16:23:26 -0800 Subject: [PATCH 1/2] [clang] UEFI targets must use CodeView. Default debug format for PE COFF binaries is CodeView. Marking the default debug format for all UEFI targets to be CodeView. --- clang/lib/Driver/ToolChains/UEFI.h | 4 ++++ clang/unittests/Driver/ToolChainTest.cpp | 16 ++++++++++++++++ 2 files changed, 20 insertions(+) diff --git a/clang/lib/Driver/ToolChains/UEFI.h b/clang/lib/Driver/ToolChains/UEFI.h index 7e038b5cb8b18..e2550867b2e7d 100644 --- a/clang/lib/Driver/ToolChains/UEFI.h +++ b/clang/lib/Driver/ToolChains/UEFI.h @@ -55,6 +55,10 @@ class LLVM_LIBRARY_VISIBILITY UEFI : public ToolChain { void AddClangSystemIncludeArgs(const llvm::opt::ArgList &DriverArgs, llvm::opt::ArgStringList &CC1Args) const override; + + llvm::codegenoptions::DebugInfoFormat getDefaultDebugFormat() const override { + return llvm::codegenoptions::DIF_CodeView; + } }; } // namespace toolchains diff --git a/clang/unittests/Driver/ToolChainTest.cpp b/clang/unittests/Driver/ToolChainTest.cpp index 0787e7d2d3339..327ce73019f8d 100644 --- a/clang/unittests/Driver/ToolChainTest.cpp +++ b/clang/unittests/Driver/ToolChainTest.cpp @@ -21,6 +21,7 @@ #include "clang/Frontend/CompilerInstance.h" #include "llvm/ADT/ArrayRef.h" #include "llvm/ADT/StringExtras.h" +#include "llvm/Frontend/Debug/Options.h" #include "llvm/MC/TargetRegistry.h" #include "llvm/Support/TargetSelect.h" #include "llvm/Support/VirtualFileSystem.h" @@ -595,6 +596,21 @@ TEST(ToolChainTest, UEFICallingConventionTest) { TargetInfo::CallingConvKind::CCK_MicrosoftWin64); } +TEST(ToolChainTest, UEFIDefaultDebugFormatTest) { + IntrusiveRefCntPtr DiagOpts = new DiagnosticOptions(); + IntrusiveRefCntPtr DiagID(new DiagnosticIDs()); + struct TestDiagnosticConsumer : public DiagnosticConsumer {}; + DiagnosticsEngine Diags(DiagID, &*DiagOpts, new TestDiagnosticConsumer); + IntrusiveRefCntPtr InMemoryFileSystem( + new llvm::vfs::InMemoryFileSystem); + Driver CCDriver("/home/test/bin/clang", "x86_64-unknown-uefi", Diags, + "clang LLVM compiler", InMemoryFileSystem); + CCDriver.setCheckInputsExist(false); + std::unique_ptr CC( + CCDriver.BuildCompilation({"/home/test/bin/clang", "foo.cpp"})); + EXPECT_EQ(CC->getDefaultToolChain().getDefaultDebugFormat(), llvm::codegenoptions::DIF_CodeView); +} + TEST(GetDriverMode, PrefersLastDriverMode) { static constexpr const char *Args[] = {"clang-cl", "--driver-mode=foo", "--driver-mode=bar", "foo.cpp"}; From 3f8275ed52d2f7f55910abbabbc25ef563ba3db5 Mon Sep 17 00:00:00 2001 From: prabhukr Date: Mon, 27 Jan 2025 16:26:32 -0800 Subject: [PATCH 2/2] Fix formatting. --- clang/lib/Driver/ToolChains/UEFI.h | 2 +- clang/unittests/Driver/ToolChainTest.cpp | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/clang/lib/Driver/ToolChains/UEFI.h b/clang/lib/Driver/ToolChains/UEFI.h index e2550867b2e7d..4474c2fcc6939 100644 --- a/clang/lib/Driver/ToolChains/UEFI.h +++ b/clang/lib/Driver/ToolChains/UEFI.h @@ -57,7 +57,7 @@ class LLVM_LIBRARY_VISIBILITY UEFI : public ToolChain { llvm::opt::ArgStringList &CC1Args) const override; llvm::codegenoptions::DebugInfoFormat getDefaultDebugFormat() const override { - return llvm::codegenoptions::DIF_CodeView; + return llvm::codegenoptions::DIF_CodeView; } }; diff --git a/clang/unittests/Driver/ToolChainTest.cpp b/clang/unittests/Driver/ToolChainTest.cpp index 327ce73019f8d..14c505b5fbd9e 100644 --- a/clang/unittests/Driver/ToolChainTest.cpp +++ b/clang/unittests/Driver/ToolChainTest.cpp @@ -608,7 +608,8 @@ TEST(ToolChainTest, UEFIDefaultDebugFormatTest) { CCDriver.setCheckInputsExist(false); std::unique_ptr CC( CCDriver.BuildCompilation({"/home/test/bin/clang", "foo.cpp"})); - EXPECT_EQ(CC->getDefaultToolChain().getDefaultDebugFormat(), llvm::codegenoptions::DIF_CodeView); + EXPECT_EQ(CC->getDefaultToolChain().getDefaultDebugFormat(), + llvm::codegenoptions::DIF_CodeView); } TEST(GetDriverMode, PrefersLastDriverMode) {