diff options
Diffstat (limited to 'src/client/linux/minidump_writer/linux_ptrace_dumper.cc')
-rw-r--r-- | src/client/linux/minidump_writer/linux_ptrace_dumper.cc | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/src/client/linux/minidump_writer/linux_ptrace_dumper.cc b/src/client/linux/minidump_writer/linux_ptrace_dumper.cc index 45d0f48f..3256f532 100644 --- a/src/client/linux/minidump_writer/linux_ptrace_dumper.cc +++ b/src/client/linux/minidump_writer/linux_ptrace_dumper.cc @@ -208,6 +208,17 @@ bool LinuxPtraceDumper::GetThreadInfoByIndex(size_t index, ThreadInfo* info) { } #endif +#if defined(__mips__) + for (int i = 0; i < 3; ++i) { + sys_ptrace(PTRACE_PEEKUSER, tid, + reinterpret_cast<void*>(DSP_BASE + (i * 2)), &info->hi[i]); + sys_ptrace(PTRACE_PEEKUSER, tid, + reinterpret_cast<void*>(DSP_BASE + (i * 2) + 1), &info->lo[i]); + } + sys_ptrace(PTRACE_PEEKUSER, tid, + reinterpret_cast<void*>(DSP_CONTROL), &info->dsp_control); +#endif + const uint8_t* stack_pointer; #if defined(__i386) my_memcpy(&stack_pointer, &info->regs.esp, sizeof(info->regs.esp)); @@ -215,6 +226,9 @@ bool LinuxPtraceDumper::GetThreadInfoByIndex(size_t index, ThreadInfo* info) { my_memcpy(&stack_pointer, &info->regs.rsp, sizeof(info->regs.rsp)); #elif defined(__ARM_EABI__) my_memcpy(&stack_pointer, &info->regs.ARM_sp, sizeof(info->regs.ARM_sp)); +#elif defined(__mips__) + stack_pointer = + reinterpret_cast<uint8_t*>(info->regs.regs[MD_CONTEXT_MIPS_REG_SP]); #else #error "This code hasn't been ported to your platform yet." #endif |