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