[Lldb-commits] [lldb] r332165 - Revert "[LLDB] Support GNU-style compressed debug sections (.zdebug)"
Davide Italiano via lldb-commits
lldb-commits at lists.llvm.org
Fri May 11 18:25:48 PDT 2018
Author: davide
Date: Fri May 11 18:25:48 2018
New Revision: 332165
URL: http://llvm.org/viewvc/llvm-project?rev=332165&view=rev
Log:
Revert "[LLDB] Support GNU-style compressed debug sections (.zdebug)"
This reverts commit r332162 as it breaks the bots (Ubuntu 14.04)
with the following message:
Build Command Output:
objcopy: option '--compress-debug-sections' doesn't allow an argument
Removed:
lldb/trunk/packages/Python/lldbsuite/test/linux/compressed-debug-info/Makefile
lldb/trunk/packages/Python/lldbsuite/test/linux/compressed-debug-info/TestCompressedDebugInfo.py
lldb/trunk/packages/Python/lldbsuite/test/linux/compressed-debug-info/a.c
Modified:
lldb/trunk/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp
Removed: lldb/trunk/packages/Python/lldbsuite/test/linux/compressed-debug-info/Makefile
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/packages/Python/lldbsuite/test/linux/compressed-debug-info/Makefile?rev=332164&view=auto
==============================================================================
--- lldb/trunk/packages/Python/lldbsuite/test/linux/compressed-debug-info/Makefile (original)
+++ lldb/trunk/packages/Python/lldbsuite/test/linux/compressed-debug-info/Makefile (removed)
@@ -1,16 +0,0 @@
-LEVEL := ../../make
-
-C_SOURCES := a.c
-
-all: compressed.out compressed.gnu.out
-
-compressed.out: a.out
- $(OBJCOPY) --compress-debug-sections=zlib $< $@
-
-compressed.gnu.out: a.out
- $(OBJCOPY) --compress-debug-sections=zlib-gnu $< $@
-
-include $(LEVEL)/Makefile.rules
-
-clean::
- $(RM) -f a.o main compressed.out compressed.gnu.out
Removed: lldb/trunk/packages/Python/lldbsuite/test/linux/compressed-debug-info/TestCompressedDebugInfo.py
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/packages/Python/lldbsuite/test/linux/compressed-debug-info/TestCompressedDebugInfo.py?rev=332164&view=auto
==============================================================================
--- lldb/trunk/packages/Python/lldbsuite/test/linux/compressed-debug-info/TestCompressedDebugInfo.py (original)
+++ lldb/trunk/packages/Python/lldbsuite/test/linux/compressed-debug-info/TestCompressedDebugInfo.py (removed)
@@ -1,46 +0,0 @@
-""" Tests that compressed debug info sections are used. """
-import os
-import lldb
-import sys
-from lldbsuite.test.decorators import *
-from lldbsuite.test.lldbtest import *
-from lldbsuite.test import lldbutil
-
-
-class TestCompressedDebugInfo(TestBase):
- mydir = TestBase.compute_mydir(__file__)
-
- def setUp(self):
- TestBase.setUp(self)
-
- @no_debug_info_test # Prevent the genaration of the dwarf version of this test
- @skipUnlessPlatform(["linux"])
- def test_compressed_debug_info(self):
- """Tests that the 'frame variable' works with compressed debug info."""
-
- self.build()
- process = lldbutil.run_to_source_breakpoint(
- self, "main", lldb.SBFileSpec("a.c"), exe_name="compressed.out")[1]
-
- # The process should be stopped at a breakpoint, and the z variable should
- # be in the top frame.
- self.assertTrue(process.GetState() == lldb.eStateStopped,
- STOPPED_DUE_TO_BREAKPOINT)
- frame = process.GetThreadAtIndex(0).GetFrameAtIndex(0)
- self.assertTrue(frame.FindVariable("z").IsValid(), "z is not valid")
-
- @no_debug_info_test # Prevent the genaration of the dwarf version of this test
- @skipUnlessPlatform(["linux"])
- def test_compressed_debug_info_gnu(self):
- """Tests that the 'frame variable' works with gnu-style compressed debug info."""
-
- self.build()
- process = lldbutil.run_to_source_breakpoint(
- self, "main", lldb.SBFileSpec("a.c"), exe_name="compressed.gnu.out")[1]
-
- # The process should be stopped at a breakpoint, and the z variable should
- # be in the top frame.
- self.assertTrue(process.GetState() == lldb.eStateStopped,
- STOPPED_DUE_TO_BREAKPOINT)
- frame = process.GetThreadAtIndex(0).GetFrameAtIndex(0)
- self.assertTrue(frame.FindVariable("z").IsValid(), "z is not valid")
Removed: lldb/trunk/packages/Python/lldbsuite/test/linux/compressed-debug-info/a.c
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/packages/Python/lldbsuite/test/linux/compressed-debug-info/a.c?rev=332164&view=auto
==============================================================================
--- lldb/trunk/packages/Python/lldbsuite/test/linux/compressed-debug-info/a.c (original)
+++ lldb/trunk/packages/Python/lldbsuite/test/linux/compressed-debug-info/a.c (removed)
@@ -1,4 +0,0 @@
-int main() {
- int z = 2;
- return z;
-}
Modified: lldb/trunk/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp?rev=332165&r1=332164&r2=332165&view=diff
==============================================================================
--- lldb/trunk/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp (original)
+++ lldb/trunk/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp Fri May 11 18:25:48 2018
@@ -1757,63 +1757,6 @@ lldb::user_id_t ObjectFileELF::GetSectio
return 0;
}
-static SectionType getSectionType(llvm::StringRef section_name) {
- if (!section_name.startswith(".")) {
- return eSectionTypeOther;
- }
-
- // MISSING? .gnu_debugdata - "mini debuginfo / MiniDebugInfo" section,
- // http://sourceware.org/gdb/onlinedocs/gdb/MiniDebugInfo.html
- // MISSING? .debug-index -
- // http://src.chromium.org/viewvc/chrome/trunk/src/build/gdb-add-index?pathrev=144644
- return llvm::StringSwitch<SectionType>(section_name.drop_front(1))
- .Case("text", eSectionTypeCode)
- .Case("data", eSectionTypeData)
- .Case("bss", eSectionTypeZeroFill)
- .Case("tdata", eSectionTypeData)
- .Case("tbss", eSectionTypeZeroFill)
- // Abbreviations used in the .debug_info section
- .Case("debug_abbrev", eSectionTypeDWARFDebugAbbrev)
- .Case("debug_abbrev.dwo", eSectionTypeDWARFDebugAbbrev)
- .Case("debug_addr", eSectionTypeDWARFDebugAddr)
- // Lookup table for mapping addresses to compilation units
- .Case("debug_aranges", eSectionTypeDWARFDebugAranges)
- .Case("debug_cu_index", eSectionTypeDWARFDebugCuIndex)
- // Call frame information
- .Case("debug_frame", eSectionTypeDWARFDebugFrame)
- // The core DWARF information section
- .Case("debug_info", eSectionTypeDWARFDebugInfo)
- .Case("debug_info.dwo", eSectionTypeDWARFDebugInfo)
- // Line number information
- .Case("debug_line", eSectionTypeDWARFDebugLine)
- .Case("debug_line.dwo", eSectionTypeDWARFDebugLine)
- // Location lists used in DW_AT_location attributes
- .Case("debug_loc", eSectionTypeDWARFDebugLoc)
- .Case("debug_loc.dwo", eSectionTypeDWARFDebugLoc)
- // Macro information
- .Case("debug_macinfo", eSectionTypeDWARFDebugMacInfo)
- .Case("debug_macro", eSectionTypeDWARFDebugMacro)
- .Case("debug_macro.dwo", eSectionTypeDWARFDebugMacro)
- // Lookup table for mapping object and function names to compilation units
- .Case("debug_pubnames", eSectionTypeDWARFDebugPubNames)
- // Lookup table for mapping type names to compilation units
- .Case("debug_pubtypes", eSectionTypeDWARFDebugPubTypes)
- // Address ranges used in DW_AT_ranges attributes
- .Case("debug_ranges", eSectionTypeDWARFDebugRanges)
- // String table used in .debug_info
- .Case("debug_str", eSectionTypeDWARFDebugStr)
- .Case("debug_str.dwo", eSectionTypeDWARFDebugStr)
- .Case("debug_str_offsets", eSectionTypeDWARFDebugStrOffsets)
- .Case("debug_str_offsets.dwo", eSectionTypeDWARFDebugStrOffsets)
- .Case("debug_types", eSectionTypeDWARFDebugTypes)
- .Case("gnu_debugaltlink", eSectionTypeDWARFGNUDebugAltLink)
- .Case("eh_frame", eSectionTypeEHFrame)
- .Case("ARM.exidx", eSectionTypeARMexidx)
- .Case("ARM.extab", eSectionTypeARMextab)
- .Case("gosymtab", eSectionTypeGoSymtab)
- .Default(eSectionTypeOther);
-}
-
void ObjectFileELF::CreateSections(SectionList &unified_section_list) {
if (!m_sections_ap.get() && ParseSectionHeaders()) {
m_sections_ap.reset(new SectionList());
@@ -1828,14 +1771,137 @@ void ObjectFileELF::CreateSections(Secti
I != m_section_headers.end(); ++I) {
const ELFSectionHeaderInfo &header = *I;
- llvm::StringRef section_name = I->section_name.GetStringRef();
+ ConstString &name = I->section_name;
const uint64_t file_size =
header.sh_type == SHT_NOBITS ? 0 : header.sh_size;
const uint64_t vm_size = header.sh_flags & SHF_ALLOC ? header.sh_size : 0;
- SectionType sect_type = getSectionType(section_name);
- bool is_thread_specific =
- section_name.equals(".tdata") || section_name.equals(".tbss");
+ static ConstString g_sect_name_text(".text");
+ static ConstString g_sect_name_data(".data");
+ static ConstString g_sect_name_bss(".bss");
+ static ConstString g_sect_name_tdata(".tdata");
+ static ConstString g_sect_name_tbss(".tbss");
+ static ConstString g_sect_name_dwarf_debug_abbrev(".debug_abbrev");
+ static ConstString g_sect_name_dwarf_debug_addr(".debug_addr");
+ static ConstString g_sect_name_dwarf_debug_aranges(".debug_aranges");
+ static ConstString g_sect_name_dwarf_debug_cu_index(".debug_cu_index");
+ static ConstString g_sect_name_dwarf_debug_frame(".debug_frame");
+ static ConstString g_sect_name_dwarf_debug_info(".debug_info");
+ static ConstString g_sect_name_dwarf_debug_line(".debug_line");
+ static ConstString g_sect_name_dwarf_debug_loc(".debug_loc");
+ static ConstString g_sect_name_dwarf_debug_macinfo(".debug_macinfo");
+ static ConstString g_sect_name_dwarf_debug_macro(".debug_macro");
+ static ConstString g_sect_name_dwarf_debug_pubnames(".debug_pubnames");
+ static ConstString g_sect_name_dwarf_debug_pubtypes(".debug_pubtypes");
+ static ConstString g_sect_name_dwarf_debug_ranges(".debug_ranges");
+ static ConstString g_sect_name_dwarf_debug_str(".debug_str");
+ static ConstString g_sect_name_dwarf_debug_str_offsets(
+ ".debug_str_offsets");
+ static ConstString g_sect_name_dwarf_debug_abbrev_dwo(
+ ".debug_abbrev.dwo");
+ static ConstString g_sect_name_dwarf_debug_info_dwo(".debug_info.dwo");
+ static ConstString g_sect_name_dwarf_debug_line_dwo(".debug_line.dwo");
+ static ConstString g_sect_name_dwarf_debug_macro_dwo(".debug_macro.dwo");
+ static ConstString g_sect_name_dwarf_debug_loc_dwo(".debug_loc.dwo");
+ static ConstString g_sect_name_dwarf_debug_str_dwo(".debug_str.dwo");
+ static ConstString g_sect_name_dwarf_debug_str_offsets_dwo(
+ ".debug_str_offsets.dwo");
+ static ConstString g_sect_name_dwarf_debug_types(".debug_types");
+ static ConstString g_sect_name_eh_frame(".eh_frame");
+ static ConstString g_sect_name_arm_exidx(".ARM.exidx");
+ static ConstString g_sect_name_arm_extab(".ARM.extab");
+ static ConstString g_sect_name_go_symtab(".gosymtab");
+ static ConstString g_sect_name_dwarf_gnu_debugaltlink(".gnu_debugaltlink");
+
+ SectionType sect_type = eSectionTypeOther;
+
+ bool is_thread_specific = false;
+
+ if (name == g_sect_name_text)
+ sect_type = eSectionTypeCode;
+ else if (name == g_sect_name_data)
+ sect_type = eSectionTypeData;
+ else if (name == g_sect_name_bss)
+ sect_type = eSectionTypeZeroFill;
+ else if (name == g_sect_name_tdata) {
+ sect_type = eSectionTypeData;
+ is_thread_specific = true;
+ } else if (name == g_sect_name_tbss) {
+ sect_type = eSectionTypeZeroFill;
+ is_thread_specific = true;
+ }
+ // .debug_abbrev â Abbreviations used in the .debug_info section
+ // .debug_aranges â Lookup table for mapping addresses to compilation
+ // units .debug_frame â Call frame information .debug_info â The core
+ // DWARF information section .debug_line â Line number information
+ // .debug_loc â Location lists used in DW_AT_location attributes
+ // .debug_macinfo â Macro information .debug_pubnames â Lookup table
+ // for mapping object and function names to compilation units
+ // .debug_pubtypes â Lookup table for mapping type names to compilation
+ // units .debug_ranges â Address ranges used in DW_AT_ranges attributes
+ // .debug_str â String table used in .debug_info MISSING?
+ // .gnu_debugdata - "mini debuginfo / MiniDebugInfo" section,
+ // http://sourceware.org/gdb/onlinedocs/gdb/MiniDebugInfo.html MISSING?
+ // .debug-index - http://src.chromium.org/viewvc/chrome/trunk/src/build
+ // /gdb-add-index?pathrev=144644 MISSING? .debug_types - Type
+ // descriptions from DWARF 4? See
+ // http://gcc.gnu.org/wiki/DwarfSeparateTypeInfo
+ else if (name == g_sect_name_dwarf_debug_abbrev)
+ sect_type = eSectionTypeDWARFDebugAbbrev;
+ else if (name == g_sect_name_dwarf_debug_addr)
+ sect_type = eSectionTypeDWARFDebugAddr;
+ else if (name == g_sect_name_dwarf_debug_aranges)
+ sect_type = eSectionTypeDWARFDebugAranges;
+ else if (name == g_sect_name_dwarf_debug_cu_index)
+ sect_type = eSectionTypeDWARFDebugCuIndex;
+ else if (name == g_sect_name_dwarf_debug_frame)
+ sect_type = eSectionTypeDWARFDebugFrame;
+ else if (name == g_sect_name_dwarf_debug_info)
+ sect_type = eSectionTypeDWARFDebugInfo;
+ else if (name == g_sect_name_dwarf_debug_line)
+ sect_type = eSectionTypeDWARFDebugLine;
+ else if (name == g_sect_name_dwarf_debug_loc)
+ sect_type = eSectionTypeDWARFDebugLoc;
+ else if (name == g_sect_name_dwarf_debug_macinfo)
+ sect_type = eSectionTypeDWARFDebugMacInfo;
+ else if (name == g_sect_name_dwarf_debug_macro)
+ sect_type = eSectionTypeDWARFDebugMacro;
+ else if (name == g_sect_name_dwarf_debug_pubnames)
+ sect_type = eSectionTypeDWARFDebugPubNames;
+ else if (name == g_sect_name_dwarf_debug_pubtypes)
+ sect_type = eSectionTypeDWARFDebugPubTypes;
+ else if (name == g_sect_name_dwarf_debug_ranges)
+ sect_type = eSectionTypeDWARFDebugRanges;
+ else if (name == g_sect_name_dwarf_debug_str)
+ sect_type = eSectionTypeDWARFDebugStr;
+ else if (name == g_sect_name_dwarf_debug_types)
+ sect_type = eSectionTypeDWARFDebugTypes;
+ else if (name == g_sect_name_dwarf_debug_str_offsets)
+ sect_type = eSectionTypeDWARFDebugStrOffsets;
+ else if (name == g_sect_name_dwarf_debug_abbrev_dwo)
+ sect_type = eSectionTypeDWARFDebugAbbrev;
+ else if (name == g_sect_name_dwarf_debug_info_dwo)
+ sect_type = eSectionTypeDWARFDebugInfo;
+ else if (name == g_sect_name_dwarf_debug_line_dwo)
+ sect_type = eSectionTypeDWARFDebugLine;
+ else if (name == g_sect_name_dwarf_debug_macro_dwo)
+ sect_type = eSectionTypeDWARFDebugMacro;
+ else if (name == g_sect_name_dwarf_debug_loc_dwo)
+ sect_type = eSectionTypeDWARFDebugLoc;
+ else if (name == g_sect_name_dwarf_debug_str_dwo)
+ sect_type = eSectionTypeDWARFDebugStr;
+ else if (name == g_sect_name_dwarf_debug_str_offsets_dwo)
+ sect_type = eSectionTypeDWARFDebugStrOffsets;
+ else if (name == g_sect_name_eh_frame)
+ sect_type = eSectionTypeEHFrame;
+ else if (name == g_sect_name_arm_exidx)
+ sect_type = eSectionTypeARMexidx;
+ else if (name == g_sect_name_arm_extab)
+ sect_type = eSectionTypeARMextab;
+ else if (name == g_sect_name_go_symtab)
+ sect_type = eSectionTypeGoSymtab;
+ else if (name == g_sect_name_dwarf_gnu_debugaltlink)
+ sect_type = eSectionTypeDWARFGNUDebugAltLink;
const uint32_t permissions =
((header.sh_flags & SHF_ALLOC) ? ePermissionsReadable : 0u) |
@@ -1900,7 +1966,7 @@ void ObjectFileELF::CreateSections(Secti
this, // ObjectFile to which this section belongs and should read
// section data from.
SectionIndex(I), // Section ID.
- I->section_name, // Section name.
+ name, // Section name.
sect_type, // Section type.
addr, // VM address.
vm_size, // VM size in bytes of this section.
@@ -2792,7 +2858,7 @@ Symtab *ObjectFileELF::GetSymtab() {
void ObjectFileELF::RelocateSection(lldb_private::Section *section)
{
- static const llvm::StringRef debug_prefix(".debug");
+ static const char *debug_prefix = ".debug";
// Set relocated bit so we stop getting called, regardless of whether we
// actually relocate.
@@ -2802,18 +2868,18 @@ void ObjectFileELF::RelocateSection(lldb
if (CalculateType() != eTypeObjectFile)
return;
- llvm::StringRef section_name = section->GetName().GetStringRef();
+ const char *section_name = section->GetName().GetCString();
// Can't relocate that which can't be named
- if (section_name.empty())
+ if (section_name == nullptr)
return;
// We don't relocate non-debug sections at the moment
- if (section_name.startswith(debug_prefix))
+ if (strncmp(section_name, debug_prefix, strlen(debug_prefix)))
return;
// Relocation section names to look for
- std::string needle = std::string(".rel") + section_name.str();
- std::string needlea = std::string(".rela") + section_name.str();
+ std::string needle = std::string(".rel") + section_name;
+ std::string needlea = std::string(".rela") + section_name;
for (SectionHeaderCollIter I = m_section_headers.begin();
I != m_section_headers.end(); ++I) {
@@ -2839,7 +2905,7 @@ void ObjectFileELF::ParseUnwindSymbols(S
// First we save the new symbols into a separate list and add them to the
// symbol table after we colleced all symbols we want to add. This is
- // necessary because adding a new symbol invalidates the internal index of
+ // neccessary because adding a new symbol invalidates the internal index of
// the symtab what causing the next lookup to be slow because it have to
// recalculate the index first.
std::vector<Symbol> new_symbols;
More information about the lldb-commits
mailing list