From: Julian Seward Date: Tue, 13 May 2008 11:23:20 +0000 (+0000) Subject: Merge r8058 (Stop massif segfaulting due to stack overflow) X-Git-Tag: svn/VALGRIND_3_3_1~35 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=bbce1cdf6b7df47b7d7d01eacbea82525efddaee;p=thirdparty%2Fvalgrind.git Merge r8058 (Stop massif segfaulting due to stack overflow) git-svn-id: svn://svn.valgrind.org/valgrind/branches/VALGRIND_3_3_BRANCH@8059 --- diff --git a/massif/ms_main.c b/massif/ms_main.c index 67f67e769e..20447f5a39 100644 --- a/massif/ms_main.c +++ b/massif/ms_main.c @@ -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); }