aboutsummaryrefslogtreecommitdiffhomepage
path: root/tensorflow/stream_executor/lib/demangle.cc
diff options
context:
space:
mode:
Diffstat (limited to 'tensorflow/stream_executor/lib/demangle.cc')
-rw-r--r--tensorflow/stream_executor/lib/demangle.cc38
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