From b60b9261b5de1e77755cbbeaa7c431e6c475de6e Mon Sep 17 00:00:00 2001 From: Diego Russo Date: Fri, 27 Mar 2026 17:52:48 +0000 Subject: [PATCH] GH-126910: avoid reading the FP for getting the SP (GH-146521) --- Include/internal/pycore_pystate.h | 13 +------------ Python/pystate.c | 13 +++++++++++++ 2 files changed, 14 insertions(+), 12 deletions(-) diff --git a/Include/internal/pycore_pystate.h b/Include/internal/pycore_pystate.h index 189a8dde9f0..a66543cf1eb 100644 --- a/Include/internal/pycore_pystate.h +++ b/Include/internal/pycore_pystate.h @@ -312,18 +312,7 @@ static uintptr_t return_pointer_as_int(char* p) { } #endif -static inline uintptr_t -_Py_get_machine_stack_pointer(void) { -#if _Py__has_builtin(__builtin_frame_address) || defined(__GNUC__) - return (uintptr_t)__builtin_frame_address(0); -#elif defined(_MSC_VER) - return (uintptr_t)_AddressOfReturnAddress(); -#else - char here; - /* Avoid compiler warning about returning stack address */ - return return_pointer_as_int(&here); -#endif -} +PyAPI_DATA(uintptr_t) _Py_get_machine_stack_pointer(void); static inline intptr_t _Py_RecursionLimit_GetMargin(PyThreadState *tstate) diff --git a/Python/pystate.c b/Python/pystate.c index 143175da0f4..f974c82c391 100644 --- a/Python/pystate.c +++ b/Python/pystate.c @@ -3286,3 +3286,16 @@ _Py_GetMainConfig(void) } return _PyInterpreterState_GetConfig(interp); } + +uintptr_t +_Py_get_machine_stack_pointer(void) { +#if _Py__has_builtin(__builtin_frame_address) || defined(__GNUC__) + return (uintptr_t)__builtin_frame_address(0); +#elif defined(_MSC_VER) + return (uintptr_t)_AddressOfReturnAddress(); +#else + char here; + /* Avoid compiler warning about returning stack address */ + return return_pointer_as_int(&here); +#endif +}