Index: snapshot/memory_snapshot_mac.cc |
diff --git a/snapshot/memory_snapshot_mac.cc b/snapshot/memory_snapshot_mac.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..163c38203907ddc84b0b02d738833a013a9ec993 |
--- /dev/null |
+++ b/snapshot/memory_snapshot_mac.cc |
@@ -0,0 +1,63 @@ |
+// 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/memory_snapshot_mac.h" |
+ |
+#include "util/mach/task_memory.h" |
+ |
+namespace crashpad { |
+namespace internal { |
+ |
+MemorySnapshotMac::MemorySnapshotMac() |
+ : MemorySnapshot(), |
+ process_reader_(NULL), |
+ address_(0), |
+ size_(0), |
+ initialized_() { |
+} |
+ |
+MemorySnapshotMac::~MemorySnapshotMac() { |
+} |
+ |
+void MemorySnapshotMac::Initialize(ProcessReader* process_reader, |
+ uint64_t address, |
+ uint64_t size) { |
+ INITIALIZATION_STATE_SET_INITIALIZING(initialized_); |
+ process_reader_ = process_reader; |
+ address_ = address; |
+ size_ = size; |
+ INITIALIZATION_STATE_SET_VALID(initialized_); |
+} |
+ |
+uint64_t MemorySnapshotMac::Address() const { |
+ INITIALIZATION_STATE_DCHECK_VALID(initialized_); |
+ return address_; |
+} |
+ |
+size_t MemorySnapshotMac::Size() const { |
+ INITIALIZATION_STATE_DCHECK_VALID(initialized_); |
+ return size_; |
+} |
+ |
+bool MemorySnapshotMac::Read(Delegate* delegate) const { |
+ INITIALIZATION_STATE_DCHECK_VALID(initialized_); |
+ scoped_ptr<uint8_t[]> buffer(new uint8_t[size_]); |
+ if (!process_reader_->Memory()->Read(address_, size_, buffer.get())) { |
+ return false; |
+ } |
+ return delegate->MemorySnapshotDelegateRead(buffer.get(), size_); |
+} |
+ |
+} // namespace internal |
+} // namespace crashpad |