diff options
author | Shubham Sandeep Rastogi <srastogi22@apple.com> | 2022-10-06 12:15:07 -0700 |
---|---|---|
committer | Shubham Sandeep Rastogi <srastogi22@apple.com> | 2022-10-06 14:46:01 -0700 |
commit | d96ade00c3c96bd451c60e34a17e613cdd5fdc38 (patch) | |
tree | 70fcda3c263953c5f19da4af8cc0699ed4787a57 /lldb | |
parent | e66ff2a284de9067e63f89f056d8075def139b0b (diff) | |
download | llvm-d96ade00c3c96bd451c60e34a17e613cdd5fdc38.zip llvm-d96ade00c3c96bd451c60e34a17e613cdd5fdc38.tar.gz llvm-d96ade00c3c96bd451c60e34a17e613cdd5fdc38.tar.bz2 |
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<MCRegisterInfo> to Expected<std::unique_ptr<MCRegisterInfo>> as the return type for the function createRegInfo. This has now been fixed.
Diffstat (limited to 'lldb')
4 files changed, 17 insertions, 5 deletions
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<llvm::StringRef(uint64_t DwarfRegNum, bool IsEH)> GetRegName; + if (abi) { + auto RegInfo = abi->GetMCRegisterInfo(); + GetRegName = [RegInfo](uint64_t DwarfRegNum, bool IsEH) -> llvm::StringRef { + if (llvm::Optional<unsigned> 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<uint8_t> 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()); |