mirror of
https://github.com/Zenithsiz/ftmemsim-valgrind.git
synced 2026-02-03 18:13:01 +00:00
Don't scan the entire Valgrind stack to check for impending
stack-overflow situations. This causes an immense number of L2 misses which are completely pointless, and the recent increase of the Valgrind per-thread stack size from 64k to 1M greatly aggravates the situation. git-svn-id: svn://svn.valgrind.org/valgrind/trunk@11343
This commit is contained in:
parent
8504416a46
commit
0dfc00b23f
@ -432,15 +432,18 @@ VgStack* VG_(am_alloc_VgStack)( /*OUT*/Addr* initial_sp )
|
||||
/* Figure out how many bytes of the stack's active area have not
|
||||
been used. Used for estimating if we are close to overflowing it. */
|
||||
|
||||
Int VG_(am_get_VgStack_unused_szB)( VgStack* stack )
|
||||
SizeT VG_(am_get_VgStack_unused_szB)( VgStack* stack, SizeT limit )
|
||||
{
|
||||
Int i;
|
||||
SizeT i;
|
||||
UInt* p;
|
||||
|
||||
p = (UInt*)&stack->bytes[VG_STACK_GUARD_SZB];
|
||||
for (i = 0; i < VG_STACK_ACTIVE_SZB/sizeof(UInt); i++)
|
||||
for (i = 0; i < VG_STACK_ACTIVE_SZB/sizeof(UInt); i++) {
|
||||
if (p[i] != 0xDEADBEEF)
|
||||
break;
|
||||
if (i * sizeof(UInt) >= limit)
|
||||
break;
|
||||
}
|
||||
|
||||
return i * sizeof(UInt);
|
||||
}
|
||||
|
||||
@ -1753,9 +1753,11 @@ void VG_(sanity_check_general) ( Bool force_expensive )
|
||||
stack
|
||||
= (VgStack*)
|
||||
VG_(get_ThreadState)(tid)->os_state.valgrind_stack_base;
|
||||
SizeT limit
|
||||
= 4096; // Let's say. Checking more causes lots of L2 misses.
|
||||
remains
|
||||
= VG_(am_get_VgStack_unused_szB)(stack);
|
||||
if (remains < VKI_PAGE_SIZE)
|
||||
= VG_(am_get_VgStack_unused_szB)(stack, limit);
|
||||
if (remains < limit)
|
||||
VG_(message)(Vg_DebugMsg,
|
||||
"WARNING: Thread %d is within %ld bytes "
|
||||
"of running out of stack!\n",
|
||||
|
||||
@ -396,10 +396,10 @@ typedef
|
||||
|
||||
extern VgStack* VG_(am_alloc_VgStack)( /*OUT*/Addr* initial_sp );
|
||||
|
||||
/* Figure out how many bytes of the stack's active area have not
|
||||
been used. Used for estimating if we are close to overflowing it. */
|
||||
|
||||
extern Int VG_(am_get_VgStack_unused_szB)( VgStack* stack );
|
||||
/* Figure out how many bytes of the stack's active area have not been
|
||||
used. Used for estimating if we are close to overflowing it. If
|
||||
the free area is larger than 'limit', just return 'limit'. */
|
||||
extern SizeT VG_(am_get_VgStack_unused_szB)( VgStack* stack, SizeT limit );
|
||||
|
||||
// DDD: this is ugly
|
||||
#if defined(VGO_darwin)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user