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