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)))
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()
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)))