15ec532a9SColin Riley //===-- RenderScriptRuntime.h -----------------------------------*- C++ -*-===// 25ec532a9SColin Riley // 35ec532a9SColin Riley // The LLVM Compiler Infrastructure 45ec532a9SColin Riley // 55ec532a9SColin Riley // This file is distributed under the University of Illinois Open Source 65ec532a9SColin Riley // License. See LICENSE.TXT for details. 75ec532a9SColin Riley // 85ec532a9SColin Riley //===----------------------------------------------------------------------===// 95ec532a9SColin Riley 105ec532a9SColin Riley #ifndef liblldb_RenderScriptRuntime_h_ 115ec532a9SColin Riley #define liblldb_RenderScriptRuntime_h_ 125ec532a9SColin Riley 135ec532a9SColin Riley // C Includes 145ec532a9SColin Riley // C++ Includes 155ec532a9SColin Riley // Other libraries and framework includes 165ec532a9SColin Riley // Project includes 175ec532a9SColin Riley #include "lldb/lldb-private.h" 185ec532a9SColin Riley #include "lldb/Target/LanguageRuntime.h" 195ec532a9SColin Riley #include "lldb/Target/CPPLanguageRuntime.h" 205ec532a9SColin Riley #include "lldb/Core/Module.h" 215ec532a9SColin Riley 225ec532a9SColin Riley namespace lldb_private 235ec532a9SColin Riley { 245ec532a9SColin Riley 255ec532a9SColin Riley typedef uint32_t RSSlot; 265ec532a9SColin Riley class RSModuleDescriptor; 275ec532a9SColin Riley 285ec532a9SColin Riley struct RSKernelDescriptor 295ec532a9SColin Riley { 305ec532a9SColin Riley public: 315ec532a9SColin Riley RSKernelDescriptor(const RSModuleDescriptor &module, const char *name, uint32_t slot) 325ec532a9SColin Riley : m_module(module) 335ec532a9SColin Riley , m_name(name) 345ec532a9SColin Riley , m_slot(slot) 355ec532a9SColin Riley { 365ec532a9SColin Riley } 375ec532a9SColin Riley 385ec532a9SColin Riley void Dump(Stream &strm) const; 395ec532a9SColin Riley 405ec532a9SColin Riley const RSModuleDescriptor &m_module; 415ec532a9SColin Riley ConstString m_name; 425ec532a9SColin Riley RSSlot m_slot; 435ec532a9SColin Riley }; 445ec532a9SColin Riley 455ec532a9SColin Riley struct RSGlobalDescriptor 465ec532a9SColin Riley { 475ec532a9SColin Riley public: 485ec532a9SColin Riley RSGlobalDescriptor(const RSModuleDescriptor &module, const char *name) 495ec532a9SColin Riley : m_module(module) 505ec532a9SColin Riley , m_name(name) 515ec532a9SColin Riley { 525ec532a9SColin Riley } 535ec532a9SColin Riley 545ec532a9SColin Riley void Dump(Stream &strm) const; 555ec532a9SColin Riley 565ec532a9SColin Riley const RSModuleDescriptor &m_module; 575ec532a9SColin Riley ConstString m_name; 585ec532a9SColin Riley RSSlot m_slot; 595ec532a9SColin Riley }; 605ec532a9SColin Riley 615ec532a9SColin Riley class RSModuleDescriptor 625ec532a9SColin Riley { 635ec532a9SColin Riley public: 645ec532a9SColin Riley RSModuleDescriptor(const lldb::ModuleSP &module) 655ec532a9SColin Riley : m_module(module) 665ec532a9SColin Riley { 675ec532a9SColin Riley } 685ec532a9SColin Riley 695ec532a9SColin Riley ~RSModuleDescriptor() {} 705ec532a9SColin Riley 715ec532a9SColin Riley bool ParseRSInfo(); 725ec532a9SColin Riley 735ec532a9SColin Riley void Dump(Stream &strm) const; 745ec532a9SColin Riley 755ec532a9SColin Riley const lldb::ModuleSP m_module; 765ec532a9SColin Riley std::vector<RSKernelDescriptor> m_kernels; 775ec532a9SColin Riley std::vector<RSGlobalDescriptor> m_globals; 785ec532a9SColin Riley }; 795ec532a9SColin Riley 805ec532a9SColin Riley class RenderScriptRuntime : public lldb_private::CPPLanguageRuntime 815ec532a9SColin Riley { 825ec532a9SColin Riley public: 83*ef20b08fSColin Riley 84*ef20b08fSColin Riley enum ModuleKind 85*ef20b08fSColin Riley { 86*ef20b08fSColin Riley eModuleKindIgnored, 87*ef20b08fSColin Riley eModuleKindLibRS, 88*ef20b08fSColin Riley eModuleKindDriver, 89*ef20b08fSColin Riley eModuleKindImpl, 90*ef20b08fSColin Riley eModuleKindKernelObj 91*ef20b08fSColin Riley }; 92*ef20b08fSColin Riley 935ec532a9SColin Riley ~RenderScriptRuntime() {} 945ec532a9SColin Riley 955ec532a9SColin Riley //------------------------------------------------------------------ 965ec532a9SColin Riley // Static Functions 975ec532a9SColin Riley //------------------------------------------------------------------ 985ec532a9SColin Riley static void Initialize(); 995ec532a9SColin Riley 1005ec532a9SColin Riley static void Terminate(); 1015ec532a9SColin Riley 1025ec532a9SColin Riley static lldb_private::LanguageRuntime *CreateInstance(Process *process, lldb::LanguageType language); 1035ec532a9SColin Riley 1045ec532a9SColin Riley static lldb_private::ConstString GetPluginNameStatic(); 1055ec532a9SColin Riley 106*ef20b08fSColin Riley static bool IsRenderScriptModule(const lldb::ModuleSP &module_sp); 107*ef20b08fSColin Riley 108*ef20b08fSColin Riley static ModuleKind GetModuleKind(const lldb::ModuleSP &module_sp); 109*ef20b08fSColin Riley 110*ef20b08fSColin Riley static void ModulesDidLoad(const lldb::ProcessSP& process_sp, const ModuleList &module_list ); 111*ef20b08fSColin Riley 1125ec532a9SColin Riley //------------------------------------------------------------------ 1135ec532a9SColin Riley // PluginInterface protocol 1145ec532a9SColin Riley //------------------------------------------------------------------ 1155ec532a9SColin Riley virtual lldb_private::ConstString GetPluginName(); 1165ec532a9SColin Riley 1175ec532a9SColin Riley virtual uint32_t GetPluginVersion(); 1185ec532a9SColin Riley 1195ec532a9SColin Riley virtual bool IsVTableName(const char *name); 1205ec532a9SColin Riley 1215ec532a9SColin Riley virtual bool GetDynamicTypeAndAddress(ValueObject &in_value, lldb::DynamicValueType use_dynamic, 1225ec532a9SColin Riley TypeAndOrName &class_type_or_name, Address &address); 1235ec532a9SColin Riley 1245ec532a9SColin Riley virtual bool CouldHaveDynamicValue(ValueObject &in_value); 1255ec532a9SColin Riley 1265ec532a9SColin Riley virtual lldb::BreakpointResolverSP CreateExceptionResolver(Breakpoint *bkpt, bool catch_bp, bool throw_bp); 1275ec532a9SColin Riley 1285ec532a9SColin Riley bool LoadModule(const lldb::ModuleSP &module_sp); 1295ec532a9SColin Riley 1305ec532a9SColin Riley bool ProbeModules(const ModuleList module_list); 1315ec532a9SColin Riley 1325ec532a9SColin Riley void DumpModules(Stream &strm) const; 1335ec532a9SColin Riley 13492935952SSiva Chandra virtual size_t GetAlternateManglings(const ConstString &mangled, std::vector<ConstString> &alternates) { 13592935952SSiva Chandra return static_cast<size_t>(0); 13692935952SSiva Chandra } 13792935952SSiva Chandra 138*ef20b08fSColin Riley virtual void ModulesDidLoad(const ModuleList &module_list ); 139*ef20b08fSColin Riley 140*ef20b08fSColin Riley void Update(); 141*ef20b08fSColin Riley 142*ef20b08fSColin Riley void Initiate(); 143*ef20b08fSColin Riley 1445ec532a9SColin Riley protected: 1455ec532a9SColin Riley std::vector<RSModuleDescriptor> m_rsmodules; 146*ef20b08fSColin Riley bool m_initiated; 1475ec532a9SColin Riley private: 1485ec532a9SColin Riley RenderScriptRuntime(Process *process); // Call CreateInstance instead. 1495ec532a9SColin Riley }; 1505ec532a9SColin Riley 1515ec532a9SColin Riley } // namespace lldb_private 1525ec532a9SColin Riley 1535ec532a9SColin Riley #endif // liblldb_RenderScriptRuntime_h_ 154