From: Julian Seward Date: Mon, 17 Aug 2009 16:36:11 +0000 (+0000) Subject: Back out r10385 (Change demangler to not use excessive space from X-Git-Tag: svn/VALGRIND_3_5_0~13 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=90346d8aad873753a2abeb5bc2ddce6aa3cccf38;p=thirdparty%2Fvalgrind.git Back out r10385 (Change demangler to not use excessive space from stack) pending further investigations, as per discussion at http://bugs.kde.org/show_bug.cgi?id=197988. git-svn-id: svn://svn.valgrind.org/valgrind/trunk@10837 --- diff --git a/coregrind/m_demangle/cp-demangle.c b/coregrind/m_demangle/cp-demangle.c index 6db386c025..00aba99d6f 100644 --- a/coregrind/m_demangle/cp-demangle.c +++ b/coregrind/m_demangle/cp-demangle.c @@ -4426,11 +4426,16 @@ d_demangle_callback (const char *mangled, int options, cplus_demangle_init_info (mangled, options, strlen (mangled), &di); { - /* 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)); +#ifdef CP_DYNAMIC_ARRAYS + __extension__ struct demangle_component comps[di.num_comps]; + __extension__ struct demangle_component *subs[di.num_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); @@ -4451,9 +4456,6 @@ d_demangle_callback (const char *mangled, int options, status = (dc != NULL) ? cplus_demangle_print_callback (options, dc, callback, opaque) : 0; - - free(di.comps); - free(di.subs); } return status;