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

Side by Side Diff: minidump/minidump_extensions.h

Issue 978463003: minidump: Reorganize MinidumpModuleCrashpadInfo to improve linking between structures (Closed) Base URL: https://chromium.googlesource.com/crashpad/crashpad@master
Patch Set: Minor update Created 5 years, 9 months 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
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 304 matching lines...) Expand 10 before | Expand all | Expand 10 after
315 315
316 //! \brief A list of ::RVA pointers. 316 //! \brief A list of ::RVA pointers.
317 struct ALIGNAS(4) PACKED MinidumpRVAList { 317 struct ALIGNAS(4) PACKED MinidumpRVAList {
318 //! \brief The number of children present in the #children array. 318 //! \brief The number of children present in the #children array.
319 uint32_t count; 319 uint32_t count;
320 320
321 //! \brief Pointers to other structures in the minidump file. 321 //! \brief Pointers to other structures in the minidump file.
322 RVA children[0]; 322 RVA children[0];
323 }; 323 };
324 324
325 //! \brief A list of MINIDUMP_LOCATION_DESCRIPTOR objects.
326 struct ALIGNAS(4) PACKED MinidumpLocationDescriptorList {
327 //! \brief The number of children present in the #children array.
328 uint32_t count;
329
330 //! \brief Pointers to other structures in the minidump file.
331 MINIDUMP_LOCATION_DESCRIPTOR children[0];
332 };
333
334 //! \brief A key-value pair. 325 //! \brief A key-value pair.
335 struct ALIGNAS(4) PACKED MinidumpSimpleStringDictionaryEntry { 326 struct ALIGNAS(4) PACKED MinidumpSimpleStringDictionaryEntry {
336 //! \brief ::RVA of a MinidumpUTF8String containing the key of a key-value 327 //! \brief ::RVA of a MinidumpUTF8String containing the key of a key-value
337 //! pair. 328 //! pair.
338 RVA key; 329 RVA key;
339 330
340 //! \brief ::RVA of a MinidumpUTF8String containing the value of a key-value 331 //! \brief ::RVA of a MinidumpUTF8String containing the value of a key-value
341 //! pair. 332 //! pair.
342 RVA value; 333 RVA value;
343 }; 334 };
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
376 //! 367 //!
377 //! Readers can use this field to determine which other fields in the 368 //! Readers can use this field to determine which other fields in the
378 //! structure are valid. Upon encountering a value greater than #kVersion, a 369 //! structure are valid. Upon encountering a value greater than #kVersion, a
379 //! reader should assume that the structure’s layout is compatible with the 370 //! reader should assume that the structure’s layout is compatible with the
380 //! structure defined as having value #kVersion. 371 //! structure defined as having value #kVersion.
381 //! 372 //!
382 //! Writers may produce values less than #kVersion in this field if there is 373 //! Writers may produce values less than #kVersion in this field if there is
383 //! no need for any fields present in later versions. 374 //! no need for any fields present in later versions.
384 uint32_t version; 375 uint32_t version;
385 376
386 //! \brief A link to a MINIDUMP_MODULE structure in the module list stream.
387 //!
388 //! This field is an index into MINIDUMP_MODULE_LIST::Modules. This field’s
389 //! value must be in the range of MINIDUMP_MODULE_LIST::NumberOfEntries.
390 //!
391 //! This field is present when #version is at least `1`.
392 uint32_t minidump_module_list_index;
393
394 //! \brief A MinidumpRVAList pointing to MinidumpUTF8String objects. The 377 //! \brief A MinidumpRVAList pointing to MinidumpUTF8String objects. The
395 //! module controls the data that appears here. 378 //! module controls the data that appears here.
396 //! 379 //!
397 //! These strings correspond to ModuleSnapshot::AnnotationsVector() and do not 380 //! These strings correspond to ModuleSnapshot::AnnotationsVector() and do not
398 //! duplicate anything in #simple_annotations. 381 //! duplicate anything in #simple_annotations.
399 //! 382 //!
400 //! This field is present when #version is at least `1`. 383 //! This field is present when #version is at least `1`.
401 MINIDUMP_LOCATION_DESCRIPTOR list_annotations; 384 MINIDUMP_LOCATION_DESCRIPTOR list_annotations;
402 385
403 //! \brief A MinidumpSimpleStringDictionary pointing to strings interpreted as 386 //! \brief A MinidumpSimpleStringDictionary pointing to strings interpreted as
404 //! key-value pairs. The module controls the data that appears here. 387 //! key-value pairs. The module controls the data that appears here.
405 //! 388 //!
406 //! These key-value pairs correspond to 389 //! These key-value pairs correspond to
407 //! ModuleSnapshot::AnnotationsSimpleMap() and do not duplicate anything in 390 //! ModuleSnapshot::AnnotationsSimpleMap() and do not duplicate anything in
408 //! #list_annotations. 391 //! #list_annotations.
409 //! 392 //!
410 //! This field is present when #version is at least `1`. 393 //! This field is present when #version is at least `1`.
411 MINIDUMP_LOCATION_DESCRIPTOR simple_annotations; 394 MINIDUMP_LOCATION_DESCRIPTOR simple_annotations;
412 }; 395 };
413 396
397 //! \brief A link between a MINIDUMP_MODULE structure and additional
398 //! Crashpad-specific information about a module carried within a minidump
399 //! file.
400 struct ALIGNAS(4) PACKED MinidumpModuleCrashpadInfoLink {
401 //! \brief A link to a MINIDUMP_MODULE structure in the module list stream.
402 //!
403 //! This field is an index into MINIDUMP_MODULE_LIST::Modules. This field’s
404 //! value must be in the range of MINIDUMP_MODULE_LIST::NumberOfEntries.
405 uint32_t minidump_module_list_index;
406
407 //! \brief A link to a MinidumpModuleCrashpadInfo structure.
408 //!
409 //! MinidumpModuleCrashpadInfo structures are accessed indirectly through
410 //! MINIDUMP_LOCATION_DESCRIPTOR pointers to allow for future growth of the
411 //! MinidumpModuleCrashpadInfo structure.
412 MINIDUMP_LOCATION_DESCRIPTOR location;
413 };
414
414 //! \brief Additional Crashpad-specific information about modules carried within 415 //! \brief Additional Crashpad-specific information about modules carried within
415 //! a minidump file. 416 //! a minidump file.
416 //! 417 //!
417 //! This structure augments the information provided by 418 //! This structure augments the information provided by
418 //! MINIDUMP_MODULE_LIST. The minidump file must contain a module list stream 419 //! MINIDUMP_MODULE_LIST. The minidump file must contain a module list stream
419 //! (::kMinidumpStreamTypeModuleList) in order for this structure to appear. 420 //! (::kMinidumpStreamTypeModuleList) in order for this structure to appear.
420 //! 421 //!
421 //! MinidumpModuleCrashpadInfoList::count may be less than the value of 422 //! MinidumpModuleCrashpadInfoList::count may be less than the value of
422 //! MINIDUMP_MODULE_LIST::NumberOfModules because not every MINIDUMP_MODULE 423 //! MINIDUMP_MODULE_LIST::NumberOfModules because not every MINIDUMP_MODULE
423 //! structure carried within the minidump file will necessarily have 424 //! structure carried within the minidump file will necessarily have
424 //! Crashpad-specific information provided by a MinidumpModuleCrashpadInfo 425 //! Crashpad-specific information provided by a MinidumpModuleCrashpadInfo
425 //! structure. 426 //! structure.
426 //! 427 struct ALIGNAS(4) PACKED MinidumpModuleCrashpadInfoList {
427 //! MinidumpModuleCrashpadInfoList::children references 428 //! \brief The number of children present in the #modules array.
428 //! MinidumpModuleCrashpadInfo children indirectly through 429 uint32_t count;
429 //! MINIDUMP_LOCATION_DESCRIPTOR pointers to allow for future growth of the 430
430 //! MinidumpModuleCrashpadInfo structure. 431 //! \brief Crashpad-specific information about modules, along with links to
431 using MinidumpModuleCrashpadInfoList = MinidumpLocationDescriptorList; 432 //! MINIDUMP_MODULE structures that contain module information
433 //! traditionally carried within minidump files.
434 MinidumpModuleCrashpadInfoLink modules[0];
435 };
432 436
433 //! \brief Additional Crashpad-specific information carried within a minidump 437 //! \brief Additional Crashpad-specific information carried within a minidump
434 //! file. 438 //! file.
435 //! 439 //!
436 //! This structure is versioned. When changing this structure, leave the 440 //! This structure is versioned. When changing this structure, leave the
437 //! existing structure intact so that earlier parsers will be able to understand 441 //! existing structure intact so that earlier parsers will be able to understand
438 //! the fields they are aware of, and make additions at the end of the 442 //! the fields they are aware of, and make additions at the end of the
439 //! structure. Revise #kVersion and document each field’s validity based on 443 //! structure. Revise #kVersion and document each field’s validity based on
440 //! #version, so that newer parsers will be able to determine whether the added 444 //! #version, so that newer parsers will be able to determine whether the added
441 //! fields are valid or not. 445 //! fields are valid or not.
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
474 #if defined(COMPILER_MSVC) 478 #if defined(COMPILER_MSVC)
475 #pragma pack(pop) 479 #pragma pack(pop)
476 #endif // COMPILER_MSVC 480 #endif // COMPILER_MSVC
477 #undef PACKED 481 #undef PACKED
478 482
479 MSVC_POP_WARNING(); // C4200 483 MSVC_POP_WARNING(); // C4200
480 484
481 } // namespace crashpad 485 } // namespace crashpad
482 486
483 #endif // CRASHPAD_MINIDUMP_MINIDUMP_EXTENSIONS_H_ 487 #endif // CRASHPAD_MINIDUMP_MINIDUMP_EXTENSIONS_H_
OLDNEW
« no previous file with comments | « minidump/minidump_crashpad_info_writer_test.cc ('k') | minidump/minidump_location_descriptor_list_writer.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698