diff options
Diffstat (limited to 'src/common/mac')
-rw-r--r-- | src/common/mac/dump_syms.cc | 24 |
1 files changed, 8 insertions, 16 deletions
diff --git a/src/common/mac/dump_syms.cc b/src/common/mac/dump_syms.cc index 24bcd653..9ee6e006 100644 --- a/src/common/mac/dump_syms.cc +++ b/src/common/mac/dump_syms.cc @@ -311,23 +311,14 @@ string DumpSymbols::Identifier() { class DumpSymbols::DumperRangesHandler: public DwarfCUToModule::RangesHandler { public: - DumperRangesHandler(const uint8_t* buffer, uint64_t size, - dwarf2reader::ByteReader* reader) - : buffer_(buffer), size_(size), reader_(reader) { } + DumperRangesHandler() { } bool ReadRanges(uint64_t offset, Module::Address base_address, vector<Module::Range>* ranges) { DwarfRangeListHandler handler(base_address, ranges); - dwarf2reader::RangeListReader rangelist_reader(buffer_, size_, reader_, - &handler); - return rangelist_reader.ReadRangeList(offset); + return reader_->ReadRangeList(offset, &handler); } - - private: - const uint8_t* buffer_; - uint64_t size_; - dwarf2reader::ByteReader* reader_; }; // A line-to-module loader that accepts line number info parsed by @@ -457,17 +448,18 @@ void DumpSymbols::ReadDwarf(google_breakpad::Module* module, DumperLineToModule line_to_module(&byte_reader); // Optional .debug_ranges reader - scoped_ptr<DumperRangesHandler> ranges_handler; dwarf2reader::SectionMap::const_iterator ranges_entry = file_context.section_map().find("__debug_ranges"); if (ranges_entry != file_context.section_map().end()) { const std::pair<const uint8_t*, uint64_t>& ranges_section = ranges_entry->second; - ranges_handler.reset( - new DumperRangesHandler(ranges_section.first, ranges_section.second, - &byte_reader)); + file_context.SetDebugRangeInfo(ranges_section.first, + ranges_section.second, + &byte_reader); } + DumperRangesHandler ranges_handler; + // Walk the __debug_info section, one compilation unit at a time. uint64_t debug_info_length = debug_info_section.second; for (uint64_t offset = 0; offset < debug_info_length;) { @@ -476,7 +468,7 @@ void DumpSymbols::ReadDwarf(google_breakpad::Module* module, DwarfCUToModule::WarningReporter reporter(selected_object_name_, offset); DwarfCUToModule root_handler(&file_context, &line_to_module, - ranges_handler.get(), &reporter); + &ranges_handler, &reporter); // Make a Dwarf2Handler that drives our DIEHandler. dwarf2reader::DIEDispatcher die_dispatcher(&root_handler); // Make a DWARF parser for the compilation unit at OFFSET. |