OLD | NEW |
1 // Copyright 2014 The Crashpad Authors. All rights reserved. | 1 // Copyright 2014 The Crashpad Authors. All rights reserved. |
2 // | 2 // |
3 // Licensed under the Apache License, Version 2.0 (the "License"); | 3 // Licensed under the Apache License, Version 2.0 (the "License"); |
4 // you may not use this file except in compliance with 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 | 5 // You may obtain a copy of the License at |
6 // | 6 // |
7 // http://www.apache.org/licenses/LICENSE-2.0 | 7 // http://www.apache.org/licenses/LICENSE-2.0 |
8 // | 8 // |
9 // Unless required by applicable law or agreed to in writing, software | 9 // Unless required by applicable law or agreed to in writing, software |
10 // distributed under the License is distributed on an "AS IS" BASIS, | 10 // distributed under the License is distributed on an "AS IS" BASIS, |
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
12 // See the License for the specific language governing permissions and | 12 // See the License for the specific language governing permissions and |
13 // limitations under the License. | 13 // limitations under the License. |
14 | 14 |
15 #include "snapshot/mac/process_types.h" | 15 #include "snapshot/mac/process_types.h" |
16 | 16 |
17 #include <AvailabilityMacros.h> | 17 #include <AvailabilityMacros.h> |
18 #include <mach/mach.h> | 18 #include <mach/mach.h> |
19 #include <string.h> | 19 #include <string.h> |
20 | 20 |
21 #include <vector> | 21 #include <vector> |
22 | 22 |
| 23 #include "base/basictypes.h" |
23 #include "base/strings/stringprintf.h" | 24 #include "base/strings/stringprintf.h" |
24 #include "gtest/gtest.h" | 25 #include "gtest/gtest.h" |
25 #include "util/mac/mac_util.h" | 26 #include "util/mac/mac_util.h" |
26 #include "util/test/mac/dyld.h" | 27 #include "util/test/mac/dyld.h" |
27 | 28 |
28 namespace crashpad { | 29 namespace crashpad { |
29 namespace test { | 30 namespace test { |
30 namespace { | 31 namespace { |
31 | 32 |
32 #define TEST_STRING(process_reader, self_view, proctype_view, field) \ | 33 #define TEST_STRING(process_reader, self_view, proctype_view, field) \ |
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
114 } | 115 } |
115 if (proctype_image_infos.version >= 3) { | 116 if (proctype_image_infos.version >= 3) { |
116 EXPECT_EQ(reinterpret_cast<uint64_t>(self_image_infos->jitInfo), | 117 EXPECT_EQ(reinterpret_cast<uint64_t>(self_image_infos->jitInfo), |
117 proctype_image_infos.jitInfo); | 118 proctype_image_infos.jitInfo); |
118 } | 119 } |
119 if (proctype_image_infos.version >= 5) { | 120 if (proctype_image_infos.version >= 5) { |
120 EXPECT_EQ(reinterpret_cast<uint64_t>(self_image_infos->dyldVersion), | 121 EXPECT_EQ(reinterpret_cast<uint64_t>(self_image_infos->dyldVersion), |
121 proctype_image_infos.dyldVersion); | 122 proctype_image_infos.dyldVersion); |
122 EXPECT_EQ(reinterpret_cast<uint64_t>(self_image_infos->errorMessage), | 123 EXPECT_EQ(reinterpret_cast<uint64_t>(self_image_infos->errorMessage), |
123 proctype_image_infos.errorMessage); | 124 proctype_image_infos.errorMessage); |
124 EXPECT_EQ(static_cast<uint64_t>(self_image_infos->terminationFlags), | 125 EXPECT_EQ(implicit_cast<uint64_t>(self_image_infos->terminationFlags), |
125 proctype_image_infos.terminationFlags); | 126 proctype_image_infos.terminationFlags); |
126 | 127 |
127 TEST_STRING( | 128 TEST_STRING( |
128 process_reader, self_image_infos, proctype_image_infos, dyldVersion); | 129 process_reader, self_image_infos, proctype_image_infos, dyldVersion); |
129 TEST_STRING( | 130 TEST_STRING( |
130 process_reader, self_image_infos, proctype_image_infos, errorMessage); | 131 process_reader, self_image_infos, proctype_image_infos, errorMessage); |
131 } | 132 } |
132 if (proctype_image_infos.version >= 6) { | 133 if (proctype_image_infos.version >= 6) { |
133 EXPECT_EQ( | 134 EXPECT_EQ( |
134 reinterpret_cast<uint64_t>(self_image_infos->coreSymbolicationShmPage), | 135 reinterpret_cast<uint64_t>(self_image_infos->coreSymbolicationShmPage), |
135 proctype_image_infos.coreSymbolicationShmPage); | 136 proctype_image_infos.coreSymbolicationShmPage); |
136 } | 137 } |
137 if (proctype_image_infos.version >= 7) { | 138 if (proctype_image_infos.version >= 7) { |
138 EXPECT_EQ(static_cast<uint64_t>(self_image_infos->systemOrderFlag), | 139 EXPECT_EQ(implicit_cast<uint64_t>(self_image_infos->systemOrderFlag), |
139 proctype_image_infos.systemOrderFlag); | 140 proctype_image_infos.systemOrderFlag); |
140 } | 141 } |
141 #if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_7 | 142 #if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_7 |
142 if (proctype_image_infos.version >= 8) { | 143 if (proctype_image_infos.version >= 8) { |
143 EXPECT_EQ(static_cast<uint64_t>(self_image_infos->uuidArrayCount), | 144 EXPECT_EQ(implicit_cast<uint64_t>(self_image_infos->uuidArrayCount), |
144 proctype_image_infos.uuidArrayCount); | 145 proctype_image_infos.uuidArrayCount); |
145 } | 146 } |
146 if (proctype_image_infos.version >= 9) { | 147 if (proctype_image_infos.version >= 9) { |
147 EXPECT_EQ( | 148 EXPECT_EQ( |
148 reinterpret_cast<uint64_t>(self_image_infos->dyldAllImageInfosAddress), | 149 reinterpret_cast<uint64_t>(self_image_infos->dyldAllImageInfosAddress), |
149 proctype_image_infos.dyldAllImageInfosAddress); | 150 proctype_image_infos.dyldAllImageInfosAddress); |
150 } | 151 } |
151 if (proctype_image_infos.version >= 10) { | 152 if (proctype_image_infos.version >= 10) { |
152 EXPECT_EQ(static_cast<uint64_t>(self_image_infos->initialImageCount), | 153 EXPECT_EQ(implicit_cast<uint64_t>(self_image_infos->initialImageCount), |
153 proctype_image_infos.initialImageCount); | 154 proctype_image_infos.initialImageCount); |
154 } | 155 } |
155 if (proctype_image_infos.version >= 11) { | 156 if (proctype_image_infos.version >= 11) { |
156 EXPECT_EQ(static_cast<uint64_t>(self_image_infos->errorKind), | 157 EXPECT_EQ(implicit_cast<uint64_t>(self_image_infos->errorKind), |
157 proctype_image_infos.errorKind); | 158 proctype_image_infos.errorKind); |
158 EXPECT_EQ( | 159 EXPECT_EQ( |
159 reinterpret_cast<uint64_t>(self_image_infos->errorClientOfDylibPath), | 160 reinterpret_cast<uint64_t>(self_image_infos->errorClientOfDylibPath), |
160 proctype_image_infos.errorClientOfDylibPath); | 161 proctype_image_infos.errorClientOfDylibPath); |
161 EXPECT_EQ( | 162 EXPECT_EQ( |
162 reinterpret_cast<uint64_t>(self_image_infos->errorTargetDylibPath), | 163 reinterpret_cast<uint64_t>(self_image_infos->errorTargetDylibPath), |
163 proctype_image_infos.errorTargetDylibPath); | 164 proctype_image_infos.errorTargetDylibPath); |
164 EXPECT_EQ(reinterpret_cast<uint64_t>(self_image_infos->errorSymbol), | 165 EXPECT_EQ(reinterpret_cast<uint64_t>(self_image_infos->errorSymbol), |
165 proctype_image_infos.errorSymbol); | 166 proctype_image_infos.errorSymbol); |
166 | 167 |
167 TEST_STRING(process_reader, | 168 TEST_STRING(process_reader, |
168 self_image_infos, | 169 self_image_infos, |
169 proctype_image_infos, | 170 proctype_image_infos, |
170 errorClientOfDylibPath); | 171 errorClientOfDylibPath); |
171 TEST_STRING(process_reader, | 172 TEST_STRING(process_reader, |
172 self_image_infos, | 173 self_image_infos, |
173 proctype_image_infos, | 174 proctype_image_infos, |
174 errorTargetDylibPath); | 175 errorTargetDylibPath); |
175 TEST_STRING( | 176 TEST_STRING( |
176 process_reader, self_image_infos, proctype_image_infos, errorSymbol); | 177 process_reader, self_image_infos, proctype_image_infos, errorSymbol); |
177 } | 178 } |
178 if (proctype_image_infos.version >= 12) { | 179 if (proctype_image_infos.version >= 12) { |
179 EXPECT_EQ(static_cast<uint64_t>(self_image_infos->sharedCacheSlide), | 180 EXPECT_EQ(implicit_cast<uint64_t>(self_image_infos->sharedCacheSlide), |
180 proctype_image_infos.sharedCacheSlide); | 181 proctype_image_infos.sharedCacheSlide); |
181 } | 182 } |
182 #endif | 183 #endif |
183 #if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_9 | 184 #if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_9 |
184 if (proctype_image_infos.version >= 13) { | 185 if (proctype_image_infos.version >= 13) { |
185 EXPECT_EQ(0, | 186 EXPECT_EQ(0, |
186 memcmp(self_image_infos->sharedCacheUUID, | 187 memcmp(self_image_infos->sharedCacheUUID, |
187 proctype_image_infos.sharedCacheUUID, | 188 proctype_image_infos.sharedCacheUUID, |
188 sizeof(self_image_infos->sharedCacheUUID))); | 189 sizeof(self_image_infos->sharedCacheUUID))); |
189 } | 190 } |
190 if (proctype_image_infos.version >= 14) { | 191 if (proctype_image_infos.version >= 14) { |
191 for (size_t index = 0; index < arraysize(self_image_infos->reserved); | 192 for (size_t index = 0; index < arraysize(self_image_infos->reserved); |
192 ++index) { | 193 ++index) { |
193 EXPECT_EQ(static_cast<uint64_t>(self_image_infos->reserved[index]), | 194 EXPECT_EQ(implicit_cast<uint64_t>(self_image_infos->reserved[index]), |
194 proctype_image_infos.reserved[index]) | 195 proctype_image_infos.reserved[index]) |
195 << "index " << index; | 196 << "index " << index; |
196 } | 197 } |
197 } | 198 } |
198 #endif | 199 #endif |
199 | 200 |
200 if (proctype_image_infos.version >= 1) { | 201 if (proctype_image_infos.version >= 1) { |
201 std::vector<process_types::dyld_image_info> proctype_image_info_vector( | 202 std::vector<process_types::dyld_image_info> proctype_image_info_vector( |
202 proctype_image_infos.infoArrayCount); | 203 proctype_image_infos.infoArrayCount); |
203 ASSERT_TRUE(process_types::dyld_image_info::ReadArrayInto( | 204 ASSERT_TRUE(process_types::dyld_image_info::ReadArrayInto( |
204 &process_reader, | 205 &process_reader, |
205 proctype_image_infos.infoArray, | 206 proctype_image_infos.infoArray, |
206 proctype_image_info_vector.size(), | 207 proctype_image_info_vector.size(), |
207 &proctype_image_info_vector[0])); | 208 &proctype_image_info_vector[0])); |
208 | 209 |
209 for (size_t index = 0; index < proctype_image_infos.infoArrayCount; | 210 for (size_t index = 0; index < proctype_image_infos.infoArrayCount; |
210 ++index) { | 211 ++index) { |
211 const dyld_image_info* self_image_info = | 212 const dyld_image_info* self_image_info = |
212 &self_image_infos->infoArray[index]; | 213 &self_image_infos->infoArray[index]; |
213 const process_types::dyld_image_info& proctype_image_info = | 214 const process_types::dyld_image_info& proctype_image_info = |
214 proctype_image_info_vector[index]; | 215 proctype_image_info_vector[index]; |
215 | 216 |
216 EXPECT_EQ(reinterpret_cast<uint64_t>(self_image_info->imageLoadAddress), | 217 EXPECT_EQ(reinterpret_cast<uint64_t>(self_image_info->imageLoadAddress), |
217 proctype_image_info.imageLoadAddress) | 218 proctype_image_info.imageLoadAddress) |
218 << "index " << index; | 219 << "index " << index; |
219 EXPECT_EQ(reinterpret_cast<uint64_t>(self_image_info->imageFilePath), | 220 EXPECT_EQ(reinterpret_cast<uint64_t>(self_image_info->imageFilePath), |
220 proctype_image_info.imageFilePath) | 221 proctype_image_info.imageFilePath) |
221 << "index " << index; | 222 << "index " << index; |
222 EXPECT_EQ(static_cast<uint64_t>(self_image_info->imageFileModDate), | 223 EXPECT_EQ(implicit_cast<uint64_t>(self_image_info->imageFileModDate), |
223 proctype_image_info.imageFileModDate) | 224 proctype_image_info.imageFileModDate) |
224 << "index " << index; | 225 << "index " << index; |
225 | 226 |
226 TEST_STRING( | 227 TEST_STRING( |
227 process_reader, self_image_info, proctype_image_info, imageFilePath); | 228 process_reader, self_image_info, proctype_image_info, imageFilePath); |
228 } | 229 } |
229 } | 230 } |
230 | 231 |
231 #if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_7 | 232 #if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_7 |
232 if (proctype_image_infos.version >= 8) { | 233 if (proctype_image_infos.version >= 8) { |
(...skipping 21 matching lines...) Expand all Loading... |
254 sizeof(self_uuid_info->imageUUID))) | 255 sizeof(self_uuid_info->imageUUID))) |
255 << "index " << index; | 256 << "index " << index; |
256 } | 257 } |
257 } | 258 } |
258 #endif | 259 #endif |
259 } | 260 } |
260 | 261 |
261 } // namespace | 262 } // namespace |
262 } // namespace test | 263 } // namespace test |
263 } // namespace crashpad | 264 } // namespace crashpad |
OLD | NEW |