summaryrefslogtreecommitdiffstats
path: root/lldb/source/Plugins/LanguageRuntime/RenderScript/RenderScriptRuntime
diff options
context:
space:
mode:
authorEwan Crawford <ewan@codeplay.com>2015-10-22 09:01:05 +0000
committerEwan Crawford <ewan@codeplay.com>2015-10-22 09:01:05 +0000
commit02f1c5d132c6a169dffe2a2b8cd8f937838e0b7a (patch)
tree1f124702fb08db5aa39c5368ffe41a84169ba546 /lldb/source/Plugins/LanguageRuntime/RenderScript/RenderScriptRuntime
parent0cb1561e425a190cb7a08027623441d901d78563 (diff)
downloadbcm5719-llvm-02f1c5d132c6a169dffe2a2b8cd8f937838e0b7a.tar.gz
bcm5719-llvm-02f1c5d132c6a169dffe2a2b8cd8f937838e0b7a.zip
[RenderScript] Support for mips64 runtime hook
Previously we could not hook the RS runtime on mips64 architectures. Patch implements ABI specific code for inspecting function arguments. Author: Dean De Leo, dean@codeplay.com llvm-svn: 251003
Diffstat (limited to 'lldb/source/Plugins/LanguageRuntime/RenderScript/RenderScriptRuntime')
-rw-r--r--lldb/source/Plugins/LanguageRuntime/RenderScript/RenderScriptRuntime/RenderScriptRuntime.cpp77
1 files changed, 61 insertions, 16 deletions
diff --git a/lldb/source/Plugins/LanguageRuntime/RenderScript/RenderScriptRuntime/RenderScriptRuntime.cpp b/lldb/source/Plugins/LanguageRuntime/RenderScript/RenderScriptRuntime/RenderScriptRuntime.cpp
index 0a28eb654af..3e18a40dbe5 100644
--- a/lldb/source/Plugins/LanguageRuntime/RenderScript/RenderScriptRuntime/RenderScriptRuntime.cpp
+++ b/lldb/source/Plugins/LanguageRuntime/RenderScript/RenderScriptRuntime/RenderScriptRuntime.cpp
@@ -609,25 +609,30 @@ RenderScriptRuntime::GetArgSimple(ExecutionContext &context, uint32_t arg, uint6
{
const RegisterInfo* rArg = reg_ctx->GetRegisterInfoAtIndex(arg);
RegisterValue rVal;
- reg_ctx->ReadRegister(rArg, rVal);
- (*data) = rVal.GetAsUInt32();
- success = true;
+ success = reg_ctx->ReadRegister(rArg, rVal);
+ if (success)
+ {
+ (*data) = rVal.GetAsUInt32();
+ }
+ else
+ {
+ if (log)
+ log->Printf ("RenderScriptRuntime:: GetArgSimple - error reading ARM register: %d.", arg);
+ }
}
else
{
uint64_t sp = reg_ctx->GetSP();
+ uint32_t offset = (arg-4) * sizeof(uint32_t);
+ process->ReadMemory(sp + offset, &data, sizeof(uint32_t), error);
+ if (error.Fail())
{
- uint32_t offset = (arg-4) * sizeof(uint32_t);
- process->ReadMemory(sp + offset, &data, sizeof(uint32_t), error);
- if (error.Fail())
- {
- if (log)
- log->Printf ("RenderScriptRuntime:: GetArgSimple - error reading ARM stack: %s.", error.AsCString());
- }
- else
- {
- success = true;
- }
+ if (log)
+ log->Printf ("RenderScriptRuntime:: GetArgSimple - error reading ARM stack: %s.", error.AsCString());
+ }
+ else
+ {
+ success = true;
}
}
@@ -660,6 +665,44 @@ RenderScriptRuntime::GetArgSimple(ExecutionContext &context, uint32_t arg, uint6
}
break;
}
+ case llvm::Triple::ArchType::mips64el:
+ {
+ // read from the registers
+ if (arg < 8)
+ {
+ const RegisterInfo* rArg = reg_ctx->GetRegisterInfoAtIndex(arg + 4);
+ RegisterValue rVal;
+ success = reg_ctx->ReadRegister(rArg, rVal);
+ if (success)
+ {
+ (*data) = rVal.GetAsUInt64();
+ }
+ else
+ {
+ if (log)
+ log->Printf("RenderScriptRuntime::GetArgSimple - Mips64 - Error reading the argument #%d", arg);
+ }
+ }
+
+ // read from the stack
+ else
+ {
+ uint64_t sp = reg_ctx->GetSP();
+ uint32_t offset = (arg - 8) * sizeof(uint64_t);
+ process->ReadMemory(sp + offset, &data, sizeof(uint64_t), error);
+ if (error.Fail())
+ {
+ if (log)
+ log->Printf ("RenderScriptRuntime::GetArgSimple - Mips64 - Error reading Mips64 stack: %s.", error.AsCString());
+ }
+ else
+ {
+ success = true;
+ }
+ }
+
+ break;
+ }
default:
{
// invalid architecture
@@ -841,10 +884,12 @@ RenderScriptRuntime::LoadRuntimeHooks(lldb::ModuleSP module, ModuleKind kind)
if (targetArchType != llvm::Triple::ArchType::x86
&& targetArchType != llvm::Triple::ArchType::arm
- && targetArchType != llvm::Triple::ArchType::aarch64)
+ && targetArchType != llvm::Triple::ArchType::aarch64
+ && targetArchType != llvm::Triple::ArchType::mips64el
+ )
{
if (log)
- log->Printf ("RenderScriptRuntime::LoadRuntimeHooks - Unable to hook runtime. Only X86, ARM supported currently.");
+ log->Printf ("RenderScriptRuntime::LoadRuntimeHooks - Unable to hook runtime. Only X86, ARM, Mips64 supported currently.");
return;
}
OpenPOWER on IntegriCloud