1 //===- SymbolizableModule.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 SymbolizableModule interface.
11 //
12 //===----------------------------------------------------------------------===//
13 #ifndef LLVM_DEBUGINFO_SYMBOLIZE_SYMBOLIZABLEMODULE_H
14 #define LLVM_DEBUGINFO_SYMBOLIZE_SYMBOLIZABLEMODULE_H
15 
16 #include "llvm/DebugInfo/DIContext.h"
17 #include <cstdint>
18 
19 namespace llvm {
20 namespace symbolize {
21 
22 using FunctionNameKind = DILineInfoSpecifier::FunctionNameKind;
23 
24 class SymbolizableModule {
25 public:
26   virtual ~SymbolizableModule() = default;
27 
28   virtual DILineInfo symbolizeCode(uint64_t ModuleOffset,
29                                    FunctionNameKind FNKind,
30                                    bool UseSymbolTable) const = 0;
31   virtual DIInliningInfo symbolizeInlinedCode(uint64_t ModuleOffset,
32                                               FunctionNameKind FNKind,
33                                               bool UseSymbolTable) const = 0;
34   virtual DIGlobal symbolizeData(uint64_t ModuleOffset) const = 0;
35 
36   // Return true if this is a 32-bit x86 PE COFF module.
37   virtual bool isWin32Module() const = 0;
38 
39   // Returns the preferred base of the module, i.e. where the loader would place
40   // it in memory assuming there were no conflicts.
41   virtual uint64_t getModulePreferredBase() const = 0;
42 };
43 
44 } // end namespace symbolize
45 } // end namespace llvm
46 
47 #endif  // LLVM_DEBUGINFO_SYMBOLIZE_SYMBOLIZABLEMODULE_H
48