summaryrefslogtreecommitdiffstats
path: root/lldb/source/Plugins/LanguageRuntime/RenderScript/RenderScriptRuntime/RenderScriptRuntime.h
diff options
context:
space:
mode:
Diffstat (limited to 'lldb/source/Plugins/LanguageRuntime/RenderScript/RenderScriptRuntime/RenderScriptRuntime.h')
-rw-r--r--lldb/source/Plugins/LanguageRuntime/RenderScript/RenderScriptRuntime/RenderScriptRuntime.h93
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
OpenPOWER on IntegriCloud