From aa35c50723f6f7ce51e21ebdfff5db5b91136c91 Mon Sep 17 00:00:00 2001 From: Julian Seward Date: Sun, 12 Feb 2006 15:42:20 +0000 Subject: [PATCH] Extend stack-permissions-change fast-case machinery to handle +/- 112, 128, 144 and 160. git-svn-id: svn://svn.valgrind.org/valgrind/trunk@5640 --- coregrind/m_tooliface.c | 36 +++-- coregrind/m_translate.c | 62 +++++---- coregrind/pub_core_tooliface.h | 28 ++-- include/pub_tool_tooliface.h | 34 +++-- memcheck/mac_shared.h | 236 +++++++++++++++++++++++++++++++-- memcheck/mc_main.c | 34 +++-- 6 files changed, 351 insertions(+), 79 deletions(-) diff --git a/coregrind/m_tooliface.c b/coregrind/m_tooliface.c index 9e3a06ca38..359408bbee 100644 --- a/coregrind/m_tooliface.c +++ b/coregrind/m_tooliface.c @@ -111,11 +111,15 @@ Bool VG_(sanity_check_needs)(Char** failmsg) CHECK_NOT(VG_(details).copyright_author, NULL); CHECK_NOT(VG_(details).bug_reports_to, NULL); - if ( (VG_(tdict).track_new_mem_stack_4 || - VG_(tdict).track_new_mem_stack_8 || - VG_(tdict).track_new_mem_stack_12 || - VG_(tdict).track_new_mem_stack_16 || - VG_(tdict).track_new_mem_stack_32 ) && + if ( (VG_(tdict).track_new_mem_stack_4 || + VG_(tdict).track_new_mem_stack_8 || + VG_(tdict).track_new_mem_stack_12 || + VG_(tdict).track_new_mem_stack_16 || + VG_(tdict).track_new_mem_stack_32 || + VG_(tdict).track_new_mem_stack_112 || + VG_(tdict).track_new_mem_stack_128 || + VG_(tdict).track_new_mem_stack_144 || + VG_(tdict).track_new_mem_stack_160 ) && ! VG_(tdict).track_new_mem_stack) { *failmsg = "Tool error: one of the specialised 'new_mem_stack_n'\n" @@ -124,11 +128,15 @@ Bool VG_(sanity_check_needs)(Char** failmsg) return False; } - if ( (VG_(tdict).track_die_mem_stack_4 || - VG_(tdict).track_die_mem_stack_8 || - VG_(tdict).track_die_mem_stack_12 || - VG_(tdict).track_die_mem_stack_16 || - VG_(tdict).track_die_mem_stack_32 ) && + if ( (VG_(tdict).track_die_mem_stack_4 || + VG_(tdict).track_die_mem_stack_8 || + VG_(tdict).track_die_mem_stack_12 || + VG_(tdict).track_die_mem_stack_16 || + VG_(tdict).track_die_mem_stack_32 || + VG_(tdict).track_die_mem_stack_112 || + VG_(tdict).track_die_mem_stack_128 || + VG_(tdict).track_die_mem_stack_144 || + VG_(tdict).track_die_mem_stack_160 ) && ! VG_(tdict).track_die_mem_stack) { *failmsg = "Tool error: one of the specialised 'die_mem_stack_n'\n" @@ -282,6 +290,10 @@ DEF2(track_new_mem_stack_8, Addr) DEF2(track_new_mem_stack_12, Addr) DEF2(track_new_mem_stack_16, Addr) DEF2(track_new_mem_stack_32, Addr) +DEF2(track_new_mem_stack_112, Addr) +DEF2(track_new_mem_stack_128, Addr) +DEF2(track_new_mem_stack_144, Addr) +DEF2(track_new_mem_stack_160, Addr) DEF (track_new_mem_stack, Addr, SizeT) DEF2(track_die_mem_stack_4, Addr) @@ -289,6 +301,10 @@ DEF2(track_die_mem_stack_8, Addr) DEF2(track_die_mem_stack_12, Addr) DEF2(track_die_mem_stack_16, Addr) DEF2(track_die_mem_stack_32, Addr) +DEF2(track_die_mem_stack_112, Addr) +DEF2(track_die_mem_stack_128, Addr) +DEF2(track_die_mem_stack_144, Addr) +DEF2(track_die_mem_stack_160, Addr) DEF (track_die_mem_stack, Addr, SizeT) DEF(track_ban_mem_stack, Addr, SizeT) diff --git a/coregrind/m_translate.c b/coregrind/m_translate.c index 1461dbaa71..36dd00b67a 100644 --- a/coregrind/m_translate.c +++ b/coregrind/m_translate.c @@ -91,18 +91,26 @@ void VG_(print_translation_stats) ( void ) static Bool need_to_handle_SP_assignment(void) { - return ( VG_(tdict).track_new_mem_stack_4 || - VG_(tdict).track_die_mem_stack_4 || - VG_(tdict).track_new_mem_stack_8 || - VG_(tdict).track_die_mem_stack_8 || - VG_(tdict).track_new_mem_stack_12 || - VG_(tdict).track_die_mem_stack_12 || - VG_(tdict).track_new_mem_stack_16 || - VG_(tdict).track_die_mem_stack_16 || - VG_(tdict).track_new_mem_stack_32 || - VG_(tdict).track_die_mem_stack_32 || - VG_(tdict).track_new_mem_stack || - VG_(tdict).track_die_mem_stack ); + return ( VG_(tdict).track_new_mem_stack_4 || + VG_(tdict).track_die_mem_stack_4 || + VG_(tdict).track_new_mem_stack_8 || + VG_(tdict).track_die_mem_stack_8 || + VG_(tdict).track_new_mem_stack_12 || + VG_(tdict).track_die_mem_stack_12 || + VG_(tdict).track_new_mem_stack_16 || + VG_(tdict).track_die_mem_stack_16 || + VG_(tdict).track_new_mem_stack_32 || + VG_(tdict).track_die_mem_stack_32 || + VG_(tdict).track_new_mem_stack_112 || + VG_(tdict).track_die_mem_stack_112 || + VG_(tdict).track_new_mem_stack_128 || + VG_(tdict).track_die_mem_stack_128 || + VG_(tdict).track_new_mem_stack_144 || + VG_(tdict).track_die_mem_stack_144 || + VG_(tdict).track_new_mem_stack_160 || + VG_(tdict).track_die_mem_stack_160 || + VG_(tdict).track_new_mem_stack || + VG_(tdict).track_die_mem_stack ); } // - The SP aliases are held in an array which is used as a circular buffer. @@ -316,17 +324,25 @@ IRBB* vg_SP_update_pass ( void* closureV, if (get_SP_delta(st->Ist.Put.data->Iex.Tmp.tmp, &delta)) { IRTemp tttmp = st->Ist.Put.data->Iex.Tmp.tmp; switch (delta) { - case 0: addStmtToIRBB(bb,st); continue; - case 4: DO(die, 4, tttmp); addStmtToIRBB(bb,st); continue; - case -4: DO(new, 4, tttmp); addStmtToIRBB(bb,st); continue; - case 8: DO(die, 8, tttmp); addStmtToIRBB(bb,st); continue; - case -8: DO(new, 8, tttmp); addStmtToIRBB(bb,st); continue; - case 12: DO(die, 12, tttmp); addStmtToIRBB(bb,st); continue; - case -12: DO(new, 12, tttmp); addStmtToIRBB(bb,st); continue; - case 16: DO(die, 16, tttmp); addStmtToIRBB(bb,st); continue; - case -16: DO(new, 16, tttmp); addStmtToIRBB(bb,st); continue; - case 32: DO(die, 32, tttmp); addStmtToIRBB(bb,st); continue; - case -32: DO(new, 32, tttmp); addStmtToIRBB(bb,st); continue; + case 0: addStmtToIRBB(bb,st); continue; + case 4: DO(die, 4, tttmp); addStmtToIRBB(bb,st); continue; + case -4: DO(new, 4, tttmp); addStmtToIRBB(bb,st); continue; + case 8: DO(die, 8, tttmp); addStmtToIRBB(bb,st); continue; + case -8: DO(new, 8, tttmp); addStmtToIRBB(bb,st); continue; + case 12: DO(die, 12, tttmp); addStmtToIRBB(bb,st); continue; + case -12: DO(new, 12, tttmp); addStmtToIRBB(bb,st); continue; + case 16: DO(die, 16, tttmp); addStmtToIRBB(bb,st); continue; + case -16: DO(new, 16, tttmp); addStmtToIRBB(bb,st); continue; + case 32: DO(die, 32, tttmp); addStmtToIRBB(bb,st); continue; + case -32: DO(new, 32, tttmp); addStmtToIRBB(bb,st); continue; + case 112: DO(die, 112, tttmp); addStmtToIRBB(bb,st); continue; + case -112: DO(new, 112, tttmp); addStmtToIRBB(bb,st); continue; + case 128: DO(die, 128, tttmp); addStmtToIRBB(bb,st); continue; + case -128: DO(new, 128, tttmp); addStmtToIRBB(bb,st); continue; + case 144: DO(die, 144, tttmp); addStmtToIRBB(bb,st); continue; + case -144: DO(new, 144, tttmp); addStmtToIRBB(bb,st); continue; + case 160: DO(die, 160, tttmp); addStmtToIRBB(bb,st); continue; + case -160: DO(new, 160, tttmp); addStmtToIRBB(bb,st); continue; default: /* common values for ppc64: 144 128 160 112 176 */ n_SP_updates_generic_known++; diff --git a/coregrind/pub_core_tooliface.h b/coregrind/pub_core_tooliface.h index b246c1d787..58666287eb 100644 --- a/coregrind/pub_core_tooliface.h +++ b/coregrind/pub_core_tooliface.h @@ -166,18 +166,26 @@ typedef struct { void (*track_die_mem_brk) (Addr, SizeT); void (*track_die_mem_munmap) (Addr, SizeT); - void VG_REGPARM(1) (*track_new_mem_stack_4) (Addr); - void VG_REGPARM(1) (*track_new_mem_stack_8) (Addr); - void VG_REGPARM(1) (*track_new_mem_stack_12)(Addr); - void VG_REGPARM(1) (*track_new_mem_stack_16)(Addr); - void VG_REGPARM(1) (*track_new_mem_stack_32)(Addr); + void VG_REGPARM(1) (*track_new_mem_stack_4) (Addr); + void VG_REGPARM(1) (*track_new_mem_stack_8) (Addr); + void VG_REGPARM(1) (*track_new_mem_stack_12) (Addr); + void VG_REGPARM(1) (*track_new_mem_stack_16) (Addr); + void VG_REGPARM(1) (*track_new_mem_stack_32) (Addr); + void VG_REGPARM(1) (*track_new_mem_stack_112)(Addr); + void VG_REGPARM(1) (*track_new_mem_stack_128)(Addr); + void VG_REGPARM(1) (*track_new_mem_stack_144)(Addr); + void VG_REGPARM(1) (*track_new_mem_stack_160)(Addr); void (*track_new_mem_stack)(Addr, SizeT); - void VG_REGPARM(1) (*track_die_mem_stack_4) (Addr); - void VG_REGPARM(1) (*track_die_mem_stack_8) (Addr); - void VG_REGPARM(1) (*track_die_mem_stack_12)(Addr); - void VG_REGPARM(1) (*track_die_mem_stack_16)(Addr); - void VG_REGPARM(1) (*track_die_mem_stack_32)(Addr); + void VG_REGPARM(1) (*track_die_mem_stack_4) (Addr); + void VG_REGPARM(1) (*track_die_mem_stack_8) (Addr); + void VG_REGPARM(1) (*track_die_mem_stack_12) (Addr); + void VG_REGPARM(1) (*track_die_mem_stack_16) (Addr); + void VG_REGPARM(1) (*track_die_mem_stack_32) (Addr); + void VG_REGPARM(1) (*track_die_mem_stack_112)(Addr); + void VG_REGPARM(1) (*track_die_mem_stack_128)(Addr); + void VG_REGPARM(1) (*track_die_mem_stack_144)(Addr); + void VG_REGPARM(1) (*track_die_mem_stack_160)(Addr); void (*track_die_mem_stack)(Addr, SizeT); void (*track_ban_mem_stack)(Addr, SizeT); diff --git a/include/pub_tool_tooliface.h b/include/pub_tool_tooliface.h index 55fc352064..7ae35d1063 100644 --- a/include/pub_tool_tooliface.h +++ b/include/pub_tool_tooliface.h @@ -347,19 +347,27 @@ void VG_(track_die_mem_munmap) (void(*f)(Addr a, SizeT len)); Nb: all the specialised ones must use the VG_REGPARM(n) attribute. */ -void VG_(track_new_mem_stack_4) (VG_REGPARM(1) void(*f)(Addr new_ESP)); -void VG_(track_new_mem_stack_8) (VG_REGPARM(1) void(*f)(Addr new_ESP)); -void VG_(track_new_mem_stack_12)(VG_REGPARM(1) void(*f)(Addr new_ESP)); -void VG_(track_new_mem_stack_16)(VG_REGPARM(1) void(*f)(Addr new_ESP)); -void VG_(track_new_mem_stack_32)(VG_REGPARM(1) void(*f)(Addr new_ESP)); -void VG_(track_new_mem_stack) (void(*f)(Addr a, SizeT len)); - -void VG_(track_die_mem_stack_4) (VG_REGPARM(1) void(*f)(Addr die_ESP)); -void VG_(track_die_mem_stack_8) (VG_REGPARM(1) void(*f)(Addr die_ESP)); -void VG_(track_die_mem_stack_12)(VG_REGPARM(1) void(*f)(Addr die_ESP)); -void VG_(track_die_mem_stack_16)(VG_REGPARM(1) void(*f)(Addr die_ESP)); -void VG_(track_die_mem_stack_32)(VG_REGPARM(1) void(*f)(Addr die_ESP)); -void VG_(track_die_mem_stack) (void(*f)(Addr a, SizeT len)); +void VG_(track_new_mem_stack_4) (VG_REGPARM(1) void(*f)(Addr new_ESP)); +void VG_(track_new_mem_stack_8) (VG_REGPARM(1) void(*f)(Addr new_ESP)); +void VG_(track_new_mem_stack_12) (VG_REGPARM(1) void(*f)(Addr new_ESP)); +void VG_(track_new_mem_stack_16) (VG_REGPARM(1) void(*f)(Addr new_ESP)); +void VG_(track_new_mem_stack_32) (VG_REGPARM(1) void(*f)(Addr new_ESP)); +void VG_(track_new_mem_stack_112)(VG_REGPARM(1) void(*f)(Addr new_ESP)); +void VG_(track_new_mem_stack_128)(VG_REGPARM(1) void(*f)(Addr new_ESP)); +void VG_(track_new_mem_stack_144)(VG_REGPARM(1) void(*f)(Addr new_ESP)); +void VG_(track_new_mem_stack_160)(VG_REGPARM(1) void(*f)(Addr new_ESP)); +void VG_(track_new_mem_stack) (void(*f)(Addr a, SizeT len)); + +void VG_(track_die_mem_stack_4) (VG_REGPARM(1) void(*f)(Addr die_ESP)); +void VG_(track_die_mem_stack_8) (VG_REGPARM(1) void(*f)(Addr die_ESP)); +void VG_(track_die_mem_stack_12) (VG_REGPARM(1) void(*f)(Addr die_ESP)); +void VG_(track_die_mem_stack_16) (VG_REGPARM(1) void(*f)(Addr die_ESP)); +void VG_(track_die_mem_stack_32) (VG_REGPARM(1) void(*f)(Addr die_ESP)); +void VG_(track_die_mem_stack_112)(VG_REGPARM(1) void(*f)(Addr die_ESP)); +void VG_(track_die_mem_stack_128)(VG_REGPARM(1) void(*f)(Addr die_ESP)); +void VG_(track_die_mem_stack_144)(VG_REGPARM(1) void(*f)(Addr die_ESP)); +void VG_(track_die_mem_stack_160)(VG_REGPARM(1) void(*f)(Addr die_ESP)); +void VG_(track_die_mem_stack) (void(*f)(Addr a, SizeT len)); /* Used for redzone at end of thread stacks */ void VG_(track_ban_mem_stack) (void(*f)(Addr a, SizeT len)); diff --git a/memcheck/mac_shared.h b/memcheck/mac_shared.h index bc080d9019..01d989e9b8 100644 --- a/memcheck/mac_shared.h +++ b/memcheck/mac_shared.h @@ -414,16 +414,24 @@ extern void MAC_(do_detect_memory_leaks) ( Bool (*is_valid_aligned_word) ( Addr ) ); -extern VG_REGPARM(1) void MAC_(new_mem_stack_4) ( Addr old_ESP ); -extern VG_REGPARM(1) void MAC_(die_mem_stack_4) ( Addr old_ESP ); -extern VG_REGPARM(1) void MAC_(new_mem_stack_8) ( Addr old_ESP ); -extern VG_REGPARM(1) void MAC_(die_mem_stack_8) ( Addr old_ESP ); -extern VG_REGPARM(1) void MAC_(new_mem_stack_12) ( Addr old_ESP ); -extern VG_REGPARM(1) void MAC_(die_mem_stack_12) ( Addr old_ESP ); -extern VG_REGPARM(1) void MAC_(new_mem_stack_16) ( Addr old_ESP ); -extern VG_REGPARM(1) void MAC_(die_mem_stack_16) ( Addr old_ESP ); -extern VG_REGPARM(1) void MAC_(new_mem_stack_32) ( Addr old_ESP ); -extern VG_REGPARM(1) void MAC_(die_mem_stack_32) ( Addr old_ESP ); +extern VG_REGPARM(1) void MAC_(new_mem_stack_4) ( Addr old_ESP ); +extern VG_REGPARM(1) void MAC_(die_mem_stack_4) ( Addr old_ESP ); +extern VG_REGPARM(1) void MAC_(new_mem_stack_8) ( Addr old_ESP ); +extern VG_REGPARM(1) void MAC_(die_mem_stack_8) ( Addr old_ESP ); +extern VG_REGPARM(1) void MAC_(new_mem_stack_12) ( Addr old_ESP ); +extern VG_REGPARM(1) void MAC_(die_mem_stack_12) ( Addr old_ESP ); +extern VG_REGPARM(1) void MAC_(new_mem_stack_16) ( Addr old_ESP ); +extern VG_REGPARM(1) void MAC_(die_mem_stack_16) ( Addr old_ESP ); +extern VG_REGPARM(1) void MAC_(new_mem_stack_32) ( Addr old_ESP ); +extern VG_REGPARM(1) void MAC_(die_mem_stack_32) ( Addr old_ESP ); +extern VG_REGPARM(1) void MAC_(new_mem_stack_112) ( Addr old_ESP ); +extern VG_REGPARM(1) void MAC_(die_mem_stack_112) ( Addr old_ESP ); +extern VG_REGPARM(1) void MAC_(new_mem_stack_128) ( Addr old_ESP ); +extern VG_REGPARM(1) void MAC_(die_mem_stack_128) ( Addr old_ESP ); +extern VG_REGPARM(1) void MAC_(new_mem_stack_144) ( Addr old_ESP ); +extern VG_REGPARM(1) void MAC_(die_mem_stack_144) ( Addr old_ESP ); +extern VG_REGPARM(1) void MAC_(new_mem_stack_160) ( Addr old_ESP ); +extern VG_REGPARM(1) void MAC_(die_mem_stack_160) ( Addr old_ESP ); extern void MAC_(die_mem_stack) ( Addr a, SizeT len); extern void MAC_(new_mem_stack) ( Addr a, SizeT len); @@ -596,6 +604,214 @@ void VG_REGPARM(1) MAC_(die_mem_stack_32)(Addr new_SP) \ } \ } \ \ +void VG_REGPARM(1) MAC_(new_mem_stack_112)(Addr new_SP) \ +{ \ + PROF_EVENT(114, "new_mem_stack_112"); \ + if (VG_IS_8_ALIGNED(new_SP)) { \ + ALIGNED8_NEW ( -VG_STACK_REDZONE_SZB + new_SP ); \ + ALIGNED8_NEW ( -VG_STACK_REDZONE_SZB + new_SP+8 ); \ + ALIGNED8_NEW ( -VG_STACK_REDZONE_SZB + new_SP+16 ); \ + ALIGNED8_NEW ( -VG_STACK_REDZONE_SZB + new_SP+24 ); \ + ALIGNED8_NEW ( -VG_STACK_REDZONE_SZB + new_SP+32 ); \ + ALIGNED8_NEW ( -VG_STACK_REDZONE_SZB + new_SP+40 ); \ + ALIGNED8_NEW ( -VG_STACK_REDZONE_SZB + new_SP+48 ); \ + ALIGNED8_NEW ( -VG_STACK_REDZONE_SZB + new_SP+56 ); \ + ALIGNED8_NEW ( -VG_STACK_REDZONE_SZB + new_SP+64 ); \ + ALIGNED8_NEW ( -VG_STACK_REDZONE_SZB + new_SP+72 ); \ + ALIGNED8_NEW ( -VG_STACK_REDZONE_SZB + new_SP+80 ); \ + ALIGNED8_NEW ( -VG_STACK_REDZONE_SZB + new_SP+88 ); \ + ALIGNED8_NEW ( -VG_STACK_REDZONE_SZB + new_SP+96 ); \ + ALIGNED8_NEW ( -VG_STACK_REDZONE_SZB + new_SP+104 ); \ + } else { \ + UNALIGNED_NEW ( -VG_STACK_REDZONE_SZB + new_SP, 112 ); \ + } \ +} \ + \ +void VG_REGPARM(1) MAC_(die_mem_stack_112)(Addr new_SP) \ +{ \ + PROF_EVENT(114, "new_mem_stack_112"); \ + if (VG_IS_8_ALIGNED(new_SP)) { \ + ALIGNED8_DIE ( -VG_STACK_REDZONE_SZB + new_SP-8 ); \ + ALIGNED8_DIE ( -VG_STACK_REDZONE_SZB + new_SP-16 ); \ + ALIGNED8_DIE ( -VG_STACK_REDZONE_SZB + new_SP-24 ); \ + ALIGNED8_DIE ( -VG_STACK_REDZONE_SZB + new_SP-32 ); \ + ALIGNED8_DIE ( -VG_STACK_REDZONE_SZB + new_SP-40 ); \ + ALIGNED8_DIE ( -VG_STACK_REDZONE_SZB + new_SP-48 ); \ + ALIGNED8_DIE ( -VG_STACK_REDZONE_SZB + new_SP-56 ); \ + ALIGNED8_DIE ( -VG_STACK_REDZONE_SZB + new_SP-64 ); \ + ALIGNED8_DIE ( -VG_STACK_REDZONE_SZB + new_SP-72 ); \ + ALIGNED8_DIE ( -VG_STACK_REDZONE_SZB + new_SP-80 ); \ + ALIGNED8_DIE ( -VG_STACK_REDZONE_SZB + new_SP-88 ); \ + ALIGNED8_DIE ( -VG_STACK_REDZONE_SZB + new_SP-96 ); \ + ALIGNED8_DIE ( -VG_STACK_REDZONE_SZB + new_SP-104 ); \ + ALIGNED8_DIE ( -VG_STACK_REDZONE_SZB + new_SP-112 ); \ + } else { \ + UNALIGNED_DIE ( -VG_STACK_REDZONE_SZB + new_SP-112, 112 ); \ + } \ +} \ + \ +void VG_REGPARM(1) MAC_(new_mem_stack_128)(Addr new_SP) \ +{ \ + PROF_EVENT(114, "new_mem_stack_128"); \ + if (VG_IS_8_ALIGNED(new_SP)) { \ + ALIGNED8_NEW ( -VG_STACK_REDZONE_SZB + new_SP ); \ + ALIGNED8_NEW ( -VG_STACK_REDZONE_SZB + new_SP+8 ); \ + ALIGNED8_NEW ( -VG_STACK_REDZONE_SZB + new_SP+16 ); \ + ALIGNED8_NEW ( -VG_STACK_REDZONE_SZB + new_SP+24 ); \ + ALIGNED8_NEW ( -VG_STACK_REDZONE_SZB + new_SP+32 ); \ + ALIGNED8_NEW ( -VG_STACK_REDZONE_SZB + new_SP+40 ); \ + ALIGNED8_NEW ( -VG_STACK_REDZONE_SZB + new_SP+48 ); \ + ALIGNED8_NEW ( -VG_STACK_REDZONE_SZB + new_SP+56 ); \ + ALIGNED8_NEW ( -VG_STACK_REDZONE_SZB + new_SP+64 ); \ + ALIGNED8_NEW ( -VG_STACK_REDZONE_SZB + new_SP+72 ); \ + ALIGNED8_NEW ( -VG_STACK_REDZONE_SZB + new_SP+80 ); \ + ALIGNED8_NEW ( -VG_STACK_REDZONE_SZB + new_SP+88 ); \ + ALIGNED8_NEW ( -VG_STACK_REDZONE_SZB + new_SP+96 ); \ + ALIGNED8_NEW ( -VG_STACK_REDZONE_SZB + new_SP+104 ); \ + ALIGNED8_NEW ( -VG_STACK_REDZONE_SZB + new_SP+112 ); \ + ALIGNED8_NEW ( -VG_STACK_REDZONE_SZB + new_SP+120 ); \ + } else { \ + UNALIGNED_NEW ( -VG_STACK_REDZONE_SZB + new_SP, 128 ); \ + } \ +} \ + \ +void VG_REGPARM(1) MAC_(die_mem_stack_128)(Addr new_SP) \ +{ \ + PROF_EVENT(114, "new_mem_stack_128"); \ + if (VG_IS_8_ALIGNED(new_SP)) { \ + ALIGNED8_DIE ( -VG_STACK_REDZONE_SZB + new_SP-8 ); \ + ALIGNED8_DIE ( -VG_STACK_REDZONE_SZB + new_SP-16 ); \ + ALIGNED8_DIE ( -VG_STACK_REDZONE_SZB + new_SP-24 ); \ + ALIGNED8_DIE ( -VG_STACK_REDZONE_SZB + new_SP-32 ); \ + ALIGNED8_DIE ( -VG_STACK_REDZONE_SZB + new_SP-40 ); \ + ALIGNED8_DIE ( -VG_STACK_REDZONE_SZB + new_SP-48 ); \ + ALIGNED8_DIE ( -VG_STACK_REDZONE_SZB + new_SP-56 ); \ + ALIGNED8_DIE ( -VG_STACK_REDZONE_SZB + new_SP-64 ); \ + ALIGNED8_DIE ( -VG_STACK_REDZONE_SZB + new_SP-72 ); \ + ALIGNED8_DIE ( -VG_STACK_REDZONE_SZB + new_SP-80 ); \ + ALIGNED8_DIE ( -VG_STACK_REDZONE_SZB + new_SP-88 ); \ + ALIGNED8_DIE ( -VG_STACK_REDZONE_SZB + new_SP-96 ); \ + ALIGNED8_DIE ( -VG_STACK_REDZONE_SZB + new_SP-104 ); \ + ALIGNED8_DIE ( -VG_STACK_REDZONE_SZB + new_SP-112 ); \ + ALIGNED8_DIE ( -VG_STACK_REDZONE_SZB + new_SP-120 ); \ + ALIGNED8_DIE ( -VG_STACK_REDZONE_SZB + new_SP-128 ); \ + } else { \ + UNALIGNED_DIE ( -VG_STACK_REDZONE_SZB + new_SP-128, 128 ); \ + } \ +} \ + \ +void VG_REGPARM(1) MAC_(new_mem_stack_144)(Addr new_SP) \ +{ \ + PROF_EVENT(114, "new_mem_stack_144"); \ + if (VG_IS_8_ALIGNED(new_SP)) { \ + ALIGNED8_NEW ( -VG_STACK_REDZONE_SZB + new_SP ); \ + ALIGNED8_NEW ( -VG_STACK_REDZONE_SZB + new_SP+8 ); \ + ALIGNED8_NEW ( -VG_STACK_REDZONE_SZB + new_SP+16 ); \ + ALIGNED8_NEW ( -VG_STACK_REDZONE_SZB + new_SP+24 ); \ + ALIGNED8_NEW ( -VG_STACK_REDZONE_SZB + new_SP+32 ); \ + ALIGNED8_NEW ( -VG_STACK_REDZONE_SZB + new_SP+40 ); \ + ALIGNED8_NEW ( -VG_STACK_REDZONE_SZB + new_SP+48 ); \ + ALIGNED8_NEW ( -VG_STACK_REDZONE_SZB + new_SP+56 ); \ + ALIGNED8_NEW ( -VG_STACK_REDZONE_SZB + new_SP+64 ); \ + ALIGNED8_NEW ( -VG_STACK_REDZONE_SZB + new_SP+72 ); \ + ALIGNED8_NEW ( -VG_STACK_REDZONE_SZB + new_SP+80 ); \ + ALIGNED8_NEW ( -VG_STACK_REDZONE_SZB + new_SP+88 ); \ + ALIGNED8_NEW ( -VG_STACK_REDZONE_SZB + new_SP+96 ); \ + ALIGNED8_NEW ( -VG_STACK_REDZONE_SZB + new_SP+104 ); \ + ALIGNED8_NEW ( -VG_STACK_REDZONE_SZB + new_SP+112 ); \ + ALIGNED8_NEW ( -VG_STACK_REDZONE_SZB + new_SP+120 ); \ + ALIGNED8_NEW ( -VG_STACK_REDZONE_SZB + new_SP+128 ); \ + ALIGNED8_NEW ( -VG_STACK_REDZONE_SZB + new_SP+136 ); \ + } else { \ + UNALIGNED_NEW ( -VG_STACK_REDZONE_SZB + new_SP, 144 ); \ + } \ +} \ + \ +void VG_REGPARM(1) MAC_(die_mem_stack_144)(Addr new_SP) \ +{ \ + PROF_EVENT(114, "new_mem_stack_144"); \ + if (VG_IS_8_ALIGNED(new_SP)) { \ + ALIGNED8_DIE ( -VG_STACK_REDZONE_SZB + new_SP-8 ); \ + ALIGNED8_DIE ( -VG_STACK_REDZONE_SZB + new_SP-16 ); \ + ALIGNED8_DIE ( -VG_STACK_REDZONE_SZB + new_SP-24 ); \ + ALIGNED8_DIE ( -VG_STACK_REDZONE_SZB + new_SP-32 ); \ + ALIGNED8_DIE ( -VG_STACK_REDZONE_SZB + new_SP-40 ); \ + ALIGNED8_DIE ( -VG_STACK_REDZONE_SZB + new_SP-48 ); \ + ALIGNED8_DIE ( -VG_STACK_REDZONE_SZB + new_SP-56 ); \ + ALIGNED8_DIE ( -VG_STACK_REDZONE_SZB + new_SP-64 ); \ + ALIGNED8_DIE ( -VG_STACK_REDZONE_SZB + new_SP-72 ); \ + ALIGNED8_DIE ( -VG_STACK_REDZONE_SZB + new_SP-80 ); \ + ALIGNED8_DIE ( -VG_STACK_REDZONE_SZB + new_SP-88 ); \ + ALIGNED8_DIE ( -VG_STACK_REDZONE_SZB + new_SP-96 ); \ + ALIGNED8_DIE ( -VG_STACK_REDZONE_SZB + new_SP-104 ); \ + ALIGNED8_DIE ( -VG_STACK_REDZONE_SZB + new_SP-112 ); \ + ALIGNED8_DIE ( -VG_STACK_REDZONE_SZB + new_SP-120 ); \ + ALIGNED8_DIE ( -VG_STACK_REDZONE_SZB + new_SP-128 ); \ + ALIGNED8_DIE ( -VG_STACK_REDZONE_SZB + new_SP-136 ); \ + ALIGNED8_DIE ( -VG_STACK_REDZONE_SZB + new_SP-144 ); \ + } else { \ + UNALIGNED_DIE ( -VG_STACK_REDZONE_SZB + new_SP-144, 144 ); \ + } \ +} \ + \ +void VG_REGPARM(1) MAC_(new_mem_stack_160)(Addr new_SP) \ +{ \ + PROF_EVENT(114, "new_mem_stack_160"); \ + if (VG_IS_8_ALIGNED(new_SP)) { \ + ALIGNED8_NEW ( -VG_STACK_REDZONE_SZB + new_SP ); \ + ALIGNED8_NEW ( -VG_STACK_REDZONE_SZB + new_SP+8 ); \ + ALIGNED8_NEW ( -VG_STACK_REDZONE_SZB + new_SP+16 ); \ + ALIGNED8_NEW ( -VG_STACK_REDZONE_SZB + new_SP+24 ); \ + ALIGNED8_NEW ( -VG_STACK_REDZONE_SZB + new_SP+32 ); \ + ALIGNED8_NEW ( -VG_STACK_REDZONE_SZB + new_SP+40 ); \ + ALIGNED8_NEW ( -VG_STACK_REDZONE_SZB + new_SP+48 ); \ + ALIGNED8_NEW ( -VG_STACK_REDZONE_SZB + new_SP+56 ); \ + ALIGNED8_NEW ( -VG_STACK_REDZONE_SZB + new_SP+64 ); \ + ALIGNED8_NEW ( -VG_STACK_REDZONE_SZB + new_SP+72 ); \ + ALIGNED8_NEW ( -VG_STACK_REDZONE_SZB + new_SP+80 ); \ + ALIGNED8_NEW ( -VG_STACK_REDZONE_SZB + new_SP+88 ); \ + ALIGNED8_NEW ( -VG_STACK_REDZONE_SZB + new_SP+96 ); \ + ALIGNED8_NEW ( -VG_STACK_REDZONE_SZB + new_SP+104 ); \ + ALIGNED8_NEW ( -VG_STACK_REDZONE_SZB + new_SP+112 ); \ + ALIGNED8_NEW ( -VG_STACK_REDZONE_SZB + new_SP+120 ); \ + ALIGNED8_NEW ( -VG_STACK_REDZONE_SZB + new_SP+128 ); \ + ALIGNED8_NEW ( -VG_STACK_REDZONE_SZB + new_SP+136 ); \ + ALIGNED8_NEW ( -VG_STACK_REDZONE_SZB + new_SP+144 ); \ + ALIGNED8_NEW ( -VG_STACK_REDZONE_SZB + new_SP+152 ); \ + } else { \ + UNALIGNED_NEW ( -VG_STACK_REDZONE_SZB + new_SP, 160 ); \ + } \ +} \ + \ +void VG_REGPARM(1) MAC_(die_mem_stack_160)(Addr new_SP) \ +{ \ + PROF_EVENT(114, "new_mem_stack_160"); \ + if (VG_IS_8_ALIGNED(new_SP)) { \ + ALIGNED8_DIE ( -VG_STACK_REDZONE_SZB + new_SP-8 ); \ + ALIGNED8_DIE ( -VG_STACK_REDZONE_SZB + new_SP-16 ); \ + ALIGNED8_DIE ( -VG_STACK_REDZONE_SZB + new_SP-24 ); \ + ALIGNED8_DIE ( -VG_STACK_REDZONE_SZB + new_SP-32 ); \ + ALIGNED8_DIE ( -VG_STACK_REDZONE_SZB + new_SP-40 ); \ + ALIGNED8_DIE ( -VG_STACK_REDZONE_SZB + new_SP-48 ); \ + ALIGNED8_DIE ( -VG_STACK_REDZONE_SZB + new_SP-56 ); \ + ALIGNED8_DIE ( -VG_STACK_REDZONE_SZB + new_SP-64 ); \ + ALIGNED8_DIE ( -VG_STACK_REDZONE_SZB + new_SP-72 ); \ + ALIGNED8_DIE ( -VG_STACK_REDZONE_SZB + new_SP-80 ); \ + ALIGNED8_DIE ( -VG_STACK_REDZONE_SZB + new_SP-88 ); \ + ALIGNED8_DIE ( -VG_STACK_REDZONE_SZB + new_SP-96 ); \ + ALIGNED8_DIE ( -VG_STACK_REDZONE_SZB + new_SP-104 ); \ + ALIGNED8_DIE ( -VG_STACK_REDZONE_SZB + new_SP-112 ); \ + ALIGNED8_DIE ( -VG_STACK_REDZONE_SZB + new_SP-120 ); \ + ALIGNED8_DIE ( -VG_STACK_REDZONE_SZB + new_SP-128 ); \ + ALIGNED8_DIE ( -VG_STACK_REDZONE_SZB + new_SP-136 ); \ + ALIGNED8_DIE ( -VG_STACK_REDZONE_SZB + new_SP-144 ); \ + ALIGNED8_DIE ( -VG_STACK_REDZONE_SZB + new_SP-152 ); \ + ALIGNED8_DIE ( -VG_STACK_REDZONE_SZB + new_SP-160 ); \ + } else { \ + UNALIGNED_DIE ( -VG_STACK_REDZONE_SZB + new_SP-160, 160 ); \ + } \ +} \ + \ void MAC_(new_mem_stack) ( Addr a, SizeT len ) \ { \ PROF_EVENT(115, "new_mem_stack"); \ diff --git a/memcheck/mc_main.c b/memcheck/mc_main.c index 99084955c2..ec51703d31 100644 --- a/memcheck/mc_main.c +++ b/memcheck/mc_main.c @@ -2713,19 +2713,27 @@ static void mc_pre_clo_init(void) VG_(track_die_mem_brk) ( & mc_make_noaccess ); VG_(track_die_mem_munmap) ( & mc_make_noaccess ); - VG_(track_new_mem_stack_4) ( & MAC_(new_mem_stack_4) ); - VG_(track_new_mem_stack_8) ( & MAC_(new_mem_stack_8) ); - VG_(track_new_mem_stack_12) ( & MAC_(new_mem_stack_12) ); - VG_(track_new_mem_stack_16) ( & MAC_(new_mem_stack_16) ); - VG_(track_new_mem_stack_32) ( & MAC_(new_mem_stack_32) ); - VG_(track_new_mem_stack) ( & MAC_(new_mem_stack) ); - - VG_(track_die_mem_stack_4) ( & MAC_(die_mem_stack_4) ); - VG_(track_die_mem_stack_8) ( & MAC_(die_mem_stack_8) ); - VG_(track_die_mem_stack_12) ( & MAC_(die_mem_stack_12) ); - VG_(track_die_mem_stack_16) ( & MAC_(die_mem_stack_16) ); - VG_(track_die_mem_stack_32) ( & MAC_(die_mem_stack_32) ); - VG_(track_die_mem_stack) ( & MAC_(die_mem_stack) ); + VG_(track_new_mem_stack_4) ( & MAC_(new_mem_stack_4) ); + VG_(track_new_mem_stack_8) ( & MAC_(new_mem_stack_8) ); + VG_(track_new_mem_stack_12) ( & MAC_(new_mem_stack_12) ); + VG_(track_new_mem_stack_16) ( & MAC_(new_mem_stack_16) ); + VG_(track_new_mem_stack_32) ( & MAC_(new_mem_stack_32) ); + VG_(track_new_mem_stack_112) ( & MAC_(new_mem_stack_112) ); + VG_(track_new_mem_stack_128) ( & MAC_(new_mem_stack_128) ); + VG_(track_new_mem_stack_144) ( & MAC_(new_mem_stack_144) ); + VG_(track_new_mem_stack_160) ( & MAC_(new_mem_stack_160) ); + VG_(track_new_mem_stack) ( & MAC_(new_mem_stack) ); + + VG_(track_die_mem_stack_4) ( & MAC_(die_mem_stack_4) ); + VG_(track_die_mem_stack_8) ( & MAC_(die_mem_stack_8) ); + VG_(track_die_mem_stack_12) ( & MAC_(die_mem_stack_12) ); + VG_(track_die_mem_stack_16) ( & MAC_(die_mem_stack_16) ); + VG_(track_die_mem_stack_32) ( & MAC_(die_mem_stack_32) ); + VG_(track_die_mem_stack_112) ( & MAC_(die_mem_stack_112) ); + VG_(track_die_mem_stack_128) ( & MAC_(die_mem_stack_128) ); + VG_(track_die_mem_stack_144) ( & MAC_(die_mem_stack_144) ); + VG_(track_die_mem_stack_160) ( & MAC_(die_mem_stack_160) ); + VG_(track_die_mem_stack) ( & MAC_(die_mem_stack) ); VG_(track_ban_mem_stack) ( & mc_make_noaccess ); -- 2.47.2