DefinedRegular<ELFT> *Encl = getSymbolAt(&S, Offset);
if (Encl && Encl->Type == STT_FUNC) {
StringRef Func = getSymbolName(*File, *Encl);
- return SrcFile + " (function " +
- (Config->Demangle ? demangle(Func) : Func.str()) + ")";
+ return SrcFile + " (function " + maybeDemangle(Func) + ")";
}
return (SrcFile + " (" + S.Name + "+0x" + Twine::utohexstr(Offset) + ")")
Config->UnresolvedSymbols != UnresolvedPolicy::NoUndef)
return;
- std::string Msg =
- getLocation(Sym, S, Offset) + ": undefined symbol '" +
- (Config->Demangle ? demangle(Sym.getName()) : Sym.getName().str()) + "'";
+ std::string Msg = getLocation(Sym, S, Offset) + ": undefined symbol '" +
+ maybeDemangle(Sym.getName()) + "'";
if (Config->UnresolvedSymbols == UnresolvedPolicy::Warn)
warn(Msg);
//===----------------------------------------------------------------------===//
#include "Strings.h"
+#include "Config.h"
#include "Error.h"
#include "llvm/ADT/ArrayRef.h"
#include "llvm/ADT/StringRef.h"
free(Buf);
return S;
}
+
+std::string elf::maybeDemangle(StringRef Name) {
+ if (Config->Demangle)
+ return demangle(Name);
+ return Name;
+}
// it returns an unmodified string.
std::string demangle(StringRef Name);
+// Demangle if Config->Demangle is true.
+std::string maybeDemangle(StringRef Name);
+
inline StringRef toStringRef(ArrayRef<uint8_t> Arr) {
return {(const char *)Arr.data(), Arr.size()};
}
template <typename ELFT>
std::string SymbolTable<ELFT>::conflictMsg(SymbolBody *Existing,
InputFile *NewFile) {
- std::string Sym = Existing->getName();
- if (Config->Demangle)
- Sym = demangle(Sym);
- return Sym + " in " + getFilename(Existing->File) + " and " +
- getFilename(NewFile);
+ return maybeDemangle(Existing->getName()) + " in " +
+ getFilename(Existing->File) + " and " + getFilename(NewFile);
}
template <class ELFT> Symbol *SymbolTable<ELFT>::addUndefined(StringRef Name) {