[lld][nfc] Remove lld::demangle() (partial revert of D116279)

{D116279}, in addition to adding support for other demanglers, also
factored out some of the demangling logic. However, I don't think the
abstraction really carries its weight -- after {D135942}, only the ELF
and WASM backends call it with anything other than a non-constant
`shouldDemangle` argument. The COFF and Mach-O backends were already
doing the should-demangle check before calling `demangle()`.

Reviewed By: MaskRay, #lld-macho

Differential Revision: https://reviews.llvm.org/D135943
This commit is contained in:
Jez Ng 2022-10-14 15:28:19 -04:00
parent 316123a2fc
commit 32647c8f53
6 changed files with 21 additions and 20 deletions

View File

@ -36,9 +36,9 @@ static std::string maybeDemangleSymbol(StringRef symName) {
StringRef demangleInput = prefixless;
if (config->machine == I386)
demangleInput.consume_front("_");
std::string demangled = demangle(demangleInput, true);
std::string demangled = demangle(demangleInput.str());
if (demangled != demangleInput)
return prefix + demangle(demangleInput, true);
return prefix + demangle(demangleInput.str());
return (prefix + prefixless).str();
}
return std::string(symName);

View File

@ -21,6 +21,7 @@
#include "lld/Common/Memory.h"
#include "lld/Common/Strings.h"
#include "llvm/ADT/STLExtras.h"
#include "llvm/Demangle/Demangle.h"
using namespace llvm;
using namespace llvm::object;
@ -145,13 +146,12 @@ StringMap<SmallVector<Symbol *, 0>> &SymbolTable::getDemangledSyms() {
StringRef name = sym->getName();
size_t pos = name.find('@');
if (pos == std::string::npos)
demangled = demangle(name, config->demangle);
demangled = demangle(name.str());
else if (pos + 1 == name.size() || name[pos + 1] == '@')
demangled = demangle(name.substr(0, pos), config->demangle);
demangled = demangle(name.substr(0, pos).str());
else
demangled = (demangle(name.substr(0, pos), config->demangle) +
name.substr(pos))
.str();
demangled =
(demangle(name.substr(0, pos).str()) + name.substr(pos)).str();
(*demangledSyms)[demangled].push_back(sym);
}
}

View File

@ -15,7 +15,7 @@
#include "Target.h"
#include "Writer.h"
#include "lld/Common/ErrorHandler.h"
#include "lld/Common/Strings.h"
#include "llvm/Demangle/Demangle.h"
#include "llvm/Support/Compiler.h"
#include <cstring>
@ -43,9 +43,16 @@ LLVM_ATTRIBUTE_UNUSED static inline void assertSymbols() {
AssertSymbol<LazyObject>();
}
// Returns a symbol for an error message.
static std::string maybeDemangleSymbol(StringRef symName) {
if (elf::config->demangle)
return demangle(symName.str());
return symName.str();
}
std::string lld::toString(const elf::Symbol &sym) {
StringRef name = sym.getName();
std::string ret = demangle(name, config->demangle);
std::string ret = maybeDemangleSymbol(name);
const char *suffix = sym.getVersionSuffix();
if (*suffix == '@')

View File

@ -15,6 +15,7 @@
#include "SyntheticSections.h"
#include "lld/Common/ErrorHandler.h"
#include "lld/Common/Memory.h"
#include "llvm/Demangle/Demangle.h"
using namespace llvm;
using namespace lld;

View File

@ -13,19 +13,11 @@
#include "llvm/ADT/Optional.h"
#include "llvm/ADT/SmallVector.h"
#include "llvm/ADT/StringRef.h"
#include "llvm/Demangle/Demangle.h"
#include "llvm/Support/GlobPattern.h"
#include <string>
#include <vector>
namespace lld {
// Returns a demangled symbol name. If Name is not a mangled name, it returns
// name.
inline std::string demangle(llvm::StringRef symName, bool shouldDemangle) {
if (shouldDemangle)
return llvm::demangle(symName.str().c_str());
return std::string(symName);
}
llvm::SmallVector<uint8_t, 0> parseHex(llvm::StringRef s);
bool isValidCIdentifier(llvm::StringRef s);

View File

@ -15,7 +15,7 @@
#include "OutputSegment.h"
#include "lld/Common/ErrorHandler.h"
#include "lld/Common/Memory.h"
#include "lld/Common/Strings.h"
#include "llvm/Demangle/Demangle.h"
#define DEBUG_TYPE "lld"
@ -34,8 +34,9 @@ std::string maybeDemangleSymbol(StringRef name) {
// `main` in the case where we need to pass it arguments.
if (name == "__main_argc_argv")
return "main";
return demangle(name, config->demangle);
if (wasm::config->demangle)
return demangle(name.str());
return name.str();
}
std::string toString(wasm::Symbol::Kind kind) {