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 261 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
272 //! \brief The system’s operating system type, which distinguishes between | 272 //! \brief The system’s operating system type, which distinguishes between |
273 //! “desktop” or “workstation” systems and “server” systems. This may be a | 273 //! “desktop” or “workstation” systems and “server” systems. This may be a |
274 //! \ref VER_NT_x "VER_NT_*" value, or a member of | 274 //! \ref VER_NT_x "VER_NT_*" value, or a member of |
275 //! crashpad::MinidumpOSType. | 275 //! crashpad::MinidumpOSType. |
276 uint8_t ProductType; | 276 uint8_t ProductType; |
277 | 277 |
278 //! \brief The system’s operating system version number’s first (major) | 278 //! \brief The system’s operating system version number’s first (major) |
279 //! component. | 279 //! component. |
280 //! | 280 //! |
281 //! - For Windows 7 (NT 6.1) SP1, version 6.1.7601, this would be `6`. | 281 //! - For Windows 7 (NT 6.1) SP1, version 6.1.7601, this would be `6`. |
282 //! - For Mac OS X 10.9.2, this would be `10`. | 282 //! - For macOS 10.12.1, this would be `10`. |
283 uint32_t MajorVersion; | 283 uint32_t MajorVersion; |
284 | 284 |
285 //! \brief The system’s operating system version number’s second (minor) | 285 //! \brief The system’s operating system version number’s second (minor) |
286 //! component. | 286 //! component. |
287 //! | 287 //! |
288 //! - For Windows 7 (NT 6.1) SP1, version 6.1.7601, this would be `1`. | 288 //! - For Windows 7 (NT 6.1) SP1, version 6.1.7601, this would be `1`. |
289 //! - For Mac OS X 10.9.2, this would be `9`. | 289 //! - For macOS 10.12.1, this would be `12`. |
290 uint32_t MinorVersion; | 290 uint32_t MinorVersion; |
291 | 291 |
292 //! \brief The system’s operating system version number’s third (build or | 292 //! \brief The system’s operating system version number’s third (build or |
293 //! patch) component. | 293 //! patch) component. |
294 //! | 294 //! |
295 //! - For Windows 7 (NT 6.1) SP1, version 6.1.7601, this would be `7601`. | 295 //! - For Windows 7 (NT 6.1) SP1, version 6.1.7601, this would be `7601`. |
296 //! - For Mac OS X 10.9.2, this would be `2`. | 296 //! - For macOS 10.12.1, this would be `1`. |
297 uint32_t BuildNumber; | 297 uint32_t BuildNumber; |
298 | 298 |
299 //! \brief The system’s operating system family. This may be a \ref | 299 //! \brief The system’s operating system family. This may be a \ref |
300 //! VER_PLATFORM_x "VER_PLATFORM_*" value, or a member of | 300 //! VER_PLATFORM_x "VER_PLATFORM_*" value, or a member of |
301 //! crashpad::MinidumpOS. | 301 //! crashpad::MinidumpOS. |
302 uint32_t PlatformId; | 302 uint32_t PlatformId; |
303 | 303 |
304 //! \brief ::RVA of a MINIDUMP_STRING containing operating system-specific | 304 //! \brief ::RVA of a MINIDUMP_STRING containing operating system-specific |
305 //! version information. | 305 //! version information. |
306 //! | 306 //! |
307 //! This field further identifies an operating system version beyond its | 307 //! This field further identifies an operating system version beyond its |
308 //! version number fields. Historically, “CSD” stands for “corrective service | 308 //! version number fields. Historically, “CSD” stands for “corrective service |
309 //! diskette.” | 309 //! diskette.” |
310 //! | 310 //! |
311 //! - On Windows, this is the name of the installed operating system service | 311 //! - On Windows, this is the name of the installed operating system service |
312 //! pack, such as “Service Pack 1”. If no service pack is installed, this | 312 //! pack, such as “Service Pack 1”. If no service pack is installed, this |
313 //! field references an empty string. | 313 //! field references an empty string. |
314 //! - On Mac OS X, this is the operating system build number from `sw_vers | 314 //! - On macOS, this is the operating system build number from `sw_vers |
315 //! -buildVersion`. For Mac OS X 10.9.2 on most hardware types, this would | 315 //! -buildVersion`. For macOS 10.12.1 on most hardware types, this would |
316 //! be `13C64`. | 316 //! be `16B2657`. |
317 //! - On Linux and other Unix-like systems, this is the kernel version from | 317 //! - On Linux and other Unix-like systems, this is the kernel version from |
318 //! `uname -srvm`, possibly with additional information appended. On | 318 //! `uname -srvm`, possibly with additional information appended. On |
319 //! Android, the `ro.build.fingerprint` system property is appended. | 319 //! Android, the `ro.build.fingerprint` system property is appended. |
320 RVA CSDVersionRva; | 320 RVA CSDVersionRva; |
321 | 321 |
322 //! \brief A bitfield identifying products installed on the system. This is | 322 //! \brief A bitfield identifying products installed on the system. This is |
323 //! composed of \ref VER_SUITE_x "VER_SUITE_*" values. | 323 //! composed of \ref VER_SUITE_x "VER_SUITE_*" values. |
324 //! | 324 //! |
325 //! This field is Windows-specific, and has no meaning on other operating | 325 //! This field is Windows-specific, and has no meaning on other operating |
326 //! systems. | 326 //! systems. |
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
410 | 410 |
411 //! \brief Structures identifying each thread within the process. | 411 //! \brief Structures identifying each thread within the process. |
412 MINIDUMP_THREAD Threads[0]; | 412 MINIDUMP_THREAD Threads[0]; |
413 }; | 413 }; |
414 | 414 |
415 //! \brief Information about an exception that occurred in the process. | 415 //! \brief Information about an exception that occurred in the process. |
416 struct __attribute__((packed, aligned(4))) MINIDUMP_EXCEPTION { | 416 struct __attribute__((packed, aligned(4))) MINIDUMP_EXCEPTION { |
417 //! \brief The top-level exception code identifying the exception, in | 417 //! \brief The top-level exception code identifying the exception, in |
418 //! operating system-specific values. | 418 //! operating system-specific values. |
419 //! | 419 //! |
420 //! For Mac OS X minidumps, this will be an \ref EXC_x "EXC_*" exception type, | 420 //! For macOS minidumps, this will be an \ref EXC_x "EXC_*" exception type, |
421 //! such as `EXC_BAD_ACCESS`. `EXC_CRASH` will not appear here for exceptions | 421 //! such as `EXC_BAD_ACCESS`. `EXC_CRASH` will not appear here for exceptions |
422 //! processed as `EXC_CRASH` when generated from another preceding exception: | 422 //! processed as `EXC_CRASH` when generated from another preceding exception: |
423 //! the original exception code will appear instead. The exception type as it | 423 //! the original exception code will appear instead. The exception type as it |
424 //! was received will appear at index 0 of #ExceptionInformation. | 424 //! was received will appear at index 0 of #ExceptionInformation. |
425 //! | 425 //! |
426 //! For Windows minidumps, this will be an \ref EXCEPTION_x "EXCEPTION_*" | 426 //! For Windows minidumps, this will be an `EXCEPTION_*` exception type, such |
427 //! exception type, such as `EXCEPTION_ACCESS_VIOLATION`. | 427 //! as `EXCEPTION_ACCESS_VIOLATION`. |
428 //! | 428 //! |
429 //! \note This field is named ExceptionCode, but what is known as the | 429 //! \note This field is named ExceptionCode, but what is known as the |
430 //! “exception code” on Mac OS X/Mach is actually stored in the | 430 //! “exception code” on macOS/Mach is actually stored in the |
431 //! #ExceptionFlags field of a minidump file. | 431 //! #ExceptionFlags field of a minidump file. |
432 //! | 432 //! |
433 //! \todo Document the possible values by OS. There may be OS-specific enums | 433 //! \todo Document the possible values by OS. There may be OS-specific enums |
434 //! in minidump_extensions.h. | 434 //! in minidump_extensions.h. |
435 uint32_t ExceptionCode; | 435 uint32_t ExceptionCode; |
436 | 436 |
437 //! \brief Additional exception flags that further identify the exception, in | 437 //! \brief Additional exception flags that further identify the exception, in |
438 //! operating system-specific values. | 438 //! operating system-specific values. |
439 //! | 439 //! |
440 //! For Mac OS X minidumps, this will be the value of the exception code at | 440 //! For macOS minidumps, this will be the value of the exception code at index |
441 //! index 0 as received by a Mach exception handler, except: | 441 //! 0 as received by a Mach exception handler, except: |
442 //! * For exception type `EXC_CRASH` generated from another preceding | 442 //! * For exception type `EXC_CRASH` generated from another preceding |
443 //! exception, the original exception code will appear here, not the code | 443 //! exception, the original exception code will appear here, not the code |
444 //! as received by the Mach exception handler. | 444 //! as received by the Mach exception handler. |
445 //! * For exception types `EXC_RESOURCE` and `EXC_GUARD`, the high 32 bits of | 445 //! * For exception types `EXC_RESOURCE` and `EXC_GUARD`, the high 32 bits of |
446 //! the code received by the Mach exception handler will appear here. | 446 //! the code received by the Mach exception handler will appear here. |
447 //! | 447 //! |
448 //! In all cases for Mac OS X minidumps, the code as it was received by the | 448 //! In all cases for macOS minidumps, the code as it was received by the Mach |
449 //! Mach exception handler will appear at index 1 of #ExceptionInformation. | 449 //! exception handler will appear at index 1 of #ExceptionInformation. |
450 //! | 450 //! |
451 //! For Windows minidumps, this will either be `0` if the exception is | 451 //! For Windows minidumps, this will either be `0` if the exception is |
452 //! continuable, or `EXCEPTION_NONCONTINUABLE` to indicate a noncontinuable | 452 //! continuable, or `EXCEPTION_NONCONTINUABLE` to indicate a noncontinuable |
453 //! exception. | 453 //! exception. |
454 //! | 454 //! |
455 //! \todo Document the possible values by OS. There may be OS-specific enums | 455 //! \todo Document the possible values by OS. There may be OS-specific enums |
456 //! in minidump_extensions.h. | 456 //! in minidump_extensions.h. |
457 uint32_t ExceptionFlags; | 457 uint32_t ExceptionFlags; |
458 | 458 |
459 //! \brief An address, in the address space of the process that this minidump | 459 //! \brief An address, in the address space of the process that this minidump |
460 //! file contains a snapshot of, of another MINIDUMP_EXCEPTION. This field | 460 //! file contains a snapshot of, of another MINIDUMP_EXCEPTION. This field |
461 //! is used for nested exceptions. | 461 //! is used for nested exceptions. |
462 uint64_t ExceptionRecord; | 462 uint64_t ExceptionRecord; |
463 | 463 |
464 //! \brief The address that caused the exception. | 464 //! \brief The address that caused the exception. |
465 //! | 465 //! |
466 //! This may be the address that caused a fault on data access, or it may be | 466 //! This may be the address that caused a fault on data access, or it may be |
467 //! the instruction pointer that contained an offending instruction. | 467 //! the instruction pointer that contained an offending instruction. |
468 uint64_t ExceptionAddress; | 468 uint64_t ExceptionAddress; |
469 | 469 |
470 //! \brief The number of valid elements in #ExceptionInformation. | 470 //! \brief The number of valid elements in #ExceptionInformation. |
471 uint32_t NumberParameters; | 471 uint32_t NumberParameters; |
472 | 472 |
473 uint32_t __unusedAlignment; | 473 uint32_t __unusedAlignment; |
474 | 474 |
475 //! \brief Additional information about the exception, specific to the | 475 //! \brief Additional information about the exception, specific to the |
476 //! operating system and possibly the #ExceptionCode. | 476 //! operating system and possibly the #ExceptionCode. |
477 //! | 477 //! |
478 //! For Mac OS X minidumps, this will contain the exception type as received | 478 //! For macOS minidumps, this will contain the exception type as received by a |
479 //! by a Mach exception handler and the values of the `codes[0]` and | 479 //! Mach exception handler and the values of the `codes[0]` and `codes[1]` |
480 //! `codes[1]` (exception code and subcode) parameters supplied to the Mach | 480 //! (exception code and subcode) parameters supplied to the Mach exception |
481 //! exception handler. Unlike #ExceptionCode and #ExceptionFlags, the values | 481 //! handler. Unlike #ExceptionCode and #ExceptionFlags, the values received by |
482 //! received by a Mach exception handler are used directly here even for the | 482 //! a Mach exception handler are used directly here even for the `EXC_CRASH`, |
483 //! `EXC_CRASH`, `EXC_RESOURCE`, and `EXC_GUARD` exception types. | 483 //! `EXC_RESOURCE`, and `EXC_GUARD` exception types. |
484 | 484 |
485 //! For Windows, these are additional arguments (if any) as provided to | 485 //! For Windows, these are additional arguments (if any) as provided to |
486 //! `RaiseException()`. | 486 //! `RaiseException()`. |
487 uint64_t ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS]; | 487 uint64_t ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS]; |
488 }; | 488 }; |
489 | 489 |
490 //! \brief Information about the exception that triggered a minidump file’s | 490 //! \brief Information about the exception that triggered a minidump file’s |
491 //! generation. | 491 //! generation. |
492 struct __attribute__((packed, aligned(4))) MINIDUMP_EXCEPTION_STREAM { | 492 struct __attribute__((packed, aligned(4))) MINIDUMP_EXCEPTION_STREAM { |
493 //! \brief The ID of the thread that caused the exception. | 493 //! \brief The ID of the thread that caused the exception. |
(...skipping 481 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
975 struct __attribute__((packed, aligned(4))) MINIDUMP_MEMORY_INFO { | 975 struct __attribute__((packed, aligned(4))) MINIDUMP_MEMORY_INFO { |
976 //! \brief The base address of the region of pages. | 976 //! \brief The base address of the region of pages. |
977 uint64_t BaseAddress; | 977 uint64_t BaseAddress; |
978 | 978 |
979 //! \brief The base address of a range of pages in this region. The page is | 979 //! \brief The base address of a range of pages in this region. The page is |
980 //! contained within this memory region. | 980 //! contained within this memory region. |
981 uint64_t AllocationBase; | 981 uint64_t AllocationBase; |
982 | 982 |
983 //! \brief The memory protection when the region was initially allocated. This | 983 //! \brief The memory protection when the region was initially allocated. This |
984 //! member can be one of the memory protection options (such as | 984 //! member can be one of the memory protection options (such as |
985 //! \ref PAGE_x PAGE_EXECUTE, \ref PAGE_x PAGE_NOACCESS, etc.), along with | 985 //! \ref PAGE_x "PAGE_EXECUTE", \ref PAGE_x "PAGE_NOACCESS", etc.), along |
986 //! \ref PAGE_x PAGE_GUARD or \ref PAGE_x PAGE_NOCACHE, as needed. | 986 //! with \ref PAGE_x "PAGE_GUARD" or \ref PAGE_x "PAGE_NOCACHE", as |
| 987 //! needed. |
987 uint32_t AllocationProtect; | 988 uint32_t AllocationProtect; |
988 | 989 |
989 uint32_t __alignment1; | 990 uint32_t __alignment1; |
990 | 991 |
991 //! \brief The size of the region beginning at the base address in which all | 992 //! \brief The size of the region beginning at the base address in which all |
992 //! pages have identical attributes, in bytes. | 993 //! pages have identical attributes, in bytes. |
993 uint64_t RegionSize; | 994 uint64_t RegionSize; |
994 | 995 |
995 //! \brief The state of the pages in the region. This can be one of | 996 //! \brief The state of the pages in the region. This can be one of |
996 //! \ref MEM_x MEM_COMMIT, \ref MEM_x MEM_FREE, or \ref MEM_x MEM_RESERVE. | 997 //! \ref MEM_x "MEM_COMMIT", \ref MEM_x "MEM_FREE", or \ref MEM_x |
| 998 //! "MEM_RESERVE". |
997 uint32_t State; | 999 uint32_t State; |
998 | 1000 |
999 //! \brief The access protection of the pages in the region. This member is | 1001 //! \brief The access protection of the pages in the region. This member is |
1000 //! one of the values listed for the #AllocationProtect member. | 1002 //! one of the values listed for the #AllocationProtect member. |
1001 uint32_t Protect; | 1003 uint32_t Protect; |
1002 | 1004 |
1003 //! \brief The type of pages in the region. This can be one of \ref MEM_x | 1005 //! \brief The type of pages in the region. This can be one of \ref MEM_x |
1004 //! MEM_IMAGE, \ref MEM_x MEM_MAPPED, or \ref MEM_x MEM_PRIVATE. | 1006 //! "MEM_IMAGE", \ref MEM_x "MEM_MAPPED", or \ref MEM_x "MEM_PRIVATE". |
1005 uint32_t Type; | 1007 uint32_t Type; |
1006 | 1008 |
1007 uint32_t __alignment2; | 1009 uint32_t __alignment2; |
1008 }; | 1010 }; |
1009 | 1011 |
1010 //! \brief Contains a list of memory regions. | 1012 //! \brief Contains a list of memory regions. |
1011 struct __attribute__((packed, aligned(4))) MINIDUMP_MEMORY_INFO_LIST { | 1013 struct __attribute__((packed, aligned(4))) MINIDUMP_MEMORY_INFO_LIST { |
1012 //! \brief The size of the header data for the stream, in bytes. This is | 1014 //! \brief The size of the header data for the stream, in bytes. This is |
1013 //! generally sizeof(MINIDUMP_MEMORY_INFO_LIST). | 1015 //! generally sizeof(MINIDUMP_MEMORY_INFO_LIST). |
1014 uint32_t SizeOfHeader; | 1016 uint32_t SizeOfHeader; |
(...skipping 23 matching lines...) Expand all Loading... |
1038 //! - A MINIDUMP_MODULE_LIST stream. All loaded modules are present. | 1040 //! - A MINIDUMP_MODULE_LIST stream. All loaded modules are present. |
1039 //! - Typically, a MINIDUMP_MEMORY_LIST stream containing duplicate pointers | 1041 //! - Typically, a MINIDUMP_MEMORY_LIST stream containing duplicate pointers |
1040 //! to the stack memory regions also referenced by the MINIDUMP_THREAD_LIST | 1042 //! to the stack memory regions also referenced by the MINIDUMP_THREAD_LIST |
1041 //! stream. This type of minidump file also includes a | 1043 //! stream. This type of minidump file also includes a |
1042 //! MINIDUMP_MEMORY_DESCRIPTOR containing the 256 bytes centered around | 1044 //! MINIDUMP_MEMORY_DESCRIPTOR containing the 256 bytes centered around |
1043 //! the exception address or the instruction pointer. | 1045 //! the exception address or the instruction pointer. |
1044 MiniDumpNormal = 0x00000000, | 1046 MiniDumpNormal = 0x00000000, |
1045 }; | 1047 }; |
1046 | 1048 |
1047 #endif // CRASHPAD_COMPAT_NON_WIN_DBGHELP_H_ | 1049 #endif // CRASHPAD_COMPAT_NON_WIN_DBGHELP_H_ |
OLD | NEW |