diff options
Diffstat (limited to 'lldb/source/Plugins/LanguageRuntime/RenderScript/RenderScriptRuntime/RenderScriptRuntime.h')
-rw-r--r-- | lldb/source/Plugins/LanguageRuntime/RenderScript/RenderScriptRuntime/RenderScriptRuntime.h | 93 |
1 files changed, 86 insertions, 7 deletions
diff --git a/lldb/source/Plugins/LanguageRuntime/RenderScript/RenderScriptRuntime/RenderScriptRuntime.h b/lldb/source/Plugins/LanguageRuntime/RenderScript/RenderScriptRuntime/RenderScriptRuntime.h index bca0edcad9a..2a01e744e97 100644 --- a/lldb/source/Plugins/LanguageRuntime/RenderScript/RenderScriptRuntime/RenderScriptRuntime.h +++ b/lldb/source/Plugins/LanguageRuntime/RenderScript/RenderScriptRuntime/RenderScriptRuntime.h @@ -24,11 +24,19 @@ namespace lldb_private typedef uint32_t RSSlot; class RSModuleDescriptor; +struct RSGlobalDescriptor; +struct RSKernelDescriptor; + +typedef std::shared_ptr<RSModuleDescriptor> RSModuleDescriptorSP; +typedef std::shared_ptr<RSGlobalDescriptor> RSGlobalDescriptorSP; +typedef std::shared_ptr<RSKernelDescriptor> RSKernelDescriptorSP; + + struct RSKernelDescriptor { public: - RSKernelDescriptor(const RSModuleDescriptor &module, const char *name, uint32_t slot) + RSKernelDescriptor(const RSModuleDescriptor *module, const char *name, uint32_t slot) : m_module(module) , m_name(name) , m_slot(slot) @@ -37,7 +45,7 @@ struct RSKernelDescriptor void Dump(Stream &strm) const; - const RSModuleDescriptor &m_module; + const RSModuleDescriptor *m_module; ConstString m_name; RSSlot m_slot; }; @@ -45,7 +53,7 @@ struct RSKernelDescriptor struct RSGlobalDescriptor { public: - RSGlobalDescriptor(const RSModuleDescriptor &module, const char *name) + RSGlobalDescriptor(const RSModuleDescriptor *module, const char *name ) : m_module(module) , m_name(name) { @@ -53,9 +61,8 @@ struct RSGlobalDescriptor void Dump(Stream &strm) const; - const RSModuleDescriptor &m_module; + const RSModuleDescriptor *m_module; ConstString m_name; - RSSlot m_slot; }; class RSModuleDescriptor @@ -75,6 +82,8 @@ class RSModuleDescriptor const lldb::ModuleSP m_module; std::vector<RSKernelDescriptor> m_kernels; std::vector<RSGlobalDescriptor> m_globals; + std::map<std::string, std::string> m_pragmas; + std::string m_resname; }; class RenderScriptRuntime : public lldb_private::CPPLanguageRuntime @@ -90,6 +99,7 @@ class RenderScriptRuntime : public lldb_private::CPPLanguageRuntime eModuleKindKernelObj }; + ~RenderScriptRuntime() {} //------------------------------------------------------------------ @@ -101,6 +111,8 @@ class RenderScriptRuntime : public lldb_private::CPPLanguageRuntime static lldb_private::LanguageRuntime *CreateInstance(Process *process, lldb::LanguageType language); + static lldb::CommandObjectSP GetCommandObject(CommandInterpreter& interpreter); + static lldb_private::ConstString GetPluginNameStatic(); static bool IsRenderScriptModule(const lldb::ModuleSP &module_sp); @@ -131,6 +143,14 @@ class RenderScriptRuntime : public lldb_private::CPPLanguageRuntime void DumpModules(Stream &strm) const; + void DumpContexts(Stream &strm) const; + + void DumpKernels(Stream &strm) const; + + void AttemptBreakpointAtKernelName(Stream &strm, const char *name, Error &error); + + void Status(Stream &strm) const; + virtual size_t GetAlternateManglings(const ConstString &mangled, std::vector<ConstString> &alternates) { return static_cast<size_t>(0); } @@ -140,12 +160,71 @@ class RenderScriptRuntime : public lldb_private::CPPLanguageRuntime void Update(); void Initiate(); - + protected: - std::vector<RSModuleDescriptor> m_rsmodules; + + void FixupScriptDetails(RSModuleDescriptorSP rsmodule_sp); + + void LoadRuntimeHooks(lldb::ModuleSP module, ModuleKind kind); + + struct RuntimeHook; + typedef void (RenderScriptRuntime::*CaptureStateFn)(RuntimeHook* hook_info, ExecutionContext &context); // Please do this! + + struct HookDefn + { + const char * name; + const char * symbol_name; + uint32_t version; + ModuleKind kind; + CaptureStateFn grabber; + }; + + struct RuntimeHook + { + lldb::addr_t address; + const HookDefn *defn; + lldb::BreakpointSP bp_sp; + }; + + typedef std::shared_ptr<RuntimeHook> RuntimeHookSP; + + struct ScriptDetails + { + std::string resname; + std::string scriptDyLib; + std::string cachedir; + lldb::addr_t context; + lldb::addr_t script; + }; + + lldb::ModuleSP m_libRS; + lldb::ModuleSP m_libRSDriver; + lldb::ModuleSP m_libRSCpuRef; + std::vector<RSModuleDescriptorSP> m_rsmodules; + std::vector<ScriptDetails> m_scripts; + + std::map<lldb::addr_t, RSModuleDescriptorSP> m_scriptMappings; + std::map<lldb::addr_t, RuntimeHookSP> m_runtimeHooks; + bool m_initiated; + bool m_debuggerPresentFlagged; + static const HookDefn s_runtimeHookDefns[]; + static const size_t s_runtimeHookCount; + private: RenderScriptRuntime(Process *process); // Call CreateInstance instead. + + static bool HookCallback(void *baton, StoppointCallbackContext *ctx, lldb::user_id_t break_id, + lldb::user_id_t break_loc_id); + + void HookCallback(RuntimeHook* hook_info, ExecutionContext& context); + + bool GetArg32Simple(ExecutionContext& context, uint32_t arg, uint32_t *data); + + void CaptureScriptInit1(RuntimeHook* hook_info, ExecutionContext& context); + void CaptureAllocationInit1(RuntimeHook* hook_info, ExecutionContext& context); + void CaptureSetGlobalVar1(RuntimeHook* hook_info, ExecutionContext& context); + }; } // namespace lldb_private |