123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440 |
- diff --git a/src/client/linux/dump_writer_common/raw_context_cpu.h b/src/client/linux/dump_writer_common/raw_context_cpu.h
- index 07d9171a..24b76143 100644
- --- a/src/client/linux/dump_writer_common/raw_context_cpu.h
- +++ b/src/client/linux/dump_writer_common/raw_context_cpu.h
- @@ -44,6 +44,8 @@ typedef MDRawContextARM RawContextCPU;
- typedef MDRawContextARM64_Old RawContextCPU;
- #elif defined(__mips__)
- typedef MDRawContextMIPS RawContextCPU;
- +#elif defined(__riscv)
- +typedef MDRawContextRISCV64 RawContextCPU;
- #else
- #error "This code has not been ported to your platform yet."
- #endif
- diff --git a/src/client/linux/dump_writer_common/thread_info.cc b/src/client/linux/dump_writer_common/thread_info.cc
- index aae1dc13..39013591 100644
- --- a/src/client/linux/dump_writer_common/thread_info.cc
- +++ b/src/client/linux/dump_writer_common/thread_info.cc
- @@ -270,7 +270,22 @@ void ThreadInfo::FillCPUContext(RawContextCPU* out) const {
- out->float_save.fir = mcontext.fpc_eir;
- #endif
- }
- -#endif // __mips__
- +#elif defined(__riscv)
- +
- +uintptr_t ThreadInfo::GetInstructionPointer() const {
- + return mcontext.__gregs[REG_PC];
- +}
- +
- +void ThreadInfo::FillCPUContext(RawContextCPU* out) const {
- + out->context_flags = MD_CONTEXT_RISCV64_FULL;
- + my_memcpy (out->iregs, mcontext.__gregs, MD_CONTEXT_RISCV64_GPR_COUNT * 8);
- +
- + out->float_save.fcsr = mcontext.__fpregs.__d.__fcsr;
- + my_memcpy(&out->float_save.regs, &mcontext.__fpregs.__d.__f,
- + MD_FLOATINGSAVEAREA_RISCV64_FPR_COUNT * 8);
- +}
- +
- +#endif // __riscv
-
- void ThreadInfo::GetGeneralPurposeRegisters(void** gp_regs, size_t* size) {
- assert(gp_regs || size);
- @@ -279,6 +294,11 @@ void ThreadInfo::GetGeneralPurposeRegisters(void** gp_regs, size_t* size) {
- *gp_regs = mcontext.gregs;
- if (size)
- *size = sizeof(mcontext.gregs);
- +#elif defined(__riscv)
- + if (gp_regs)
- + *gp_regs = mcontext.__gregs;
- + if (size)
- + *size = sizeof(mcontext.__gregs);
- #else
- if (gp_regs)
- *gp_regs = ®s;
- @@ -294,6 +314,11 @@ void ThreadInfo::GetFloatingPointRegisters(void** fp_regs, size_t* size) {
- *fp_regs = &mcontext.fpregs;
- if (size)
- *size = sizeof(mcontext.fpregs);
- +#elif defined(__riscv)
- + if (fp_regs)
- + *fp_regs = &mcontext.__fpregs;
- + if (size)
- + *size = sizeof(mcontext.__fpregs);
- #else
- if (fp_regs)
- *fp_regs = &fpregs;
- diff --git a/src/client/linux/dump_writer_common/thread_info.h b/src/client/linux/dump_writer_common/thread_info.h
- index fb216fa6..65c231b4 100644
- --- a/src/client/linux/dump_writer_common/thread_info.h
- +++ b/src/client/linux/dump_writer_common/thread_info.h
- @@ -68,7 +68,7 @@ struct ThreadInfo {
- // Use the structures defined in <sys/user.h>
- struct user_regs_struct regs;
- struct user_fpsimd_struct fpregs;
- -#elif defined(__mips__)
- +#elif defined(__mips__) || defined(__riscv)
- // Use the structure defined in <sys/ucontext.h>.
- mcontext_t mcontext;
- #endif
- diff --git a/src/client/linux/dump_writer_common/ucontext_reader.cc b/src/client/linux/dump_writer_common/ucontext_reader.cc
- index 6eec1be2..c485e52c 100644
- --- a/src/client/linux/dump_writer_common/ucontext_reader.cc
- +++ b/src/client/linux/dump_writer_common/ucontext_reader.cc
- @@ -254,6 +254,26 @@ void UContextReader::FillCPUContext(RawContextCPU* out, const ucontext_t* uc) {
- out->float_save.fir = uc->uc_mcontext.fpc_eir; // Unused.
- #endif
- }
- +
- +#elif defined(__riscv)
- +
- +uintptr_t UContextReader::GetStackPointer(const ucontext_t* uc) {
- + return uc->uc_mcontext.__gregs[REG_SP];
- +}
- +
- +uintptr_t UContextReader::GetInstructionPointer(const ucontext_t* uc) {
- + return uc->uc_mcontext.__gregs[REG_PC];
- +}
- +
- +void UContextReader::FillCPUContext(RawContextCPU* out, const ucontext_t* uc) {
- + out->context_flags = MD_CONTEXT_RISCV64_FULL;
- + for (int i = 0; i < MD_CONTEXT_RISCV64_GPR_COUNT; ++i)
- + out->iregs[i] = uc->uc_mcontext.__gregs[i];
- +
- + out->float_save.fcsr = uc->uc_mcontext.__fpregs.__d.__fcsr;
- + for (int i = 0; i < MD_FLOATINGSAVEAREA_RISCV64_FPR_COUNT; ++i)
- + out->float_save.regs[i] = uc->uc_mcontext.__fpregs.__d.__f[i];
- +}
- #endif
-
- } // namespace google_breakpad
- diff --git a/src/client/linux/handler/exception_handler.cc b/src/client/linux/handler/exception_handler.cc
- index 499be0a9..7e24a027 100644
- --- a/src/client/linux/handler/exception_handler.cc
- +++ b/src/client/linux/handler/exception_handler.cc
- @@ -461,7 +461,7 @@ bool ExceptionHandler::HandleSignal(int /*sig*/, siginfo_t* info, void* uc) {
- memcpy(&g_crash_context_.float_state, fp_ptr,
- sizeof(g_crash_context_.float_state));
- }
- -#elif !defined(__ARM_EABI__) && !defined(__mips__)
- +#elif !defined(__ARM_EABI__) && !defined(__mips__) && !defined(__riscv)
- // FP state is not part of user ABI on ARM Linux.
- // In case of MIPS Linux FP state is already part of ucontext_t
- // and 'float_state' is not a member of CrashContext.
- @@ -701,7 +701,7 @@ bool ExceptionHandler::WriteMinidump() {
- }
- #endif
-
- -#if !defined(__ARM_EABI__) && !defined(__aarch64__) && !defined(__mips__)
- +#if !defined(__ARM_EABI__) && !defined(__aarch64__) && !defined(__mips__) && !defined(__riscv)
- // FPU state is not part of ARM EABI ucontext_t.
- memcpy(&context.float_state, context.context.uc_mcontext.fpregs,
- sizeof(context.float_state));
- @@ -726,6 +726,9 @@ bool ExceptionHandler::WriteMinidump() {
- #elif defined(__mips__)
- context.siginfo.si_addr =
- reinterpret_cast<void*>(context.context.uc_mcontext.pc);
- +#elif defined(__riscv)
- + context.siginfo.si_addr =
- + reinterpret_cast<void*>(context.context.uc_mcontext.__gregs[REG_PC]);
- #else
- #error "This code has not been ported to your platform yet."
- #endif
- diff --git a/src/client/linux/handler/exception_handler.h b/src/client/linux/handler/exception_handler.h
- index f80843ea..6d2ab077 100644
- --- a/src/client/linux/handler/exception_handler.h
- +++ b/src/client/linux/handler/exception_handler.h
- @@ -192,7 +192,7 @@ class ExceptionHandler {
- siginfo_t siginfo;
- pid_t tid; // the crashing thread.
- ucontext_t context;
- -#if !defined(__ARM_EABI__) && !defined(__mips__)
- +#if !defined(__ARM_EABI__) && !defined(__mips__) && !defined(__riscv)
- // #ifdef this out because FP state is not part of user ABI for Linux ARM.
- // In case of MIPS Linux FP state is already part of ucontext_t so
- // 'float_state' is not required.
- diff --git a/src/client/linux/microdump_writer/microdump_writer.cc b/src/client/linux/microdump_writer/microdump_writer.cc
- index 22edb1b8..84fb37b9 100644
- --- a/src/client/linux/microdump_writer/microdump_writer.cc
- +++ b/src/client/linux/microdump_writer/microdump_writer.cc
- @@ -138,7 +138,7 @@ class MicrodumpWriter {
- const MicrodumpExtraInfo& microdump_extra_info,
- LinuxDumper* dumper)
- : ucontext_(context ? &context->context : NULL),
- -#if !defined(__ARM_EABI__) && !defined(__mips__)
- +#if !defined(__ARM_EABI__) && !defined(__mips__) && !defined(__riscv)
- float_state_(context ? &context->float_state : NULL),
- #endif
- dumper_(dumper),
- @@ -337,6 +337,12 @@ class MicrodumpWriter {
- # else
- # error "This mips ABI is currently not supported (n32)"
- #endif
- +#elif defined(__riscv)
- +# if __riscv_xlen == 64
- + const char kArch[] = "riscv64";
- +#else
- +# error "This RISC-V ABI is currently not supported"
- +#endif
- #else
- #error "This code has not been ported to your platform yet"
- #endif
- @@ -409,7 +415,7 @@ class MicrodumpWriter {
- void DumpCPUState() {
- RawContextCPU cpu;
- my_memset(&cpu, 0, sizeof(RawContextCPU));
- -#if !defined(__ARM_EABI__) && !defined(__mips__)
- +#if !defined(__ARM_EABI__) && !defined(__mips__) && !defined(__riscv)
- UContextReader::FillCPUContext(&cpu, ucontext_, float_state_);
- #else
- UContextReader::FillCPUContext(&cpu, ucontext_);
- @@ -605,7 +611,7 @@ class MicrodumpWriter {
- void* Alloc(unsigned bytes) { return dumper_->allocator()->Alloc(bytes); }
-
- const ucontext_t* const ucontext_;
- -#if !defined(__ARM_EABI__) && !defined(__mips__)
- +#if !defined(__ARM_EABI__) && !defined(__mips__) && !defined(__riscv)
- const google_breakpad::fpstate_t* const float_state_;
- #endif
- LinuxDumper* dumper_;
- diff --git a/src/client/linux/minidump_writer/linux_core_dumper.cc b/src/client/linux/minidump_writer/linux_core_dumper.cc
- index 92e3a844..1789c810 100644
- --- a/src/client/linux/minidump_writer/linux_core_dumper.cc
- +++ b/src/client/linux/minidump_writer/linux_core_dumper.cc
- @@ -112,6 +112,9 @@ bool LinuxCoreDumper::GetThreadInfoByIndex(size_t index, ThreadInfo* info) {
- #elif defined(__mips__)
- stack_pointer =
- reinterpret_cast<uint8_t*>(info->mcontext.gregs[MD_CONTEXT_MIPS_REG_SP]);
- +#elif defined(__riscv)
- + stack_pointer =
- + reinterpret_cast<uint8_t*>(info->mcontext.__gregs[MD_CONTEXT_RISCV64_REG_SP]);
- #else
- #error "This code hasn't been ported to your platform yet."
- #endif
- @@ -218,6 +221,8 @@ bool LinuxCoreDumper::EnumerateThreads() {
- info.mcontext.mdlo = status->pr_reg[EF_LO];
- info.mcontext.mdhi = status->pr_reg[EF_HI];
- info.mcontext.pc = status->pr_reg[EF_CP0_EPC];
- +#elif defined(__riscv)
- + memcpy(info.mcontext.__gregs, status->pr_reg, sizeof(info.mcontext.__gregs));
- #else // __mips__
- memcpy(&info.regs, status->pr_reg, sizeof(info.regs));
- #endif // __mips__
- diff --git a/src/client/linux/minidump_writer/linux_dumper.h b/src/client/linux/minidump_writer/linux_dumper.h
- index 7bee160f..df04e2c0 100644
- --- a/src/client/linux/minidump_writer/linux_dumper.h
- +++ b/src/client/linux/minidump_writer/linux_dumper.h
- @@ -63,7 +63,8 @@ namespace google_breakpad {
- (defined(__mips__) && _MIPS_SIM == _ABIO32)
- typedef Elf32_auxv_t elf_aux_entry;
- #elif defined(__x86_64) || defined(__aarch64__) || \
- - (defined(__mips__) && _MIPS_SIM != _ABIO32)
- + (defined(__mips__) && _MIPS_SIM != _ABIO32) || \
- + (defined(__riscv) && __riscv_xlen == 64)
- typedef Elf64_auxv_t elf_aux_entry;
- #endif
-
- diff --git a/src/client/linux/minidump_writer/linux_ptrace_dumper.cc b/src/client/linux/minidump_writer/linux_ptrace_dumper.cc
- index e3ddb81a..0295fa3b 100644
- --- a/src/client/linux/minidump_writer/linux_ptrace_dumper.cc
- +++ b/src/client/linux/minidump_writer/linux_ptrace_dumper.cc
- @@ -298,6 +298,9 @@ bool LinuxPtraceDumper::GetThreadInfoByIndex(size_t index, ThreadInfo* info) {
- #elif defined(__mips__)
- stack_pointer =
- reinterpret_cast<uint8_t*>(info->mcontext.gregs[MD_CONTEXT_MIPS_REG_SP]);
- +#elif defined(__riscv)
- + stack_pointer =
- + reinterpret_cast<uint8_t*>(info->mcontext.__gregs[MD_CONTEXT_RISCV64_REG_SP]);
- #else
- #error "This code hasn't 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 72a92166..bc54a4bb 100644
- --- a/src/client/linux/minidump_writer/minidump_writer.cc
- +++ b/src/client/linux/minidump_writer/minidump_writer.cc
- @@ -136,7 +136,7 @@ class MinidumpWriter {
- : fd_(minidump_fd),
- path_(minidump_path),
- ucontext_(context ? &context->context : NULL),
- -#if !defined(__ARM_EABI__) && !defined(__mips__)
- +#if !defined(__ARM_EABI__) && !defined(__mips__) && !defined(__riscv)
- float_state_(context ? &context->float_state : NULL),
- #endif
- dumper_(dumper),
- @@ -468,7 +468,7 @@ class MinidumpWriter {
- if (!cpu.Allocate())
- return false;
- my_memset(cpu.get(), 0, sizeof(RawContextCPU));
- -#if !defined(__ARM_EABI__) && !defined(__mips__)
- +#if !defined(__ARM_EABI__) && !defined(__mips__) && !defined(__riscv)
- UContextReader::FillCPUContext(cpu.get(), ucontext_, float_state_);
- #else
- UContextReader::FillCPUContext(cpu.get(), ucontext_);
- @@ -897,7 +897,7 @@ class MinidumpWriter {
- dirent->location.rva = 0;
- }
-
- -#if defined(__i386__) || defined(__x86_64__) || defined(__mips__)
- +#if defined(__i386__) || defined(__x86_64__) || defined(__mips__) || defined(__riscv)
- bool WriteCPUInformation(MDRawSystemInfo* sys_info) {
- char vendor_id[sizeof(sys_info->cpu.x86_cpu_info.vendor_id) + 1] = {0};
- static const char vendor_id_name[] = "vendor_id";
- @@ -925,6 +925,12 @@ class MinidumpWriter {
- # else
- # error "This mips ABI is currently not supported (n32)"
- #endif
- +#elif defined(__riscv)
- +# if __riscv_xlen == 64
- + MD_CPU_ARCHITECTURE_RISCV64;
- +# else
- +# error "This RISC-V ABI us currently not supported"
- +# endif
- #elif defined(__i386__)
- MD_CPU_ARCHITECTURE_X86;
- #else
- @@ -1333,7 +1339,7 @@ class MinidumpWriter {
- const char* path_; // Path to the file where the minidum should be written.
-
- const ucontext_t* const ucontext_; // also from the signal handler
- -#if !defined(__ARM_EABI__) && !defined(__mips__)
- +#if !defined(__ARM_EABI__) && !defined(__mips__) && !defined(__riscv)
- const google_breakpad::fpstate_t* const float_state_; // ditto
- #endif
- LinuxDumper* dumper_;
- diff --git a/src/client/linux/minidump_writer/minidump_writer.h b/src/client/linux/minidump_writer/minidump_writer.h
- index e3b0b16d..0d18c328 100644
- --- a/src/client/linux/minidump_writer/minidump_writer.h
- +++ b/src/client/linux/minidump_writer/minidump_writer.h
- @@ -48,7 +48,7 @@ class ExceptionHandler;
-
- #if defined(__aarch64__)
- typedef struct fpsimd_context fpstate_t;
- -#elif !defined(__ARM_EABI__) && !defined(__mips__)
- +#elif !defined(__ARM_EABI__) && !defined(__mips__) && !defined(__riscv)
- typedef std::remove_pointer<fpregset_t>::type fpstate_t;
- #endif
-
- diff --git a/src/common/linux/breakpad_getcontext.S b/src/common/linux/breakpad_getcontext.S
- index 2ebcf319..b3c2873b 100644
- --- a/src/common/linux/breakpad_getcontext.S
- +++ b/src/common/linux/breakpad_getcontext.S
- @@ -526,6 +526,67 @@ breakpad_getcontext:
- ret
- .cfi_endproc
- .size breakpad_getcontext, . - breakpad_getcontext
- +#elif defined(__riscv) && __riscv_xlen == 64
- +
- +#define __NR_rt_sigprocmask 135
- +#define _NSIG8 64 / 8
- +#define SIG_BLOCK 0
- +
- + .text
- + .global breakpad_getcontext
- + .hidden breakpad_getcontext
- + .type breakpad_getcontext, @function
- + .align 2
- +breakpad_getcontext:
- + sd ra, MCONTEXT_GREGS_OFFSET + 0*8(a0)
- + sd ra, MCONTEXT_GREGS_OFFSET + 1*8(a0)
- + sd sp, MCONTEXT_GREGS_OFFSET + 2*8(a0)
- + sd s0, MCONTEXT_GREGS_OFFSET + 8*8(a0)
- + sd s1, MCONTEXT_GREGS_OFFSET + 9*8(a0)
- + sd x0, MCONTEXT_GREGS_OFFSET + 10*8(a0) /* return 0 by overwriting a0. */
- + sd s2, MCONTEXT_GREGS_OFFSET + 18*8(a0)
- + sd s3, MCONTEXT_GREGS_OFFSET + 19*8(a0)
- + sd s4, MCONTEXT_GREGS_OFFSET + 20*8(a0)
- + sd s5, MCONTEXT_GREGS_OFFSET + 21*8(a0)
- + sd s6, MCONTEXT_GREGS_OFFSET + 22*8(a0)
- + sd s7, MCONTEXT_GREGS_OFFSET + 23*8(a0)
- + sd s8, MCONTEXT_GREGS_OFFSET + 24*8(a0)
- + sd s9, MCONTEXT_GREGS_OFFSET + 25*8(a0)
- + sd s10, MCONTEXT_GREGS_OFFSET + 26*8(a0)
- + sd s11, MCONTEXT_GREGS_OFFSET + 27*8(a0)
- +
- +#ifndef __riscv_float_abi_soft
- + frsr a1
- +
- + fsd fs0, MCONTEXT_FPREGS_OFFSET + 8*8(a0)
- + fsd fs1, MCONTEXT_FPREGS_OFFSET + 9*8(a0)
- + fsd fs2, MCONTEXT_FPREGS_OFFSET + 18*8(a0)
- + fsd fs3, MCONTEXT_FPREGS_OFFSET + 19*8(a0)
- + fsd fs4, MCONTEXT_FPREGS_OFFSET + 20*8(a0)
- + fsd fs5, MCONTEXT_FPREGS_OFFSET + 21*8(a0)
- + fsd fs6, MCONTEXT_FPREGS_OFFSET + 22*8(a0)
- + fsd fs7, MCONTEXT_FPREGS_OFFSET + 23*8(a0)
- + fsd fs8, MCONTEXT_FPREGS_OFFSET + 24*8(a0)
- + fsd fs9, MCONTEXT_FPREGS_OFFSET + 25*8(a0)
- + fsd fs10, MCONTEXT_FPREGS_OFFSET + 26*8(a0)
- + fsd fs11, MCONTEXT_FPREGS_OFFSET + 27*8(a0)
- +
- + sw a1, MCONTEXT_FSR_OFFSET(a0)
- +#endif /* __riscv_float_abi_soft */
- +
- +/* rt_sigprocmask (SIG_BLOCK, NULL, &ucp->uc_sigmask, _NSIG / 8) */
- + li a3, _NSIG8
- + add a2, a0, UCONTEXT_SIGMASK_OFFSET
- + mv a1, zero
- + li a0, SIG_BLOCK
- +
- + li a7, __NR_rt_sigprocmask
- + scall
- +
- + /* Always return 0 for success, even if sigprocmask failed. */
- + mv a0, zero
- + ret
- + .size breakpad_getcontext, . - breakpad_getcontext
-
- #else
- #error "This file has not been ported for your CPU!"
- diff --git a/src/common/linux/memory_mapped_file.cc b/src/common/linux/memory_mapped_file.cc
- index 99362945..f70549fd 100644
- --- a/src/common/linux/memory_mapped_file.cc
- +++ b/src/common/linux/memory_mapped_file.cc
- @@ -65,7 +65,8 @@ bool MemoryMappedFile::Map(const char* path, size_t offset) {
- }
-
- #if defined(__x86_64__) || defined(__aarch64__) || \
- - (defined(__mips__) && _MIPS_SIM == _ABI64)
- + (defined(__mips__) && _MIPS_SIM == _ABI64) || \
- + (defined(__riscv) && __riscv_xlen == 64)
-
- struct kernel_stat st;
- if (sys_fstat(fd, &st) == -1 || st.st_size < 0) {
- diff --git a/src/common/linux/ucontext_constants.h b/src/common/linux/ucontext_constants.h
- index c390508a..0a970e3b 100644
- --- a/src/common/linux/ucontext_constants.h
- +++ b/src/common/linux/ucontext_constants.h
- @@ -146,6 +146,14 @@
- #endif
- #define FPREGS_OFFSET_MXCSR 24
-
- +#elif defined(__riscv)
- +
- +#define UCONTEXT_SIGMASK_OFFSET 40
- +
- +#define MCONTEXT_GREGS_OFFSET 176
- +#define MCONTEXT_FPREGS_OFFSET 432
- +#define MCONTEXT_FSR_OFFSET (MCONTEXT_FPREGS_OFFSET + 32*8)
- +
- #else
- #error "This header has not been ported for your CPU"
- #endif
- diff --git a/src/google_breakpad/common/minidump_format.h b/src/google_breakpad/common/minidump_format.h
- index 7b36d112..1013a891 100644
- --- a/src/google_breakpad/common/minidump_format.h
- +++ b/src/google_breakpad/common/minidump_format.h
- @@ -118,6 +118,7 @@ typedef struct {
- #include "minidump_cpu_mips.h"
- #include "minidump_cpu_ppc.h"
- #include "minidump_cpu_ppc64.h"
- +#include "minidump_cpu_riscv64.h"
- #include "minidump_cpu_sparc.h"
- #include "minidump_cpu_x86.h"
-
- @@ -660,6 +661,7 @@ typedef enum {
- MD_CPU_ARCHITECTURE_PPC64 = 0x8002, /* Breakpad-defined value for PPC64 */
- MD_CPU_ARCHITECTURE_ARM64_OLD = 0x8003, /* Breakpad-defined value for ARM64 */
- MD_CPU_ARCHITECTURE_MIPS64 = 0x8004, /* Breakpad-defined value for MIPS64 */
- + MD_CPU_ARCHITECTURE_RISCV64 = 0x8005, /* Breakpad-defined value for RISCV64 */
- MD_CPU_ARCHITECTURE_UNKNOWN = 0xffff /* PROCESSOR_ARCHITECTURE_UNKNOWN */
- } MDCPUArchitecture;
-
|