diff options
author | Med Ismail Bennani <medismail.bennani@gmail.com> | 2019-12-09 16:46:03 -0800 |
---|---|---|
committer | Med Ismail Bennani <medismail.bennani@gmail.com> | 2019-12-12 10:22:57 -0800 |
commit | 7eaae939b9bb294d029d212d768bb38272c00936 (patch) | |
tree | 23f250e4a77003668945aa7f2dfc9e4448d6fc41 /lldb/source/Core | |
parent | b39009bf1dc91087bcd2201aebbe775ec828302b (diff) | |
download | bcm5719-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.cpp | 27 |
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, |