Author: njn Date: 2007-10-08 06:47:19 +0100 (Mon, 08 Oct 2007) New Revision: 6962
Log: Track stack size via {new,die}_mem_stack, rather than iterating over them with 'thread_stack_next', because it's simpler and more amenable to peak-taking. Modified: branches/MASSIF2/massif/ms_main.c Modified: branches/MASSIF2/massif/ms_main.c =================================================================== --- branches/MASSIF2/massif/ms_main.c 2007-10-07 20:40:09 UTC (rev 6961) +++ branches/MASSIF2/massif/ms_main.c 2007-10-08 05:47:19 UTC (rev 6962) @@ -242,8 +242,8 @@ //------------------------------------------------------------// // These are signed so things are more obvious if they go negative. -static SSizeT sigstacks_szB = 0; // Current signal stacks space sum -static SSizeT heap_szB = 0; // Live heap size +static SSizeT heap_szB = 0; // Live heap size +static SSizeT stacks_szB = 0; // Live stacks size // Incremented every time memory is allocated/deallocated, by the // allocated/deallocated amount; includes heap, heap-admin and stack @@ -1112,15 +1112,7 @@ // Stack(s). if (clo_stacks) { - ThreadId tid; - Addr stack_min, stack_max; - VG_(thread_stack_reset_iter)(); - while ( VG_(thread_stack_next)(&tid, &stack_min, &stack_max) ) { - VERB(2, "stack %d: %p -- %p (%ld)", - tid, stack_min, stack_max, stack_max - stack_min); - snapshot->stacks_szB += (stack_max - stack_min); - } - snapshot->stacks_szB += sigstacks_szB; // Add signal stacks, too + snapshot->stacks_szB = stacks_szB; } // Rest of snapshot. @@ -1128,6 +1120,7 @@ snapshot->time = time; sanity_check_snapshot(snapshot); + // Update stats. n_real_snapshots++; } @@ -1461,60 +1454,57 @@ //--- Stacks ---// //------------------------------------------------------------// +// We really want the inlining to occur... +#define INLINE inline __attribute__((always_inline)) + static void update_stack_stats(SSizeT stack_szB_delta) { + if (stack_szB_delta < 0) tl_assert(stacks_szB >= -stack_szB_delta); + stacks_szB += stack_szB_delta; + update_alloc_stats(stack_szB_delta); } -static void update_sigstack_stats(SSizeT sigstack_szB_delta) +static INLINE void new_mem_stack_2(Addr a, SizeT len, Char* what) { - if (sigstack_szB_delta < 0) tl_assert(sigstacks_szB >= sigstack_szB_delta); - sigstacks_szB += sigstack_szB_delta; - - update_alloc_stats(sigstack_szB_delta); -} - -static void new_mem_stack(Addr a, SizeT len) -{ if (have_started_executing_code) { VERB(2, "<<< new_mem_stack (%ld)", len); n_stack_allocs++; update_stack_stats(len); - maybe_take_snapshot(Normal, "stk-new"); + maybe_take_snapshot(Normal, what); VERB(2, ">>>"); } } -static void die_mem_stack(Addr a, SizeT len) +static INLINE void die_mem_stack_2(Addr a, SizeT len, Char* what) { if (have_started_executing_code) { VERB(2, "<<< die_mem_stack (%ld)", -len); n_stack_frees++; update_stack_stats(-len); - maybe_take_snapshot(Normal, "stk-die"); + maybe_take_snapshot(Normal, what); VERB(2, ">>>"); } } +static void new_mem_stack(Addr a, SizeT len) +{ + new_mem_stack_2(a, len, "stk-new"); +} +static void die_mem_stack(Addr a, SizeT len) +{ + die_mem_stack_2(a, len, "stk-die"); +} + static void new_mem_stack_signal(Addr a, SizeT len) { - if (have_started_executing_code) { - VERB(2, "<<< new_mem_stack_signal (%ld)", len); - update_sigstack_stats(len); - maybe_take_snapshot(Normal, "sig-new"); - VERB(2, ">>>"); - } + new_mem_stack_2(a, len, "sig-new"); } static void die_mem_stack_signal(Addr a, SizeT len) { - if (have_started_executing_code) { - VERB(2, "<<< die_mem_stack_signal (%ld)", -len); - update_sigstack_stats(-len); - maybe_take_snapshot(Normal, "sig-die"); - VERB(2, ">>>"); - } + die_mem_stack_2(a, len, "sig-die"); } @@ -1822,11 +1812,10 @@ if (clo_stacks) { // Events to track - VG_(track_new_mem_stack) ( new_mem_stack ); - VG_(track_die_mem_stack) ( die_mem_stack ); - - VG_(track_new_mem_stack_signal)( new_mem_stack_signal ); - VG_(track_die_mem_stack_signal)( die_mem_stack_signal ); + VG_(track_new_mem_stack) ( new_mem_stack ); + VG_(track_die_mem_stack) ( die_mem_stack ); + VG_(track_new_mem_stack_signal) ( new_mem_stack_signal ); + VG_(track_die_mem_stack_signal) ( die_mem_stack_signal ); } } @@ -1865,7 +1854,7 @@ 0 ); // HP_Chunks - malloc_list = VG_(HT_construct)( 80021 ); // prime, big + malloc_list = VG_(HT_construct)( 80021 ); // prime, big // Dummy node at top of the context structure. alloc_xpt = new_XPt(/*ip*/0, /*parent*/NULL); ------------------------------------------------------------------------- This SF.net email is sponsored by: Splunk Inc. Still grepping through log files to find problems? Stop. Now Search log events and configuration files using AJAX and a browser. Download your FREE copy of Splunk now >> http://get.splunk.com/ _______________________________________________ Valgrind-developers mailing list Valgrind-developers@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/valgrind-developers