Chromium Code Reviews| Index: snapshot/win/exception_snapshot_win.cc |
| diff --git a/snapshot/win/exception_snapshot_win.cc b/snapshot/win/exception_snapshot_win.cc |
| index a32c929487a51548521d9b505b8f32ff27bd7671..000c3e240d3d1efa9abdf4aa86c758cb32502a7d 100644 |
| --- a/snapshot/win/exception_snapshot_win.cc |
| +++ b/snapshot/win/exception_snapshot_win.cc |
| @@ -69,6 +69,7 @@ bool ExceptionSnapshotWin::Initialize(ProcessReaderWin* process_reader, |
| return false; |
| } |
| +#if defined(ARCH_CPU_64_BITS) |
| if (process_reader->Is64Bit()) { |
| EXCEPTION_RECORD64 first_record; |
| if (!process_reader->ReadMemory( |
| @@ -105,6 +106,39 @@ bool ExceptionSnapshotWin::Initialize(ProcessReaderWin* process_reader, |
| CHECK(false) << "TODO(scottmg) x86"; |
| return false; |
| } |
| +#else |
| + EXCEPTION_RECORD32 first_record; |
|
Mark Mentovai
2015/09/16 02:57:19
This is so similar to what’s above that it’s kind
scottmg
2015/09/16 18:05:06
Done.
|
| + if (!process_reader->ReadMemory( |
| + reinterpret_cast<WinVMAddress>(exception_pointers.ExceptionRecord), |
| + sizeof(first_record), |
| + &first_record)) { |
| + LOG(ERROR) << "ExceptionRecord"; |
| + return false; |
| + } |
| + exception_code_ = first_record.ExceptionCode; |
| + exception_flags_ = first_record.ExceptionFlags; |
| + exception_address_ = first_record.ExceptionAddress; |
| + for (DWORD i = 0; i < first_record.NumberParameters; ++i) |
| + codes_.push_back(first_record.ExceptionInformation[i]); |
| + if (first_record.ExceptionRecord) { |
| + // https://code.google.com/p/crashpad/issues/detail?id=43 |
| + LOG(WARNING) << "dropping chained ExceptionRecord"; |
| + } |
| + |
| + context_.architecture = kCPUArchitectureX86; |
| + context_.x86 = &context_union_.x86; |
| + // We assume 64-on-64 here in that we're relying on the CONTEXT definition |
|
Mark Mentovai
2015/09/16 02:57:19
Well, the comment shouldn’t have been copied and p
scottmg
2015/09/16 18:05:06
Oops, I noticed that too, but forgot to upload the
|
| + // to be the x64 one. |
| + CONTEXT context_record; |
| + if (!process_reader->ReadMemory( |
| + reinterpret_cast<WinVMAddress>(exception_pointers.ContextRecord), |
| + sizeof(context_record), |
| + &context_record)) { |
| + LOG(ERROR) << "ContextRecord"; |
| + return false; |
| + } |
| + InitializeX86Context(context_record, context_.x86); |
| +#endif // ARCH_CPU_64_BITS |
| INITIALIZATION_STATE_SET_VALID(initialized_); |
| return true; |