diff --git a/coregrind/m_machine.c b/coregrind/m_machine.c index 42bdc17cf..3bf1246d2 100644 --- a/coregrind/m_machine.c +++ b/coregrind/m_machine.c @@ -223,6 +223,13 @@ Addr VG_(thread_get_stack_max)(ThreadId tid) return VG_(threads)[tid].client_stack_highest_word; } +SizeT VG_(thread_get_stack_size)(ThreadId tid) +{ + vg_assert(0 <= tid && tid < VG_N_THREADS && tid != VG_INVALID_THREADID); + vg_assert(VG_(threads)[tid].status != VgTs_Empty); + return VG_(threads)[tid].client_stack_szB; +} + //------------------------------------------------------------- /* Details about the capabilities of the underlying (host) CPU. These details are acquired by (1) enquiring with the CPU at startup, or diff --git a/include/pub_tool_machine.h b/include/pub_tool_machine.h index c8556b53e..bb9a4cc2a 100644 --- a/include/pub_tool_machine.h +++ b/include/pub_tool_machine.h @@ -105,6 +105,9 @@ extern Bool VG_(thread_stack_next) ( /*MOD*/ThreadId* tid, // Returns .client_stack_highest_word for the given thread extern Addr VG_(thread_get_stack_max) ( ThreadId tid ); +// Returns how many bytes have been allocated for the stack of the given thread +extern Addr VG_(thread_get_stack_size) ( ThreadId tid ); + // Given a pointer to a function as obtained by "& functionname" in C, // produce a pointer to the actual entry point for the function. For // most platforms it's the identity function. Unfortunately, on