From 90346d8aad873753a2abeb5bc2ddce6aa3cccf38 Mon Sep 17 00:00:00 2001 From: Julian Seward Date: Mon, 17 Aug 2009 16:36:11 +0000 Subject: [PATCH] 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 --- coregrind/m_demangle/cp-demangle.c | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) 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; -- 2.47.2