def __init__(self, objname, marker_addr = 0, marker_name = '_Z5rdtscv'):
    self.bin = objname
    if marker_addr == 0:
      self.offset = 0
    else:
      base = eval('0x' + ex('nm %s | grep %s' % (self.bin, marker_name)).split()[0])
      text = eval('0x' + ex(r'objdump -h %s | grep "\.text"' % self.bin).split()[5])
      self.offset = marker_addr - base

    self.cache = {}

  def addr2line(self, a):
    a = long(a)
    if a < self.offset:
      return ('??', '??', '??')
    if a not in self.cache:
      res = ex('addr2line -Csfe %s %x' % (self.bin, a - self.offset))
      function, file = res.split('\n', 1)
      function = function.split('(')[0]
      file, line = file.split(':')
      self.cache[a] = (file, function, line.strip())
    return self.cache[a]

if __name__ == '__main__':
  if len(sys.argv) < 2:
    print 'Usage: addr2line.py <address-of-rdtsc> [<address-to-resolve> ]*'
    sys.exit(1)
  a2l = Addr2Line(os.path.join(env_setup.sim_root(), 'lib', 'pin_sim.so'), long(sys.argv[1]))
  for addr in sys.argv[2:]:
    print ':'.join(a2l(long(addr)))
Exemple #2
0
def git(args):
    return ex_ret('git --git-dir="%s/.git" %s' %
                  (env_setup.sim_root(), args)).strip()
if len(sys.argv) > 1:
    if sys.argv[1] == '-':
        data = sys.stdin.readlines()
    else:
        data = file(sys.argv[1]).xreadlines()
else:
    data = file('debug_backtrace.out').xreadlines()

objname = data.next().strip()
marker = long(data.next())
backtrace = data.next().split()
message = data.next()

if objname == 'sniper':
    bin = os.path.join(env_setup.sim_root(), 'lib', 'sniper')
elif objname == 'pin_sim.so':
    bin = os.path.join(env_setup.sim_root(), 'lib', 'pin_sim.so')
elif objname == 'sift_recorder':
    bin = os.path.join(env_setup.sim_root(), 'sift', 'recorder',
                       'sift_recorder')
else:
    print >> sys.stderr, 'Unknown object name', objname

a2l = addr2line.Addr2Line(bin, marker)

print '-' * 60
print message
print 'Backtrace:'
for addr in backtrace:
    (file, function, line) = a2l.addr2line(addr)
if len(sys.argv) > 1:
  if sys.argv[1] == '-':
    data = sys.stdin.readlines()
  else:
    data = file(sys.argv[1]).xreadlines()
else:
  data = file('debug_backtrace.out').xreadlines()

objname = data.next().strip()
marker = long(data.next())
backtrace = data.next().split()
message = data.next()

if objname == 'sniper':
  bin = os.path.join(env_setup.sim_root(), 'lib', 'sniper')
elif objname == 'pin_sim.so':
  bin = os.path.join(env_setup.sim_root(), 'lib', 'pin_sim.so')
elif objname == 'sift_recorder':
  bin = os.path.join(env_setup.sim_root(), 'sift', 'recorder', 'sift_recorder')
else:
  print >> sys.stderr, 'Unknown object name', objname

a2l = addr2line.Addr2Line(bin, marker)

print '-'*60
print message
print 'Backtrace:'
for addr in backtrace:
  (file, function, line) = a2l.addr2line(addr)
  print '   ', ':'.join((file, function, line)).strip()
Exemple #5
0
        self.bin = objname
        if marker_addr == 0:
            self.offset = 0
        else:
            base = eval("0x" + ex("nm %s | grep %s" % (self.bin, marker_name)).split()[0])
            text = eval("0x" + ex(r'objdump -h %s | grep "\.text"' % self.bin).split()[5])
            self.offset = marker_addr - base

        self.cache = {}

    def addr2line(self, a):
        a = long(a)
        if a < self.offset:
            return ("??", "??", "??")
        if a not in self.cache:
            res = ex("addr2line -Csfe %s %x" % (self.bin, a - self.offset))
            function, file = res.split("\n", 1)
            function = function.split("(")[0]
            file, line = file.split(":")
            self.cache[a] = (file, function, line.strip())
        return self.cache[a]


if __name__ == "__main__":
    if len(sys.argv) < 2:
        print "Usage: addr2line.py <address-of-rdtsc> [<address-to-resolve> ]*"
        sys.exit(1)
    a2l = Addr2Line(os.path.join(env_setup.sim_root(), "lib", "pin_sim.so"), long(sys.argv[1]))
    for addr in sys.argv[2:]:
        print ":".join(a2l(long(addr)))