From b6f36dd7757f5cdb460f7b2ccf4f646099a320af Mon Sep 17 00:00:00 2001 From: Sterling Augustine Date: Fri, 26 Jun 2020 11:24:16 -0700 Subject: Move GetSectionByName out of CompilationUnit. For the upcoming Dwarf5 LineInfo changes, we will need to get several additional sections by name, but without a the Compilation Unit. This change prepares for that. Change-Id: I566855abb339a856110a2f7d243d3848fe2b3c18 Reviewed-on: https://chromium-review.googlesource.com/c/breakpad/breakpad/+/2268861 Reviewed-by: Mark Mentovai --- src/common/dwarf/dwarf2reader.cc | 26 ++++++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-) (limited to 'src/common/dwarf/dwarf2reader.cc') diff --git a/src/common/dwarf/dwarf2reader.cc b/src/common/dwarf/dwarf2reader.cc index 138f9200..a7eedaa1 100644 --- a/src/common/dwarf/dwarf2reader.cc +++ b/src/common/dwarf/dwarf2reader.cc @@ -53,6 +53,18 @@ namespace dwarf2reader { +const SectionMap::const_iterator GetSectionByName(const SectionMap& + sections, const char *name) { + assert(name[0] == '.'); + auto iter = sections.find(name); + if (iter != sections.end()) + return iter; + std::string macho_name("__"); + macho_name += name + 1; + iter = sections.find(macho_name); + return iter; +} + CompilationUnit::CompilationUnit(const string& path, const SectionMap& sections, uint64_t offset, ByteReader* reader, Dwarf2Handler* handler) @@ -100,7 +112,8 @@ void CompilationUnit::ReadAbbrevs() { return; // First get the debug_abbrev section. - SectionMap::const_iterator iter = GetSectionByName(".debug_abbrev"); + SectionMap::const_iterator iter = + GetSectionByName(sections_, ".debug_abbrev"); assert(iter != sections_.end()); abbrevs_ = new std::vector; @@ -352,7 +365,8 @@ void CompilationUnit::ReadHeader() { uint64_t CompilationUnit::Start() { // First get the debug_info section. - SectionMap::const_iterator iter = GetSectionByName(".debug_info"); + SectionMap::const_iterator iter = + GetSectionByName(sections_, ".debug_info"); assert(iter != sections_.end()); // Set up our buffer @@ -383,28 +397,28 @@ uint64_t CompilationUnit::Start() { ReadAbbrevs(); // Set the string section if we have one. - iter = GetSectionByName(".debug_str"); + iter = GetSectionByName(sections_, ".debug_str"); if (iter != sections_.end()) { string_buffer_ = iter->second.first; string_buffer_length_ = iter->second.second; } // Set the line string section if we have one. - iter = GetSectionByName(".debug_line_str"); + iter = GetSectionByName(sections_, ".debug_line_str"); if (iter != sections_.end()) { line_string_buffer_ = iter->second.first; line_string_buffer_length_ = iter->second.second; } // Set the string offsets section if we have one. - iter = GetSectionByName(".debug_str_offsets"); + iter = GetSectionByName(sections_, ".debug_str_offsets"); if (iter != sections_.end()) { str_offsets_buffer_ = iter->second.first; str_offsets_buffer_length_ = iter->second.second; } // Set the address section if we have one. - iter = GetSectionByName(".debug_addr"); + iter = GetSectionByName(sections_, ".debug_addr"); if (iter != sections_.end()) { addr_buffer_ = iter->second.first; addr_buffer_length_ = iter->second.second; -- cgit v1.2.1