Author: Maciej Fijalkowski <fij...@gmail.com> Branch: dtrace-support Changeset: r76455:5190ebff847e Date: 2015-03-18 17:16 +0200 http://bitbucket.org/pypy/pypy/changeset/5190ebff847e/
Log: try to support debug_probe diff --git a/rpython/rtyper/lltypesystem/lloperation.py b/rpython/rtyper/lltypesystem/lloperation.py --- a/rpython/rtyper/lltypesystem/lloperation.py +++ b/rpython/rtyper/lltypesystem/lloperation.py @@ -557,6 +557,8 @@ # __________ debugging __________ 'debug_view': LLOp(), 'debug_print': LLOp(canrun=True), + 'debug_probe': LLOp(canrun=True), + # dtrace or similar probe call 'debug_start': LLOp(canrun=True), 'debug_stop': LLOp(canrun=True), 'have_debug_prints': LLOp(canrun=True), diff --git a/rpython/rtyper/lltypesystem/opimpl.py b/rpython/rtyper/lltypesystem/opimpl.py --- a/rpython/rtyper/lltypesystem/opimpl.py +++ b/rpython/rtyper/lltypesystem/opimpl.py @@ -594,6 +594,9 @@ def op_debug_flush(): pass +def op_debug_probe(probename, arg): + pass + def op_have_debug_prints(): return debug.have_debug_prints() diff --git a/rpython/translator/c/funcgen.py b/rpython/translator/c/funcgen.py --- a/rpython/translator/c/funcgen.py +++ b/rpython/translator/c/funcgen.py @@ -808,6 +808,14 @@ def OP_DEBUG_STOP(self, op): return self._op_debug('PYPY_DEBUG_STOP', op.args[0]) + def OP_DEBUG_PROBE(self, op): + if not self.db.translator.config.translation.dtrace: + return + assert isinstance(op.args[0], Constant) + val = ''.join(op.args[0].value.chars) + string_literal = c_string_constant(val) + return 'RPYTHON_%s(%d);' % (string_literal, self.expr(op.args[1])) + def OP_DEBUG_ASSERT(self, op): return 'RPyAssert(%s, %s);' % (self.expr(op.args[0]), c_string_constant(op.args[1].value)) diff --git a/rpython/translator/c/test/test_dtrace.py b/rpython/translator/c/test/test_dtrace.py --- a/rpython/translator/c/test/test_dtrace.py +++ b/rpython/translator/c/test/test_dtrace.py @@ -1,12 +1,18 @@ -import subprocess +import subprocess, py, sys from rpython.translator.c.test.test_standalone import StandaloneTests from rpython.rlib.debug import debug_start, debug_stop from rpython.config.translationoption import get_combined_translation_config +from rpython.rtyper.lltypesystem.lloperation import llop +from rpython.rtyper.lltypesystem import lltype class TestDTrace(StandaloneTests): config = get_combined_translation_config(translating=True) config.translation.dtrace = True + + def setup_class(cls): + if sys.platform not in ['freebsd', 'darwin']: + py.test.skip("not supported on other platforms") def test_dtrace_probes(self): def f(argv): @@ -24,3 +30,16 @@ out = p.stdout.read() assert 'pypy_g_f:x-start' in out assert 'pypy_g_f:x-end' in out + + def test_debug_probe(self): + def f(argv): + llop.debug_probe(lltype.Void, "foo", 13) + return 0 + + _, cbuilder = self.compile(f) + exe = cbuilder.executable_name + p = subprocess.Popen(['dtrace', '-n', ':' + exe.basename + '::', + '-c', str(exe)], stdout=subprocess.PIPE, + stderr=subprocess.PIPE) + out = p.stdout.read() + assert 'pypy_g_f:foo' in out _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit