]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
Merge r8058 (Stop massif segfaulting due to stack overflow)
authorJulian Seward <jseward@acm.org>
Tue, 13 May 2008 11:23:20 +0000 (11:23 +0000)
committerJulian Seward <jseward@acm.org>
Tue, 13 May 2008 11:23:20 +0000 (11:23 +0000)
git-svn-id: svn://svn.valgrind.org/valgrind/branches/VALGRIND_3_3_BRANCH@8059

massif/ms_main.c

index 67f67e769e71cc8254bdecf6881072d5c7d6952c..20447f5a39e5b564a4d3d9be8eee657ecef25503 100644 (file)
@@ -1910,11 +1910,15 @@ static void pp_snapshot_SXPt(Int fd, SXPt* sxpt, Int depth, Char* depth_str,
 {
    Int   i, n_insig_children_sxpts;
    Char* perc;
-   Char  ip_desc_array[BUF_LEN];
-   Char* ip_desc = ip_desc_array;
    SXPt* pred  = NULL;
    SXPt* child = NULL;
 
+   // Used for printing function names.  Is made static to keep it out
+   // of the stack frame -- this function is recursive.  Obviously this
+   // now means its contents are trashed across the recursive call.
+   static Char ip_desc_array[BUF_LEN];
+   Char* ip_desc = ip_desc_array;
+
    switch (sxpt->tag) {
     case SigSXPt:
       // Print the SXPt itself.
@@ -1969,7 +1973,9 @@ static void pp_snapshot_SXPt(Int fd, SXPt* sxpt, Int depth, Char* depth_str,
          if (InsigSXPt == child->tag)
             n_insig_children_sxpts++;
 
-         // Ok, print the child.
+         // Ok, print the child.  NB: contents of ip_desc_array will be
+         // trashed by this recursive call.  Doesn't matter currently,
+         // but worth noting.
          pp_snapshot_SXPt(fd, child, depth+1, depth_str, depth_str_len,
             snapshot_heap_szB, snapshot_total_szB);
       }