diff --git a/src/add-ons/kernel/debugger/demangle/gcc2.cpp b/src/add-ons/kernel/debugger/demangle/gcc2.cpp index 4b9acec12d..b28c56350d 100644 --- a/src/add-ons/kernel/debugger/demangle/gcc2.cpp +++ b/src/add-ons/kernel/debugger/demangle/gcc2.cpp @@ -349,8 +349,8 @@ get_next_argument_internal(uint32* _cookie, const char* symbol, char* name, return B_LINK_LIMIT; // it's a repeat case - status_t status = get_next_argument_internal(&index, symbol, name, - nameSize, _type, _argumentLength, true); + status_t status = get_next_argument_internal(&index, symbol, + name, nameSize, _type, _argumentLength, true); if (status == B_OK) (*_cookie)++; return status; @@ -472,6 +472,14 @@ status_t get_next_argument_gcc2(uint32* _cookie, const char* symbol, char* name, size_t nameSize, int32* _type, size_t* _argumentLength) { - return get_next_argument_internal(_cookie, symbol, name, nameSize, _type, - _argumentLength, false); + status_t error = get_next_argument_internal(_cookie, symbol, name, nameSize, + _type, _argumentLength, false); + if (error != B_OK) + return error; + + // append the missing '*'/'&' for pointer/ref types + if (name[0] != '\0' && (*_type == B_POINTER_TYPE || *_type == B_REF_TYPE)) + strlcat(name, *_type == B_POINTER_TYPE ? "*" : "&", nameSize); + + return B_OK; } diff --git a/src/system/kernel/arch/x86/arch_debug.cpp b/src/system/kernel/arch/x86/arch_debug.cpp index 50defbaf54..3b8404f137 100644 --- a/src/system/kernel/arch/x86/arch_debug.cpp +++ b/src/system/kernel/arch/x86/arch_debug.cpp @@ -204,10 +204,8 @@ print_demangled_call(const char* image, const char* symbol, addr_t args, kprintf("\33[34m%s\33[0m", value ? "true" : "false"); break; default: - if (buffer[0]) { - kprintf("%s%s: ", buffer, type == B_POINTER_TYPE ? "*" - : type == B_REF_TYPE ? "&" : ""); - } + if (buffer[0]) + kprintf("%s: ", buffer); if (length == 4) { value = *(uint32*)arg;