From da459043f8c5d4187c798cc13a48bc7f7c1bd81a Mon Sep 17 00:00:00 2001 From: Stella Stamenova Date: Wed, 14 Sep 2022 09:30:49 -0700 Subject: [PATCH] Revert "[lldb][DWARF5] Enable macro evaluation" This reverts commit a0fb69d17b4d7501a85554010727837340e7b52f. This broke the windows lldb bot: https://lab.llvm.org/buildbot/#/builders/83/builds/23666 --- .../Plugins/SymbolFile/DWARF/DWARFContext.cpp | 4 +-- .../SymbolFile/DWARF/DWARFDebugMacro.cpp | 26 ++-------------- .../SymbolFile/DWARF/DWARFDebugMacro.h | 12 ------- .../SymbolFile/DWARF/SymbolFileDWARF.cpp | 18 +++-------- .../SymbolFile/DWARF/SymbolFileDWARF.h | 6 +--- .../API/commands/expression/macros/Makefile | 1 - .../commands/expression/macros/TestMacros.py | 6 ++++ lldb/test/API/lang/c/macro/Makefile | 4 --- lldb/test/API/lang/c/macro/TestMacro.py | 31 ------------------- lldb/test/API/lang/c/macro/main.c | 7 ----- 10 files changed, 16 insertions(+), 99 deletions(-) delete mode 100644 lldb/test/API/lang/c/macro/Makefile delete mode 100644 lldb/test/API/lang/c/macro/TestMacro.py delete mode 100644 lldb/test/API/lang/c/macro/main.c diff --git a/lldb/source/Plugins/SymbolFile/DWARF/DWARFContext.cpp b/lldb/source/Plugins/SymbolFile/DWARF/DWARFContext.cpp index c357033aa91d..37e28a09f3c4 100644 --- a/lldb/source/Plugins/SymbolFile/DWARF/DWARFContext.cpp +++ b/lldb/source/Plugins/SymbolFile/DWARF/DWARFContext.cpp @@ -92,8 +92,8 @@ const DWARFDataExtractor &DWARFContext::getOrLoadLocListsData() { } const DWARFDataExtractor &DWARFContext::getOrLoadMacroData() { - return LoadOrGetSection(eSectionTypeDWARFDebugMacro, - eSectionTypeDWARFDebugMacro, m_data_debug_macro); + return LoadOrGetSection(eSectionTypeDWARFDebugMacro, llvm::None, + m_data_debug_macro); } const DWARFDataExtractor &DWARFContext::getOrLoadRangesData() { diff --git a/lldb/source/Plugins/SymbolFile/DWARF/DWARFDebugMacro.cpp b/lldb/source/Plugins/SymbolFile/DWARF/DWARFDebugMacro.cpp index d7a43a3f9c68..19c6448c4e74 100644 --- a/lldb/source/Plugins/SymbolFile/DWARF/DWARFDebugMacro.cpp +++ b/lldb/source/Plugins/SymbolFile/DWARF/DWARFDebugMacro.cpp @@ -16,11 +16,6 @@ using namespace lldb_private; using namespace lldb_private::dwarf; -uint64_t DWARFStrOffsetsInfo::GetOffset(uint64_t index) const { - uint64_t offset = cu_str_offset + data.GetDWARFSizeOfOffset() * index; - return data.GetU32(&offset); -} - DWARFDebugMacroHeader DWARFDebugMacroHeader::ParseHeader(const DWARFDataExtractor &debug_macro_data, lldb::offset_t *offset) { @@ -64,8 +59,7 @@ void DWARFDebugMacroHeader::SkipOperandTable( void DWARFDebugMacroEntry::ReadMacroEntries( const DWARFDataExtractor &debug_macro_data, - const DWARFDataExtractor &debug_str_data, - const DWARFStrOffsetsInfo *str_offsets_info, const bool offset_is_64_bit, + const DWARFDataExtractor &debug_str_data, const bool offset_is_64_bit, lldb::offset_t *offset, SymbolFileDWARF *sym_file_dwarf, DebugMacrosSP &debug_macros_sp) { llvm::dwarf::MacroEntryType type = @@ -103,22 +97,6 @@ void DWARFDebugMacroEntry::ReadMacroEntries( debug_macros_sp->AddMacroEntry( DebugMacroEntry::CreateUndefEntry(line, macro_str)); break; - case DW_MACRO_define_strx: - case DW_MACRO_undef_strx: - line = debug_macro_data.GetULEB128(offset); - str_offset = debug_macro_data.GetULEB128(offset); - if (!str_offsets_info) - // Can't do much in this case, skip all such entries - continue; - str_offset = str_offsets_info->GetOffset(str_offset); - macro_str = debug_str_data.GetCStr(&str_offset); - if (type == DW_MACRO_define_strx) - debug_macros_sp->AddMacroEntry( - DebugMacroEntry::CreateDefineEntry(line, macro_str)); - else - debug_macros_sp->AddMacroEntry( - DebugMacroEntry::CreateUndefEntry(line, macro_str)); - break; case DW_MACRO_start_file: line = debug_macro_data.GetULEB128(offset); debug_line_file_idx = debug_macro_data.GetULEB128(offset); @@ -135,7 +113,7 @@ void DWARFDebugMacroEntry::ReadMacroEntries( else new_offset = debug_macro_data.GetU32(offset); debug_macros_sp->AddMacroEntry(DebugMacroEntry::CreateIndirectEntry( - sym_file_dwarf->ParseDebugMacros(&new_offset, str_offsets_info))); + sym_file_dwarf->ParseDebugMacros(&new_offset))); break; default: // TODO: Add support for other standard operations. diff --git a/lldb/source/Plugins/SymbolFile/DWARF/DWARFDebugMacro.h b/lldb/source/Plugins/SymbolFile/DWARF/DWARFDebugMacro.h index 27be105b5949..cbf762458331 100644 --- a/lldb/source/Plugins/SymbolFile/DWARF/DWARFDebugMacro.h +++ b/lldb/source/Plugins/SymbolFile/DWARF/DWARFDebugMacro.h @@ -24,17 +24,6 @@ class DWARFDataExtractor; class SymbolFileDWARF; -class DWARFStrOffsetsInfo { - lldb::offset_t cu_str_offset; - const lldb_private::DWARFDataExtractor &data; - -public: - DWARFStrOffsetsInfo(lldb::offset_t cu_str_offset, - const lldb_private::DWARFDataExtractor &data) - : cu_str_offset(cu_str_offset), data(data) {} - uint64_t GetOffset(uint64_t index) const; -}; - class DWARFDebugMacroHeader { public: enum HeaderFlagMask { @@ -64,7 +53,6 @@ public: static void ReadMacroEntries(const lldb_private::DWARFDataExtractor &debug_macro_data, const lldb_private::DWARFDataExtractor &debug_str_data, - const DWARFStrOffsetsInfo *str_offsets_info, const bool offset_is_64_bit, lldb::offset_t *sect_offset, SymbolFileDWARF *sym_file_dwarf, lldb_private::DebugMacrosSP &debug_macros_sp); diff --git a/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp b/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp index fdc0ef16d4ee..237b3fea716a 100644 --- a/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp +++ b/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp @@ -1194,8 +1194,7 @@ bool SymbolFileDWARF::ParseLineTable(CompileUnit &comp_unit) { } lldb_private::DebugMacrosSP -SymbolFileDWARF::ParseDebugMacros(lldb::offset_t *offset, - const DWARFStrOffsetsInfo *str_offsets_info) { +SymbolFileDWARF::ParseDebugMacros(lldb::offset_t *offset) { auto iter = m_debug_macros_map.find(*offset); if (iter != m_debug_macros_map.end()) return iter->second; @@ -1211,8 +1210,8 @@ SymbolFileDWARF::ParseDebugMacros(lldb::offset_t *offset, const DWARFDebugMacroHeader &header = DWARFDebugMacroHeader::ParseHeader(debug_macro_data, offset); DWARFDebugMacroEntry::ReadMacroEntries( - debug_macro_data, m_context.getOrLoadStrData(), str_offsets_info, - header.OffsetIs64Bit(), offset, this, debug_macros_sp); + debug_macro_data, m_context.getOrLoadStrData(), header.OffsetIs64Bit(), + offset, this, debug_macros_sp); return debug_macros_sp; } @@ -1220,7 +1219,7 @@ SymbolFileDWARF::ParseDebugMacros(lldb::offset_t *offset, bool SymbolFileDWARF::ParseDebugMacros(CompileUnit &comp_unit) { std::lock_guard guard(GetModuleMutex()); - DWARFUnit *dwarf_cu = &GetDWARFCompileUnit(&comp_unit)->GetNonSkeletonUnit(); + DWARFUnit *dwarf_cu = GetDWARFCompileUnit(&comp_unit); if (dwarf_cu == nullptr) return false; @@ -1236,15 +1235,8 @@ bool SymbolFileDWARF::ParseDebugMacros(CompileUnit &comp_unit) { if (sect_offset == DW_INVALID_OFFSET) return false; - std::unique_ptr str_offsets_info; - lldb::offset_t cu_str_offset = dwarf_cu->GetStrOffsetsBase(); - SymbolFileDWARF &symfile = dwarf_cu->GetSymbolFileDWARF(); - if (cu_str_offset && cu_str_offset != DW_INVALID_OFFSET) - str_offsets_info = std::make_unique( - cu_str_offset, symfile.GetDWARFContext().getOrLoadStrOffsetsData()); + comp_unit.SetDebugMacros(ParseDebugMacros(§_offset)); - comp_unit.SetDebugMacros( - symfile.ParseDebugMacros(§_offset, str_offsets_info.get())); return true; } diff --git a/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.h b/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.h index 22f939cba1c3..7bab17c783d5 100644 --- a/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.h +++ b/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.h @@ -55,8 +55,6 @@ class SymbolFileDWARFDebugMap; class SymbolFileDWARFDwo; class SymbolFileDWARFDwp; -class DWARFStrOffsetsInfo; - #define DIE_IS_BEING_PARSED ((lldb_private::Type *)1) class SymbolFileDWARF : public lldb_private::SymbolFileCommon, @@ -248,9 +246,7 @@ public: bool Supports_DW_AT_APPLE_objc_complete_type(DWARFUnit *cu); - lldb_private::DebugMacrosSP - ParseDebugMacros(lldb::offset_t *offset, - const DWARFStrOffsetsInfo *str_offsets_info); + lldb_private::DebugMacrosSP ParseDebugMacros(lldb::offset_t *offset); static DWARFDIE GetParentSymbolContextDIE(const DWARFDIE &die); diff --git a/lldb/test/API/commands/expression/macros/Makefile b/lldb/test/API/commands/expression/macros/Makefile index 4303bb0e9444..a2af5c4ce70f 100644 --- a/lldb/test/API/commands/expression/macros/Makefile +++ b/lldb/test/API/commands/expression/macros/Makefile @@ -5,6 +5,5 @@ DEBUG_INFO_FLAG = -g3 -gdwarf-5 # GCC produces incorrect .debug_macro section when "-include" option is used: # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93075. NO_TEST_COMMON_H := 1 -CFLAGS_EXTRAS := -fdebug-macro include Makefile.rules diff --git a/lldb/test/API/commands/expression/macros/TestMacros.py b/lldb/test/API/commands/expression/macros/TestMacros.py index db0d83a21a4d..3e5d720aef77 100644 --- a/lldb/test/API/commands/expression/macros/TestMacros.py +++ b/lldb/test/API/commands/expression/macros/TestMacros.py @@ -8,6 +8,12 @@ from lldbsuite.test import lldbutil class TestMacros(TestBase): + @expectedFailureAll( + compiler="clang", + bugnumber="clang does not emit .debug_macro[.dwo] sections.") + @expectedFailureAll( + debug_info="dwo", + bugnumber="GCC produces multiple .debug_macro.dwo sections and the spec is unclear as to what it means") @expectedFailureAll( hostoslist=["windows"], compiler="gcc", diff --git a/lldb/test/API/lang/c/macro/Makefile b/lldb/test/API/lang/c/macro/Makefile deleted file mode 100644 index 563d43a87134..000000000000 --- a/lldb/test/API/lang/c/macro/Makefile +++ /dev/null @@ -1,4 +0,0 @@ -C_SOURCES := main.c -CFLAGS_EXTRAS := -fdebug-macro - -include Makefile.rules diff --git a/lldb/test/API/lang/c/macro/TestMacro.py b/lldb/test/API/lang/c/macro/TestMacro.py deleted file mode 100644 index 6713f9fa857e..000000000000 --- a/lldb/test/API/lang/c/macro/TestMacro.py +++ /dev/null @@ -1,31 +0,0 @@ -"""Tests lldb macro evaluation.""" - -import lldb -from lldbsuite.test.decorators import * -from lldbsuite.test.lldbtest import * -from lldbsuite.test import lldbutil - - -class MacroTestCase(TestBase): - - mydir = TestBase.compute_mydir(__file__) - - def setUp(self): - # Call super's setUp(). - TestBase.setUp(self) - # Find the line number to break inside main(). - self.line = line_number('main.c', '// Set break point at this line.') - - def test(self): - self.build() - exe = self.getBuildArtifact("a.out") - self.runCmd("file " + exe, CURRENT_EXECUTABLE_SET) - - # Break inside the main. - lldbutil.run_break_set_by_file_and_line( - self, "main.c", self.line, num_expected_locations=1, loc_exact=True) - - self.runCmd("run", RUN_SUCCEEDED) - self.expect("expr DM + DF(10)", VARIABLES_DISPLAYED_CORRECTLY, - substrs=['int', '62']) - diff --git a/lldb/test/API/lang/c/macro/main.c b/lldb/test/API/lang/c/macro/main.c deleted file mode 100644 index 3810d6065aae..000000000000 --- a/lldb/test/API/lang/c/macro/main.c +++ /dev/null @@ -1,7 +0,0 @@ -#define DM 10 -#define DF(x) (42 + (x)) - -int main (int argc, char const *argv[]) -{ - return 0; //// Set break point at this line. -}