class Dwarftree::DebugRangesParser

Constants

CommandError

Public Class Methods

parse(object) click to toggle source

@param [String] object

# File lib/dwarftree/debug_ranges_parser.rb, line 5
def self.parse(object)
  cmd = ['objdump', '--dwarf=Ranges', object]
  debug_ranges = IO.popen(cmd, &:read)
  unless $?.success?
    raise CommandError.new("Failed to run: #{cmd.join(' ')}")
  end
  new.parse(debug_ranges)
end

Public Instance Methods

parse(debug_ranges) click to toggle source

@param [String] debug_ranges @return [Hash{ Integer => Array<Range<Integer>> }]

# File lib/dwarftree/debug_ranges_parser.rb, line 16
def parse(debug_ranges)
  offset_ranges = Hash.new { |h, k| h[k] = [] }
  debug_ranges.scan(/^    \h{8} \h{16} \h{16} $/) do |line|
    offset, range_beg, range_end = line.strip.split(' ')
    offset_ranges[offset.to_i(16)] << (range_beg.to_i(16)..range_end.to_i(16))
  end
  offset_ranges
end