From d96ade00c3c96bd451c60e34a17e613cdd5fdc38 Mon Sep 17 00:00:00 2001 From: Shubham Sandeep Rastogi Date: Thu, 6 Oct 2022 12:15:07 -0700 Subject: Remove the dependency between lib/DebugInfoDWARF and MC. This patch had to be reverted because on gcc 7.5.0 we see an error converting from std::unique_ptr to Expected> as the return type for the function createRegInfo. This has now been fixed. --- lldb/source/Expression/DWARFExpression.cpp | 16 ++++++++++++++-- lldb/source/Symbol/UnwindPlan.cpp | 2 +- lldb/unittests/Symbol/PostfixExpressionTest.cpp | 2 +- .../NativePDB/PdbFPOProgramToDWARFExpressionTests.cpp | 2 +- 4 files changed, 17 insertions(+), 5 deletions(-) (limited to 'lldb') diff --git a/lldb/source/Expression/DWARFExpression.cpp b/lldb/source/Expression/DWARFExpression.cpp index 1ccda94..5284d94 100644 --- a/lldb/source/Expression/DWARFExpression.cpp +++ b/lldb/source/Expression/DWARFExpression.cpp @@ -69,9 +69,21 @@ void DWARFExpression::UpdateValue(uint64_t const_value, void DWARFExpression::DumpLocation(Stream *s, lldb::DescriptionLevel level, ABI *abi) const { + std::function GetRegName; + if (abi) { + auto RegInfo = abi->GetMCRegisterInfo(); + GetRegName = [RegInfo](uint64_t DwarfRegNum, bool IsEH) -> llvm::StringRef { + if (llvm::Optional LLVMRegNum = + RegInfo.getLLVMRegNum(DwarfRegNum, IsEH)) + if (const char *RegName = RegInfo.getName(*LLVMRegNum)) + return llvm::StringRef(RegName); + return {}; + }; + } + auto DumpOpts = llvm::DIDumpOptions(); + DumpOpts.GetNameForDWARFReg = GetRegName; llvm::DWARFExpression(m_data.GetAsLLVM(), m_data.GetAddressByteSize()) - .print(s->AsRawOstream(), llvm::DIDumpOptions(), - abi ? &abi->GetMCRegisterInfo() : nullptr, nullptr); + .print(s->AsRawOstream(), DumpOpts, nullptr); } RegisterKind DWARFExpression::GetRegisterKind() const { return m_reg_kind; } diff --git a/lldb/source/Symbol/UnwindPlan.cpp b/lldb/source/Symbol/UnwindPlan.cpp index bd46905..8ca0334 100644 --- a/lldb/source/Symbol/UnwindPlan.cpp +++ b/lldb/source/Symbol/UnwindPlan.cpp @@ -84,7 +84,7 @@ static void DumpDWARFExpr(Stream &s, llvm::ArrayRef expr, Thread *threa llvm::DataExtractor data(expr, order_and_width->first == eByteOrderLittle, order_and_width->second); llvm::DWARFExpression(data, order_and_width->second, llvm::dwarf::DWARF32) - .print(s.AsRawOstream(), llvm::DIDumpOptions(), nullptr, nullptr); + .print(s.AsRawOstream(), llvm::DIDumpOptions(), nullptr); } else s.PutCString("dwarf-expr"); } diff --git a/lldb/unittests/Symbol/PostfixExpressionTest.cpp b/lldb/unittests/Symbol/PostfixExpressionTest.cpp index 4d4706d..0eaa9d8 100644 --- a/lldb/unittests/Symbol/PostfixExpressionTest.cpp +++ b/lldb/unittests/Symbol/PostfixExpressionTest.cpp @@ -159,7 +159,7 @@ static std::string ParseAndGenerateDWARF(llvm::StringRef expr) { std::string result; llvm::raw_string_ostream os(result); llvm::DWARFExpression(extractor, addr_size, llvm::dwarf::DWARF32) - .print(os, llvm::DIDumpOptions(), nullptr, nullptr); + .print(os, llvm::DIDumpOptions(), nullptr); return std::move(os.str()); } diff --git a/lldb/unittests/SymbolFile/NativePDB/PdbFPOProgramToDWARFExpressionTests.cpp b/lldb/unittests/SymbolFile/NativePDB/PdbFPOProgramToDWARFExpressionTests.cpp index 730afb3..270cc8e 100644 --- a/lldb/unittests/SymbolFile/NativePDB/PdbFPOProgramToDWARFExpressionTests.cpp +++ b/lldb/unittests/SymbolFile/NativePDB/PdbFPOProgramToDWARFExpressionTests.cpp @@ -40,7 +40,7 @@ CheckValidProgramTranslation(llvm::StringRef fpo_program, std::string result; llvm::raw_string_ostream os(result); llvm::DWARFExpression(extractor, /*AddressSize=*/4, llvm::dwarf::DWARF32) - .print(os, llvm::DIDumpOptions(), nullptr, nullptr); + .print(os, llvm::DIDumpOptions(), nullptr); // actual check ASSERT_EQ(expected_dwarf_expression, os.str()); -- cgit v1.1