diff options
Diffstat (limited to 'tensorflow/stream_executor/lib/demangle.cc')
-rw-r--r-- | tensorflow/stream_executor/lib/demangle.cc | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/tensorflow/stream_executor/lib/demangle.cc b/tensorflow/stream_executor/lib/demangle.cc new file mode 100644 index 0000000000..6b837b803a --- /dev/null +++ b/tensorflow/stream_executor/lib/demangle.cc @@ -0,0 +1,38 @@ +#include "tensorflow/stream_executor/lib/demangle.h" + +#if (__GNUC__ >= 4 || (__GNUC__ >= 3 && __GNUC_MINOR__ >= 4)) && \ + !defined(__mips__) +# define HAS_CXA_DEMANGLE 1 +#else +# define HAS_CXA_DEMANGLE 0 +#endif + +#include <stdlib.h> +#if HAS_CXA_DEMANGLE +#include <cxxabi.h> +#endif + +namespace perftools { +namespace gputools { +namespace port { + +// The API reference of abi::__cxa_demangle() can be found in +// libstdc++'s manual. +// https://gcc.gnu.org/onlinedocs/libstdc++/libstdc++-html-USERS-4.3/a01696.html +string Demangle(const char *mangled) { + string demangled; + int status = 0; + char *result = NULL; +#if HAS_CXA_DEMANGLE + result = abi::__cxa_demangle(mangled, NULL, NULL, &status); +#endif + if (status == 0 && result != NULL) { // Demangling succeeeded. + demangled.append(result); + free(result); + } + return demangled; +} + +} // namespace port +} // namespace gputools +} // namespace perftools |