From 7927ebb672660db636995b07ed8e257e73be6cce Mon Sep 17 00:00:00 2001 From: Ingo Weinhold Date: Thu, 4 Jun 2009 02:00:45 +0000 Subject: [PATCH] Moved the appending of '*'/'&' for pointer/reference parameters to the gcc 2 demangler, where it belongs. The gcc 4 stack traces look correct now. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@30955 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/add-ons/kernel/debugger/demangle/gcc2.cpp | 16 ++++++++++++---- src/system/kernel/arch/x86/arch_debug.cpp | 6 ++---- 2 files changed, 14 insertions(+), 8 deletions(-) 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;