Index: third_party/crashpad/crashpad/minidump/minidump_context_writer.cc |
diff --git a/third_party/crashpad/crashpad/minidump/minidump_context_writer.cc b/third_party/crashpad/crashpad/minidump/minidump_context_writer.cc |
index c6c29d969e1754501531417ad1e5b997a3277f50..4d3bf8a459d3345c5f24915bb6d048d8d81ce99b 100644 |
--- a/third_party/crashpad/crashpad/minidump/minidump_context_writer.cc |
+++ b/third_party/crashpad/crashpad/minidump/minidump_context_writer.cc |
@@ -14,8 +14,6 @@ |
#include "minidump/minidump_context_writer.h" |
-#include <windows.h> |
-#include <dbghelp.h> |
#include <stdint.h> |
#include <string.h> |
@@ -26,28 +24,6 @@ |
namespace crashpad { |
-namespace { |
- |
-// Sanity-check complex structures to ensure interoperability. |
-static_assert(sizeof(MinidumpContextX86) == 716, "MinidumpContextX86 size"); |
-static_assert(sizeof(MinidumpContextAMD64) == 1232, |
- "MinidumpContextAMD64 size"); |
- |
-// These structures can also be checked against definitions in the Windows SDK. |
-#if defined(OS_WIN) |
-#if defined(ARCH_CPU_X86_FAMILY) |
-static_assert(sizeof(MinidumpContextX86) == sizeof(WOW64_CONTEXT), |
- "WOW64_CONTEXT size"); |
-#if defined(ARCH_CPU_X86) |
-static_assert(sizeof(MinidumpContextX86) == sizeof(CONTEXT), "CONTEXT size"); |
-#elif defined(ARCH_CPU_X86_64) |
-static_assert(sizeof(MinidumpContextAMD64) == sizeof(CONTEXT), "CONTEXT size"); |
-#endif |
-#endif // ARCH_CPU_X86_FAMILY |
-#endif // OS_WIN |
- |
-} // namespace |
- |
MinidumpContextWriter::~MinidumpContextWriter() { |
} |
@@ -113,11 +89,28 @@ void MinidumpContextX86Writer::InitializeFromSnapshot( |
context_.dr6 = context_snapshot->dr6; |
context_.dr7 = context_snapshot->dr7; |
- // The contents of context_.fsave effectively alias everything in |
- // context_.fxsave that’s related to x87 FPU state. context_.fsave doesn’t |
- // carry state specific to SSE (or later), such as mxcsr and the xmm |
+ // The contents of context_.float_save effectively alias everything in |
+ // context_.fxsave that’s related to x87 FPU state. context_.float_save |
+ // doesn’t carry state specific to SSE (or later), such as mxcsr and the xmm |
// registers. |
- CPUContextX86::FxsaveToFsave(context_snapshot->fxsave, &context_.fsave); |
+ context_.float_save.control_word = context_snapshot->fxsave.fcw; |
+ context_.float_save.status_word = context_snapshot->fxsave.fsw; |
+ context_.float_save.tag_word = |
+ CPUContextX86::FxsaveToFsaveTagWord(context_snapshot->fxsave.fsw, |
+ context_snapshot->fxsave.ftw, |
+ context_snapshot->fxsave.st_mm); |
+ context_.float_save.error_offset = context_snapshot->fxsave.fpu_ip; |
+ context_.float_save.error_selector = context_snapshot->fxsave.fpu_cs; |
+ context_.float_save.data_offset = context_snapshot->fxsave.fpu_dp; |
+ context_.float_save.data_selector = context_snapshot->fxsave.fpu_ds; |
+ |
+ for (size_t index = 0, offset = 0; |
+ index < arraysize(context_snapshot->fxsave.st_mm); |
+ offset += sizeof(context_snapshot->fxsave.st_mm[index].st), ++index) { |
+ memcpy(&context_.float_save.register_area[offset], |
+ &context_snapshot->fxsave.st_mm[index].st, |
+ sizeof(context_snapshot->fxsave.st_mm[index].st)); |
+ } |
context_.gs = context_snapshot->gs; |
context_.fs = context_snapshot->fs; |