|
From: <sv...@va...> - 2009-06-29 16:13:36
|
Author: weidendo
Date: 2009-06-29 17:13:25 +0100 (Mon, 29 Jun 2009)
New Revision: 10385
Log:
Change demangler to not use excessive space from stack
Replaces alloca with xmalloc calls.
This should fix bug 197988.
Modified:
trunk/coregrind/m_demangle/cp-demangle.c
Modified: trunk/coregrind/m_demangle/cp-demangle.c
===================================================================
--- trunk/coregrind/m_demangle/cp-demangle.c 2009-06-29 06:57:30 UTC (rev 10384)
+++ trunk/coregrind/m_demangle/cp-demangle.c 2009-06-29 16:13:25 UTC (rev 10385)
@@ -4426,17 +4426,12 @@
cplus_demangle_init_info (mangled, options, strlen (mangled), &di);
{
-#ifdef CP_DYNAMIC_ARRAYS
- __extension__ struct demangle_component comps[di.num_comps];
- __extension__ struct demangle_component *subs[di.num_subs];
+ /* The original demangler uses alloca here with large allocations
+ for template-heavy code, e.g. when using Boost. This
+ is bad for Valgrind tools with limited stack size */
+ di.comps = xmalloc(di.num_comps * sizeof (*di.comps));
+ di.subs = xmalloc(di.num_subs * sizeof (*di.subs));
- di.comps = comps;
- di.subs = subs;
-#else
- di.comps = alloca (di.num_comps * sizeof (*di.comps));
- di.subs = alloca (di.num_subs * sizeof (*di.subs));
-#endif
-
if (type)
dc = cplus_demangle_type (&di);
else
@@ -4456,6 +4451,9 @@
status = (dc != NULL)
? cplus_demangle_print_callback (options, dc, callback, opaque)
: 0;
+
+ free(di.comps);
+ free(di.subs);
}
return status;
|