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

Side by Side Diff: third_party/crashpad/crashpad/minidump/minidump_exception_writer.cc

Issue 1505213004: Copy Crashpad into the Chrome tree instead of importing it via DEPS (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Address review comments, update README.chromium Created 5 years 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 unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2014 The Crashpad Authors. All rights reserved.
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 //
7 // http://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
14
15 #include "minidump/minidump_exception_writer.h"
16
17 #include <sys/types.h>
18
19 #include "base/logging.h"
20 #include "base/numerics/safe_conversions.h"
21 #include "minidump/minidump_context_writer.h"
22 #include "snapshot/exception_snapshot.h"
23 #include "util/file/file_writer.h"
24 #include "util/stdlib/move.h"
25
26 namespace crashpad {
27
28 MinidumpExceptionWriter::MinidumpExceptionWriter()
29 : MinidumpStreamWriter(), exception_(), context_(nullptr) {
30 }
31
32 MinidumpExceptionWriter::~MinidumpExceptionWriter() {
33 }
34
35 void MinidumpExceptionWriter::InitializeFromSnapshot(
36 const ExceptionSnapshot* exception_snapshot,
37 const MinidumpThreadIDMap& thread_id_map) {
38 DCHECK_EQ(state(), kStateMutable);
39 DCHECK(!context_);
40
41 auto thread_id_it = thread_id_map.find(exception_snapshot->ThreadID());
42 DCHECK(thread_id_it != thread_id_map.end());
43 SetThreadID(thread_id_it->second);
44
45 SetExceptionCode(exception_snapshot->Exception());
46 SetExceptionFlags(exception_snapshot->ExceptionInfo());
47 SetExceptionAddress(exception_snapshot->ExceptionAddress());
48 SetExceptionInformation(exception_snapshot->Codes());
49
50 scoped_ptr<MinidumpContextWriter> context =
51 MinidumpContextWriter::CreateFromSnapshot(exception_snapshot->Context());
52 SetContext(crashpad::move(context));
53 }
54
55 void MinidumpExceptionWriter::SetContext(
56 scoped_ptr<MinidumpContextWriter> context) {
57 DCHECK_EQ(state(), kStateMutable);
58
59 context_ = crashpad::move(context);
60 }
61
62 void MinidumpExceptionWriter::SetExceptionInformation(
63 const std::vector<uint64_t>& exception_information) {
64 DCHECK_EQ(state(), kStateMutable);
65
66 const size_t parameters = exception_information.size();
67 const size_t kMaxParameters =
68 arraysize(exception_.ExceptionRecord.ExceptionInformation);
69 CHECK_LE(parameters, kMaxParameters);
70
71 exception_.ExceptionRecord.NumberParameters =
72 base::checked_cast<uint32_t>(parameters);
73 size_t parameter = 0;
74 for (; parameter < parameters; ++parameter) {
75 exception_.ExceptionRecord.ExceptionInformation[parameter] =
76 exception_information[parameter];
77 }
78 for (; parameter < kMaxParameters; ++parameter) {
79 exception_.ExceptionRecord.ExceptionInformation[parameter] = 0;
80 }
81 }
82
83 bool MinidumpExceptionWriter::Freeze() {
84 DCHECK_EQ(state(), kStateMutable);
85 CHECK(context_);
86
87 if (!MinidumpStreamWriter::Freeze()) {
88 return false;
89 }
90
91 context_->RegisterLocationDescriptor(&exception_.ThreadContext);
92
93 return true;
94 }
95
96 size_t MinidumpExceptionWriter::SizeOfObject() {
97 DCHECK_GE(state(), kStateFrozen);
98
99 return sizeof(exception_);
100 }
101
102 std::vector<internal::MinidumpWritable*> MinidumpExceptionWriter::Children() {
103 DCHECK_GE(state(), kStateFrozen);
104 DCHECK(context_);
105
106 std::vector<MinidumpWritable*> children;
107 children.push_back(context_.get());
108
109 return children;
110 }
111
112 bool MinidumpExceptionWriter::WriteObject(FileWriterInterface* file_writer) {
113 DCHECK_EQ(state(), kStateWritable);
114
115 return file_writer->Write(&exception_, sizeof(exception_));
116 }
117
118 MinidumpStreamType MinidumpExceptionWriter::StreamType() const {
119 return kMinidumpStreamTypeException;
120 }
121
122 } // namespace crashpad
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698