diff options
Diffstat (limited to 'src/common/dwarf_cu_to_module.h')
-rw-r--r-- | src/common/dwarf_cu_to_module.h | 25 |
1 files changed, 20 insertions, 5 deletions
diff --git a/src/common/dwarf_cu_to_module.h b/src/common/dwarf_cu_to_module.h index 3e15b667..e71c3e77 100644 --- a/src/common/dwarf_cu_to_module.h +++ b/src/common/dwarf_cu_to_module.h @@ -89,6 +89,11 @@ class DwarfCUToModule: public dwarf2reader::RootDIEHandler { const uint8_t* contents, uint64_t length); + void SetDebugRangeInfo(const uint8_t* contents, uint64_t size, + dwarf2reader::ByteReader* reader) { + range_list_reader_ = dwarf2reader::RangeListReader(contents, size, reader); + } + // Clear the section map for testing. void ClearSectionMapForTest(); @@ -119,6 +124,9 @@ class DwarfCUToModule: public dwarf2reader::RootDIEHandler { // True if we are handling references between compilation units. const bool handle_inter_cu_refs_; + // Reader for .debug_ranges section, which is global to the file. + dwarf2reader::RangeListReader range_list_reader_; + // Inter-compilation unit data used internally by the handlers. scoped_ptr<FilePrivate> file_private_; }; @@ -127,16 +135,23 @@ class DwarfCUToModule: public dwarf2reader::RootDIEHandler { // DwarfCUToModule. class RangesHandler { public: - RangesHandler() { } + RangesHandler() : reader_(nullptr) { } virtual ~RangesHandler() { } // Called when finishing a function to populate the function's ranges. - // The ranges' entries are read starting from offset in the .debug_ranges - // section, base_address holds the base PC the range list values are - // offsets off. Return false if the rangelist falls out of the - // .debug_ranges section. + // base_address holds the base PC the range list values are offsets + // off. Return false if the rangelist falls out of the relevant section. virtual bool ReadRanges(uint64_t offset, Module::Address base_address, vector<Module::Range>* ranges) = 0; + + // Read ranges from this buffer and interpret them according to attr. Called + // upon seeing a DW_AT_ranges or DW_AT_rngslist attribute. + void SetRangesReader(dwarf2reader::RangeListReader* reader) { + reader_ = reader; + } + + protected: + dwarf2reader::RangeListReader* reader_; }; // An abstract base class for handlers that handle DWARF line data |