diff options
author | Mike Frysinger <vapier@chromium.org> | 2016-02-06 18:58:39 -0500 |
---|---|---|
committer | Mike Frysinger <vapier@chromium.org> | 2016-02-06 18:58:39 -0500 |
commit | 76c51742c9e7ad8ab137e5dab1852798fc532207 (patch) | |
tree | 495157301f1f4279b1f4b18b38b0b4b5627fe488 /src/client | |
parent | Remove use of deprecated CFURLCreateDataAndPropertiesFromResource function. (diff) | |
download | breakpad-76c51742c9e7ad8ab137e5dab1852798fc532207.tar.xz |
[mips64] Support for mips n64
Adding remaining mips n64 support including stackwalker.
BUG=None
TEST=manually tested on Linux/Android
R=vapier@chromium.org
Review URL: https://codereview.chromium.org/1418453011 .
Diffstat (limited to 'src/client')
4 files changed, 24 insertions, 0 deletions
diff --git a/src/client/linux/dump_writer_common/thread_info.cc b/src/client/linux/dump_writer_common/thread_info.cc index 9956d445..0a1041d6 100644 --- a/src/client/linux/dump_writer_common/thread_info.cc +++ b/src/client/linux/dump_writer_common/thread_info.cc @@ -235,7 +235,13 @@ uintptr_t ThreadInfo::GetInstructionPointer() const { } void ThreadInfo::FillCPUContext(RawContextCPU* out) const { +#if _MIPS_SIM == _ABI64 + out->context_flags = MD_CONTEXT_MIPS64_FULL; +#elif _MIPS_SIM == _ABIO32 out->context_flags = MD_CONTEXT_MIPS_FULL; +#else +# error "This mips ABI is currently not supported (n32)" +#endif for (int i = 0; i < MD_CONTEXT_MIPS_GPR_COUNT; ++i) out->iregs[i] = mcontext.gregs[i]; diff --git a/src/client/linux/dump_writer_common/ucontext_reader.cc b/src/client/linux/dump_writer_common/ucontext_reader.cc index d37fdeb0..c80724dd 100644 --- a/src/client/linux/dump_writer_common/ucontext_reader.cc +++ b/src/client/linux/dump_writer_common/ucontext_reader.cc @@ -219,7 +219,13 @@ uintptr_t UContextReader::GetInstructionPointer(const struct ucontext* uc) { } void UContextReader::FillCPUContext(RawContextCPU *out, const ucontext *uc) { +#if _MIPS_SIM == _ABI64 + out->context_flags = MD_CONTEXT_MIPS64_FULL; +#elif _MIPS_SIM == _ABIO32 out->context_flags = MD_CONTEXT_MIPS_FULL; +#else +#error "This mips ABI is currently not supported (n32)" +#endif for (int i = 0; i < MD_CONTEXT_MIPS_GPR_COUNT; ++i) out->iregs[i] = uc->uc_mcontext.gregs[i]; diff --git a/src/client/linux/microdump_writer/microdump_writer.cc b/src/client/linux/microdump_writer/microdump_writer.cc index aa9f9413..fc29b714 100644 --- a/src/client/linux/microdump_writer/microdump_writer.cc +++ b/src/client/linux/microdump_writer/microdump_writer.cc @@ -179,7 +179,13 @@ class MicrodumpWriter { #elif defined(__i386__) const char kArch[] = "x86"; #elif defined(__mips__) +# if _MIPS_SIM == _ABIO32 const char kArch[] = "mips"; +# elif _MIPS_SIM == _ABI64 + const char kArch[] = "mips64"; +# else +# error "This mips ABI is currently not supported (n32)" +#endif #else #error "This code has not been ported to your platform yet" #endif diff --git a/src/client/linux/minidump_writer/minidump_writer.cc b/src/client/linux/minidump_writer/minidump_writer.cc index 0eed74de..9a0a830b 100644 --- a/src/client/linux/minidump_writer/minidump_writer.cc +++ b/src/client/linux/minidump_writer/minidump_writer.cc @@ -817,7 +817,13 @@ class MinidumpWriter { // processor_architecture should always be set, do this first sys_info->processor_architecture = #if defined(__mips__) +# if _MIPS_SIM == _ABIO32 MD_CPU_ARCHITECTURE_MIPS; +# elif _MIPS_SIM == _ABI64 + MD_CPU_ARCHITECTURE_MIPS64; +# else +# error "This mips ABI is currently not supported (n32)" +#endif #elif defined(__i386__) MD_CPU_ARCHITECTURE_X86; #else |