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
This commit is contained in:
Ingo Weinhold
2009-06-03 13:36:35 +00:00
parent 360d4974b9
commit 813d6a742f
+14 -5
View File
@@ -14,6 +14,7 @@
#include <cpu.h> #include <cpu.h>
#include <debug.h> #include <debug.h>
#include <debug_heap.h>
#include <elf.h> #include <elf.h>
#include <kernel.h> #include <kernel.h>
#include <kimage.h> #include <kimage.h>
@@ -116,12 +117,18 @@ static status_t
print_demangled_call(const char* image, const char* symbol, addr_t args, print_demangled_call(const char* image, const char* symbol, addr_t args,
bool noObjectMethod, bool addDebugVariables) 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; bool isObjectMethod;
char buffer[64]; const char* name = debug_demangle_symbol(symbol, buffer, kBufferSize,
const char* name = debug_demangle_symbol(symbol, buffer, sizeof(buffer),
&isObjectMethod); &isObjectMethod);
if (name == NULL) if (name == NULL) {
debug_free(buffer);
return B_ERROR; return B_ERROR;
}
uint32* arg = (uint32*)args; uint32* arg = (uint32*)args;
@@ -145,7 +152,7 @@ print_demangled_call(const char* image, const char* symbol, addr_t args,
int32 type, i = 0; int32 type, i = 0;
uint32 cookie = 0; uint32 cookie = 0;
while (debug_get_next_demangled_argument(&cookie, symbol, buffer, while (debug_get_next_demangled_argument(&cookie, symbol, buffer,
sizeof(buffer), &type, &length) == B_OK) { kBufferSize, &type, &length) == B_OK) {
if (i++ > 0) if (i++ > 0)
kprintf(", "); kprintf(", ");
@@ -223,7 +230,7 @@ print_demangled_call(const char* image, const char* symbol, addr_t args,
if (type == B_STRING_TYPE) { if (type == B_STRING_TYPE) {
if (value == 0) if (value == 0)
kprintf(" \33[31m\"<NULL>\"\33[0m"); kprintf(" \33[31m\"<NULL>\"\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"); kprintf(" \33[31m\"<???>\"\33[0m");
else else
kprintf(" \33[36m\"%s\"\33[0m", buffer); 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); arg = (uint32*)((uint8*)arg + length);
} }
debug_free(buffer);
kprintf(")"); kprintf(")");
return B_OK; return B_OK;
} }