mirror of
https://git.suyu.dev/suyu/breakpad.git
synced 2026-03-11 05:22:56 +00:00
Don't demangle Rust symbols by default, but allow linking to rust-demangle.
The Rust compiler uses GCC C++ name mangling, but it has another layer of encoding so abi::cxa_demangle doesn't produce great results. This patch changes dump_syms to dump unmangled names by default so that consumers can demangle them after-the-fact. It also adds a tiny bit of support for linking against a Rust library I wrote that can demangle Rust symbols nicely: https://github.com/luser/rust-demangle-capi BUG= Change-Id: I63a425035ebb7ac516f067fed2aa782849ea9604 Reviewed-on: https://chromium-review.googlesource.com/402308 Reviewed-by: Mark Mentovai <mark@chromium.org>
This commit is contained in:
@@ -1205,6 +1205,7 @@ TEST_F(Specifications, Function) {
|
||||
}
|
||||
|
||||
TEST_F(Specifications, MangledName) {
|
||||
// Language defaults to C++, so no need to set it here.
|
||||
PushLine(0x93cd3dfc1aa10097ULL, 0x0397d47a0b4ca0d4ULL, "line-file", 54883661);
|
||||
|
||||
StartCU();
|
||||
@@ -1221,6 +1222,53 @@ TEST_F(Specifications, MangledName) {
|
||||
0x93cd3dfc1aa10097ULL, 0x0397d47a0b4ca0d4ULL);
|
||||
}
|
||||
|
||||
TEST_F(Specifications, MangledNameSwift) {
|
||||
// Swift mangled names should pass through untouched.
|
||||
SetLanguage(dwarf2reader::DW_LANG_Swift);
|
||||
PushLine(0x93cd3dfc1aa10097ULL, 0x0397d47a0b4ca0d4ULL, "line-file", 54883661);
|
||||
StartCU();
|
||||
const string kName = "_TFC9swifttest5Shape17simpleDescriptionfS0_FT_Si";
|
||||
DeclarationDIE(&root_handler_, 0xcd3c51b946fb1eeeLL,
|
||||
dwarf2reader::DW_TAG_subprogram, "declaration-name",
|
||||
kName);
|
||||
DefinitionDIE(&root_handler_, dwarf2reader::DW_TAG_subprogram,
|
||||
0xcd3c51b946fb1eeeLL, "",
|
||||
0x93cd3dfc1aa10097ULL, 0x0397d47a0b4ca0d4ULL);
|
||||
root_handler_.Finish();
|
||||
|
||||
TestFunctionCount(1);
|
||||
TestFunction(0, kName,
|
||||
0x93cd3dfc1aa10097ULL, 0x0397d47a0b4ca0d4ULL);
|
||||
}
|
||||
|
||||
TEST_F(Specifications, MangledNameRust) {
|
||||
SetLanguage(dwarf2reader::DW_LANG_Rust);
|
||||
PushLine(0x93cd3dfc1aa10097ULL, 0x0397d47a0b4ca0d4ULL, "line-file", 54883661);
|
||||
|
||||
StartCU();
|
||||
const string kName = "_ZN14rustc_demangle8demangle17h373defa94bffacdeE";
|
||||
DeclarationDIE(&root_handler_, 0xcd3c51b946fb1eeeLL,
|
||||
dwarf2reader::DW_TAG_subprogram, "declaration-name",
|
||||
kName);
|
||||
DefinitionDIE(&root_handler_, dwarf2reader::DW_TAG_subprogram,
|
||||
0xcd3c51b946fb1eeeLL, "",
|
||||
0x93cd3dfc1aa10097ULL, 0x0397d47a0b4ca0d4ULL);
|
||||
root_handler_.Finish();
|
||||
|
||||
TestFunctionCount(1);
|
||||
TestFunction(0,
|
||||
#ifndef HAVE_RUST_DEMANGLE
|
||||
// Rust mangled names should pass through untouched if not
|
||||
// using rust-demangle.
|
||||
kName,
|
||||
#else
|
||||
// If rust-demangle is available this should be properly
|
||||
// demangled.
|
||||
"rustc_demangle::demangle",
|
||||
#endif
|
||||
0x93cd3dfc1aa10097ULL, 0x0397d47a0b4ca0d4ULL);
|
||||
}
|
||||
|
||||
TEST_F(Specifications, MemberFunction) {
|
||||
PushLine(0x3341a248634e7170ULL, 0x5f6938ee5553b953ULL, "line-file", 18116691);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user