Skip to content

Commit

Permalink
bpo-32280: Store _PyRuntime in a named section (GH-4802)
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
maxbelanger and pablogsal committed Jun 3, 2021
1 parent b250f89 commit 35002aa
Showing 1 changed file with 28 additions and 2 deletions.
30 changes: 28 additions & 2 deletions Python/pylifecycle.c
Expand Up @@ -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
Expand All @@ -34,7 +38,6 @@
(PyObject_TypeCheck((op), &PyWindowsConsoleIO_Type))
#endif


#define PUTS(fd, str) _Py_write_noraise(fd, str, (int)strlen(str))


Expand All @@ -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
Expand Down

0 comments on commit 35002aa

Please sign in to comment.