summaryrefslogtreecommitdiffstats
path: root/lldb/source/Core
diff options
context:
space:
mode:
authorMed Ismail Bennani <medismail.bennani@gmail.com>2019-12-09 16:46:03 -0800
committerMed Ismail Bennani <medismail.bennani@gmail.com>2019-12-12 10:22:57 -0800
commit7eaae939b9bb294d029d212d768bb38272c00936 (patch)
tree23f250e4a77003668945aa7f2dfc9e4448d6fc41 /lldb/source/Core
parentb39009bf1dc91087bcd2201aebbe775ec828302b (diff)
downloadbcm5719-llvm-7eaae939b9bb294d029d212d768bb38272c00936.tar.gz
bcm5719-llvm-7eaae939b9bb294d029d212d768bb38272c00936.zip
[FormatEntity] Add mangled function name support
Summary: Add `function.mangled-name` key for FormatEntity to show the mangled function names in backtraces. rdar://54088244 Signed-off-by: Med Ismail Bennani <medismail.bennani@gmail.com> Subscribers: lldb-commits Tags: #lldb Differential Revision: https://reviews.llvm.org/D71237 Signed-off-by: Med Ismail Bennani <medismail.bennani@gmail.com>
Diffstat (limited to 'lldb/source/Core')
-rw-r--r--lldb/source/Core/FormatEntity.cpp27
1 files changed, 27 insertions, 0 deletions
diff --git a/lldb/source/Core/FormatEntity.cpp b/lldb/source/Core/FormatEntity.cpp
index beab026e67a..5d4dba07374 100644
--- a/lldb/source/Core/FormatEntity.cpp
+++ b/lldb/source/Core/FormatEntity.cpp
@@ -125,6 +125,7 @@ static FormatEntity::Entry::Definition g_function_child_entries[] = {
ENTRY("name", FunctionName),
ENTRY("name-without-args", FunctionNameNoArgs),
ENTRY("name-with-args", FunctionNameWithArgs),
+ ENTRY("mangled-name", FunctionMangledName),
ENTRY("addr-offset", FunctionAddrOffset),
ENTRY("concrete-only-addr-offset-no-padding", FunctionAddrOffsetConcrete),
ENTRY("line-offset", FunctionLineOffset),
@@ -351,6 +352,7 @@ const char *FormatEntity::Entry::TypeToCString(Type t) {
ENUM_TO_CSTR(FunctionName);
ENUM_TO_CSTR(FunctionNameWithArgs);
ENUM_TO_CSTR(FunctionNameNoArgs);
+ ENUM_TO_CSTR(FunctionMangledName);
ENUM_TO_CSTR(FunctionAddrOffset);
ENUM_TO_CSTR(FunctionAddrOffsetConcrete);
ENUM_TO_CSTR(FunctionLineOffset);
@@ -1745,6 +1747,31 @@ bool FormatEntity::Format(const Entry &entry, Stream &s,
}
return false;
+ case Entry::Type::FunctionMangledName: {
+ const char *name = nullptr;
+ if (sc->symbol)
+ name = sc->symbol->GetMangled()
+ .GetName(sc->symbol->GetLanguage(), Mangled::ePreferMangled)
+ .AsCString();
+ else if (sc->function)
+ name = sc->function->GetMangled()
+ .GetName(sc->symbol->GetLanguage(), Mangled::ePreferMangled)
+ .AsCString();
+
+ if (!name)
+ return false;
+ s.PutCString(name);
+
+ if (Block *inline_block = sc->block->GetContainingInlinedBlock()) {
+ if (const InlineFunctionInfo *inline_info =
+ sc->block->GetInlinedFunctionInfo()) {
+ s.PutCString(" [inlined] ");
+ inline_info->GetName(sc->function->GetLanguage()).Dump(&s);
+ }
+ }
+ return true;
+ }
+
case Entry::Type::FunctionAddrOffset:
if (addr) {
if (DumpAddressOffsetFromFunction(s, sc, exe_ctx, *addr, false, false,
OpenPOWER on IntegriCloud