Author: Remi Meier <remi.me...@gmail.com> Branch: stmgc-c4 Changeset: r65642:71e70dc573d8 Date: 2013-07-25 12:42 +0200 http://bitbucket.org/pypy/pypy/changeset/71e70dc573d8/
Log: let jitviewer show symbol names for addresses (like viewcode.py) diff --git a/pypy/tool/jitlogparser/parser.py b/pypy/tool/jitlogparser/parser.py --- a/pypy/tool/jitlogparser/parser.py +++ b/pypy/tool/jitlogparser/parser.py @@ -4,6 +4,8 @@ from rpython.jit.tool.oparser import OpParser from rpython.tool.logparser import parse_log_file, extract_category from copy import copy +from rpython.jit.backend.tool.viewcode import (machine_code_dump, load_symbols, + lineaddresses) def parse_code_data(arg): name = None @@ -74,7 +76,7 @@ use_mock_model = True def postprocess(self, loop, backend_dump=None, backend_tp=None, - dump_start=0): + dump_start=0, symbols=None): if backend_dump is not None: raw_asm = self._asm_disassemble(backend_dump.decode('hex'), backend_tp, dump_start) @@ -89,8 +91,15 @@ if not start: start = int(adr.strip(":"), 16) ofs = int(adr.strip(":"), 16) - start + # add symbols to addresses: + for addr in lineaddresses(v): + sym = symbols.get(addr) + if sym: + v = '%s\t%s\n' % (v.rstrip(), + sym.replace('\xb7', '')) if ofs >= 0: asm.append((ofs, v.strip("\n"))) + # asm_index = 0 for i, op in enumerate(loop.operations): end = 0 @@ -113,7 +122,6 @@ return loop def _asm_disassemble(self, d, origin_addr, tp): - from rpython.jit.backend.tool.viewcode import machine_code_dump return list(machine_code_dump(d, tp, origin_addr)) @classmethod @@ -387,15 +395,22 @@ addr = int(m.group(1), 16) addrs.setdefault(addr, []).append(name) dumps = {} + executables = set() + symbols = {} for entry in extract_category(log, 'jit-backend-dump'): entry = purge_thread_numbers(entry) - backend, _, dump, _ = entry.split("\n") + backend, executable, dump, _ = entry.split("\n") + _, executable = executable.split(" ") + if executable not in executables: + symbols.update(load_symbols(executable)) + executables.add(executable) _, addr, _, data = re.split(" +", dump) backend_name = backend.split(" ")[1] addr = int(addr[1:], 16) if addr in addrs and addrs[addr]: name = addrs[addr].pop(0) # they should come in order dumps[name] = (backend_name, addr, data) + loops = [] for entry in extract_category(log, 'jit-log-opt'): parser = ParserCls(entry, None, {}, 'lltype', None, @@ -416,7 +431,8 @@ bname=bname, loop=loop: parser.postprocess(loop, backend_tp=bname, backend_dump=dump, - dump_start=start_ofs)) + dump_start=start_ofs, + symbols=symbols)) loops += split_trace(loop) return log, loops diff --git a/rpython/jit/backend/tool/viewcode.py b/rpython/jit/backend/tool/viewcode.py --- a/rpython/jit/backend/tool/viewcode.py +++ b/rpython/jit/backend/tool/viewcode.py @@ -205,7 +205,8 @@ for addr in lineaddresses(line): sym = symbols.get(addr) if sym: - lines[i] = '%s\t%s\n' % (lines[i].rstrip(), sym) + lines[i] = '%s\t%s\n' % (lines[i].rstrip(), + str(sym).strip('\xb7')) self.text = ''.join(lines) return self.text _______________________________________________ pypy-commit mailing list pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit