Author: Ronan Lamy <ronan.l...@gmail.com> Branch: Changeset: r82092:e415ef72b422 Date: 2016-02-05 17:26 +0000 http://bitbucket.org/pypy/pypy/changeset/e415ef72b422/
Log: Use regular register_external() call for attach_gdb() diff --git a/rpython/rlib/debug.py b/rpython/rlib/debug.py --- a/rpython/rlib/debug.py +++ b/rpython/rlib/debug.py @@ -4,7 +4,7 @@ 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 @@ -397,12 +397,11 @@ import pdb; pdb.set_trace() if not sys.platform.startswith('win'): - def _make_impl_attach_gdb(): - 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. */ @@ -416,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) _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit