diff options
Diffstat (limited to 'contrib/llvm/tools/llvm-symbolizer/LLVMSymbolize.h')
-rw-r--r-- | contrib/llvm/tools/llvm-symbolizer/LLVMSymbolize.h | 56 |
1 files changed, 36 insertions, 20 deletions
diff --git a/contrib/llvm/tools/llvm-symbolizer/LLVMSymbolize.h b/contrib/llvm/tools/llvm-symbolizer/LLVMSymbolize.h index 45febe0..ff848fc 100644 --- a/contrib/llvm/tools/llvm-symbolizer/LLVMSymbolize.h +++ b/contrib/llvm/tools/llvm-symbolizer/LLVMSymbolize.h @@ -10,13 +10,14 @@ // Header for LLVM symbolization library. // //===----------------------------------------------------------------------===// -#ifndef LLVM_SYMBOLIZE_H -#define LLVM_SYMBOLIZE_H +#ifndef LLVM_TOOLS_LLVM_SYMBOLIZER_LLVMSYMBOLIZE_H +#define LLVM_TOOLS_LLVM_SYMBOLIZER_LLVMSYMBOLIZE_H #include "llvm/ADT/SmallVector.h" #include "llvm/DebugInfo/DIContext.h" #include "llvm/Object/MachOUniversal.h" #include "llvm/Object/ObjectFile.h" +#include "llvm/Support/DataExtractor.h" #include "llvm/Support/MemoryBuffer.h" #include <map> #include <memory> @@ -39,13 +40,14 @@ public: bool PrintInlining : 1; bool Demangle : 1; std::string DefaultArch; + std::vector<std::string> DsymHints; Options(bool UseSymbolTable = true, FunctionNameKind PrintFunctions = FunctionNameKind::LinkageName, bool PrintInlining = true, bool Demangle = true, std::string DefaultArch = "") - : UseSymbolTable(UseSymbolTable), PrintFunctions(PrintFunctions), - PrintInlining(PrintInlining), Demangle(Demangle), - DefaultArch(DefaultArch) {} + : UseSymbolTable(UseSymbolTable), + PrintFunctions(PrintFunctions), PrintInlining(PrintInlining), + Demangle(Demangle), DefaultArch(DefaultArch) {} }; LLVMSymbolizer(const Options &Opts = Options()) : Opts(Opts) {} @@ -62,11 +64,15 @@ public: void flush(); static std::string DemangleName(const std::string &Name); private: - typedef std::pair<Binary*, Binary*> BinaryPair; + typedef std::pair<ObjectFile*, ObjectFile*> ObjectPair; ModuleInfo *getOrCreateModuleInfo(const std::string &ModuleName); - /// \brief Returns pair of pointers to binary and debug binary. - BinaryPair getOrCreateBinary(const std::string &Path); + ObjectFile *lookUpDsymFile(const std::string &Path, const MachOObjectFile *ExeObj, + const std::string &ArchName); + + /// \brief Returns pair of pointers to object and debug object. + ObjectPair getOrCreateObjects(const std::string &Path, + const std::string &ArchName); /// \brief Returns a parsed object file for a given architecture in a /// universal binary (or the binary itself if it is an object file). ObjectFile *getObjectFileFromBinary(Binary *Bin, const std::string &ArchName); @@ -75,14 +81,21 @@ private: // Owns all the parsed binaries and object files. SmallVector<std::unique_ptr<Binary>, 4> ParsedBinariesAndObjects; + SmallVector<std::unique_ptr<MemoryBuffer>, 4> MemoryBuffers; + void addOwningBinary(OwningBinary<Binary> OwningBin) { + std::unique_ptr<Binary> Bin; + std::unique_ptr<MemoryBuffer> MemBuf; + std::tie(Bin, MemBuf) = OwningBin.takeBinary(); + ParsedBinariesAndObjects.push_back(std::move(Bin)); + MemoryBuffers.push_back(std::move(MemBuf)); + } + // Owns module info objects. - typedef std::map<std::string, ModuleInfo *> ModuleMapTy; - ModuleMapTy Modules; - typedef std::map<std::string, BinaryPair> BinaryMapTy; - BinaryMapTy BinaryForPath; - typedef std::map<std::pair<MachOUniversalBinary *, std::string>, ObjectFile *> - ObjectFileForArchMapTy; - ObjectFileForArchMapTy ObjectFileForArch; + std::map<std::string, ModuleInfo *> Modules; + std::map<std::pair<MachOUniversalBinary *, std::string>, ObjectFile *> + ObjectFileForArch; + std::map<std::pair<std::string, std::string>, ObjectPair> + ObjectPairForPathArch; Options Opts; static const char kBadString[]; @@ -103,7 +116,11 @@ private: bool getNameFromSymbolTable(SymbolRef::Type Type, uint64_t Address, std::string &Name, uint64_t &Addr, uint64_t &Size) const; - void addSymbol(const SymbolRef &Symbol); + // For big-endian PowerPC64 ELF, OpdAddress is the address of the .opd + // (function descriptor) section and OpdExtractor refers to its contents. + void addSymbol(const SymbolRef &Symbol, + DataExtractor *OpdExtractor = nullptr, + uint64_t OpdAddress = 0); ObjectFile *Module; std::unique_ptr<DIContext> DebugInfoContext; @@ -116,12 +133,11 @@ private: return s1.Addr < s2.Addr; } }; - typedef std::map<SymbolDesc, StringRef> SymbolMapTy; - SymbolMapTy Functions; - SymbolMapTy Objects; + std::map<SymbolDesc, StringRef> Functions; + std::map<SymbolDesc, StringRef> Objects; }; } // namespace symbolize } // namespace llvm -#endif // LLVM_SYMBOLIZE_H +#endif |