Author: Alex Gaynor <alex.gay...@gmail.com> Branch: Changeset: r66100:5b2ef39d2fc9 Date: 2013-08-12 18:41 -0400 http://bitbucket.org/pypy/pypy/changeset/5b2ef39d2fc9/
Log: Merged upstream 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 @@ -85,7 +85,7 @@ continue e = elem.split("\t") adr = e[0] - v = " ".join(e[2:]) + v = elem # --- more compactly: " ".join(e[2:]) if not start: start = int(adr.strip(":"), 16) ofs = int(adr.strip(":"), 16) - start @@ -379,15 +379,16 @@ name = entry[:entry.find('(') - 1].lower() addr = int(m.group(1), 16) addrs.setdefault(addr, []).append(name) + from rpython.jit.backend.tool.viewcode import World + world = World() + for entry in extract_category(log, 'jit-backend-dump'): + world.parse(entry.splitlines(True), truncate_addr=False) dumps = {} - for entry in extract_category(log, 'jit-backend-dump'): - backend, _, dump, _ = entry.split("\n") - _, 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) + for r in world.ranges: + if r.addr in addrs and addrs[r.addr]: + name = addrs[r.addr].pop(0) # they should come in order + data = r.data.encode('hex') # backward compatibility + dumps[name] = (world.backend_name, r.addr, data) loops = [] for entry in extract_category(log, 'jit-log-opt'): parser = ParserCls(entry, None, {}, 'lltype', None, diff --git a/rpython/jit/backend/arm/assembler.py b/rpython/jit/backend/arm/assembler.py --- a/rpython/jit/backend/arm/assembler.py +++ b/rpython/jit/backend/arm/assembler.py @@ -62,7 +62,8 @@ self.current_clt = looptoken.compiled_loop_token self.mc = InstrBuilder(self.cpu.cpuinfo.arch_version) self.pending_guards = [] - assert self.datablockwrapper is None + #assert self.datablockwrapper is None --- but obscure case + # possible, e.g. getting MemoryError and continuing allblocks = self.get_asmmemmgr_blocks(looptoken) self.datablockwrapper = MachineDataBlockWrapper(self.cpu.asmmemmgr, allblocks) @@ -76,7 +77,6 @@ self._regalloc = None self.mc = None self.pending_guards = None - assert self.datablockwrapper is None def setup_failure_recovery(self): self.failure_recovery_code = [0, 0, 0, 0] diff --git a/rpython/jit/backend/arm/regalloc.py b/rpython/jit/backend/arm/regalloc.py --- a/rpython/jit/backend/arm/regalloc.py +++ b/rpython/jit/backend/arm/regalloc.py @@ -1196,9 +1196,8 @@ def prepare_op_guard_not_forced_2(self, op, fcond): self.rm.before_call(op.getfailargs(), save_all_regs=True) - fail_locs = [self.loc(v) for v in op.getfailargs()] - self.assembler.store_force_descr(op, fail_locs, - self.fm.get_frame_depth()) + fail_locs = self._prepare_guard(op) + self.assembler.store_force_descr(op, fail_locs[1:], fail_locs[0].value) self.possibly_free_vars(op.getfailargs()) def prepare_guard_call_may_force(self, op, guard_op, fcond): 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 @@ -240,7 +240,7 @@ self.backend_name = None self.executable_name = None - def parse(self, f, textonly=True): + def parse(self, f, textonly=True, truncate_addr=True): for line in f: if line.startswith('BACKEND '): self.backend_name = line.split(' ')[1].strip() @@ -250,7 +250,11 @@ assert pieces[2].startswith('+') if len(pieces) == 3: continue # empty line - baseaddr = long(pieces[1][1:], 16) & 0xFFFFFFFFL + baseaddr = long(pieces[1][1:], 16) + if truncate_addr: + baseaddr &= 0xFFFFFFFFL + elif baseaddr < 0: + baseaddr += (2 * sys.maxint + 2) offset = int(pieces[2][1:]) addr = baseaddr + offset data = pieces[3].replace(':', '').decode('hex') @@ -268,14 +272,21 @@ pieces = line.split(None, 3) assert pieces[1].startswith('@') assert pieces[2].startswith('+') - baseaddr = long(pieces[1][1:], 16) & 0xFFFFFFFFL + baseaddr = long(pieces[1][1:], 16) + if truncate_addr: + baseaddr &= 0xFFFFFFFFL + elif baseaddr < 0: + baseaddr += (2 * sys.maxint + 2) offset = int(pieces[2][1:]) addr = baseaddr + offset self.logentries[addr] = pieces[3] elif line.startswith('SYS_EXECUTABLE '): filename = line[len('SYS_EXECUTABLE '):].strip() if filename != self.executable_name and filename != '??': - self.symbols.update(load_symbols(filename)) + try: + self.symbols.update(load_symbols(filename)) + except Exception as e: + print e self.executable_name = filename def find_cross_references(self): _______________________________________________ pypy-commit mailing list pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit