LLVM  8.0.1
SymbolizableObjectFile.h
Go to the documentation of this file.
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"
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 
33 public:
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 
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  return s1.Addr < s2.Addr;
77  }
78  };
79  std::map<SymbolDesc, StringRef> Functions;
80  std::map<SymbolDesc, StringRef> Objects;
81 
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
Represents either an error or a value T.
Definition: ErrorOr.h:57
This class represents lattice values for constants.
Definition: AllocatorList.h:24
A Module instance is used to store all the information related to an LLVM module. ...
Definition: Module.h:65
This class is the base class for all object file types.
Definition: ObjectFile.h:202
DINameKind
A DINameKind is passed to name search methods to specify a preference regarding the type of name reso...
Definition: DIContext.h:119
A format-neutral container for source line information.
Definition: DIContext.h:31
amdgpu Simplify well known AMD library false Value Value const Twine & Name
DIInliningInfo symbolizeInlinedCode(uint64_t ModuleOffset, FunctionNameKind FNKind, bool UseSymbolTable) const override
The instances of the Type class are immutable: once they are created, they are never changed...
Definition: Type.h:46
DILineInfo symbolizeCode(uint64_t ModuleOffset, FunctionNameKind FNKind, bool UseSymbolTable) const override
A format-neutral container for inlined code description.
Definition: DIContext.h:78
This is a value type class that represents a single symbol in the list of symbols in the object file...
Definition: ObjectFile.h:141
uint32_t Size
Definition: Profile.cpp:47
Provides ErrorOr<T> smart pointer.
bool operator<(int64_t V1, const APSInt &V2)
Definition: APSInt.h:326
static ErrorOr< std::unique_ptr< SymbolizableObjectFile > > create(object::ObjectFile *Obj, std::unique_ptr< DIContext > DICtx)
DIGlobal symbolizeData(uint64_t ModuleOffset) const override
Container for description of a global variable.
Definition: DIContext.h:109