1cddc3e03e4ec99c0268c03a126195173e519ed58Pirama Arumuga Nainar//===-- SymbolizableModule.h ------------------------------------ C++ -----===//
2cddc3e03e4ec99c0268c03a126195173e519ed58Pirama Arumuga Nainar//
3cddc3e03e4ec99c0268c03a126195173e519ed58Pirama Arumuga Nainar//                     The LLVM Compiler Infrastructure
4cddc3e03e4ec99c0268c03a126195173e519ed58Pirama Arumuga Nainar//
5cddc3e03e4ec99c0268c03a126195173e519ed58Pirama Arumuga Nainar// This file is distributed under the University of Illinois Open Source
6cddc3e03e4ec99c0268c03a126195173e519ed58Pirama Arumuga Nainar// License. See LICENSE.TXT for details.
7cddc3e03e4ec99c0268c03a126195173e519ed58Pirama Arumuga Nainar//
8cddc3e03e4ec99c0268c03a126195173e519ed58Pirama Arumuga Nainar//===----------------------------------------------------------------------===//
9cddc3e03e4ec99c0268c03a126195173e519ed58Pirama Arumuga Nainar//
10cddc3e03e4ec99c0268c03a126195173e519ed58Pirama Arumuga Nainar// This file declares the SymbolizableModule interface.
11cddc3e03e4ec99c0268c03a126195173e519ed58Pirama Arumuga Nainar//
12cddc3e03e4ec99c0268c03a126195173e519ed58Pirama Arumuga Nainar//===----------------------------------------------------------------------===//
13cddc3e03e4ec99c0268c03a126195173e519ed58Pirama Arumuga Nainar#ifndef LLVM_DEBUGINFO_SYMBOLIZE_SYMBOLIZABLEMODULE_H
14cddc3e03e4ec99c0268c03a126195173e519ed58Pirama Arumuga Nainar#define LLVM_DEBUGINFO_SYMBOLIZE_SYMBOLIZABLEMODULE_H
15cddc3e03e4ec99c0268c03a126195173e519ed58Pirama Arumuga Nainar
16cddc3e03e4ec99c0268c03a126195173e519ed58Pirama Arumuga Nainar#include "llvm/DebugInfo/DIContext.h"
17cddc3e03e4ec99c0268c03a126195173e519ed58Pirama Arumuga Nainar#include <memory>
18cddc3e03e4ec99c0268c03a126195173e519ed58Pirama Arumuga Nainar#include <string>
19cddc3e03e4ec99c0268c03a126195173e519ed58Pirama Arumuga Nainar
20cddc3e03e4ec99c0268c03a126195173e519ed58Pirama Arumuga Nainarnamespace llvm {
21cddc3e03e4ec99c0268c03a126195173e519ed58Pirama Arumuga Nainarnamespace object {
22cddc3e03e4ec99c0268c03a126195173e519ed58Pirama Arumuga Nainarclass ObjectFile;
23cddc3e03e4ec99c0268c03a126195173e519ed58Pirama Arumuga Nainar}
24cddc3e03e4ec99c0268c03a126195173e519ed58Pirama Arumuga Nainar}
25cddc3e03e4ec99c0268c03a126195173e519ed58Pirama Arumuga Nainar
26cddc3e03e4ec99c0268c03a126195173e519ed58Pirama Arumuga Nainarnamespace llvm {
27cddc3e03e4ec99c0268c03a126195173e519ed58Pirama Arumuga Nainarnamespace symbolize {
28cddc3e03e4ec99c0268c03a126195173e519ed58Pirama Arumuga Nainar
29cddc3e03e4ec99c0268c03a126195173e519ed58Pirama Arumuga Nainarusing FunctionNameKind = DILineInfoSpecifier::FunctionNameKind;
30cddc3e03e4ec99c0268c03a126195173e519ed58Pirama Arumuga Nainar
31cddc3e03e4ec99c0268c03a126195173e519ed58Pirama Arumuga Nainarclass SymbolizableModule {
32cddc3e03e4ec99c0268c03a126195173e519ed58Pirama Arumuga Nainarpublic:
33cddc3e03e4ec99c0268c03a126195173e519ed58Pirama Arumuga Nainar  virtual ~SymbolizableModule() {}
34cddc3e03e4ec99c0268c03a126195173e519ed58Pirama Arumuga Nainar  virtual DILineInfo symbolizeCode(uint64_t ModuleOffset,
35cddc3e03e4ec99c0268c03a126195173e519ed58Pirama Arumuga Nainar                                   FunctionNameKind FNKind,
36cddc3e03e4ec99c0268c03a126195173e519ed58Pirama Arumuga Nainar                                   bool UseSymbolTable) const = 0;
37cddc3e03e4ec99c0268c03a126195173e519ed58Pirama Arumuga Nainar  virtual DIInliningInfo symbolizeInlinedCode(uint64_t ModuleOffset,
38cddc3e03e4ec99c0268c03a126195173e519ed58Pirama Arumuga Nainar                                              FunctionNameKind FNKind,
39cddc3e03e4ec99c0268c03a126195173e519ed58Pirama Arumuga Nainar                                              bool UseSymbolTable) const = 0;
40cddc3e03e4ec99c0268c03a126195173e519ed58Pirama Arumuga Nainar  virtual DIGlobal symbolizeData(uint64_t ModuleOffset) const = 0;
41cddc3e03e4ec99c0268c03a126195173e519ed58Pirama Arumuga Nainar
42cddc3e03e4ec99c0268c03a126195173e519ed58Pirama Arumuga Nainar  // Return true if this is a 32-bit x86 PE COFF module.
43cddc3e03e4ec99c0268c03a126195173e519ed58Pirama Arumuga Nainar  virtual bool isWin32Module() const = 0;
44cddc3e03e4ec99c0268c03a126195173e519ed58Pirama Arumuga Nainar
45cddc3e03e4ec99c0268c03a126195173e519ed58Pirama Arumuga Nainar  // Returns the preferred base of the module, i.e. where the loader would place
46cddc3e03e4ec99c0268c03a126195173e519ed58Pirama Arumuga Nainar  // it in memory assuming there were no conflicts.
47cddc3e03e4ec99c0268c03a126195173e519ed58Pirama Arumuga Nainar  virtual uint64_t getModulePreferredBase() const = 0;
48cddc3e03e4ec99c0268c03a126195173e519ed58Pirama Arumuga Nainar};
49cddc3e03e4ec99c0268c03a126195173e519ed58Pirama Arumuga Nainar
50cddc3e03e4ec99c0268c03a126195173e519ed58Pirama Arumuga Nainar}  // namespace symbolize
51cddc3e03e4ec99c0268c03a126195173e519ed58Pirama Arumuga Nainar}  // namespace llvm
52cddc3e03e4ec99c0268c03a126195173e519ed58Pirama Arumuga Nainar
53cddc3e03e4ec99c0268c03a126195173e519ed58Pirama Arumuga Nainar#endif  // LLVM_DEBUGINFO_SYMBOLIZE_SYMBOLIZABLEMODULE_H
54