gh-139653: Add PyUnstable_ThreadState_SetStackProtection() (#139668)
Add PyUnstable_ThreadState_SetStackProtection() and PyUnstable_ThreadState_ResetStackProtection() functions to set the stack base address and stack size of a Python thread state. Co-authored-by: Petr Viktorin <encukou@gmail.com>
This commit is contained in:
@@ -276,6 +276,18 @@ PyAPI_FUNC(int) PyGILState_Check(void);
|
||||
*/
|
||||
PyAPI_FUNC(PyObject*) _PyThread_CurrentFrames(void);
|
||||
|
||||
// Set the stack protection start address and stack protection size
|
||||
// of a Python thread state
|
||||
PyAPI_FUNC(int) PyUnstable_ThreadState_SetStackProtection(
|
||||
PyThreadState *tstate,
|
||||
void *stack_start_addr, // Stack start address
|
||||
size_t stack_size); // Stack size (in bytes)
|
||||
|
||||
// Reset the stack protection start address and stack protection size
|
||||
// of a Python thread state
|
||||
PyAPI_FUNC(void) PyUnstable_ThreadState_ResetStackProtection(
|
||||
PyThreadState *tstate);
|
||||
|
||||
/* Routines for advanced debuggers, requested by David Beazley.
|
||||
Don't use unless you know what you are doing! */
|
||||
PyAPI_FUNC(PyInterpreterState *) PyInterpreterState_Main(void);
|
||||
|
||||
@@ -60,6 +60,12 @@ extern PyObject * _Py_CompileStringObjectWithModule(
|
||||
# define _PyOS_STACK_MARGIN_SHIFT (_PyOS_LOG2_STACK_MARGIN + 2)
|
||||
#endif
|
||||
|
||||
#ifdef _Py_THREAD_SANITIZER
|
||||
# define _PyOS_MIN_STACK_SIZE (_PyOS_STACK_MARGIN_BYTES * 6)
|
||||
#else
|
||||
# define _PyOS_MIN_STACK_SIZE (_PyOS_STACK_MARGIN_BYTES * 3)
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
||||
@@ -37,6 +37,10 @@ typedef struct _PyThreadStateImpl {
|
||||
uintptr_t c_stack_soft_limit;
|
||||
uintptr_t c_stack_hard_limit;
|
||||
|
||||
// PyUnstable_ThreadState_ResetStackProtection() values
|
||||
uintptr_t c_stack_init_base;
|
||||
uintptr_t c_stack_init_top;
|
||||
|
||||
PyObject *asyncio_running_loop; // Strong reference
|
||||
PyObject *asyncio_running_task; // Strong reference
|
||||
|
||||
|
||||
Reference in New Issue
Block a user