From b643734ad7263d4a748c3fa7ce2d607905a7e022 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Axel=20D=C3=B6rfler?= Date: Thu, 30 Oct 2008 11:36:05 +0000 Subject: [PATCH] * Now handles function pointers as arguments correctly. * Added optional tracing output. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28377 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/add-ons/kernel/debugger/demangle/gcc2.cpp | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/src/add-ons/kernel/debugger/demangle/gcc2.cpp b/src/add-ons/kernel/debugger/demangle/gcc2.cpp index 8bb79ba6e3..a131a5c335 100644 --- a/src/add-ons/kernel/debugger/demangle/gcc2.cpp +++ b/src/add-ons/kernel/debugger/demangle/gcc2.cpp @@ -13,6 +13,14 @@ #include +//#define TRACE_GCC2_DEMANGLER +#ifdef TRACE_GCC2_DEMANGLER +# define TRACE(x...) kprintf(x) +#else +# define TRACE(x...) ; +#endif + + enum { TYPE_FUNCTION, TYPE_METHOD, @@ -22,8 +30,15 @@ enum { static void ignore_qualifiers(const char** _arg) { - while (isupper(**_arg)) + while (isupper(**_arg)) { + if (**_arg == 'F') { + // skip function declaration + while (**_arg && **_arg != '_') + (*_arg)++; + } + (*_arg)++; + } } @@ -333,6 +348,8 @@ get_next_argument_internal(uint32* _cookie, const char* symbol, char* name, if (arg == NULL) return B_ENTRY_NOT_FOUND; + TRACE("\n\targ %ld: %s\n", current, arg); + if (arg[0] == 'T') { // duplicate argument if (repeating)