mirror of
https://git.suyu.dev/suyu/breakpad.git
synced 2026-01-06 22:48:30 +01:00
Define and use a a new MDRawContextARM64
This struct matches the layout defined by Microsoft and replaces Breakpad's MDRawContextARM64_Old. This CL updates the processor to understand either the old or new structs, but clients continue to write the old structs. Change-Id: I8dedd9ddb2ec083b802723b9ac87beb18d98edbd Reviewed-on: https://chromium-review.googlesource.com/1155938 Reviewed-by: Mark Mentovai <mark@chromium.org>
This commit is contained in:
parent
627ef0cb9c
commit
88d8114fda
22 changed files with 411 additions and 83 deletions
|
|
@ -480,17 +480,28 @@ ParseThreadRegisters(CrashedProcess::Thread* thread,
|
|||
static void
|
||||
ParseThreadRegisters(CrashedProcess::Thread* thread,
|
||||
const MinidumpMemoryRange& range) {
|
||||
const MDRawContextARM64_Old* rawregs = range.GetData<MDRawContextARM64_Old>(0);
|
||||
#define COPY_REGS(rawregs) \
|
||||
do { \
|
||||
for (int i = 0; i < 31; ++i) \
|
||||
thread->regs.regs[i] = rawregs->iregs[i]; \
|
||||
thread->regs.sp = rawregs->iregs[MD_CONTEXT_ARM64_REG_SP]; \
|
||||
thread->regs.pc = rawregs->iregs[MD_CONTEXT_ARM64_REG_PC]; \
|
||||
thread->regs.pstate = rawregs->cpsr; \
|
||||
\
|
||||
memcpy(thread->fpregs.vregs, rawregs->float_save.regs, 8 * 32); \
|
||||
thread->fpregs.fpsr = rawregs->float_save.fpsr; \
|
||||
thread->fpregs.fpcr = rawregs->float_save.fpcr; \
|
||||
} while (false)
|
||||
|
||||
for (int i = 0; i < 31; ++i)
|
||||
thread->regs.regs[i] = rawregs->iregs[i];
|
||||
thread->regs.sp = rawregs->iregs[MD_CONTEXT_ARM64_REG_SP];
|
||||
thread->regs.pc = rawregs->iregs[MD_CONTEXT_ARM64_REG_PC];
|
||||
thread->regs.pstate = rawregs->cpsr;
|
||||
|
||||
memcpy(thread->fpregs.vregs, rawregs->float_save.regs, 8 * 32);
|
||||
thread->fpregs.fpsr = rawregs->float_save.fpsr;
|
||||
thread->fpregs.fpcr = rawregs->float_save.fpcr;
|
||||
if (range.length() == sizeof(MDRawContextARM64_Old)) {
|
||||
const MDRawContextARM64_Old* rawregs =
|
||||
range.GetData<MDRawContextARM64_Old>(0);
|
||||
COPY_REGS(rawregs);
|
||||
} else {
|
||||
const MDRawContextARM64* rawregs = range.GetData<MDRawContextARM64>(0);
|
||||
COPY_REGS(rawregs);
|
||||
}
|
||||
#undef COPY_REGS
|
||||
}
|
||||
#elif defined(__mips__)
|
||||
static void
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue