1*5ec532a9SColin Riley //===-- RenderScriptRuntime.h -----------------------------------*- C++ -*-===// 2*5ec532a9SColin Riley // 3*5ec532a9SColin Riley // The LLVM Compiler Infrastructure 4*5ec532a9SColin Riley // 5*5ec532a9SColin Riley // This file is distributed under the University of Illinois Open Source 6*5ec532a9SColin Riley // License. See LICENSE.TXT for details. 7*5ec532a9SColin Riley // 8*5ec532a9SColin Riley //===----------------------------------------------------------------------===// 9*5ec532a9SColin Riley 10*5ec532a9SColin Riley #ifndef liblldb_RenderScriptRuntime_h_ 11*5ec532a9SColin Riley #define liblldb_RenderScriptRuntime_h_ 12*5ec532a9SColin Riley 13*5ec532a9SColin Riley // C Includes 14*5ec532a9SColin Riley // C++ Includes 15*5ec532a9SColin Riley // Other libraries and framework includes 16*5ec532a9SColin Riley // Project includes 17*5ec532a9SColin Riley #include "lldb/lldb-private.h" 18*5ec532a9SColin Riley #include "lldb/Target/LanguageRuntime.h" 19*5ec532a9SColin Riley #include "lldb/Target/CPPLanguageRuntime.h" 20*5ec532a9SColin Riley #include "lldb/Core/Module.h" 21*5ec532a9SColin Riley 22*5ec532a9SColin Riley namespace lldb_private 23*5ec532a9SColin Riley { 24*5ec532a9SColin Riley 25*5ec532a9SColin Riley typedef uint32_t RSSlot; 26*5ec532a9SColin Riley class RSModuleDescriptor; 27*5ec532a9SColin Riley 28*5ec532a9SColin Riley struct RSKernelDescriptor 29*5ec532a9SColin Riley { 30*5ec532a9SColin Riley public: 31*5ec532a9SColin Riley RSKernelDescriptor(const RSModuleDescriptor &module, const char *name, uint32_t slot) 32*5ec532a9SColin Riley : m_module(module) 33*5ec532a9SColin Riley , m_name(name) 34*5ec532a9SColin Riley , m_slot(slot) 35*5ec532a9SColin Riley { 36*5ec532a9SColin Riley } 37*5ec532a9SColin Riley 38*5ec532a9SColin Riley void Dump(Stream &strm) const; 39*5ec532a9SColin Riley 40*5ec532a9SColin Riley const RSModuleDescriptor &m_module; 41*5ec532a9SColin Riley ConstString m_name; 42*5ec532a9SColin Riley RSSlot m_slot; 43*5ec532a9SColin Riley }; 44*5ec532a9SColin Riley 45*5ec532a9SColin Riley struct RSGlobalDescriptor 46*5ec532a9SColin Riley { 47*5ec532a9SColin Riley public: 48*5ec532a9SColin Riley RSGlobalDescriptor(const RSModuleDescriptor &module, const char *name) 49*5ec532a9SColin Riley : m_module(module) 50*5ec532a9SColin Riley , m_name(name) 51*5ec532a9SColin Riley { 52*5ec532a9SColin Riley } 53*5ec532a9SColin Riley 54*5ec532a9SColin Riley void Dump(Stream &strm) const; 55*5ec532a9SColin Riley 56*5ec532a9SColin Riley const RSModuleDescriptor &m_module; 57*5ec532a9SColin Riley ConstString m_name; 58*5ec532a9SColin Riley RSSlot m_slot; 59*5ec532a9SColin Riley }; 60*5ec532a9SColin Riley 61*5ec532a9SColin Riley class RSModuleDescriptor 62*5ec532a9SColin Riley { 63*5ec532a9SColin Riley public: 64*5ec532a9SColin Riley RSModuleDescriptor(const lldb::ModuleSP &module) 65*5ec532a9SColin Riley : m_module(module) 66*5ec532a9SColin Riley { 67*5ec532a9SColin Riley } 68*5ec532a9SColin Riley 69*5ec532a9SColin Riley ~RSModuleDescriptor() {} 70*5ec532a9SColin Riley 71*5ec532a9SColin Riley bool ParseRSInfo(); 72*5ec532a9SColin Riley 73*5ec532a9SColin Riley void Dump(Stream &strm) const; 74*5ec532a9SColin Riley 75*5ec532a9SColin Riley const lldb::ModuleSP m_module; 76*5ec532a9SColin Riley std::vector<RSKernelDescriptor> m_kernels; 77*5ec532a9SColin Riley std::vector<RSGlobalDescriptor> m_globals; 78*5ec532a9SColin Riley }; 79*5ec532a9SColin Riley 80*5ec532a9SColin Riley class RenderScriptRuntime : public lldb_private::CPPLanguageRuntime 81*5ec532a9SColin Riley { 82*5ec532a9SColin Riley public: 83*5ec532a9SColin Riley ~RenderScriptRuntime() {} 84*5ec532a9SColin Riley 85*5ec532a9SColin Riley //------------------------------------------------------------------ 86*5ec532a9SColin Riley // Static Functions 87*5ec532a9SColin Riley //------------------------------------------------------------------ 88*5ec532a9SColin Riley static void Initialize(); 89*5ec532a9SColin Riley 90*5ec532a9SColin Riley static void Terminate(); 91*5ec532a9SColin Riley 92*5ec532a9SColin Riley static lldb_private::LanguageRuntime *CreateInstance(Process *process, lldb::LanguageType language); 93*5ec532a9SColin Riley 94*5ec532a9SColin Riley static lldb_private::ConstString GetPluginNameStatic(); 95*5ec532a9SColin Riley 96*5ec532a9SColin Riley //------------------------------------------------------------------ 97*5ec532a9SColin Riley // PluginInterface protocol 98*5ec532a9SColin Riley //------------------------------------------------------------------ 99*5ec532a9SColin Riley virtual lldb_private::ConstString GetPluginName(); 100*5ec532a9SColin Riley 101*5ec532a9SColin Riley virtual uint32_t GetPluginVersion(); 102*5ec532a9SColin Riley 103*5ec532a9SColin Riley virtual bool IsVTableName(const char *name); 104*5ec532a9SColin Riley 105*5ec532a9SColin Riley virtual bool GetDynamicTypeAndAddress(ValueObject &in_value, lldb::DynamicValueType use_dynamic, 106*5ec532a9SColin Riley TypeAndOrName &class_type_or_name, Address &address); 107*5ec532a9SColin Riley 108*5ec532a9SColin Riley virtual bool CouldHaveDynamicValue(ValueObject &in_value); 109*5ec532a9SColin Riley 110*5ec532a9SColin Riley virtual lldb::BreakpointResolverSP CreateExceptionResolver(Breakpoint *bkpt, bool catch_bp, bool throw_bp); 111*5ec532a9SColin Riley 112*5ec532a9SColin Riley bool LoadModule(const lldb::ModuleSP &module_sp); 113*5ec532a9SColin Riley 114*5ec532a9SColin Riley bool ProbeModules(const ModuleList module_list); 115*5ec532a9SColin Riley 116*5ec532a9SColin Riley void DumpModules(Stream &strm) const; 117*5ec532a9SColin Riley 118*5ec532a9SColin Riley protected: 119*5ec532a9SColin Riley std::vector<RSModuleDescriptor> m_rsmodules; 120*5ec532a9SColin Riley 121*5ec532a9SColin Riley private: 122*5ec532a9SColin Riley RenderScriptRuntime(Process *process); // Call CreateInstance instead. 123*5ec532a9SColin Riley }; 124*5ec532a9SColin Riley 125*5ec532a9SColin Riley } // namespace lldb_private 126*5ec532a9SColin Riley 127*5ec532a9SColin Riley #endif // liblldb_RenderScriptRuntime_h_ 128