Remove troublesome libiberty dependency by using __cxa_demangle instead of cplus_demangle.
Bug #232763 r=dbaron sr=brendan git-svn-id: svn://10.0.0.236/trunk@152593 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
@@ -52,14 +52,13 @@
|
||||
|
||||
|
||||
|
||||
// This thing is exported by libiberty.a (-liberty)
|
||||
// This thing is exported by libstdc++
|
||||
// Yes, this is a gcc only hack
|
||||
#if defined(MOZ_DEMANGLE_SYMBOLS)
|
||||
extern "C" char * cplus_demangle(const char *,int);
|
||||
#include <cxxabi.h>
|
||||
#include <stdlib.h> // for free()
|
||||
#endif // MOZ_DEMANGLE_SYMBOLS
|
||||
|
||||
#if (defined(__linux__) || defined(__sun)) && defined(__GNUC__)
|
||||
void DemangleSymbol(const char * aSymbol,
|
||||
char * aBuffer,
|
||||
int aBufLen)
|
||||
@@ -67,10 +66,13 @@ void DemangleSymbol(const char * aSymbol,
|
||||
aBuffer[0] = '\0';
|
||||
|
||||
#if defined(MOZ_DEMANGLE_SYMBOLS)
|
||||
char outBuffer[4096];
|
||||
size_t outBufLen = sizeof(outBuffer);
|
||||
int status;
|
||||
/* See demangle.h in the gcc source for the voodoo */
|
||||
char * demangled = cplus_demangle(aSymbol,3);
|
||||
char * demangled = abi::__cxa_demangle(aSymbol,outBuffer,&outBufLen,&status);
|
||||
|
||||
if (demangled)
|
||||
if (demangled && !status)
|
||||
{
|
||||
strncpy(aBuffer,demangled,aBufLen);
|
||||
free(demangled);
|
||||
@@ -78,17 +80,6 @@ void DemangleSymbol(const char * aSymbol,
|
||||
#endif // MOZ_DEMANGLE_SYMBOLS
|
||||
}
|
||||
|
||||
#else
|
||||
void DemangleSymbol(const char * aSymbol,
|
||||
char * aBuffer,
|
||||
int aBufLen)
|
||||
{
|
||||
// lose
|
||||
aBuffer[0] = '\0';
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
#if defined(linux) && defined(__GLIBC__) && (defined(__i386) || defined(PPC)) // i386 or PPC Linux stackwalking code
|
||||
|
||||
|
||||
Reference in New Issue
Block a user