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:
Joshua Peraza
2018-08-01 10:48:27 -07:00
parent 627ef0cb9c
commit 88d8114fda
22 changed files with 411 additions and 83 deletions

View File

@@ -56,7 +56,7 @@ class DumpContext : public DumpObject {
// context data does not match the CPU type or does not exist, returns NULL.
const MDRawContextAMD64* GetContextAMD64() const;
const MDRawContextARM* GetContextARM() const;
const MDRawContextARM64_Old* GetContextARM64() const;
const MDRawContextARM64* GetContextARM64() const;
const MDRawContextMIPS* GetContextMIPS() const;
const MDRawContextPPC* GetContextPPC() const;
const MDRawContextPPC64* GetContextPPC64() const;
@@ -85,7 +85,7 @@ class DumpContext : public DumpObject {
void SetContextAMD64(MDRawContextAMD64* amd64);
void SetContextSPARC(MDRawContextSPARC* ctx_sparc);
void SetContextARM(MDRawContextARM* arm);
void SetContextARM64(MDRawContextARM64_Old* arm64);
void SetContextARM64(MDRawContextARM64* arm64);
void SetContextMIPS(MDRawContextMIPS* ctx_mips);
// Free the CPU-specific context structure.
@@ -103,7 +103,7 @@ class DumpContext : public DumpObject {
// so variables can NOT be named as sparc
MDRawContextSPARC* ctx_sparc;
MDRawContextARM* arm;
MDRawContextARM64_Old* arm64_old;
MDRawContextARM64* arm64;
MDRawContextMIPS* ctx_mips;
} context_;

View File

@@ -68,7 +68,7 @@ class MicrodumpModules : public BasicCodeModules {
class MicrodumpContext : public DumpContext {
public:
virtual void SetContextARM(MDRawContextARM* arm);
virtual void SetContextARM64(MDRawContextARM64_Old* arm64);
virtual void SetContextARM64(MDRawContextARM64* arm64);
virtual void SetContextX86(MDRawContextX86* x86);
virtual void SetContextMIPS(MDRawContextMIPS* mips32);
virtual void SetContextMIPS64(MDRawContextMIPS* mips64);

View File

@@ -1260,6 +1260,8 @@ class Minidump {
bool swap() const { return valid_ ? swap_ : false; }
bool is_big_endian() const { return valid_ ? is_big_endian_ : false; }
// Print a human-readable representation of the object to stdout.
void Print();
@@ -1325,6 +1327,9 @@ class Minidump {
// same-endian, this will be false.
bool swap_;
// true if the minidump was produced by a big-endian cpu.
bool is_big_endian_;
// Validity of the Minidump structure, false immediately after
// construction or after a failed Read(); true following a successful
// Read().

View File

@@ -327,7 +327,7 @@ struct StackFrameARM64 : public StackFrame {
// stack. In other frames, the values of nonvolatile registers may be
// present, given sufficient debugging information. Refer to
// context_validity.
MDRawContextARM64_Old context;
MDRawContextARM64 context;
// For each register in context whose value has been recovered, we set
// the corresponding CONTEXT_VALID_ bit in context_validity.