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