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; |