Author: njn
Date: 2007-09-21 07:04:07 +0100 (Fri, 21 Sep 2007)
New Revision: 6890

Log:
Rearranged code.  No functional changes.

Modified:
   branches/MASSIF2/massif/ms_main.c


Modified: branches/MASSIF2/massif/ms_main.c
===================================================================
--- branches/MASSIF2/massif/ms_main.c   2007-09-21 05:51:26 UTC (rev 6889)
+++ branches/MASSIF2/massif/ms_main.c   2007-09-21 06:04:07 UTC (rev 6890)
@@ -46,8 +46,8 @@
 //
 // Misc:
 // - with --heap=no, --heap-admin still counts.  should it?
-// - in each XPt, record both bytes and the number of live allocations (or 
even 
-//   total allocations and total deallocations?)
+// - in each XPt, record both bytes and the number of live allocations? (or
+//   even total allocations and total deallocations?)
 //
 // Work out how to take the peak.
 // - exact peak, or within a certain percentage?
@@ -211,85 +211,8 @@
 #define VERB(format, args...) \
    VG_(message)(Vg_DebugMsg, "Massif: " format, ##args)
 
-///-----------------------------------------------------------//
-//--- XPts                                                 ---//
-//------------------------------------------------------------//
 
-// An XPt represents an "execution point", ie. a code address.  Each XPt is
-// part of a tree of XPts (an "execution tree", or "XTree").  The details of
-// the heap are represented by a single XTree.
-//
-// The root of the tree is 'alloc_xpt', which represents all allocation
-// functions, eg:
-// - malloc/calloc/realloc/memalign/new/new[];
-// - user-specified allocation functions (using --alloc-fn);
-// - custom allocation (MALLOCLIKE) points
-// It's a bit of a fake XPt (ie. its 'ip' is zero), and is only used because
-// it makes the code simpler.
-//
-// Any child of 'alloc_xpt' is called a "top-XPt".  The XPts at the bottom
-// of an XTree (leaf nodes) are "bottom-XPTs".  
-//
-// Each path from a top-XPt to a bottom-XPt through an XTree gives an
-// execution context ("XCon"), ie. a stack trace.  (And sub-paths represent
-// stack sub-traces.)  The number of XCons in an XTree is equal to the
-// number of bottom-XPTs in that XTree.
-//
-//      alloc_xpt       XTrees are bi-directional.
-//        | ^
-//        v |
-//     > parent <       Example: if child1() calls parent() and child2()
-//    /    |     \      also calls parent(), and parent() calls malloc(),
-//   |    / \     |     the XTree will look like this.
-//   |   v   v    |
-//  child1   child2
-//
-// Sanity checking:  we check snapshot XTrees when they are taken, deleted
-// and printed.  We periodically check the main heap XTree with
-// ms_expensive_sanity_check.
-
-typedef struct _XPt XPt;
-
-struct _XPt {
-   Addr  ip;              // code address
-
-   // Bottom-XPts: space for the precise context.
-   // Other XPts:  space of all the descendent bottom-XPts.
-   // Nb: this value goes up and down as the program executes.
-   SizeT curr_szB;
-
-   XPt*  parent;           // pointer to parent XPt
-
-   // Children.
-   // n_children and max_children are 32-bit integers.  16-bit integers
-   // are too small -- a very big program might have more than 65536
-   // allocation points (ie. top-XPts) -- Konqueror starting up has 1800.
-   UInt  n_children;       // number of children
-   UInt  max_children;     // capacity of children array
-   XPt** children;         // pointers to children XPts
-};
-
 //------------------------------------------------------------//
-//--- Heap blocks                                          ---//
-//------------------------------------------------------------//
-
-// Metadata for heap blocks.  Each one contains a pointer to a bottom-XPt,
-// which is a foothold into the XCon at which it was allocated.  From
-// HP_Chunks, XPt 'space' fields are incremented (at allocation) and
-// decremented (at deallocation).
-//
-// Nb: first two fields must match core's VgHashNode.
-typedef
-   struct _HP_Chunk {
-      struct _HP_Chunk* next;
-      Addr              data;    // Ptr to actual block
-      SizeT             szB;     // Size requested
-      XPt*              where;   // Where allocated; bottom-XPt
-   }
-   HP_Chunk;
-
-
-//------------------------------------------------------------//
 //--- Statistics                                           ---//
 //------------------------------------------------------------//
 
@@ -319,26 +242,22 @@
 //--- Globals                                              ---//
 //------------------------------------------------------------//
 
-// Make these signed so things are more obvious if they go negative.
+// 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 peak_heap_szB = 0;     // XXX: currently unused
 static SSizeT peak_snapshot_total_szB = 0;
 
 // Incremented every time memory is allocated/deallocated, by the
-// allocated/deallocated amount.  An alternative unit of program progress to
-// time.
-static ULong  total_allocs_deallocs_szB = 0;
+// allocated/deallocated amount.  An alternative to milliseconds as a unit
+// of program "time".
+static ULong total_allocs_deallocs_szB = 0;
 
-static VgHashTable malloc_list  = NULL;   // HP_Chunks
-
 static UInt n_heap_blocks = 0;
 
 // Current directory at startup.
 static Char base_dir[VKI_PATH_MAX]; // XXX: currently unused
 
-#define MAX_ALLOC_FNS      128     // includes the builtin ones
-
 //------------------------------------------------------------//
 //--- Alloc fns                                            ---//
 //------------------------------------------------------------//
@@ -459,9 +378,58 @@
 
 
 //------------------------------------------------------------//
-//--- XPts                                                 ---//
+//--- XPts, XTrees and XCons                               ---//
 //------------------------------------------------------------//
 
+// An XPt represents an "execution point", ie. a code address.  Each XPt is
+// part of a tree of XPts (an "execution tree", or "XTree").  The details of
+// the heap are represented by a single XTree.
+//
+// The root of the tree is 'alloc_xpt', which represents all allocation
+// functions, eg:
+// - malloc/calloc/realloc/memalign/new/new[];
+// - user-specified allocation functions (using --alloc-fn);
+// - custom allocation (MALLOCLIKE) points
+// It's a bit of a fake XPt (ie. its 'ip' is zero), and is only used because
+// it makes the code simpler.
+//
+// Any child of 'alloc_xpt' is called a "top-XPt".  The XPts at the bottom
+// of an XTree (leaf nodes) are "bottom-XPTs".  
+//
+// Each path from a top-XPt to a bottom-XPt through an XTree gives an
+// execution context ("XCon"), ie. a stack trace.  (And sub-paths represent
+// stack sub-traces.)  The number of XCons in an XTree is equal to the
+// number of bottom-XPTs in that XTree.
+//
+//      alloc_xpt       XTrees are bi-directional.
+//        | ^
+//        v |
+//     > parent <       Example: if child1() calls parent() and child2()
+//    /    |     \      also calls parent(), and parent() calls malloc(),
+//   |    / \     |     the XTree will look like this.
+//   |   v   v    |
+//  child1   child2
+
+typedef struct _XPt XPt;
+struct _XPt {
+   Addr  ip;              // code address
+
+   // Bottom-XPts: space for the precise context.
+   // Other XPts:  space of all the descendent bottom-XPts.
+   // Nb: this value goes up and down as the program executes.
+   SizeT curr_szB;
+
+   XPt*  parent;           // pointer to parent XPt
+
+   // Children.
+   // n_children and max_children are 32-bit integers.  16-bit integers
+   // are too small -- a very big program might have more than 65536
+   // allocation points (ie. top-XPts) -- Konqueror starting up has 1800.
+   UInt  n_children;       // number of children
+   UInt  max_children;     // capacity of children array
+   XPt** children;         // pointers to children XPts
+};
+
 // Fake XPt representing all allocation functions like malloc().  Acts as
 // parent node to all top-XPts.
 static XPt* alloc_xpt;
@@ -559,13 +527,14 @@
 
 
 //------------------------------------------------------------//
-//--- XTrees                                               ---//
+//--- XTree Operations                                     ---//
 //------------------------------------------------------------//
 
 // XXX: taking a full snapshot... could/should just snapshot the significant
 // parts.  Nb: then the amounts wouldn't add up, unless I represented the
 // "insignificant places" in XPts.  Might be worthwhile -- there can
-// be a lot of zero nodes in the XTree...
+// be a lot of zero nodes in the XTree... (simpler: ignore all zero nodes
+// unless threshold=0?)
 static XPt* dup_XTree(XPt* xpt, XPt* parent)
 {
    Int  i;
@@ -601,6 +570,10 @@
    n_dupd_xpts_freed++;
 }
 
+// Sanity checking:  we check snapshot XTrees when they are taken, deleted
+// and printed.  We periodically check the main heap XTree with
+// ms_expensive_sanity_check.
+//
 static void sanity_check_XTree(XPt* xpt, XPt* parent)
 {
    Int i;
@@ -631,7 +604,7 @@
 
 
 //------------------------------------------------------------//
-//--- XCons                                                ---//
+//--- XCon Operations                                      ---//
 //------------------------------------------------------------//
 
 // This is the limit on the number of removed alloc-fns that can be in a
@@ -1184,6 +1157,23 @@
 //--- Heap management                                      ---//
 //------------------------------------------------------------//
 
+// Metadata for heap blocks.  Each one contains a pointer to a bottom-XPt,
+// which is a foothold into the XCon at which it was allocated.  From
+// HP_Chunks, XPt 'space' fields are incremented (at allocation) and
+// decremented (at deallocation).
+//
+// Nb: first two fields must match core's VgHashNode.
+typedef
+   struct _HP_Chunk {
+      struct _HP_Chunk* next;
+      Addr              data;    // Ptr to actual block
+      SizeT             szB;     // Size requested
+      XPt*              where;   // Where allocated; bottom-XPt
+   }
+   HP_Chunk;
+
+static VgHashTable malloc_list  = NULL;   // HP_Chunks
+
 static void update_heap_stats(SSizeT heap_szB_delta, Int n_heap_blocks_delta)
 {
    if (n_heap_blocks_delta<0) tl_assert(n_heap_blocks >= -n_heap_blocks_delta);


-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2005.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Valgrind-developers mailing list
Valgrind-developers@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/valgrind-developers

Reply via email to