diff options
author | Nick Desaulniers <ndesaulniers@google.com> | 2023-05-02 15:54:09 -0700 |
---|---|---|
committer | Nick Desaulniers <ndesaulniers@google.com> | 2023-05-02 15:54:09 -0700 |
commit | 3e3c6f24ff85ea52ed67d4c26f1d3d0eacd1ad1b (patch) | |
tree | db1435ec6bb8dd51613636968c9a966b46218952 /llvm/tools/llvm-objdump/llvm-objdump.cpp | |
parent | 0fac44d80715ba04a7567346d1832d3b4f019f34 (diff) | |
download | llvm-3e3c6f24ff85ea52ed67d4c26f1d3d0eacd1ad1b.zip llvm-3e3c6f24ff85ea52ed67d4c26f1d3d0eacd1ad1b.tar.gz llvm-3e3c6f24ff85ea52ed67d4c26f1d3d0eacd1ad1b.tar.bz2 |
Revert "[Demangle] make llvm::demangle take std::string_view rather than const std::string&"
This reverts commit c117c2c8ba4afd45a006043ec6dd858652b2ffcc.
itaniumDemangle calls std::strlen with the results of
std::string_view::data() which may not be NUL-terminated. This causes
lld/test/wasm/why-extract.s to fail when "expensive checks" are enabled
via -DLLVM_ENABLE_EXPENSIVE_CHECKS=ON. See D149675 for further
discussion. Back this out until the individual demanglers are converted
to use std::string_view.
Diffstat (limited to 'llvm/tools/llvm-objdump/llvm-objdump.cpp')
-rw-r--r-- | llvm/tools/llvm-objdump/llvm-objdump.cpp | 18 |
1 files changed, 12 insertions, 6 deletions
diff --git a/llvm/tools/llvm-objdump/llvm-objdump.cpp b/llvm/tools/llvm-objdump/llvm-objdump.cpp index 9d4a2d4..5abcdcc 100644 --- a/llvm/tools/llvm-objdump/llvm-objdump.cpp +++ b/llvm/tools/llvm-objdump/llvm-objdump.cpp @@ -1548,7 +1548,7 @@ static void disassembleObject(const Target *TheTarget, ObjectFile &Obj, if (Demangle) { // Fetch the demangled names and store them locally. for (const SymbolInfoTy &Symbol : SymbolsHere) - DemangledSymNamesHere.push_back(demangle(Symbol.Name)); + DemangledSymNamesHere.push_back(demangle(Symbol.Name.str())); // Now we've finished modifying that vector, it's safe to make // a vector of StringRefs pointing into it. SymNamesHere.insert(SymNamesHere.begin(), DemangledSymNamesHere.begin(), @@ -1909,8 +1909,9 @@ static void disassembleObject(const Target *TheTarget, ObjectFile &Obj, if (TargetSym != nullptr) { uint64_t TargetAddress = TargetSym->Addr; uint64_t Disp = Target - TargetAddress; - std::string TargetName = Demangle ? demangle(TargetSym->Name) - : TargetSym->Name.str(); + std::string TargetName = TargetSym->Name.str(); + if (Demangle) + TargetName = demangle(TargetName); *TargetOS << " <"; if (!Disp) { @@ -2510,8 +2511,10 @@ void objdump::printSymbol(const ObjectFile &O, const SymbolRef &Symbol, if (NameOrErr) { outs() << " (csect:"; - std::string SymName = - Demangle ? demangle(*NameOrErr) : NameOrErr->str(); + std::string SymName(NameOrErr.get()); + + if (Demangle) + SymName = demangle(SymName); if (SymbolDescription) SymName = getXCOFFSymbolDescription(createSymbolInfo(O, *SymRef), @@ -2565,7 +2568,10 @@ void objdump::printSymbol(const ObjectFile &O, const SymbolRef &Symbol, outs() << " .hidden"; } - std::string SymName = Demangle ? demangle(Name) : Name.str(); + std::string SymName(Name); + if (Demangle) + SymName = demangle(SymName); + if (O.isXCOFF() && SymbolDescription) SymName = getXCOFFSymbolDescription(createSymbolInfo(O, Symbol), SymName); |