From: Tom Hughes Date: Thu, 5 May 2005 08:16:24 +0000 (+0000) Subject: Allow for the red zone when generating new_mem_stack_signal and X-Git-Tag: svn/VALGRIND_3_0_0~696 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=3552b6fa3b87e9d9f243af796f8bc76899f4bf27;p=thirdparty%2Fvalgrind.git Allow for the red zone when generating new_mem_stack_signal and die_mem_stack_signal events. git-svn-id: svn://svn.valgrind.org/valgrind/trunk@3622 --- diff --git a/coregrind/m_sigframe/sigframe-amd64-linux.c b/coregrind/m_sigframe/sigframe-amd64-linux.c index 241615d452..c4a19bb888 100644 --- a/coregrind/m_sigframe/sigframe-amd64-linux.c +++ b/coregrind/m_sigframe/sigframe-amd64-linux.c @@ -404,7 +404,7 @@ static Bool extend ( ThreadState *tst, Addr addr, SizeT size ) /* For tracking memory events, indicate the entire frame has been allocated. */ - VG_TRACK( new_mem_stack_signal, addr, size ); + VG_TRACK( new_mem_stack_signal, addr - VGA_STACK_REDZONE_SIZE, size ); return True; } @@ -600,7 +600,7 @@ void VG_(sigframe_destroy)( ThreadId tid, Bool isRT ) size = restore_rt_sigframe(tst, (struct rt_sigframe *)rsp, &sigNo); - VG_TRACK( die_mem_stack_signal, rsp, size ); + VG_TRACK( die_mem_stack_signal, rsp - VGA_STACK_REDZONE_SIZE, size ); if (VG_(clo_trace_signals)) VG_(message)( diff --git a/coregrind/m_sigframe/sigframe-x86-linux.c b/coregrind/m_sigframe/sigframe-x86-linux.c index b0c60a9a33..1255794f81 100644 --- a/coregrind/m_sigframe/sigframe-x86-linux.c +++ b/coregrind/m_sigframe/sigframe-x86-linux.c @@ -425,7 +425,7 @@ static Bool extend ( ThreadState *tst, Addr addr, SizeT size ) /* For tracking memory events, indicate the entire frame has been allocated. */ - VG_TRACK( new_mem_stack_signal, addr, size ); + VG_TRACK( new_mem_stack_signal, addr - VGA_STACK_REDZONE_SIZE, size ); return True; } @@ -682,7 +682,7 @@ void VG_(sigframe_destroy)( ThreadId tid, Bool isRT ) else size = restore_rt_sigframe(tst, (struct rt_sigframe *)esp, &sigNo); - VG_TRACK( die_mem_stack_signal, esp, size ); + VG_TRACK( die_mem_stack_signal - VGA_STACK_REDZONE_SIZE, esp, size ); if (VG_(clo_trace_signals)) VG_(message)( diff --git a/coregrind/vg_signals.c b/coregrind/vg_signals.c index f8f4fc8a5f..100a5bae96 100644 --- a/coregrind/vg_signals.c +++ b/coregrind/vg_signals.c @@ -474,6 +474,10 @@ void VG_(do_sys_sigaltstack) ( ThreadId tid ) VG_(threads)[tid].altstack.ss_sp = ss->ss_sp; VG_(threads)[tid].altstack.ss_size = ss->ss_size; VG_(threads)[tid].altstack.ss_flags = 0; + + VG_TRACK( new_mem_stack_signal, + ss->ss_sp + ss->ss_size - VGA_STACK_REDZONE_SIZE, + VGA_STACK_REDZONE_SIZE ); } } SET_SYSCALL_RETVAL(tid, 0);