|
From: <sv...@va...> - 2006-02-12 15:42:28
|
Author: sewardj
Date: 2006-02-12 15:42:20 +0000 (Sun, 12 Feb 2006)
New Revision: 5640
Log:
Extend stack-permissions-change fast-case machinery to handle +/- 112,
128, 144 and 160.
Modified:
trunk/coregrind/m_tooliface.c
trunk/coregrind/m_translate.c
trunk/coregrind/pub_core_tooliface.h
trunk/include/pub_tool_tooliface.h
trunk/memcheck/mac_shared.h
trunk/memcheck/mc_main.c
Modified: trunk/coregrind/m_tooliface.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/coregrind/m_tooliface.c 2006-02-12 08:50:45 UTC (rev 5639)
+++ trunk/coregrind/m_tooliface.c 2006-02-12 15:42:20 UTC (rev 5640)
@@ -111,11 +111,15 @@
CHECK_NOT(VG_(details).copyright_author, NULL);
CHECK_NOT(VG_(details).bug_reports_to, NULL);
=20
- 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)=20
{
*failmsg =3D "Tool error: one of the specialised 'new_mem_stack_n'=
\n"
@@ -124,11 +128,15 @@
return False;
}
=20
- 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)=20
{
*failmsg =3D "Tool error: one of the specialised 'die_mem_stack_n'=
\n"
@@ -282,6 +290,10 @@
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)
=20
DEF2(track_die_mem_stack_4, Addr)
@@ -289,6 +301,10 @@
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)
=20
DEF(track_ban_mem_stack, Addr, SizeT)
Modified: trunk/coregrind/m_translate.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/coregrind/m_translate.c 2006-02-12 08:50:45 UTC (rev 5639)
+++ trunk/coregrind/m_translate.c 2006-02-12 15:42:20 UTC (rev 5640)
@@ -91,18 +91,26 @@
=20
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 );
}
=20
// - The SP aliases are held in an array which is used as a circular buf=
fer.
@@ -316,17 +324,25 @@
if (get_SP_delta(st->Ist.Put.data->Iex.Tmp.tmp, &delta)) {
IRTemp tttmp =3D 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); contin=
ue;
+ case 4: DO(die, 4, tttmp); addStmtToIRBB(bb,st); contin=
ue;
+ case -4: DO(new, 4, tttmp); addStmtToIRBB(bb,st); contin=
ue;
+ case 8: DO(die, 8, tttmp); addStmtToIRBB(bb,st); contin=
ue;
+ case -8: DO(new, 8, tttmp); addStmtToIRBB(bb,st); contin=
ue;
+ case 12: DO(die, 12, tttmp); addStmtToIRBB(bb,st); contin=
ue;
+ case -12: DO(new, 12, tttmp); addStmtToIRBB(bb,st); contin=
ue;
+ case 16: DO(die, 16, tttmp); addStmtToIRBB(bb,st); contin=
ue;
+ case -16: DO(new, 16, tttmp); addStmtToIRBB(bb,st); contin=
ue;
+ case 32: DO(die, 32, tttmp); addStmtToIRBB(bb,st); contin=
ue;
+ case -32: DO(new, 32, tttmp); addStmtToIRBB(bb,st); contin=
ue;
+ case 112: DO(die, 112, tttmp); addStmtToIRBB(bb,st); contin=
ue;
+ case -112: DO(new, 112, tttmp); addStmtToIRBB(bb,st); contin=
ue;
+ case 128: DO(die, 128, tttmp); addStmtToIRBB(bb,st); contin=
ue;
+ case -128: DO(new, 128, tttmp); addStmtToIRBB(bb,st); contin=
ue;
+ case 144: DO(die, 144, tttmp); addStmtToIRBB(bb,st); contin=
ue;
+ case -144: DO(new, 144, tttmp); addStmtToIRBB(bb,st); contin=
ue;
+ case 160: DO(die, 160, tttmp); addStmtToIRBB(bb,st); contin=
ue;
+ case -160: DO(new, 160, tttmp); addStmtToIRBB(bb,st); contin=
ue;
default: =20
/* common values for ppc64: 144 128 160 112 176 */
n_SP_updates_generic_known++;
Modified: trunk/coregrind/pub_core_tooliface.h
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/coregrind/pub_core_tooliface.h 2006-02-12 08:50:45 UTC (rev 563=
9)
+++ trunk/coregrind/pub_core_tooliface.h 2006-02-12 15:42:20 UTC (rev 564=
0)
@@ -166,18 +166,26 @@
void (*track_die_mem_brk) (Addr, SizeT);
void (*track_die_mem_munmap) (Addr, SizeT);
=20
- 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);
=20
- 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);
=20
void (*track_ban_mem_stack)(Addr, SizeT);
Modified: trunk/include/pub_tool_tooliface.h
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/include/pub_tool_tooliface.h 2006-02-12 08:50:45 UTC (rev 5639)
+++ trunk/include/pub_tool_tooliface.h 2006-02-12 15:42:20 UTC (rev 5640)
@@ -347,19 +347,27 @@
=20
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 le=
n));
+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 l=
en));
=20
-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 le=
n));
+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 l=
en));
=20
/* Used for redzone at end of thread stacks */
void VG_(track_ban_mem_stack) (void(*f)(Addr a, SizeT len));
Modified: trunk/memcheck/mac_shared.h
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/memcheck/mac_shared.h 2006-02-12 08:50:45 UTC (rev 5639)
+++ trunk/memcheck/mac_shared.h 2006-02-12 15:42:20 UTC (rev 5640)
@@ -414,16 +414,24 @@
Bool (*is_valid_aligned_word) ( Addr )
);
=20
-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);
=20
@@ -596,6 +604,214 @@
} \
} \
\
+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"); \
Modified: trunk/memcheck/mc_main.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/memcheck/mc_main.c 2006-02-12 08:50:45 UTC (rev 5639)
+++ trunk/memcheck/mc_main.c 2006-02-12 15:42:20 UTC (rev 5640)
@@ -2713,19 +2713,27 @@
VG_(track_die_mem_brk) ( & mc_make_noaccess );
VG_(track_die_mem_munmap) ( & mc_make_noaccess );=20
=20
- 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_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) );
=20
- 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_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) );
=20
VG_(track_ban_mem_stack) ( & mc_make_noaccess );
=20
|
|
From: Nicholas N. <nj...@cs...> - 2006-02-13 03:27:09
|
On Sun, 12 Feb 2006 sv...@va... wrote: > Extend stack-permissions-change fast-case machinery to handle +/- 112, > 128, 144 and 160. Did you time this to see if it actually made a difference? The benefit from the fast stack handling is not that large. Nick |
|
From: Julian S. <js...@ac...> - 2006-02-13 05:14:36
|
The 144 case certainly helped (2.6s -> 2.0s) on a program which is very call-intensive - nfib(30). The other 3 are also appear commonly in ppc64 code, but as you say did not make much improvement to the perf suite. I think fbench dropped about 5%. Considering that compvbits is going to be faster than the trunk at permissions-setting, this might be worth a reevaluation after that is merged, with the aim of getting rid of some or all of the 4 special cases I introduced. It occurred to me later that on ppc32 and 64, the stack pointer (r1) is moved down just once at the start and back up at the end of the procedure. (I think this is actually mandated by the ABI; I'm not sure though). This means the number of stack changes that occur is potentially much smaller than on x86, in which any function call causes potentially many small stack changes as args are pushed. In fact (thinking about it more) a similar thing probably happens on amd64: there is no ABI-mandated stack-pointer-moves-only-once requirement, but in practice the use of registers for almost all parameter passing probably leads to much the same effect. J On Monday 13 February 2006 03:26, Nicholas Nethercote wrote: > On Sun, 12 Feb 2006 sv...@va... wrote: > > Extend stack-permissions-change fast-case machinery to handle +/- 112, > > 128, 144 and 160. > > Did you time this to see if it actually made a difference? The benefit > from the fast stack handling is not that large. > > Nick > > > ------------------------------------------------------- > This SF.net email is sponsored by: Splunk Inc. Do you grep through log > files for problems? Stop! Download the new AJAX search engine that makes > searching your log files as easy as surfing the web. DOWNLOAD SPLUNK! > http://sel.as-us.falkag.net/sel?cmd=lnk&kid=103432&bid=230486&dat=121642 > _______________________________________________ > Valgrind-developers mailing list > Val...@li... > https://lists.sourceforge.net/lists/listinfo/valgrind-developers |
|
From: Oswald B. <os...@kd...> - 2006-02-13 07:24:17
|
On Mon, Feb 13, 2006 at 05:14:11AM +0000, Julian Seward wrote: > It occurred to me later that on ppc32 and 64, the stack pointer (r1) > is moved down just once at the start and back up at the end of the > procedure. (I think this is actually mandated by the ABI; I'm not > sure though). This means the number of stack changes that occur is > potentially much smaller than on x86, in which any function call > causes potentially many small stack changes as args are pushed. > i know for sure that on x86 gcc *optimizes* function calls by doing one sub and never pushing/popping anything. but why should this be part of the abi? -- Hi! I'm a .signature virus! Copy me into your ~/.signature, please! -- Chaos, panic, and disorder - my work here is done. |
|
From: Julian S. <js...@ac...> - 2006-02-13 14:05:18
|
> > sure though). This means the number of stack changes that occur is > > potentially much smaller than on x86, in which any function call > > causes potentially many small stack changes as args are pushed. > > i know for sure that on x86 gcc *optimizes* function calls by doing one > sub and never pushing/popping anything. but why should this be part of > the abi? I don't know for sure, but I'd guess it makes life simpler for debuggers, stack unwinders and exception-throwers. J |
|
From: Cerion Armour-B. <ce...@op...> - 2006-02-13 14:50:35
|
On Monday 13 February 2006 15:06, Julian Seward wrote: > On Monday 13 February 2006 09:06, you wrote: > > On Monday 13 February 2006 06:14, Julian Seward wrote: > > ... > > > > > It occurred to me later that on ppc32 and 64, the stack pointer (r1) > > > is moved down just once at the start and back up at the end of the > > > procedure. (I think this is actually mandated by the ABI; I'm not sure > > > though). This means the number of stack changes that occur is > > > potentially much smaller than on x86, in which any function call > > > causes potentially many small stack changes as args are pushed. > > > > Unless odds things are done like vex does to calculate some intermediate > > value to be 'reinterpreted' using the stack, no? > > Well, I was talking about the simulated machine's stack here, not the > real one. Sure, we generate code that uses the stack to move stuff > between FP and integer regs etc from time to time, but that's done > on a different stack from which the client runs. (When running on > V, each thread has two stacks - one for V itself and one for the > simulated machine). > > J I understood that, but if the client does funny stuff like V does, or with self-hosting... C |