mirror of
https://github.com/python/cpython.git
synced 2025-08-22 17:55:18 +00:00
bpo-32280: Store _PyRuntime in a named section (GH-4802)
This commit stores the _PyRuntime structure in a section of the same name. This allows a debugging or crash reporting tool to quickly locate this structure at runtime without requiring the symbol table. Co-authored-by: Pablo Galindo <pablogsal@gmail.com>
This commit is contained in:
parent
b250f89bb7
commit
35002aa8f6
1 changed files with 28 additions and 2 deletions
|
@ -17,6 +17,10 @@
|
|||
|
||||
#include <locale.h> // setlocale()
|
||||
|
||||
#if defined(__APPLE__)
|
||||
#include <mach-o/loader.h>
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_SIGNAL_H
|
||||
# include <signal.h> // SIG_IGN
|
||||
#endif
|
||||
|
@ -34,7 +38,6 @@
|
|||
(PyObject_TypeCheck((op), &PyWindowsConsoleIO_Type))
|
||||
#endif
|
||||
|
||||
|
||||
#define PUTS(fd, str) _Py_write_noraise(fd, str, (int)strlen(str))
|
||||
|
||||
|
||||
|
@ -59,7 +62,30 @@ static void wait_for_thread_shutdown(PyThreadState *tstate);
|
|||
static void call_ll_exitfuncs(_PyRuntimeState *runtime);
|
||||
|
||||
int _Py_UnhandledKeyboardInterrupt = 0;
|
||||
_PyRuntimeState _PyRuntime = _PyRuntimeState_INIT;
|
||||
|
||||
/* The following places the `_PyRuntime` structure in a location that can be
|
||||
* found without any external information. This is meant to ease access to the
|
||||
* interpreter state for various runtime debugging tools, but is *not* an
|
||||
* officially supported feature */
|
||||
|
||||
#if defined(MS_WINDOWS)
|
||||
|
||||
#pragma section("PyRuntime", read, write)
|
||||
__declspec(allocate("PyRuntime"))
|
||||
|
||||
#elif defined(__APPLE__)
|
||||
|
||||
__attribute__((
|
||||
section(SEG_DATA ",PyRuntime")
|
||||
))
|
||||
|
||||
#endif
|
||||
|
||||
_PyRuntimeState _PyRuntime
|
||||
#if defined(__linux__) && (defined(__GNUC__) || defined(__clang__))
|
||||
__attribute__ ((section (".PyRuntime")))
|
||||
#endif
|
||||
= _PyRuntimeState_INIT;
|
||||
static int runtime_initialized = 0;
|
||||
|
||||
PyStatus
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue