Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2310)

Unified Diff: snapshot/exception_snapshot_mac.cc

Issue 666483002: Create snapshot/mac and move some files from snapshot and util to there (Closed) Base URL: https://chromium.googlesource.com/crashpad/crashpad/+/master
Patch Set: Move process_reader, process_types, and mach_o_image*_reader from util/mac to snapshot/mac Created 6 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « snapshot/exception_snapshot_mac.h ('k') | snapshot/mac/cpu_context_mac.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: snapshot/exception_snapshot_mac.cc
diff --git a/snapshot/exception_snapshot_mac.cc b/snapshot/exception_snapshot_mac.cc
deleted file mode 100644
index 2a67ea95dd676cac68f8aaaa7983eeec55636493..0000000000000000000000000000000000000000
--- a/snapshot/exception_snapshot_mac.cc
+++ /dev/null
@@ -1,175 +0,0 @@
-// Copyright 2014 The Crashpad Authors. All rights reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-#include "snapshot/exception_snapshot_mac.h"
-
-#include "base/logging.h"
-#include "base/strings/stringprintf.h"
-#include "snapshot/cpu_context_mac.h"
-#include "util/mac/process_reader.h"
-#include "util/mach/exc_server_variants.h"
-#include "util/numeric/safe_assignment.h"
-
-namespace crashpad {
-namespace internal {
-
-ExceptionSnapshotMac::ExceptionSnapshotMac()
- : ExceptionSnapshot(),
- context_union_(),
- context_(),
- codes_(),
- thread_id_(0),
- exception_address_(0),
- exception_(0),
- exception_code_0_(0),
- initialized_() {
-}
-
-ExceptionSnapshotMac::~ExceptionSnapshotMac() {
-}
-
-bool ExceptionSnapshotMac::Initialize(ProcessReader* process_reader,
- thread_t exception_thread,
- exception_type_t exception,
- const mach_exception_data_type_t* code,
- mach_msg_type_number_t code_count,
- thread_state_flavor_t flavor,
- const natural_t* state,
- mach_msg_type_number_t state_count) {
- INITIALIZATION_STATE_SET_INITIALIZING(initialized_);
-
- codes_.push_back(exception);
- for (mach_msg_type_number_t code_index = 0;
- code_index < code_count;
- ++code_index) {
- codes_.push_back(code[code_index]);
- }
-
- exception_ = exception;
- mach_exception_code_t exception_code_0 = code[0];
-
- if (exception_ == EXC_CRASH) {
- exception_ = ExcCrashRecoverOriginalException(
- exception_code_0, &exception_code_0, nullptr);
- }
-
- // ExceptionInfo() returns code[0] in a 32-bit field. This shouldn’t be a
- // problem because code[0]’s values never exceed 32 bits. Only code[1] is ever
- // expected to be that wide.
- if (!AssignIfInRange(&exception_code_0_, exception_code_0)) {
- LOG(WARNING)
- << base::StringPrintf("exception_code_0 0x%llx out of range",
- exception_code_0);
- return false;
- }
-
- const ProcessReader::Thread* thread = nullptr;
- for (const ProcessReader::Thread& loop_thread : process_reader->Threads()) {
- if (exception_thread == loop_thread.port) {
- thread = &loop_thread;
- break;
- }
- }
-
- if (!thread) {
- LOG(WARNING) << "exception_thread not found in task";
- return false;
- }
-
- thread_id_ = thread->id;
-
- // Normally, the exception address is present in code[1] for EXC_BAD_ACCESS
- // exceptions, but not for other types of exceptions.
- bool code_1_is_exception_address = exception_ == EXC_BAD_ACCESS;
-
-#if defined(ARCH_CPU_X86_FAMILY)
- if (process_reader->Is64Bit()) {
- context_.architecture = kCPUArchitectureX86_64;
- context_.x86_64 = &context_union_.x86_64;
- InitializeCPUContextX86_64(context_.x86_64,
- flavor,
- state,
- state_count,
- &thread->thread_context.t64,
- &thread->float_context.f64,
- &thread->debug_context.d64);
- } else {
- context_.architecture = kCPUArchitectureX86;
- context_.x86 = &context_union_.x86;
- InitializeCPUContextX86(context_.x86,
- flavor,
- state,
- state_count,
- &thread->thread_context.t32,
- &thread->float_context.f32,
- &thread->debug_context.d32);
- }
-
- // For x86 and x86_64 EXC_BAD_ACCESS exceptions, some code[0] values indicate
- // that code[1] does not (or may not) carry the exception address:
- // EXC_I386_GPFLT (10.9.5 xnu-2422.115.4/osfmk/i386/trap.c user_trap() for
- // T_GENERAL_PROTECTION) and the oddball (VM_PROT_READ | VM_PROT_EXECUTE)
- // which collides with EXC_I386_BOUNDFLT (10.9.5
- // xnu-2422.115.4/osfmk/i386/fpu.c fpextovrflt()). Other EXC_BAD_ACCESS
- // exceptions come through 10.9.5 xnu-2422.115.4/osfmk/i386/trap.c
- // user_page_fault_continue() and do contain the exception address in code[1].
- if (exception_ == EXC_BAD_ACCESS &&
- (exception_code_0_ == EXC_I386_GPFLT ||
- exception_code_0_ == (VM_PROT_READ | VM_PROT_EXECUTE))) {
- code_1_is_exception_address = false;
- }
-#endif
-
- if (code_1_is_exception_address) {
- exception_address_ = code[1];
- } else {
- exception_address_ = context_.InstructionPointer();
- }
-
- INITIALIZATION_STATE_SET_VALID(initialized_);
- return true;
-}
-
-const CPUContext* ExceptionSnapshotMac::Context() const {
- INITIALIZATION_STATE_DCHECK_VALID(initialized_);
- return &context_;
-}
-
-uint64_t ExceptionSnapshotMac::ThreadID() const {
- INITIALIZATION_STATE_DCHECK_VALID(initialized_);
- return thread_id_;
-}
-
-uint32_t ExceptionSnapshotMac::Exception() const {
- INITIALIZATION_STATE_DCHECK_VALID(initialized_);
- return exception_;
-}
-
-uint32_t ExceptionSnapshotMac::ExceptionInfo() const {
- INITIALIZATION_STATE_DCHECK_VALID(initialized_);
- return exception_code_0_;
-}
-
-uint64_t ExceptionSnapshotMac::ExceptionAddress() const {
- INITIALIZATION_STATE_DCHECK_VALID(initialized_);
- return exception_address_;
-}
-
-const std::vector<uint64_t>& ExceptionSnapshotMac::Codes() const {
- INITIALIZATION_STATE_DCHECK_VALID(initialized_);
- return codes_;
-}
-
-} // namespace internal
-} // namespace crashpad
« no previous file with comments | « snapshot/exception_snapshot_mac.h ('k') | snapshot/mac/cpu_context_mac.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698