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)