diff options
author | David Bozier <seifsta@gmail.com> | 2017-01-31 15:56:36 +0000 |
---|---|---|
committer | David Bozier <seifsta@gmail.com> | 2017-01-31 15:56:36 +0000 |
commit | 60b80d22335ce6459c10dc001beb378df2717fd4 (patch) | |
tree | fd0d9d00b5d4c3791dce7a30ae750488c4054ca0 /llvm/lib/Demangle/ItaniumDemangle.cpp | |
parent | e0c3b40dde62fdd2b13ca9b0c06afc326119a3ba (diff) | |
download | bcm5719-llvm-60b80d22335ce6459c10dc001beb378df2717fd4.tar.gz bcm5719-llvm-60b80d22335ce6459c10dc001beb378df2717fd4.zip |
Add support for demangling C++11 thread_local variables.
In clang, the grammar for mangling for these names are "<special-name> ::= TW <object name>" for wrapper variables or "<special-name> ::= TH <object name>" for initialization variables.
Initial change was made in libccxxabi r293638
llvm-svn: 293643
Diffstat (limited to 'llvm/lib/Demangle/ItaniumDemangle.cpp')
-rw-r--r-- | llvm/lib/Demangle/ItaniumDemangle.cpp | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/llvm/lib/Demangle/ItaniumDemangle.cpp b/llvm/lib/Demangle/ItaniumDemangle.cpp index 5a0352c5390..49dbe74d25d 100644 --- a/llvm/lib/Demangle/ItaniumDemangle.cpp +++ b/llvm/lib/Demangle/ItaniumDemangle.cpp @@ -3836,6 +3836,8 @@ static const char *parse_call_offset(const char *first, const char *last) { // ::= GV <object name> # Guard variable for one-time // initialization // # No <type> +// ::= TW <object name> # Thread-local wrapper +// ::= TH <object name> # Thread-local initialization // extension ::= TC <first type> <number> _ <second type> # construction // vtable for second-in-first // extension ::= GR <object name> # reference temporary for object @@ -3929,6 +3931,27 @@ static const char *parse_special_name(const char *first, const char *last, } } break; + case 'W': + // TW <object name> # Thread-local wrapper + t = parse_name(first + 2, last, db); + if (t != first + 2) { + if (db.names.empty()) + return first; + db.names.back().first.insert(0, "thread-local wrapper routine for "); + first = t; + } + break; + case 'H': + // TH <object name> # Thread-local initialization + t = parse_name(first + 2, last, db); + if (t != first + 2) { + if (db.names.empty()) + return first; + db.names.back().first.insert( + 0, "thread-local initialization routine for "); + first = t; + } + break; default: // T <call-offset> <base encoding> { |