LCOV - code coverage report
Current view: top level - lib/DebugInfo/Symbolize - SymbolizableObjectFile.h (source / functions) Hit Total Coverage
Test: llvm-toolchain.info Lines: 2 2 100.0 %
Date: 2017-09-14 15:23:50 Functions: 2 2 100.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : //===- SymbolizableObjectFile.h ---------------------------------*- C++ -*-===//
       2             : //
       3             : //                     The LLVM Compiler Infrastructure
       4             : //
       5             : // This file is distributed under the University of Illinois Open Source
       6             : // License. See LICENSE.TXT for details.
       7             : //
       8             : //===----------------------------------------------------------------------===//
       9             : //
      10             : // This file declares the SymbolizableObjectFile class.
      11             : //
      12             : //===----------------------------------------------------------------------===//
      13             : #ifndef LLVM_LIB_DEBUGINFO_SYMBOLIZE_SYMBOLIZABLEOBJECTFILE_H
      14             : #define LLVM_LIB_DEBUGINFO_SYMBOLIZE_SYMBOLIZABLEOBJECTFILE_H
      15             : 
      16             : #include "llvm/ADT/StringRef.h"
      17             : #include "llvm/DebugInfo/DIContext.h"
      18             : #include "llvm/DebugInfo/Symbolize/SymbolizableModule.h"
      19             : #include "llvm/Support/ErrorOr.h"
      20             : #include <cstdint>
      21             : #include <map>
      22             : #include <memory>
      23             : #include <string>
      24             : #include <system_error>
      25             : 
      26             : namespace llvm {
      27             : 
      28             : class DataExtractor;
      29             : 
      30             : namespace symbolize {
      31             : 
      32         815 : class SymbolizableObjectFile : public SymbolizableModule {
      33             : public:
      34             :   static ErrorOr<std::unique_ptr<SymbolizableObjectFile>>
      35             :   create(object::ObjectFile *Obj, std::unique_ptr<DIContext> DICtx);
      36             : 
      37             :   DILineInfo symbolizeCode(uint64_t ModuleOffset, FunctionNameKind FNKind,
      38             :                            bool UseSymbolTable) const override;
      39             :   DIInliningInfo symbolizeInlinedCode(uint64_t ModuleOffset,
      40             :                                       FunctionNameKind FNKind,
      41             :                                       bool UseSymbolTable) const override;
      42             :   DIGlobal symbolizeData(uint64_t ModuleOffset) const override;
      43             : 
      44             :   // Return true if this is a 32-bit x86 PE COFF module.
      45             :   bool isWin32Module() const override;
      46             : 
      47             :   // Returns the preferred base of the module, i.e. where the loader would place
      48             :   // it in memory assuming there were no conflicts.
      49             :   uint64_t getModulePreferredBase() const override;
      50             : 
      51             : private:
      52             :   bool shouldOverrideWithSymbolTable(FunctionNameKind FNKind,
      53             :                                      bool UseSymbolTable) const;
      54             : 
      55             :   bool getNameFromSymbolTable(object::SymbolRef::Type Type, uint64_t Address,
      56             :                               std::string &Name, uint64_t &Addr,
      57             :                               uint64_t &Size) const;
      58             :   // For big-endian PowerPC64 ELF, OpdAddress is the address of the .opd
      59             :   // (function descriptor) section and OpdExtractor refers to its contents.
      60             :   std::error_code addSymbol(const object::SymbolRef &Symbol,
      61             :                             uint64_t SymbolSize,
      62             :                             DataExtractor *OpdExtractor = nullptr,
      63             :                             uint64_t OpdAddress = 0);
      64             :   std::error_code addCoffExportSymbols(const object::COFFObjectFile *CoffObj);
      65             : 
      66             :   object::ObjectFile *Module;
      67             :   std::unique_ptr<DIContext> DebugInfoContext;
      68             : 
      69             :   struct SymbolDesc {
      70             :     uint64_t Addr;
      71             :     // If size is 0, assume that symbol occupies the whole memory range up to
      72             :     // the following symbol.
      73             :     uint64_t Size;
      74             : 
      75             :     friend bool operator<(const SymbolDesc &s1, const SymbolDesc &s2) {
      76   202318664 :       return s1.Addr < s2.Addr;
      77             :     }
      78             :   };
      79             :   std::map<SymbolDesc, StringRef> Functions;
      80             :   std::map<SymbolDesc, StringRef> Objects;
      81             : 
      82             :   SymbolizableObjectFile(object::ObjectFile *Obj,
      83             :                          std::unique_ptr<DIContext> DICtx);
      84             : };
      85             : 
      86             : } // end namespace symbolize
      87             : 
      88             : } // end namespace llvm
      89             : 
      90             : #endif // LLVM_LIB_DEBUGINFO_SYMBOLIZE_SYMBOLIZABLEOBJECTFILE_H

Generated by: LCOV version 1.13