aboutsummaryrefslogtreecommitdiff
path: root/llvm/tools/llvm-objdump/llvm-objdump.cpp
diff options
context:
space:
mode:
authorNick Desaulniers <ndesaulniers@google.com>2023-05-02 15:54:09 -0700
committerNick Desaulniers <ndesaulniers@google.com>2023-05-02 15:54:09 -0700
commit3e3c6f24ff85ea52ed67d4c26f1d3d0eacd1ad1b (patch)
treedb1435ec6bb8dd51613636968c9a966b46218952 /llvm/tools/llvm-objdump/llvm-objdump.cpp
parent0fac44d80715ba04a7567346d1832d3b4f019f34 (diff)
downloadllvm-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.cpp18
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);