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

Unified Diff: snapshot/cpu_context_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/cpu_context_mac.h ('k') | snapshot/cpu_context_mac_test.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: snapshot/cpu_context_mac.cc
diff --git a/snapshot/cpu_context_mac.cc b/snapshot/cpu_context_mac.cc
deleted file mode 100644
index 04b9f03dcadcc54828058e8618f1f6adc6a09e86..0000000000000000000000000000000000000000
--- a/snapshot/cpu_context_mac.cc
+++ /dev/null
@@ -1,440 +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/cpu_context_mac.h"
-
-#include <string.h>
-
-#include "base/logging.h"
-
-namespace crashpad {
-
-#if defined(ARCH_CPU_X86_FAMILY)
-
-namespace {
-
-void InitializeCPUContextX86Thread(
- CPUContextX86* context,
- const x86_thread_state32_t* x86_thread_state32) {
- context->eax = x86_thread_state32->__eax;
- context->ebx = x86_thread_state32->__ebx;
- context->ecx = x86_thread_state32->__ecx;
- context->edx = x86_thread_state32->__edx;
- context->edi = x86_thread_state32->__edi;
- context->esi = x86_thread_state32->__esi;
- context->ebp = x86_thread_state32->__ebp;
- context->esp = x86_thread_state32->__esp;
- context->eip = x86_thread_state32->__eip;
- context->eflags = x86_thread_state32->__eflags;
- context->cs = x86_thread_state32->__cs;
- context->ds = x86_thread_state32->__ds;
- context->es = x86_thread_state32->__es;
- context->fs = x86_thread_state32->__fs;
- context->gs = x86_thread_state32->__gs;
- context->ss = x86_thread_state32->__ss;
-}
-
-void InitializeCPUContextX86Float(
- CPUContextX86* context, const x86_float_state32_t* x86_float_state32) {
- // This relies on both x86_float_state32_t and context->fxsave having
- // identical (fxsave) layout.
- static_assert(offsetof(x86_float_state32_t, __fpu_reserved1) -
- offsetof(x86_float_state32_t, __fpu_fcw) ==
- sizeof(context->fxsave),
- "types must be equivalent");
-
- memcpy(
- &context->fxsave, &x86_float_state32->__fpu_fcw, sizeof(context->fxsave));
-}
-
-void InitializeCPUContextX86Debug(
- CPUContextX86* context, const x86_debug_state32_t* x86_debug_state32) {
- context->dr0 = x86_debug_state32->__dr0;
- context->dr1 = x86_debug_state32->__dr1;
- context->dr2 = x86_debug_state32->__dr2;
- context->dr3 = x86_debug_state32->__dr3;
- context->dr4 = x86_debug_state32->__dr4;
- context->dr5 = x86_debug_state32->__dr5;
- context->dr6 = x86_debug_state32->__dr6;
- context->dr7 = x86_debug_state32->__dr7;
-}
-
-// Initializes |context| from the native thread state structure |state|, which
-// is interpreted according to |flavor|. |state_count| must be at least the
-// expected size for |flavor|. This handles the architecture-specific
-// x86_THREAD_STATE32, x86_FLOAT_STATE32, and x86_DEBUG_STATE32 flavors. It also
-// handles the universal x86_THREAD_STATE, x86_FLOAT_STATE, and x86_DEBUG_STATE
-// flavors provided that the associated structure carries 32-bit data of the
-// corresponding state type. |flavor| may be THREAD_STATE_NONE to avoid setting
-// any thread state in |context|. This returns the architecture-specific flavor
-// value for the thread state that was actually set, or THREAD_STATE_NONE if no
-// thread state was set.
-thread_state_flavor_t InitializeCPUContextX86Flavor(
- CPUContextX86* context,
- thread_state_flavor_t flavor,
- const natural_t* state,
- mach_msg_type_number_t state_count) {
- mach_msg_type_number_t expected_state_count;
- switch (flavor) {
- case x86_THREAD_STATE:
- expected_state_count = x86_THREAD_STATE_COUNT;
- break;
- case x86_FLOAT_STATE:
- expected_state_count = x86_FLOAT_STATE_COUNT;
- break;
- case x86_DEBUG_STATE:
- expected_state_count = x86_DEBUG_STATE_COUNT;
- break;
- case x86_THREAD_STATE32:
- expected_state_count = x86_THREAD_STATE32_COUNT;
- break;
- case x86_FLOAT_STATE32:
- expected_state_count = x86_FLOAT_STATE32_COUNT;
- break;
- case x86_DEBUG_STATE32:
- expected_state_count = x86_DEBUG_STATE32_COUNT;
- break;
- case THREAD_STATE_NONE:
- expected_state_count = 0;
- break;
- default:
- LOG(WARNING) << "unhandled flavor " << flavor;
- return THREAD_STATE_NONE;
- }
-
- if (state_count < expected_state_count) {
- LOG(WARNING) << "expected state_count " << expected_state_count
- << " for flavor " << flavor << ", observed " << state_count;
- return THREAD_STATE_NONE;
- }
-
- switch (flavor) {
- case x86_THREAD_STATE: {
- const x86_thread_state_t* x86_thread_state =
- reinterpret_cast<const x86_thread_state_t*>(state);
- if (x86_thread_state->tsh.flavor != x86_THREAD_STATE32) {
- LOG(WARNING) << "expected flavor x86_THREAD_STATE32, observed "
- << x86_thread_state->tsh.flavor;
- return THREAD_STATE_NONE;
- }
- return InitializeCPUContextX86Flavor(
- context,
- x86_thread_state->tsh.flavor,
- reinterpret_cast<const natural_t*>(&x86_thread_state->uts.ts32),
- x86_thread_state->tsh.count);
- }
-
- case x86_FLOAT_STATE: {
- const x86_float_state_t* x86_float_state =
- reinterpret_cast<const x86_float_state_t*>(state);
- if (x86_float_state->fsh.flavor != x86_FLOAT_STATE32) {
- LOG(WARNING) << "expected flavor x86_FLOAT_STATE32, observed "
- << x86_float_state->fsh.flavor;
- return THREAD_STATE_NONE;
- }
- return InitializeCPUContextX86Flavor(
- context,
- x86_float_state->fsh.flavor,
- reinterpret_cast<const natural_t*>(&x86_float_state->ufs.fs32),
- x86_float_state->fsh.count);
- }
-
- case x86_DEBUG_STATE: {
- const x86_debug_state_t* x86_debug_state =
- reinterpret_cast<const x86_debug_state_t*>(state);
- if (x86_debug_state->dsh.flavor != x86_DEBUG_STATE32) {
- LOG(WARNING) << "expected flavor x86_DEBUG_STATE32, observed "
- << x86_debug_state->dsh.flavor;
- return THREAD_STATE_NONE;
- }
- return InitializeCPUContextX86Flavor(
- context,
- x86_debug_state->dsh.flavor,
- reinterpret_cast<const natural_t*>(&x86_debug_state->uds.ds32),
- x86_debug_state->dsh.count);
- }
-
- case x86_THREAD_STATE32: {
- const x86_thread_state32_t* x86_thread_state32 =
- reinterpret_cast<const x86_thread_state32_t*>(state);
- InitializeCPUContextX86Thread(context, x86_thread_state32);
- return flavor;
- }
-
- case x86_FLOAT_STATE32: {
- const x86_float_state32_t* x86_float_state32 =
- reinterpret_cast<const x86_float_state32_t*>(state);
- InitializeCPUContextX86Float(context, x86_float_state32);
- return flavor;
- }
-
- case x86_DEBUG_STATE32: {
- const x86_debug_state32_t* x86_debug_state32 =
- reinterpret_cast<const x86_debug_state32_t*>(state);
- InitializeCPUContextX86Debug(context, x86_debug_state32);
- return flavor;
- }
-
- case THREAD_STATE_NONE: {
- // This may happen without error when called without exception-style
- // flavor data, or even from an exception handler when the exception
- // behavior is EXCEPTION_DEFAULT.
- return flavor;
- }
-
- default: {
- NOTREACHED();
- return THREAD_STATE_NONE;
- }
- }
-}
-
-void InitializeCPUContextX86_64Thread(
- CPUContextX86_64* context, const x86_thread_state64_t* x86_thread_state64) {
- context->rax = x86_thread_state64->__rax;
- context->rbx = x86_thread_state64->__rbx;
- context->rcx = x86_thread_state64->__rcx;
- context->rdx = x86_thread_state64->__rdx;
- context->rdi = x86_thread_state64->__rdi;
- context->rsi = x86_thread_state64->__rsi;
- context->rbp = x86_thread_state64->__rbp;
- context->rsp = x86_thread_state64->__rsp;
- context->r8 = x86_thread_state64->__r8;
- context->r9 = x86_thread_state64->__r9;
- context->r10 = x86_thread_state64->__r10;
- context->r11 = x86_thread_state64->__r11;
- context->r12 = x86_thread_state64->__r12;
- context->r13 = x86_thread_state64->__r13;
- context->r14 = x86_thread_state64->__r14;
- context->r15 = x86_thread_state64->__r15;
- context->rip = x86_thread_state64->__rip;
- context->rflags = x86_thread_state64->__rflags;
- context->cs = x86_thread_state64->__cs;
- context->fs = x86_thread_state64->__fs;
- context->gs = x86_thread_state64->__gs;
-}
-
-void InitializeCPUContextX86_64Float(
- CPUContextX86_64* context, const x86_float_state64_t* x86_float_state64) {
- // This relies on both x86_float_state64_t and context->fxsave having
- // identical (fxsave) layout.
- static_assert(offsetof(x86_float_state64_t, __fpu_reserved1) -
- offsetof(x86_float_state64_t, __fpu_fcw) ==
- sizeof(context->fxsave),
- "types must be equivalent");
-
- memcpy(&context->fxsave,
- &x86_float_state64->__fpu_fcw,
- sizeof(context->fxsave));
-}
-
-void InitializeCPUContextX86_64Debug(
- CPUContextX86_64* context, const x86_debug_state64_t* x86_debug_state64) {
- context->dr0 = x86_debug_state64->__dr0;
- context->dr1 = x86_debug_state64->__dr1;
- context->dr2 = x86_debug_state64->__dr2;
- context->dr3 = x86_debug_state64->__dr3;
- context->dr4 = x86_debug_state64->__dr4;
- context->dr5 = x86_debug_state64->__dr5;
- context->dr6 = x86_debug_state64->__dr6;
- context->dr7 = x86_debug_state64->__dr7;
-}
-
-// Initializes |context| from the native thread state structure |state|, which
-// is interpreted according to |flavor|. |state_count| must be at least the
-// expected size for |flavor|. This handles the architecture-specific
-// x86_THREAD_STATE64, x86_FLOAT_STATE64, and x86_DEBUG_STATE64 flavors. It also
-// handles the universal x86_THREAD_STATE, x86_FLOAT_STATE, and x86_DEBUG_STATE
-// flavors provided that the associated structure carries 64-bit data of the
-// corresponding state type. |flavor| may be THREAD_STATE_NONE to avoid setting
-// any thread state in |context|. This returns the architecture-specific flavor
-// value for the thread state that was actually set, or THREAD_STATE_NONE if no
-// thread state was set.
-thread_state_flavor_t InitializeCPUContextX86_64Flavor(
- CPUContextX86_64* context,
- thread_state_flavor_t flavor,
- const natural_t* state,
- mach_msg_type_number_t state_count) {
- mach_msg_type_number_t expected_state_count;
- switch (flavor) {
- case x86_THREAD_STATE:
- expected_state_count = x86_THREAD_STATE_COUNT;
- break;
- case x86_FLOAT_STATE:
- expected_state_count = x86_FLOAT_STATE_COUNT;
- break;
- case x86_DEBUG_STATE:
- expected_state_count = x86_DEBUG_STATE_COUNT;
- break;
- case x86_THREAD_STATE64:
- expected_state_count = x86_THREAD_STATE64_COUNT;
- break;
- case x86_FLOAT_STATE64:
- expected_state_count = x86_FLOAT_STATE64_COUNT;
- break;
- case x86_DEBUG_STATE64:
- expected_state_count = x86_DEBUG_STATE64_COUNT;
- break;
- case THREAD_STATE_NONE:
- expected_state_count = 0;
- break;
- default:
- LOG(WARNING) << "unhandled flavor " << flavor;
- return THREAD_STATE_NONE;
- }
-
- if (state_count < expected_state_count) {
- LOG(WARNING) << "expected state_count " << expected_state_count
- << " for flavor " << flavor << ", observed " << state_count;
- return THREAD_STATE_NONE;
- }
-
- switch (flavor) {
- case x86_THREAD_STATE: {
- const x86_thread_state_t* x86_thread_state =
- reinterpret_cast<const x86_thread_state_t*>(state);
- if (x86_thread_state->tsh.flavor != x86_THREAD_STATE64) {
- LOG(WARNING) << "expected flavor x86_THREAD_STATE64, observed "
- << x86_thread_state->tsh.flavor;
- return THREAD_STATE_NONE;
- }
- return InitializeCPUContextX86_64Flavor(
- context,
- x86_thread_state->tsh.flavor,
- reinterpret_cast<const natural_t*>(&x86_thread_state->uts.ts64),
- x86_thread_state->tsh.count);
- }
-
- case x86_FLOAT_STATE: {
- const x86_float_state_t* x86_float_state =
- reinterpret_cast<const x86_float_state_t*>(state);
- if (x86_float_state->fsh.flavor != x86_FLOAT_STATE64) {
- LOG(WARNING) << "expected flavor x86_FLOAT_STATE64, observed "
- << x86_float_state->fsh.flavor;
- return THREAD_STATE_NONE;
- }
- return InitializeCPUContextX86_64Flavor(
- context,
- x86_float_state->fsh.flavor,
- reinterpret_cast<const natural_t*>(&x86_float_state->ufs.fs64),
- x86_float_state->fsh.count);
- }
-
- case x86_DEBUG_STATE: {
- const x86_debug_state_t* x86_debug_state =
- reinterpret_cast<const x86_debug_state_t*>(state);
- if (x86_debug_state->dsh.flavor != x86_DEBUG_STATE64) {
- LOG(WARNING) << "expected flavor x86_DEBUG_STATE64, observed "
- << x86_debug_state->dsh.flavor;
- return THREAD_STATE_NONE;
- }
- return InitializeCPUContextX86_64Flavor(
- context,
- x86_debug_state->dsh.flavor,
- reinterpret_cast<const natural_t*>(&x86_debug_state->uds.ds64),
- x86_debug_state->dsh.count);
- }
-
- case x86_THREAD_STATE64: {
- const x86_thread_state64_t* x86_thread_state64 =
- reinterpret_cast<const x86_thread_state64_t*>(state);
- InitializeCPUContextX86_64Thread(context, x86_thread_state64);
- return flavor;
- }
-
- case x86_FLOAT_STATE64: {
- const x86_float_state64_t* x86_float_state64 =
- reinterpret_cast<const x86_float_state64_t*>(state);
- InitializeCPUContextX86_64Float(context, x86_float_state64);
- return flavor;
- }
-
- case x86_DEBUG_STATE64: {
- const x86_debug_state64_t* x86_debug_state64 =
- reinterpret_cast<const x86_debug_state64_t*>(state);
- InitializeCPUContextX86_64Debug(context, x86_debug_state64);
- return flavor;
- }
-
- case THREAD_STATE_NONE: {
- // This may happen without error when called without exception-style
- // flavor data, or even from an exception handler when the exception
- // behavior is EXCEPTION_DEFAULT.
- return flavor;
- }
-
- default: {
- NOTREACHED();
- return THREAD_STATE_NONE;
- }
- }
-}
-
-} // namespace
-
-namespace internal {
-
-void InitializeCPUContextX86(CPUContextX86* context,
- thread_state_flavor_t flavor,
- const natural_t* state,
- mach_msg_type_number_t state_count,
- const x86_thread_state32_t* x86_thread_state32,
- const x86_float_state32_t* x86_float_state32,
- const x86_debug_state32_t* x86_debug_state32) {
- thread_state_flavor_t set_flavor = THREAD_STATE_NONE;
- if (flavor != THREAD_STATE_NONE) {
- set_flavor =
- InitializeCPUContextX86Flavor(context, flavor, state, state_count);
- }
-
- if (set_flavor != x86_THREAD_STATE32) {
- InitializeCPUContextX86Thread(context, x86_thread_state32);
- }
- if (set_flavor != x86_FLOAT_STATE32) {
- InitializeCPUContextX86Float(context, x86_float_state32);
- }
- if (set_flavor != x86_DEBUG_STATE32) {
- InitializeCPUContextX86Debug(context, x86_debug_state32);
- }
-}
-
-void InitializeCPUContextX86_64(CPUContextX86_64* context,
- thread_state_flavor_t flavor,
- const natural_t* state,
- mach_msg_type_number_t state_count,
- const x86_thread_state64_t* x86_thread_state64,
- const x86_float_state64_t* x86_float_state64,
- const x86_debug_state64_t* x86_debug_state64) {
- thread_state_flavor_t set_flavor = THREAD_STATE_NONE;
- if (flavor != THREAD_STATE_NONE) {
- set_flavor =
- InitializeCPUContextX86_64Flavor(context, flavor, state, state_count);
- }
-
- if (set_flavor != x86_THREAD_STATE64) {
- InitializeCPUContextX86_64Thread(context, x86_thread_state64);
- }
- if (set_flavor != x86_FLOAT_STATE64) {
- InitializeCPUContextX86_64Float(context, x86_float_state64);
- }
- if (set_flavor != x86_DEBUG_STATE64) {
- InitializeCPUContextX86_64Debug(context, x86_debug_state64);
- }
-}
-
-} // namespace internal
-
-#endif
-
-} // namespace crashpad
« no previous file with comments | « snapshot/cpu_context_mac.h ('k') | snapshot/cpu_context_mac_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698