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 "minidump/minidump_memory_writer.h" | 15 #include "minidump/minidump_memory_writer.h" |
16 | 16 |
17 #include <dbghelp.h> | 17 #include <dbghelp.h> |
18 #include <stdint.h> | 18 #include <stdint.h> |
19 | 19 |
20 #include "base/basictypes.h" | 20 #include "base/basictypes.h" |
21 #include "gtest/gtest.h" | 21 #include "gtest/gtest.h" |
| 22 #include "minidump/minidump_extensions.h" |
22 #include "minidump/minidump_file_writer.h" | 23 #include "minidump/minidump_file_writer.h" |
23 #include "minidump/minidump_stream_writer.h" | 24 #include "minidump/minidump_stream_writer.h" |
24 #include "minidump/minidump_test_util.h" | 25 #include "minidump/minidump_test_util.h" |
25 #include "util/file/string_file_writer.h" | 26 #include "util/file/string_file_writer.h" |
26 | 27 |
27 namespace { | 28 namespace { |
28 | 29 |
29 using namespace crashpad; | 30 using namespace crashpad; |
30 using namespace crashpad::test; | 31 using namespace crashpad::test; |
31 | 32 |
(...skipping 209 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
241 | 242 |
242 const MINIDUMP_MEMORY_LIST* memory_list; | 243 const MINIDUMP_MEMORY_LIST* memory_list; |
243 GetMemoryListStream(file_writer.string(), &memory_list, 1); | 244 GetMemoryListStream(file_writer.string(), &memory_list, 1); |
244 if (Test::HasFatalFailure()) { | 245 if (Test::HasFatalFailure()) { |
245 return; | 246 return; |
246 } | 247 } |
247 | 248 |
248 EXPECT_EQ(2u, memory_list->NumberOfMemoryRanges); | 249 EXPECT_EQ(2u, memory_list->NumberOfMemoryRanges); |
249 | 250 |
250 MINIDUMP_MEMORY_DESCRIPTOR expected; | 251 MINIDUMP_MEMORY_DESCRIPTOR expected; |
251 expected.StartOfMemoryRange = kBaseAddress1; | |
252 expected.Memory.DataSize = kSize1; | |
253 expected.Memory.Rva = | |
254 sizeof(MINIDUMP_HEADER) + sizeof(MINIDUMP_DIRECTORY) + | |
255 sizeof(MINIDUMP_MEMORY_LIST) + | |
256 memory_list->NumberOfMemoryRanges * sizeof(MINIDUMP_MEMORY_DESCRIPTOR); | |
257 ExpectMemoryDescriptorAndContents(&expected, | |
258 &memory_list->MemoryRanges[0], | |
259 file_writer.string(), | |
260 kValue1, | |
261 false); | |
262 | 252 |
263 expected.StartOfMemoryRange = kBaseAddress2; | 253 { |
264 expected.Memory.DataSize = kSize2; | 254 SCOPED_TRACE("region 0"); |
265 expected.Memory.Rva = memory_list->MemoryRanges[0].Memory.Rva + | 255 |
266 memory_list->MemoryRanges[0].Memory.DataSize; | 256 expected.StartOfMemoryRange = kBaseAddress1; |
267 ExpectMemoryDescriptorAndContents(&expected, | 257 expected.Memory.DataSize = kSize1; |
268 &memory_list->MemoryRanges[1], | 258 expected.Memory.Rva = |
269 file_writer.string(), | 259 sizeof(MINIDUMP_HEADER) + sizeof(MINIDUMP_DIRECTORY) + |
270 kValue2, | 260 sizeof(MINIDUMP_MEMORY_LIST) + |
271 true); | 261 memory_list->NumberOfMemoryRanges * sizeof(MINIDUMP_MEMORY_DESCRIPTOR); |
| 262 ExpectMemoryDescriptorAndContents(&expected, |
| 263 &memory_list->MemoryRanges[0], |
| 264 file_writer.string(), |
| 265 kValue1, |
| 266 false); |
| 267 } |
| 268 |
| 269 { |
| 270 SCOPED_TRACE("region 1"); |
| 271 |
| 272 expected.StartOfMemoryRange = kBaseAddress2; |
| 273 expected.Memory.DataSize = kSize2; |
| 274 expected.Memory.Rva = memory_list->MemoryRanges[0].Memory.Rva + |
| 275 memory_list->MemoryRanges[0].Memory.DataSize; |
| 276 ExpectMemoryDescriptorAndContents(&expected, |
| 277 &memory_list->MemoryRanges[1], |
| 278 file_writer.string(), |
| 279 kValue2, |
| 280 true); |
| 281 } |
272 } | 282 } |
273 | 283 |
274 class TestMemoryStream final : public internal::MinidumpStreamWriter { | 284 class TestMemoryStream final : public internal::MinidumpStreamWriter { |
275 public: | 285 public: |
276 TestMemoryStream(uint64_t base_address, size_t size, uint8_t value) | 286 TestMemoryStream(uint64_t base_address, size_t size, uint8_t value) |
277 : MinidumpStreamWriter(), memory_(base_address, size, value) {} | 287 : MinidumpStreamWriter(), memory_(base_address, size, value) {} |
278 | 288 |
279 ~TestMemoryStream() {} | 289 ~TestMemoryStream() {} |
280 | 290 |
281 TestMemoryWriter* memory() { return &memory_; } | 291 TestMemoryWriter* memory() { return &memory_; } |
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
339 | 349 |
340 const MINIDUMP_MEMORY_LIST* memory_list; | 350 const MINIDUMP_MEMORY_LIST* memory_list; |
341 GetMemoryListStream(file_writer.string(), &memory_list, 2); | 351 GetMemoryListStream(file_writer.string(), &memory_list, 2); |
342 if (Test::HasFatalFailure()) { | 352 if (Test::HasFatalFailure()) { |
343 return; | 353 return; |
344 } | 354 } |
345 | 355 |
346 EXPECT_EQ(2u, memory_list->NumberOfMemoryRanges); | 356 EXPECT_EQ(2u, memory_list->NumberOfMemoryRanges); |
347 | 357 |
348 MINIDUMP_MEMORY_DESCRIPTOR expected; | 358 MINIDUMP_MEMORY_DESCRIPTOR expected; |
349 expected.StartOfMemoryRange = kBaseAddress1; | |
350 expected.Memory.DataSize = kSize1; | |
351 expected.Memory.Rva = | |
352 sizeof(MINIDUMP_HEADER) + 2 * sizeof(MINIDUMP_DIRECTORY) + | |
353 sizeof(MINIDUMP_MEMORY_LIST) + | |
354 memory_list->NumberOfMemoryRanges * sizeof(MINIDUMP_MEMORY_DESCRIPTOR); | |
355 ExpectMemoryDescriptorAndContents(&expected, | |
356 &memory_list->MemoryRanges[0], | |
357 file_writer.string(), | |
358 kValue1, | |
359 false); | |
360 | 359 |
361 expected.StartOfMemoryRange = kBaseAddress2; | 360 { |
362 expected.Memory.DataSize = kSize2; | 361 SCOPED_TRACE("region 0"); |
363 expected.Memory.Rva = memory_list->MemoryRanges[0].Memory.Rva + | 362 |
364 memory_list->MemoryRanges[0].Memory.DataSize; | 363 expected.StartOfMemoryRange = kBaseAddress1; |
365 ExpectMemoryDescriptorAndContents(&expected, | 364 expected.Memory.DataSize = kSize1; |
366 &memory_list->MemoryRanges[1], | 365 expected.Memory.Rva = |
367 file_writer.string(), | 366 sizeof(MINIDUMP_HEADER) + 2 * sizeof(MINIDUMP_DIRECTORY) + |
368 kValue2, | 367 sizeof(MINIDUMP_MEMORY_LIST) + |
369 true); | 368 memory_list->NumberOfMemoryRanges * sizeof(MINIDUMP_MEMORY_DESCRIPTOR); |
| 369 ExpectMemoryDescriptorAndContents(&expected, |
| 370 &memory_list->MemoryRanges[0], |
| 371 file_writer.string(), |
| 372 kValue1, |
| 373 false); |
| 374 } |
| 375 |
| 376 { |
| 377 SCOPED_TRACE("region 1"); |
| 378 |
| 379 expected.StartOfMemoryRange = kBaseAddress2; |
| 380 expected.Memory.DataSize = kSize2; |
| 381 expected.Memory.Rva = memory_list->MemoryRanges[0].Memory.Rva + |
| 382 memory_list->MemoryRanges[0].Memory.DataSize; |
| 383 ExpectMemoryDescriptorAndContents(&expected, |
| 384 &memory_list->MemoryRanges[1], |
| 385 file_writer.string(), |
| 386 kValue2, |
| 387 true); |
| 388 } |
370 } | 389 } |
371 | 390 |
372 } // namespace | 391 } // namespace |
OLD | NEW |