diff --git a/src/add-ons/kernel/debugger/demangle/demangle.h b/src/add-ons/kernel/debugger/demangle/demangle.h index 5eb41103f6..5a435f42a4 100644 --- a/src/add-ons/kernel/debugger/demangle/demangle.h +++ b/src/add-ons/kernel/debugger/demangle/demangle.h @@ -7,15 +7,13 @@ #include -const char* -demangle_symbol(const char* mangledName, char* buffer, size_t bufferSize, + +const char* demangle_symbol(const char* mangledName, char* buffer, size_t bufferSize, bool* _isObjectMethod); -status_t -get_next_argument(uint32* _cookie, const char* mangledName, char* name, +status_t get_next_argument(uint32* _cookie, const char* mangledName, char* name, size_t nameSize, int32* _type, size_t* _argumentLength); - // gcc 2 const char* demangle_symbol_gcc2(const char* name, char* buffer, size_t bufferSize, bool* _isObjectMethod); diff --git a/src/apps/debugger/demangler/Demangler.cpp b/src/apps/debugger/demangler/Demangler.cpp index 6ddf7af08e..02e684294a 100644 --- a/src/apps/debugger/demangler/Demangler.cpp +++ b/src/apps/debugger/demangler/Demangler.cpp @@ -3,10 +3,10 @@ * Distributed under the terms of the MIT License. */ -#include - #include "Demangler.h" +#include + #include "demangle.h" @@ -17,11 +17,17 @@ Demangler::Demangle(const BString& mangledName) char buffer[1024]; const char* demangled; - demangled = demangle_symbol(mangledName.String(), buffer, + if (mangledName.Compare("_Z", 2) == 0) + demangled = demangle_name_gcc3(mangledName.String(), buffer, + sizeof(buffer)); + else + demangled = demangle_symbol_gcc2(mangledName.String(), buffer, sizeof(buffer), NULL); + if (demangled == NULL) - return mangledName; - + // name not mangled + return mangledName; + demangledName << demangled << "("; size_t length; @@ -29,7 +35,7 @@ Demangler::Demangle(const BString& mangledName) uint32 cookie = 0; while (get_next_argument(&cookie, mangledName.String(), buffer, sizeof(buffer), &type, &length) == B_OK) { - + if (i++ > 0) demangledName << ", ";