1 //===-- sanitizer_symbolizer_itanium.cc -----------------------------------===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 // This file is shared between the sanitizer run-time libraries.
11 // Itanium C++ ABI-specific implementation of symbolizer parts.
12 //===----------------------------------------------------------------------===//
13 #if defined(__APPLE__) || defined(__linux__)
15 #include "sanitizer_symbolizer.h"
19 // C++ demangling function, as required by Itanium C++ ABI. This is weak,
20 // because we do not require a C++ ABI library to be linked to a program
21 // using sanitizers; if it's not present, we'll just use the mangled name.
22 namespace __cxxabiv1
{
23 extern "C" char *__cxa_demangle(const char *mangled
, char *buffer
,
24 size_t *length
, int *status
)
25 SANITIZER_WEAK_ATTRIBUTE
;
28 const char *__sanitizer::Demangle(const char *MangledName
) {
29 // FIXME: __cxa_demangle aggressively insists on allocating memory.
30 // There's not much we can do about that, short of providing our
31 // own demangler (libc++abi's implementation could be adapted so that
32 // it does not allocate). For now, we just call it anyway, and we leak
33 // the returned value.
34 if (__cxxabiv1::__cxa_demangle
)
35 if (const char *Demangled
=
36 __cxxabiv1::__cxa_demangle(MangledName
, 0, 0, 0))
42 #endif // __APPLE__ || __linux__