diff options
Diffstat (limited to 'lldb/source/Plugins/LanguageRuntime/RenderScript')
-rw-r--r-- | lldb/source/Plugins/LanguageRuntime/RenderScript/RenderScriptRuntime/RenderScriptRuntime.cpp | 77 |
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; } |