diff options
-rw-r--r-- | llvm/tools/llvm-objdump/ELFDump.cpp | 17 | ||||
-rw-r--r-- | llvm/tools/llvm-objdump/llvm-objdump.cpp | 11 | ||||
-rw-r--r-- | llvm/tools/llvm-objdump/llvm-objdump.h | 6 |
3 files changed, 20 insertions, 14 deletions
diff --git a/llvm/tools/llvm-objdump/ELFDump.cpp b/llvm/tools/llvm-objdump/ELFDump.cpp index 34fe2dd..0920bb3 100644 --- a/llvm/tools/llvm-objdump/ELFDump.cpp +++ b/llvm/tools/llvm-objdump/ELFDump.cpp @@ -38,6 +38,7 @@ private: void printDynamicSection(); void printProgramHeaders(); void printSymbolVersion(); + void printSymbolVersionDependency(const typename ELFT::Shdr &Sec); }; } // namespace @@ -346,19 +347,13 @@ template <typename ELFT> void ELFDumper<ELFT>::printDynamicRelocations() { } template <class ELFT> -static void printSymbolVersionDependency(StringRef FileName, - const ELFFile<ELFT> &Obj, - const typename ELFT::Shdr &Sec) { +void ELFDumper<ELFT>::printSymbolVersionDependency( + const typename ELFT::Shdr &Sec) { outs() << "\nVersion References:\n"; - - auto WarningHandler = [&](const Twine &Msg) { - reportWarning(Msg, FileName); - return Error::success(); - }; Expected<std::vector<VerNeed>> V = - Obj.getVersionDependencies(Sec, WarningHandler); + getELFFile().getVersionDependencies(Sec, this->WarningHandler); if (!V) { - reportWarning(toString(V.takeError()), FileName); + reportWarning(toString(V.takeError()), Obj.getFileName()); return; } @@ -420,7 +415,7 @@ template <class ELFT> void ELFDumper<ELFT>::printSymbolVersion() { StringRef StrTab = unwrapOrError(Elf.getStringTable(*StrTabSec), FileName); if (Shdr.sh_type == ELF::SHT_GNU_verneed) - printSymbolVersionDependency<ELFT>(FileName, Elf, Shdr); + printSymbolVersionDependency(Shdr); else printSymbolVersionDefinition<ELFT>(Shdr, Contents, StrTab); } diff --git a/llvm/tools/llvm-objdump/llvm-objdump.cpp b/llvm/tools/llvm-objdump/llvm-objdump.cpp index 5b6e713..d5e5b40 100644 --- a/llvm/tools/llvm-objdump/llvm-objdump.cpp +++ b/llvm/tools/llvm-objdump/llvm-objdump.cpp @@ -235,13 +235,20 @@ static StringRef ToolName; std::unique_ptr<BuildIDFetcher> BIDFetcher; +Dumper::Dumper(const object::ObjectFile &O) : O(O) { + WarningHandler = [this](const Twine &Msg) { + if (Warnings.insert(Msg.str()).second) + reportWarning(Msg, this->O.getFileName()); + return Error::success(); + }; +} + void Dumper::reportUniqueWarning(Error Err) { reportUniqueWarning(toString(std::move(Err))); } void Dumper::reportUniqueWarning(const Twine &Msg) { - if (Warnings.insert(StringRef(Msg.str())).second) - reportWarning(Msg, O.getFileName()); + cantFail(WarningHandler(Msg)); } static Expected<std::unique_ptr<Dumper>> createDumper(const ObjectFile &Obj) { diff --git a/llvm/tools/llvm-objdump/llvm-objdump.h b/llvm/tools/llvm-objdump/llvm-objdump.h index 9f6a031..7778cf6 100644 --- a/llvm/tools/llvm-objdump/llvm-objdump.h +++ b/llvm/tools/llvm-objdump/llvm-objdump.h @@ -18,6 +18,7 @@ #include "llvm/Support/Compiler.h" #include "llvm/Support/DataTypes.h" #include "llvm/Support/FormattedStream.h" +#include <functional> #include <memory> namespace llvm { @@ -76,8 +77,11 @@ class Dumper { const object::ObjectFile &O; StringSet<> Warnings; +protected: + std::function<Error(const Twine &Msg)> WarningHandler; + public: - Dumper(const object::ObjectFile &O) : O(O) {} + Dumper(const object::ObjectFile &O); virtual ~Dumper() {} void reportUniqueWarning(Error Err); |