From 813d6a742fed83573a923c8fa3707d357b8af4dd Mon Sep 17 00:00:00 2001 From: Ingo Weinhold Date: Wed, 3 Jun 2009 13:36:35 +0000 Subject: [PATCH] print_demangled_call(): Use a heap allocated buffer. This allows us to be more generous with the size. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@30950 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/system/kernel/arch/x86/arch_debug.cpp | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/src/system/kernel/arch/x86/arch_debug.cpp b/src/system/kernel/arch/x86/arch_debug.cpp index 1fae20749f..50defbaf54 100644 --- a/src/system/kernel/arch/x86/arch_debug.cpp +++ b/src/system/kernel/arch/x86/arch_debug.cpp @@ -14,6 +14,7 @@ #include #include +#include #include #include #include @@ -116,12 +117,18 @@ static status_t print_demangled_call(const char* image, const char* symbol, addr_t args, bool noObjectMethod, bool addDebugVariables) { + static const size_t kBufferSize = 256; + char* buffer = (char*)debug_malloc(kBufferSize); + if (buffer == NULL) + return B_NO_MEMORY; + bool isObjectMethod; - char buffer[64]; - const char* name = debug_demangle_symbol(symbol, buffer, sizeof(buffer), + const char* name = debug_demangle_symbol(symbol, buffer, kBufferSize, &isObjectMethod); - if (name == NULL) + if (name == NULL) { + debug_free(buffer); return B_ERROR; + } uint32* arg = (uint32*)args; @@ -145,7 +152,7 @@ print_demangled_call(const char* image, const char* symbol, addr_t args, int32 type, i = 0; uint32 cookie = 0; while (debug_get_next_demangled_argument(&cookie, symbol, buffer, - sizeof(buffer), &type, &length) == B_OK) { + kBufferSize, &type, &length) == B_OK) { if (i++ > 0) kprintf(", "); @@ -223,7 +230,7 @@ print_demangled_call(const char* image, const char* symbol, addr_t args, if (type == B_STRING_TYPE) { if (value == 0) kprintf(" \33[31m\"\"\33[0m"); - else if (user_strlcpy(buffer, (char*)value, sizeof(buffer)) < B_OK) + else if (user_strlcpy(buffer, (char*)value, kBufferSize) < B_OK) kprintf(" \33[31m\"\"\33[0m"); else kprintf(" \33[36m\"%s\"\33[0m", buffer); @@ -234,6 +241,8 @@ print_demangled_call(const char* image, const char* symbol, addr_t args, arg = (uint32*)((uint8*)arg + length); } + debug_free(buffer); + kprintf(")"); return B_OK; }