1//===- SymbolizableModule.h -------------------------------------*- C++ -*-===// 2// 3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4// See https://llvm.org/LICENSE.txt for license information. 5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6// 7//===----------------------------------------------------------------------===// 8// 9// This file declares the SymbolizableModule interface. 10// 11//===----------------------------------------------------------------------===// 12#ifndef LLVM_DEBUGINFO_SYMBOLIZE_SYMBOLIZABLEMODULE_H 13#define LLVM_DEBUGINFO_SYMBOLIZE_SYMBOLIZABLEMODULE_H 14 15#include "llvm/DebugInfo/DIContext.h" 16#include <cstdint> 17 18namespace llvm { 19namespace symbolize { 20 21using FunctionNameKind = DILineInfoSpecifier::FunctionNameKind; 22 23class SymbolizableModule { 24public: 25 virtual ~SymbolizableModule() = default; 26 27 virtual DILineInfo symbolizeCode(object::SectionedAddress ModuleOffset, 28 FunctionNameKind FNKind, 29 bool UseSymbolTable) const = 0; 30 virtual DIInliningInfo 31 symbolizeInlinedCode(object::SectionedAddress ModuleOffset, 32 FunctionNameKind FNKind, bool UseSymbolTable) const = 0; 33 virtual DIGlobal 34 symbolizeData(object::SectionedAddress ModuleOffset) const = 0; 35 virtual std::vector<DILocal> 36 symbolizeFrame(object::SectionedAddress ModuleOffset) const = 0; 37 38 // Return true if this is a 32-bit x86 PE COFF module. 39 virtual bool isWin32Module() const = 0; 40 41 // Returns the preferred base of the module, i.e. where the loader would place 42 // it in memory assuming there were no conflicts. 43 virtual uint64_t getModulePreferredBase() const = 0; 44}; 45 46} // end namespace symbolize 47} // end namespace llvm 48 49#endif // LLVM_DEBUGINFO_SYMBOLIZE_SYMBOLIZABLEMODULE_H 50