| 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, |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 52 ASSERT_EQ(kMinidumpStreamTypeModuleList, directory[0].StreamType); | 52 ASSERT_EQ(kMinidumpStreamTypeModuleList, directory[0].StreamType); |
| 53 EXPECT_EQ(kModuleListStreamOffset, directory[0].Location.Rva); | 53 EXPECT_EQ(kModuleListStreamOffset, directory[0].Location.Rva); |
| 54 | 54 |
| 55 *module_list = MinidumpWritableAtLocationDescriptor<MINIDUMP_MODULE_LIST>( | 55 *module_list = MinidumpWritableAtLocationDescriptor<MINIDUMP_MODULE_LIST>( |
| 56 file_contents, directory[0].Location); | 56 file_contents, directory[0].Location); |
| 57 ASSERT_TRUE(module_list); | 57 ASSERT_TRUE(module_list); |
| 58 } | 58 } |
| 59 | 59 |
| 60 TEST(MinidumpModuleWriter, EmptyModuleList) { | 60 TEST(MinidumpModuleWriter, EmptyModuleList) { |
| 61 MinidumpFileWriter minidump_file_writer; | 61 MinidumpFileWriter minidump_file_writer; |
| 62 MinidumpModuleListWriter module_list_writer; | 62 auto module_list_writer = make_scoped_ptr(new MinidumpModuleListWriter()); |
| 63 | 63 |
| 64 minidump_file_writer.AddStream(&module_list_writer); | 64 minidump_file_writer.AddStream(module_list_writer.Pass()); |
| 65 | 65 |
| 66 StringFileWriter file_writer; | 66 StringFileWriter file_writer; |
| 67 ASSERT_TRUE(minidump_file_writer.WriteEverything(&file_writer)); | 67 ASSERT_TRUE(minidump_file_writer.WriteEverything(&file_writer)); |
| 68 | 68 |
| 69 ASSERT_EQ(sizeof(MINIDUMP_HEADER) + sizeof(MINIDUMP_DIRECTORY) + | 69 ASSERT_EQ(sizeof(MINIDUMP_HEADER) + sizeof(MINIDUMP_DIRECTORY) + |
| 70 sizeof(MINIDUMP_MODULE_LIST), | 70 sizeof(MINIDUMP_MODULE_LIST), |
| 71 file_writer.string().size()); | 71 file_writer.string().size()); |
| 72 | 72 |
| 73 const MINIDUMP_MODULE_LIST* module_list; | 73 const MINIDUMP_MODULE_LIST* module_list; |
| 74 ASSERT_NO_FATAL_FAILURE( | 74 ASSERT_NO_FATAL_FAILURE( |
| (...skipping 183 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 258 | 258 |
| 259 ASSERT_NO_FATAL_FAILURE(ExpectMiscellaneousDebugRecord(&observed->MiscRecord, | 259 ASSERT_NO_FATAL_FAILURE(ExpectMiscellaneousDebugRecord(&observed->MiscRecord, |
| 260 file_contents, | 260 file_contents, |
| 261 expected_debug_name, | 261 expected_debug_name, |
| 262 expected_debug_type, | 262 expected_debug_type, |
| 263 expected_debug_utf16)); | 263 expected_debug_utf16)); |
| 264 } | 264 } |
| 265 | 265 |
| 266 TEST(MinidumpModuleWriter, EmptyModule) { | 266 TEST(MinidumpModuleWriter, EmptyModule) { |
| 267 MinidumpFileWriter minidump_file_writer; | 267 MinidumpFileWriter minidump_file_writer; |
| 268 MinidumpModuleListWriter module_list_writer; | 268 auto module_list_writer = make_scoped_ptr(new MinidumpModuleListWriter()); |
| 269 | 269 |
| 270 const char kModuleName[] = "test_executable"; | 270 const char kModuleName[] = "test_executable"; |
| 271 | 271 |
| 272 MinidumpModuleWriter module_writer; | 272 auto module_writer = make_scoped_ptr(new MinidumpModuleWriter()); |
| 273 module_writer.SetName(kModuleName); | 273 module_writer->SetName(kModuleName); |
| 274 | 274 |
| 275 module_list_writer.AddModule(&module_writer); | 275 module_list_writer->AddModule(module_writer.Pass()); |
| 276 minidump_file_writer.AddStream(&module_list_writer); | 276 minidump_file_writer.AddStream(module_list_writer.Pass()); |
| 277 | 277 |
| 278 StringFileWriter file_writer; | 278 StringFileWriter file_writer; |
| 279 ASSERT_TRUE(minidump_file_writer.WriteEverything(&file_writer)); | 279 ASSERT_TRUE(minidump_file_writer.WriteEverything(&file_writer)); |
| 280 | 280 |
| 281 ASSERT_GT(file_writer.string().size(), | 281 ASSERT_GT(file_writer.string().size(), |
| 282 sizeof(MINIDUMP_HEADER) + sizeof(MINIDUMP_DIRECTORY) + | 282 sizeof(MINIDUMP_HEADER) + sizeof(MINIDUMP_DIRECTORY) + |
| 283 sizeof(MINIDUMP_MODULE_LIST) + 1 * sizeof(MINIDUMP_MODULE)); | 283 sizeof(MINIDUMP_MODULE_LIST) + 1 * sizeof(MINIDUMP_MODULE)); |
| 284 | 284 |
| 285 const MINIDUMP_MODULE_LIST* module_list; | 285 const MINIDUMP_MODULE_LIST* module_list; |
| 286 ASSERT_NO_FATAL_FAILURE( | 286 ASSERT_NO_FATAL_FAILURE( |
| (...skipping 10 matching lines...) Expand all Loading... |
| 297 nullptr, | 297 nullptr, |
| 298 0, | 298 0, |
| 299 0, | 299 0, |
| 300 nullptr, | 300 nullptr, |
| 301 0, | 301 0, |
| 302 false)); | 302 false)); |
| 303 } | 303 } |
| 304 | 304 |
| 305 TEST(MinidumpModuleWriter, OneModule) { | 305 TEST(MinidumpModuleWriter, OneModule) { |
| 306 MinidumpFileWriter minidump_file_writer; | 306 MinidumpFileWriter minidump_file_writer; |
| 307 MinidumpModuleListWriter module_list_writer; | 307 auto module_list_writer = make_scoped_ptr(new MinidumpModuleListWriter()); |
| 308 | 308 |
| 309 const char kModuleName[] = "statically_linked"; | 309 const char kModuleName[] = "statically_linked"; |
| 310 const uint64_t kModuleBase = 0x10da69000; | 310 const uint64_t kModuleBase = 0x10da69000; |
| 311 const uint32_t kModuleSize = 0x1000; | 311 const uint32_t kModuleSize = 0x1000; |
| 312 const uint32_t kChecksum = 0x76543210; | 312 const uint32_t kChecksum = 0x76543210; |
| 313 const time_t kTimestamp = 0x386d4380; | 313 const time_t kTimestamp = 0x386d4380; |
| 314 const uint32_t kFileVersionMS = 0x00010002; | 314 const uint32_t kFileVersionMS = 0x00010002; |
| 315 const uint32_t kFileVersionLS = 0x00030004; | 315 const uint32_t kFileVersionLS = 0x00030004; |
| 316 const uint32_t kProductVersionMS = 0x00050006; | 316 const uint32_t kProductVersionMS = 0x00050006; |
| 317 const uint32_t kProductVersionLS = 0x00070008; | 317 const uint32_t kProductVersionLS = 0x00070008; |
| 318 const uint32_t kFileFlagsMask = VS_FF_DEBUG | VS_FF_PRERELEASE | | 318 const uint32_t kFileFlagsMask = VS_FF_DEBUG | VS_FF_PRERELEASE | |
| 319 VS_FF_PATCHED | VS_FF_PRIVATEBUILD | | 319 VS_FF_PATCHED | VS_FF_PRIVATEBUILD | |
| 320 VS_FF_INFOINFERRED | VS_FF_SPECIALBUILD; | 320 VS_FF_INFOINFERRED | VS_FF_SPECIALBUILD; |
| 321 const uint32_t kFileFlags = VS_FF_PRIVATEBUILD | VS_FF_SPECIALBUILD; | 321 const uint32_t kFileFlags = VS_FF_PRIVATEBUILD | VS_FF_SPECIALBUILD; |
| 322 const uint32_t kFileOS = VOS_DOS; | 322 const uint32_t kFileOS = VOS_DOS; |
| 323 const uint32_t kFileType = VFT_DRV; | 323 const uint32_t kFileType = VFT_DRV; |
| 324 const uint32_t kFileSubtype = VFT2_DRV_KEYBOARD; | 324 const uint32_t kFileSubtype = VFT2_DRV_KEYBOARD; |
| 325 const char kPDBName[] = "statical.pdb"; | 325 const char kPDBName[] = "statical.pdb"; |
| 326 const uint8_t kPDBUUIDBytes[16] = | 326 const uint8_t kPDBUUIDBytes[16] = |
| 327 {0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10, | 327 {0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10, |
| 328 0x08, 0x19, 0x2a, 0x3b, 0x4c, 0x5d, 0x6e, 0x7f}; | 328 0x08, 0x19, 0x2a, 0x3b, 0x4c, 0x5d, 0x6e, 0x7f}; |
| 329 UUID pdb_uuid; | 329 UUID pdb_uuid; |
| 330 pdb_uuid.InitializeFromBytes(kPDBUUIDBytes); | 330 pdb_uuid.InitializeFromBytes(kPDBUUIDBytes); |
| 331 const uint32_t kPDBAge = 1; | 331 const uint32_t kPDBAge = 1; |
| 332 const uint32_t kDebugType = IMAGE_DEBUG_MISC_EXENAME; | 332 const uint32_t kDebugType = IMAGE_DEBUG_MISC_EXENAME; |
| 333 const char kDebugName[] = "statical.dbg"; | 333 const char kDebugName[] = "statical.dbg"; |
| 334 const bool kDebugUTF16 = false; | 334 const bool kDebugUTF16 = false; |
| 335 | 335 |
| 336 MinidumpModuleWriter module_writer; | 336 auto module_writer = make_scoped_ptr(new MinidumpModuleWriter()); |
| 337 module_writer.SetName(kModuleName); | 337 module_writer->SetName(kModuleName); |
| 338 module_writer.SetImageBaseAddress(kModuleBase); | 338 module_writer->SetImageBaseAddress(kModuleBase); |
| 339 module_writer.SetImageSize(kModuleSize); | 339 module_writer->SetImageSize(kModuleSize); |
| 340 module_writer.SetChecksum(kChecksum); | 340 module_writer->SetChecksum(kChecksum); |
| 341 module_writer.SetTimestamp(kTimestamp); | 341 module_writer->SetTimestamp(kTimestamp); |
| 342 module_writer.SetFileVersion(kFileVersionMS >> 16, | 342 module_writer->SetFileVersion(kFileVersionMS >> 16, |
| 343 kFileVersionMS & 0xffff, | 343 kFileVersionMS & 0xffff, |
| 344 kFileVersionLS >> 16, | 344 kFileVersionLS >> 16, |
| 345 kFileVersionLS & 0xffff); | 345 kFileVersionLS & 0xffff); |
| 346 module_writer.SetProductVersion(kProductVersionMS >> 16, | 346 module_writer->SetProductVersion(kProductVersionMS >> 16, |
| 347 kProductVersionMS & 0xffff, | 347 kProductVersionMS & 0xffff, |
| 348 kProductVersionLS >> 16, | 348 kProductVersionLS >> 16, |
| 349 kProductVersionLS & 0xffff); | 349 kProductVersionLS & 0xffff); |
| 350 module_writer.SetFileFlagsAndMask(kFileFlags, kFileFlagsMask); | 350 module_writer->SetFileFlagsAndMask(kFileFlags, kFileFlagsMask); |
| 351 module_writer.SetFileOS(kFileOS); | 351 module_writer->SetFileOS(kFileOS); |
| 352 module_writer.SetFileTypeAndSubtype(kFileType, kFileSubtype); | 352 module_writer->SetFileTypeAndSubtype(kFileType, kFileSubtype); |
| 353 | 353 |
| 354 MinidumpModuleCodeViewRecordPDB70Writer codeview_pdb70_writer; | 354 auto codeview_pdb70_writer = |
| 355 codeview_pdb70_writer.SetPDBName(kPDBName); | 355 make_scoped_ptr(new MinidumpModuleCodeViewRecordPDB70Writer()); |
| 356 codeview_pdb70_writer.SetUUIDAndAge(pdb_uuid, kPDBAge); | 356 codeview_pdb70_writer->SetPDBName(kPDBName); |
| 357 module_writer.SetCodeViewRecord(&codeview_pdb70_writer); | 357 codeview_pdb70_writer->SetUUIDAndAge(pdb_uuid, kPDBAge); |
| 358 module_writer->SetCodeViewRecord(codeview_pdb70_writer.Pass()); |
| 358 | 359 |
| 359 MinidumpModuleMiscDebugRecordWriter misc_debug_writer; | 360 auto misc_debug_writer = |
| 360 misc_debug_writer.SetDataType(kDebugType); | 361 make_scoped_ptr(new MinidumpModuleMiscDebugRecordWriter()); |
| 361 misc_debug_writer.SetData(kDebugName, kDebugUTF16); | 362 misc_debug_writer->SetDataType(kDebugType); |
| 362 module_writer.SetMiscDebugRecord(&misc_debug_writer); | 363 misc_debug_writer->SetData(kDebugName, kDebugUTF16); |
| 364 module_writer->SetMiscDebugRecord(misc_debug_writer.Pass()); |
| 363 | 365 |
| 364 module_list_writer.AddModule(&module_writer); | 366 module_list_writer->AddModule(module_writer.Pass()); |
| 365 minidump_file_writer.AddStream(&module_list_writer); | 367 minidump_file_writer.AddStream(module_list_writer.Pass()); |
| 366 | 368 |
| 367 StringFileWriter file_writer; | 369 StringFileWriter file_writer; |
| 368 ASSERT_TRUE(minidump_file_writer.WriteEverything(&file_writer)); | 370 ASSERT_TRUE(minidump_file_writer.WriteEverything(&file_writer)); |
| 369 | 371 |
| 370 ASSERT_GT(file_writer.string().size(), | 372 ASSERT_GT(file_writer.string().size(), |
| 371 sizeof(MINIDUMP_HEADER) + sizeof(MINIDUMP_DIRECTORY) + | 373 sizeof(MINIDUMP_HEADER) + sizeof(MINIDUMP_DIRECTORY) + |
| 372 sizeof(MINIDUMP_MODULE_LIST) + 1 * sizeof(MINIDUMP_MODULE)); | 374 sizeof(MINIDUMP_MODULE_LIST) + 1 * sizeof(MINIDUMP_MODULE)); |
| 373 | 375 |
| 374 const MINIDUMP_MODULE_LIST* module_list; | 376 const MINIDUMP_MODULE_LIST* module_list; |
| 375 ASSERT_NO_FATAL_FAILURE( | 377 ASSERT_NO_FATAL_FAILURE( |
| (...skipping 28 matching lines...) Expand all Loading... |
| 404 kDebugType, | 406 kDebugType, |
| 405 kDebugUTF16)); | 407 kDebugUTF16)); |
| 406 } | 408 } |
| 407 | 409 |
| 408 TEST(MinidumpModuleWriter, OneModule_CodeViewUsesPDB20_MiscUsesUTF16) { | 410 TEST(MinidumpModuleWriter, OneModule_CodeViewUsesPDB20_MiscUsesUTF16) { |
| 409 // MinidumpModuleWriter.OneModule tested with a PDB 7.0 link as the CodeView | 411 // MinidumpModuleWriter.OneModule tested with a PDB 7.0 link as the CodeView |
| 410 // record and an IMAGE_DEBUG_MISC record in UTF-8. This test exercises the | 412 // record and an IMAGE_DEBUG_MISC record in UTF-8. This test exercises the |
| 411 // alternatives, a PDB 2.0 link as the CodeView record and an IMAGE_DEBUG_MISC | 413 // alternatives, a PDB 2.0 link as the CodeView record and an IMAGE_DEBUG_MISC |
| 412 // record with UTF-16 data. | 414 // record with UTF-16 data. |
| 413 MinidumpFileWriter minidump_file_writer; | 415 MinidumpFileWriter minidump_file_writer; |
| 414 MinidumpModuleListWriter module_list_writer; | 416 auto module_list_writer = make_scoped_ptr(new MinidumpModuleListWriter()); |
| 415 | 417 |
| 416 const char kModuleName[] = "dinosaur"; | 418 const char kModuleName[] = "dinosaur"; |
| 417 const char kPDBName[] = "d1n05.pdb"; | 419 const char kPDBName[] = "d1n05.pdb"; |
| 418 const time_t kPDBTimestamp = 0x386d4380; | 420 const time_t kPDBTimestamp = 0x386d4380; |
| 419 const uint32_t kPDBAge = 1; | 421 const uint32_t kPDBAge = 1; |
| 420 const uint32_t kDebugType = IMAGE_DEBUG_MISC_EXENAME; | 422 const uint32_t kDebugType = IMAGE_DEBUG_MISC_EXENAME; |
| 421 const char kDebugName[] = "d1n05.dbg"; | 423 const char kDebugName[] = "d1n05.dbg"; |
| 422 const bool kDebugUTF16 = true; | 424 const bool kDebugUTF16 = true; |
| 423 | 425 |
| 424 MinidumpModuleWriter module_writer; | 426 auto module_writer = make_scoped_ptr(new MinidumpModuleWriter()); |
| 425 module_writer.SetName(kModuleName); | 427 module_writer->SetName(kModuleName); |
| 426 | 428 |
| 427 MinidumpModuleCodeViewRecordPDB20Writer codeview_pdb20_writer; | 429 auto codeview_pdb20_writer = |
| 428 codeview_pdb20_writer.SetPDBName(kPDBName); | 430 make_scoped_ptr(new MinidumpModuleCodeViewRecordPDB20Writer()); |
| 429 codeview_pdb20_writer.SetTimestampAndAge(kPDBTimestamp, kPDBAge); | 431 codeview_pdb20_writer->SetPDBName(kPDBName); |
| 430 module_writer.SetCodeViewRecord(&codeview_pdb20_writer); | 432 codeview_pdb20_writer->SetTimestampAndAge(kPDBTimestamp, kPDBAge); |
| 433 module_writer->SetCodeViewRecord(codeview_pdb20_writer.Pass()); |
| 431 | 434 |
| 432 MinidumpModuleMiscDebugRecordWriter misc_debug_writer; | 435 auto misc_debug_writer = |
| 433 misc_debug_writer.SetDataType(kDebugType); | 436 make_scoped_ptr(new MinidumpModuleMiscDebugRecordWriter()); |
| 434 misc_debug_writer.SetData(kDebugName, kDebugUTF16); | 437 misc_debug_writer->SetDataType(kDebugType); |
| 435 module_writer.SetMiscDebugRecord(&misc_debug_writer); | 438 misc_debug_writer->SetData(kDebugName, kDebugUTF16); |
| 439 module_writer->SetMiscDebugRecord(misc_debug_writer.Pass()); |
| 436 | 440 |
| 437 module_list_writer.AddModule(&module_writer); | 441 module_list_writer->AddModule(module_writer.Pass()); |
| 438 minidump_file_writer.AddStream(&module_list_writer); | 442 minidump_file_writer.AddStream(module_list_writer.Pass()); |
| 439 | 443 |
| 440 StringFileWriter file_writer; | 444 StringFileWriter file_writer; |
| 441 ASSERT_TRUE(minidump_file_writer.WriteEverything(&file_writer)); | 445 ASSERT_TRUE(minidump_file_writer.WriteEverything(&file_writer)); |
| 442 | 446 |
| 443 ASSERT_GT(file_writer.string().size(), | 447 ASSERT_GT(file_writer.string().size(), |
| 444 sizeof(MINIDUMP_HEADER) + sizeof(MINIDUMP_DIRECTORY) + | 448 sizeof(MINIDUMP_HEADER) + sizeof(MINIDUMP_DIRECTORY) + |
| 445 sizeof(MINIDUMP_MODULE_LIST) + 1 * sizeof(MINIDUMP_MODULE)); | 449 sizeof(MINIDUMP_MODULE_LIST) + 1 * sizeof(MINIDUMP_MODULE)); |
| 446 | 450 |
| 447 const MINIDUMP_MODULE_LIST* module_list; | 451 const MINIDUMP_MODULE_LIST* module_list; |
| 448 ASSERT_NO_FATAL_FAILURE( | 452 ASSERT_NO_FATAL_FAILURE( |
| (...skipping 14 matching lines...) Expand all Loading... |
| 463 kDebugName, | 467 kDebugName, |
| 464 kDebugType, | 468 kDebugType, |
| 465 kDebugUTF16)); | 469 kDebugUTF16)); |
| 466 } | 470 } |
| 467 | 471 |
| 468 TEST(MinidumpModuleWriter, ThreeModules) { | 472 TEST(MinidumpModuleWriter, ThreeModules) { |
| 469 // As good exercise, this test uses three modules, one with a PDB 7.0 link as | 473 // As good exercise, this test uses three modules, one with a PDB 7.0 link as |
| 470 // its CodeView record, one with no CodeView record, and one with a PDB 2.0 | 474 // its CodeView record, one with no CodeView record, and one with a PDB 2.0 |
| 471 // link as its CodeView record. | 475 // link as its CodeView record. |
| 472 MinidumpFileWriter minidump_file_writer; | 476 MinidumpFileWriter minidump_file_writer; |
| 473 MinidumpModuleListWriter module_list_writer; | 477 auto module_list_writer = make_scoped_ptr(new MinidumpModuleListWriter()); |
| 474 | 478 |
| 475 const char kModuleName0[] = "main"; | 479 const char kModuleName0[] = "main"; |
| 476 const uint64_t kModuleBase0 = 0x100101000; | 480 const uint64_t kModuleBase0 = 0x100101000; |
| 477 const uint32_t kModuleSize0 = 0xf000; | 481 const uint32_t kModuleSize0 = 0xf000; |
| 478 const char kPDBName0[] = "main"; | 482 const char kPDBName0[] = "main"; |
| 479 const uint8_t kPDBUUIDBytes0[16] = | 483 const uint8_t kPDBUUIDBytes0[16] = |
| 480 {0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff, 0x00, 0x11, | 484 {0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff, 0x00, 0x11, |
| 481 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99}; | 485 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99}; |
| 482 UUID pdb_uuid_0; | 486 UUID pdb_uuid_0; |
| 483 pdb_uuid_0.InitializeFromBytes(kPDBUUIDBytes0); | 487 pdb_uuid_0.InitializeFromBytes(kPDBUUIDBytes0); |
| 484 const uint32_t kPDBAge0 = 0; | 488 const uint32_t kPDBAge0 = 0; |
| 485 | 489 |
| 486 const char kModuleName1[] = "ld.so"; | 490 const char kModuleName1[] = "ld.so"; |
| 487 const uint64_t kModuleBase1 = 0x200202000; | 491 const uint64_t kModuleBase1 = 0x200202000; |
| 488 const uint32_t kModuleSize1 = 0x1e000; | 492 const uint32_t kModuleSize1 = 0x1e000; |
| 489 | 493 |
| 490 const char kModuleName2[] = "libc.so"; | 494 const char kModuleName2[] = "libc.so"; |
| 491 const uint64_t kModuleBase2 = 0x300303000; | 495 const uint64_t kModuleBase2 = 0x300303000; |
| 492 const uint32_t kModuleSize2 = 0x2d000; | 496 const uint32_t kModuleSize2 = 0x2d000; |
| 493 const char kPDBName2[] = "libc.so"; | 497 const char kPDBName2[] = "libc.so"; |
| 494 const time_t kPDBTimestamp2 = 0x386d4380; | 498 const time_t kPDBTimestamp2 = 0x386d4380; |
| 495 const uint32_t kPDBAge2 = 2; | 499 const uint32_t kPDBAge2 = 2; |
| 496 | 500 |
| 497 MinidumpModuleWriter module_writer_0; | 501 auto module_writer_0 = make_scoped_ptr(new MinidumpModuleWriter()); |
| 498 module_writer_0.SetName(kModuleName0); | 502 module_writer_0->SetName(kModuleName0); |
| 499 module_writer_0.SetImageBaseAddress(kModuleBase0); | 503 module_writer_0->SetImageBaseAddress(kModuleBase0); |
| 500 module_writer_0.SetImageSize(kModuleSize0); | 504 module_writer_0->SetImageSize(kModuleSize0); |
| 501 | 505 |
| 502 MinidumpModuleCodeViewRecordPDB70Writer codeview_pdb70_writer_0; | 506 auto codeview_pdb70_writer_0 = |
| 503 codeview_pdb70_writer_0.SetPDBName(kPDBName0); | 507 make_scoped_ptr(new MinidumpModuleCodeViewRecordPDB70Writer()); |
| 504 codeview_pdb70_writer_0.SetUUIDAndAge(pdb_uuid_0, kPDBAge0); | 508 codeview_pdb70_writer_0->SetPDBName(kPDBName0); |
| 505 module_writer_0.SetCodeViewRecord(&codeview_pdb70_writer_0); | 509 codeview_pdb70_writer_0->SetUUIDAndAge(pdb_uuid_0, kPDBAge0); |
| 510 module_writer_0->SetCodeViewRecord(codeview_pdb70_writer_0.Pass()); |
| 506 | 511 |
| 507 module_list_writer.AddModule(&module_writer_0); | 512 module_list_writer->AddModule(module_writer_0.Pass()); |
| 508 | 513 |
| 509 MinidumpModuleWriter module_writer_1; | 514 auto module_writer_1 = make_scoped_ptr(new MinidumpModuleWriter()); |
| 510 module_writer_1.SetName(kModuleName1); | 515 module_writer_1->SetName(kModuleName1); |
| 511 module_writer_1.SetImageBaseAddress(kModuleBase1); | 516 module_writer_1->SetImageBaseAddress(kModuleBase1); |
| 512 module_writer_1.SetImageSize(kModuleSize1); | 517 module_writer_1->SetImageSize(kModuleSize1); |
| 513 | 518 |
| 514 module_list_writer.AddModule(&module_writer_1); | 519 module_list_writer->AddModule(module_writer_1.Pass()); |
| 515 | 520 |
| 516 MinidumpModuleWriter module_writer_2; | 521 auto module_writer_2 = make_scoped_ptr(new MinidumpModuleWriter()); |
| 517 module_writer_2.SetName(kModuleName2); | 522 module_writer_2->SetName(kModuleName2); |
| 518 module_writer_2.SetImageBaseAddress(kModuleBase2); | 523 module_writer_2->SetImageBaseAddress(kModuleBase2); |
| 519 module_writer_2.SetImageSize(kModuleSize2); | 524 module_writer_2->SetImageSize(kModuleSize2); |
| 520 | 525 |
| 521 MinidumpModuleCodeViewRecordPDB20Writer codeview_pdb70_writer_2; | 526 auto codeview_pdb70_writer_2 = |
| 522 codeview_pdb70_writer_2.SetPDBName(kPDBName2); | 527 make_scoped_ptr(new MinidumpModuleCodeViewRecordPDB20Writer()); |
| 523 codeview_pdb70_writer_2.SetTimestampAndAge(kPDBTimestamp2, kPDBAge2); | 528 codeview_pdb70_writer_2->SetPDBName(kPDBName2); |
| 524 module_writer_2.SetCodeViewRecord(&codeview_pdb70_writer_2); | 529 codeview_pdb70_writer_2->SetTimestampAndAge(kPDBTimestamp2, kPDBAge2); |
| 530 module_writer_2->SetCodeViewRecord(codeview_pdb70_writer_2.Pass()); |
| 525 | 531 |
| 526 module_list_writer.AddModule(&module_writer_2); | 532 module_list_writer->AddModule(module_writer_2.Pass()); |
| 527 | 533 |
| 528 minidump_file_writer.AddStream(&module_list_writer); | 534 minidump_file_writer.AddStream(module_list_writer.Pass()); |
| 529 | 535 |
| 530 StringFileWriter file_writer; | 536 StringFileWriter file_writer; |
| 531 ASSERT_TRUE(minidump_file_writer.WriteEverything(&file_writer)); | 537 ASSERT_TRUE(minidump_file_writer.WriteEverything(&file_writer)); |
| 532 | 538 |
| 533 ASSERT_GT(file_writer.string().size(), | 539 ASSERT_GT(file_writer.string().size(), |
| 534 sizeof(MINIDUMP_HEADER) + sizeof(MINIDUMP_DIRECTORY) + | 540 sizeof(MINIDUMP_HEADER) + sizeof(MINIDUMP_DIRECTORY) + |
| 535 sizeof(MINIDUMP_MODULE_LIST) + 1 * sizeof(MINIDUMP_MODULE)); | 541 sizeof(MINIDUMP_MODULE_LIST) + 1 * sizeof(MINIDUMP_MODULE)); |
| 536 | 542 |
| 537 const MINIDUMP_MODULE_LIST* module_list; | 543 const MINIDUMP_MODULE_LIST* module_list; |
| 538 ASSERT_NO_FATAL_FAILURE( | 544 ASSERT_NO_FATAL_FAILURE( |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 595 kPDBTimestamp2, | 601 kPDBTimestamp2, |
| 596 kPDBAge2, | 602 kPDBAge2, |
| 597 nullptr, | 603 nullptr, |
| 598 0, | 604 0, |
| 599 false)); | 605 false)); |
| 600 } | 606 } |
| 601 } | 607 } |
| 602 | 608 |
| 603 TEST(MinidumpSystemInfoWriterDeathTest, NoModuleName) { | 609 TEST(MinidumpSystemInfoWriterDeathTest, NoModuleName) { |
| 604 MinidumpFileWriter minidump_file_writer; | 610 MinidumpFileWriter minidump_file_writer; |
| 605 MinidumpModuleListWriter module_list_writer; | 611 auto module_list_writer = make_scoped_ptr(new MinidumpModuleListWriter()); |
| 606 MinidumpModuleWriter module_writer; | 612 auto module_writer = make_scoped_ptr(new MinidumpModuleWriter()); |
| 607 module_list_writer.AddModule(&module_writer); | 613 module_list_writer->AddModule(module_writer.Pass()); |
| 608 minidump_file_writer.AddStream(&module_list_writer); | 614 minidump_file_writer.AddStream(module_list_writer.Pass()); |
| 609 | 615 |
| 610 StringFileWriter file_writer; | 616 StringFileWriter file_writer; |
| 611 ASSERT_DEATH(minidump_file_writer.WriteEverything(&file_writer), "name_"); | 617 ASSERT_DEATH(minidump_file_writer.WriteEverything(&file_writer), "name_"); |
| 612 } | 618 } |
| 613 | 619 |
| 614 } // namespace | 620 } // namespace |
| 615 } // namespace test | 621 } // namespace test |
| 616 } // namespace crashpad | 622 } // namespace crashpad |
| OLD | NEW |