Author: fijal Branch: Changeset: r82099:abe7c26d3bb5 Date: 2016-02-06 11:28 +0100 http://bitbucket.org/pypy/pypy/changeset/abe7c26d3bb5/
Log: merge diff --git a/rpython/jit/backend/llsupport/test/zrpy_vmprof_test.py b/rpython/jit/backend/llsupport/test/zrpy_vmprof_test.py --- a/rpython/jit/backend/llsupport/test/zrpy_vmprof_test.py +++ b/rpython/jit/backend/llsupport/test/zrpy_vmprof_test.py @@ -9,6 +9,10 @@ class CompiledVmprofTest(CCompiledMixin): CPUClass = getcpuclass() + def setup(self): + if self.CPUClass.backend_name != 'x86_64': + py.test.skip("vmprof only supports x86-64 CPUs at the moment") + def _get_TranslationContext(self): t = TranslationContext() t.config.translation.gc = 'incminimark' @@ -83,4 +87,4 @@ except ImportError: pass else: - check_vmprof_output() \ No newline at end of file + check_vmprof_output() diff --git a/rpython/rlib/debug.py b/rpython/rlib/debug.py --- a/rpython/rlib/debug.py +++ b/rpython/rlib/debug.py @@ -1,76 +1,41 @@ -import sys, time +import sys +import time + from rpython.rtyper.extregistry import ExtRegistryEntry from rpython.rlib.objectmodel import we_are_translated from rpython.rlib.rarithmetic import is_valid_int -from rpython.rtyper.extfunc import ExtFuncEntry +from rpython.rtyper.extfunc import register_external from rpython.rtyper.lltypesystem import lltype +from rpython.rtyper.lltypesystem import rffi from rpython.translator.tool.cbuild import ExternalCompilationInfo - -def ll_assert(x, msg): - """After translation to C, this becomes an RPyAssert.""" - assert type(x) is bool, "bad type! got %r" % (type(x),) - assert x, msg - -class Entry(ExtRegistryEntry): - _about_ = ll_assert - - def compute_result_annotation(self, s_x, s_msg): - assert s_msg.is_constant(), ("ll_assert(x, msg): " - "the msg must be constant") - return None - - def specialize_call(self, hop): - vlist = hop.inputargs(lltype.Bool, lltype.Void) - hop.exception_cannot_occur() - hop.genop('debug_assert', vlist) - -class FatalError(Exception): - pass - -def fatalerror(msg): - # print the RPython traceback and abort with a fatal error - if not we_are_translated(): - raise FatalError(msg) - from rpython.rtyper.lltypesystem import lltype - from rpython.rtyper.lltypesystem.lloperation import llop - llop.debug_print_traceback(lltype.Void) - llop.debug_fatalerror(lltype.Void, msg) -fatalerror._dont_inline_ = True -fatalerror._jit_look_inside_ = False -fatalerror._annenforceargs_ = [str] - -def fatalerror_notb(msg): - # a variant of fatalerror() that doesn't print the RPython traceback - if not we_are_translated(): - raise FatalError(msg) - from rpython.rtyper.lltypesystem import lltype - from rpython.rtyper.lltypesystem.lloperation import llop - llop.debug_fatalerror(lltype.Void, msg) -fatalerror_notb._dont_inline_ = True -fatalerror_notb._jit_look_inside_ = False -fatalerror_notb._annenforceargs_ = [str] +# Expose these here (public interface) +from rpython.rtyper.debug import ( + ll_assert, FatalError, fatalerror, fatalerror_notb) class DebugLog(list): def debug_print(self, *args): self.append(('debug_print',) + args) + def debug_start(self, category, time=None): self.append(('debug_start', category, time)) + def debug_stop(self, category, time=None): - for i in xrange(len(self)-1, -1, -1): + for i in xrange(len(self) - 1, -1, -1): if self[i][0] == 'debug_start': assert self[i][1] == category, ( "nesting error: starts with %r but stops with %r" % (self[i][1], category)) starttime = self[i][2] if starttime is not None or time is not None: - self[i:] = [(category, starttime, time, self[i+1:])] + self[i:] = [(category, starttime, time, self[i + 1:])] else: - self[i:] = [(category, self[i+1:])] + self[i:] = [(category, self[i + 1:])] return assert False, ("nesting error: no start corresponding to stop %r" % (category,)) + def __repr__(self): import pprint return pprint.pformat(list(self)) @@ -161,7 +126,6 @@ return self.bookkeeper.immutablevalue(False) def specialize_call(self, hop): - from rpython.rtyper.lltypesystem import lltype t = hop.rtyper.annotator.translator hop.exception_cannot_occur() if t.config.translation.log: @@ -189,7 +153,6 @@ return annmodel.SomeInteger() def specialize_call(self, hop): - from rpython.rtyper.lltypesystem import lltype hop.exception_cannot_occur() return hop.genop('debug_offset', [], resulttype=lltype.Signed) @@ -223,7 +186,6 @@ return None def specialize_call(self, hop): - from rpython.rtyper.lltypesystem import lltype vlist = hop.inputargs(lltype.Signed) hop.exception_cannot_occur() return hop.genop('debug_forked', vlist) @@ -244,7 +206,6 @@ def compute_result_annotation(self, s_RESTYPE, s_pythonfunction, *args_s): from rpython.annotator import model as annmodel from rpython.rtyper.llannotation import lltype_to_annotation - from rpython.rtyper.lltypesystem import lltype assert s_RESTYPE.is_constant() assert s_pythonfunction.is_constant() s_result = s_RESTYPE.const @@ -255,7 +216,6 @@ def specialize_call(self, hop): from rpython.annotator import model as annmodel - from rpython.rtyper.lltypesystem import lltype RESTYPE = hop.args_s[0].const if not isinstance(RESTYPE, lltype.LowLevelType): assert isinstance(RESTYPE, annmodel.SomeObject) @@ -283,7 +243,8 @@ def compute_result_annotation(self, s_arg, s_checker): if not s_checker.is_constant(): - raise ValueError("Second argument of check_annotation must be constant") + raise ValueError( + "Second argument of check_annotation must be constant") checker = s_checker.const checker(s_arg, self.bookkeeper) return s_arg @@ -308,11 +269,14 @@ assert isinstance(s_arg, SomeList) # the logic behind it is that we try not to propagate # make_sure_not_resized, when list comprehension is not on - if self.bookkeeper.annotator.translator.config.translation.list_comprehension_operations: + config = self.bookkeeper.annotator.translator.config + if config.translation.list_comprehension_operations: s_arg.listdef.never_resize() else: from rpython.annotator.annrpython import log - log.WARNING('make_sure_not_resized called, but has no effect since list_comprehension is off') + log.WARNING( + "make_sure_not_resized called, but has no effect since " + "list_comprehension is off") return s_arg def specialize_call(self, hop): @@ -433,15 +397,11 @@ import pdb; pdb.set_trace() if not sys.platform.startswith('win'): - def _make_impl_attach_gdb(): - # circular imports fun :-( - import sys - from rpython.rtyper.lltypesystem import rffi - if sys.platform.startswith('linux'): - # Only necessary on Linux - eci = ExternalCompilationInfo(includes=['string.h', 'assert.h', - 'sys/prctl.h'], - post_include_bits=[""" + if sys.platform.startswith('linux'): + # Only necessary on Linux + eci = ExternalCompilationInfo(includes=['string.h', 'assert.h', + 'sys/prctl.h'], + post_include_bits=[""" /* If we have an old Linux kernel (or compile with old system headers), the following two macros are not defined. But we would still like a pypy translated on such a system to run on a more modern system. */ @@ -455,55 +415,38 @@ prctl(PR_SET_PTRACER, PR_SET_PTRACER_ANY); } """]) - allow_attach = rffi.llexternal( - "pypy__allow_attach", [], lltype.Void, - compilation_info=eci, _nowrapper=True) + allow_attach = rffi.llexternal( + "pypy__allow_attach", [], lltype.Void, + compilation_info=eci, _nowrapper=True) + else: + # Do nothing, there's no prctl + def allow_attach(): + pass + + def impl_attach_gdb(): + import os + allow_attach() + pid = os.getpid() + gdbpid = os.fork() + if gdbpid == 0: + shell = os.environ.get("SHELL") or "/bin/sh" + sepidx = shell.rfind(os.sep) + 1 + if sepidx > 0: + argv0 = shell[sepidx:] + else: + argv0 = shell + try: + os.execv(shell, [argv0, "-c", "gdb -p %d" % pid]) + except OSError as e: + os.write(2, "Could not start GDB: %s" % ( + os.strerror(e.errno))) + raise SystemExit else: - # Do nothing, there's no prctl - def allow_attach(): - pass + time.sleep(1) # give the GDB time to attach - def impl_attach_gdb(): - import os - allow_attach() - pid = os.getpid() - gdbpid = os.fork() - if gdbpid == 0: - shell = os.environ.get("SHELL") or "/bin/sh" - sepidx = shell.rfind(os.sep) + 1 - if sepidx > 0: - argv0 = shell[sepidx:] - else: - argv0 = shell - try: - os.execv(shell, [argv0, "-c", "gdb -p %d" % pid]) - except OSError as e: - os.write(2, "Could not start GDB: %s" % ( - os.strerror(e.errno))) - raise SystemExit - else: - time.sleep(1) # give the GDB time to attach +else: + def impl_attach_gdb(): + print "Don't know how to attach GDB on Windows" - return impl_attach_gdb -else: - def _make_impl_attach_gdb(): - def impl_attach_gdb(): - print "Don't know how to attach GDB on Windows" - return impl_attach_gdb - - -class FunEntry(ExtFuncEntry): - _about_ = attach_gdb - signature_args = [] - #lltypeimpl = staticmethod(impl_attach_gdb) --- done lazily below - name = "impl_attach_gdb" - - @property - def lltypeimpl(self): - if not hasattr(self.__class__, '_lltypeimpl'): - self.__class__._lltypeimpl = staticmethod(_make_impl_attach_gdb()) - return self._lltypeimpl - - def compute_result_annotation(self, *args_s): - from rpython.annotator.model import s_None - return s_None +register_external(attach_gdb, [], result=None, + export_name="impl_attach_gdb", llimpl=impl_attach_gdb) diff --git a/rpython/rtyper/debug.py b/rpython/rtyper/debug.py new file mode 100644 --- /dev/null +++ b/rpython/rtyper/debug.py @@ -0,0 +1,47 @@ +from rpython.rlib.objectmodel import we_are_translated +from rpython.rtyper.extregistry import ExtRegistryEntry +from rpython.rtyper.lltypesystem import lltype + +def ll_assert(x, msg): + """After translation to C, this becomes an RPyAssert.""" + assert type(x) is bool, "bad type! got %r" % (type(x),) + assert x, msg + +class Entry(ExtRegistryEntry): + _about_ = ll_assert + + def compute_result_annotation(self, s_x, s_msg): + assert s_msg.is_constant(), ("ll_assert(x, msg): " + "the msg must be constant") + return None + + def specialize_call(self, hop): + vlist = hop.inputargs(lltype.Bool, lltype.Void) + hop.exception_cannot_occur() + hop.genop('debug_assert', vlist) + +class FatalError(Exception): + pass + +def fatalerror(msg): + # print the RPython traceback and abort with a fatal error + if not we_are_translated(): + raise FatalError(msg) + from rpython.rtyper.lltypesystem import lltype + from rpython.rtyper.lltypesystem.lloperation import llop + llop.debug_print_traceback(lltype.Void) + llop.debug_fatalerror(lltype.Void, msg) +fatalerror._dont_inline_ = True +fatalerror._jit_look_inside_ = False +fatalerror._annenforceargs_ = [str] + +def fatalerror_notb(msg): + # a variant of fatalerror() that doesn't print the RPython traceback + if not we_are_translated(): + raise FatalError(msg) + from rpython.rtyper.lltypesystem import lltype + from rpython.rtyper.lltypesystem.lloperation import llop + llop.debug_fatalerror(lltype.Void, msg) +fatalerror_notb._dont_inline_ = True +fatalerror_notb._jit_look_inside_ = False +fatalerror_notb._annenforceargs_ = [str] diff --git a/rpython/rtyper/lltypesystem/rbuilder.py b/rpython/rtyper/lltypesystem/rbuilder.py --- a/rpython/rtyper/lltypesystem/rbuilder.py +++ b/rpython/rtyper/lltypesystem/rbuilder.py @@ -1,7 +1,7 @@ from rpython.rlib import rgc, jit from rpython.rlib.objectmodel import enforceargs from rpython.rlib.rarithmetic import ovfcheck, r_uint, intmask -from rpython.rlib.debug import ll_assert +from rpython.rtyper.debug import ll_assert from rpython.rlib.unroll import unrolling_iterable from rpython.rtyper.rptr import PtrRepr from rpython.rtyper.lltypesystem import lltype, rffi, rstr @@ -11,7 +11,7 @@ from rpython.rtyper.rbuilder import AbstractStringBuilderRepr from rpython.tool.sourcetools import func_with_new_name from rpython.rtyper.annlowlevel import llstr, llunicode - + # ------------------------------------------------------------ diff --git a/rpython/rtyper/lltypesystem/rbytearray.py b/rpython/rtyper/lltypesystem/rbytearray.py --- a/rpython/rtyper/lltypesystem/rbytearray.py +++ b/rpython/rtyper/lltypesystem/rbytearray.py @@ -1,7 +1,7 @@ from rpython.rtyper.rbytearray import AbstractByteArrayRepr from rpython.rtyper.lltypesystem import lltype, rstr -from rpython.rlib.debug import ll_assert +from rpython.rtyper.debug import ll_assert BYTEARRAY = lltype.GcForwardReference() diff --git a/rpython/rtyper/lltypesystem/rdict.py b/rpython/rtyper/lltypesystem/rdict.py --- a/rpython/rtyper/lltypesystem/rdict.py +++ b/rpython/rtyper/lltypesystem/rdict.py @@ -4,7 +4,7 @@ from rpython.rtyper.lltypesystem import lltype from rpython.rtyper.lltypesystem.lloperation import llop from rpython.rlib import objectmodel, jit -from rpython.rlib.debug import ll_assert +from rpython.rtyper.debug import ll_assert from rpython.rlib.rarithmetic import r_uint, intmask, LONG_BIT from rpython.rtyper import rmodel from rpython.rtyper.error import TyperError diff --git a/rpython/rtyper/lltypesystem/rlist.py b/rpython/rtyper/lltypesystem/rlist.py --- a/rpython/rtyper/lltypesystem/rlist.py +++ b/rpython/rtyper/lltypesystem/rlist.py @@ -1,5 +1,5 @@ from rpython.rlib import rgc, jit, types -from rpython.rlib.debug import ll_assert +from rpython.rtyper.debug import ll_assert from rpython.rlib.signature import signature from rpython.rtyper.error import TyperError from rpython.rtyper.lltypesystem import rstr diff --git a/rpython/rtyper/lltypesystem/rordereddict.py b/rpython/rtyper/lltypesystem/rordereddict.py --- a/rpython/rtyper/lltypesystem/rordereddict.py +++ b/rpython/rtyper/lltypesystem/rordereddict.py @@ -6,7 +6,7 @@ from rpython.rlib import objectmodel, jit, rgc, types from rpython.rlib.signature import signature from rpython.rlib.objectmodel import specialize, likely -from rpython.rlib.debug import ll_assert +from rpython.rtyper.debug import ll_assert from rpython.rlib.rarithmetic import r_uint, intmask from rpython.rtyper import rmodel from rpython.rtyper.error import TyperError diff --git a/rpython/rtyper/lltypesystem/rstr.py b/rpython/rtyper/lltypesystem/rstr.py --- a/rpython/rtyper/lltypesystem/rstr.py +++ b/rpython/rtyper/lltypesystem/rstr.py @@ -2,12 +2,12 @@ from rpython.annotator import model as annmodel from rpython.rlib import jit, types -from rpython.rlib.debug import ll_assert from rpython.rlib.objectmodel import (malloc_zero_filled, we_are_translated, _hash_string, keepalive_until_here, specialize, enforceargs) from rpython.rlib.signature import signature from rpython.rlib.rarithmetic import ovfcheck from rpython.rtyper.error import TyperError +from rpython.rtyper.debug import ll_assert from rpython.rtyper.lltypesystem import ll_str, llmemory from rpython.rtyper.lltypesystem.lltype import (GcStruct, Signed, Array, Char, UniChar, Ptr, malloc, Bool, Void, GcArray, nullptr, cast_primitive, diff --git a/rpython/rtyper/rlist.py b/rpython/rtyper/rlist.py --- a/rpython/rtyper/rlist.py +++ b/rpython/rtyper/rlist.py @@ -1,7 +1,7 @@ from rpython.annotator import model as annmodel from rpython.flowspace.model import Constant from rpython.rlib import rgc, jit, types -from rpython.rlib.debug import ll_assert +from rpython.rtyper.debug import ll_assert from rpython.rlib.objectmodel import malloc_zero_filled, enforceargs, specialize from rpython.rlib.signature import signature from rpython.rlib.rarithmetic import ovfcheck, widen, r_uint, intmask diff --git a/rpython/rtyper/rpbc.py b/rpython/rtyper/rpbc.py --- a/rpython/rtyper/rpbc.py +++ b/rpython/rtyper/rpbc.py @@ -7,7 +7,7 @@ from rpython.annotator.classdesc import ClassDesc from rpython.flowspace.model import Constant from rpython.annotator.argument import simple_args -from rpython.rlib.debug import ll_assert +from rpython.rtyper.debug import ll_assert from rpython.rlib.unroll import unrolling_iterable from rpython.rtyper import rclass, callparse from rpython.rtyper.rclass import CLASSTYPE, OBJECT_VTABLE, OBJECTPTR diff --git a/rpython/rtyper/test/test_rlist.py b/rpython/rtyper/test/test_rlist.py --- a/rpython/rtyper/test/test_rlist.py +++ b/rpython/rtyper/test/test_rlist.py @@ -3,7 +3,7 @@ import py -from rpython.rlib.debug import ll_assert +from rpython.rtyper.debug import ll_assert from rpython.rtyper.error import TyperError from rpython.rtyper.llinterp import LLException, LLAssertFailure from rpython.rtyper.lltypesystem import rlist as ll_rlist _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit