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

Unified Diff: minidump/minidump_extensions.h

Issue 435013002: Add minidump_extensions.h (Closed) Base URL: https://chromium.googlesource.com/crashpad/crashpad@master
Patch Set: Remove MinidumpExceptionCodeMac Created 6 years, 5 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « minidump/minidump.gyp ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: minidump/minidump_extensions.h
diff --git a/minidump/minidump_extensions.h b/minidump/minidump_extensions.h
new file mode 100644
index 0000000000000000000000000000000000000000..5799e53b764e73667fe33f64935252cc764f5901
--- /dev/null
+++ b/minidump/minidump_extensions.h
@@ -0,0 +1,340 @@
+// Copyright 2014 The Crashpad Authors. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#ifndef CRASHPAD_MINIDUMP_MINIDUMP_EXTENSIONS_H_
+#define CRASHPAD_MINIDUMP_MINIDUMP_EXTENSIONS_H_
+
+#include <dbghelp.h>
+#include <stdint.h>
+#include <winnt.h>
+
+#include "util/misc/uuid.h"
+
+namespace crashpad {
+
+//! \brief Minidump stream type values for MINIDUMP_DIRECTORY::StreamType. Each
+//! stream structure has a corresponding stream type value to identify it.
+//!
+//! \sa MINIDUMP_STREAM_TYPE
+enum MinidumpStreamType {
+ //! \brief The stream type for MINIDUMP_THREAD_LIST.
+ //!
+ //! \sa ThreadListStream
+ kMinidumpStreamTypeThreadList = ThreadListStream,
+
+ //! \brief The stream type for MINIDUMP_MODULE_LIST.
+ //!
+ //! \sa ModuleListStream
+ kMinidumpStreamTypeModuleList = ModuleListStream,
+
+ //! \brief The stream type for MINIDUMP_MEMORY_LIST.
+ //!
+ //! \sa MemoryListStream
+ kMinidumpStreamTypeMemoryList = MemoryListStream,
+
+ //! \brief The stream type for MINIDUMP_EXCEPTION_STREAM.
+ //!
+ //! \sa ExceptionStream
+ kMinidumpStreamTypeException = ExceptionStream,
+
+ //! \brief The stream type for MINIDUMP_SYSTEM_INFO.
+ //!
+ //! \sa SystemInfoStream
+ kMinidumpStreamTypeSystemInfo = SystemInfoStream,
+
+ //! \brief The stream type for MINIDUMP_MISC_INFO, MINIDUMP_MISC_INFO_2,
+ //! MINIDUMP_MISC_INFO_3, and MINIDUMP_MISC_INFO_4.
+ //!
+ //! \sa MiscInfoStream
+ kMinidumpStreamTypeMiscInfo = MiscInfoStream,
+
+ // 0x4350 = "CP"
+
+ //! \brief The stream type for MinidumpCrashpadInfo.
+ kMinidumpStreamTypeCrashpadInfo = 0x43500001,
+};
+
+//! \brief A variable-length UTF-8-encoded string carried within a minidump
+//! file.
+//!
+//! \sa MINIDUMP_STRING
+struct __attribute__((packed, aligned(4))) MinidumpUTF8String {
+ // The field names do not conform to typical style, they match the names used
+ // in MINIDUMP_STRING. This makes it easier to operate on MINIDUMP_STRING (for
+ // UTF-16 strings) and MinidumpUTF8String using templates.
+
+ //! \brief The length of the #Buffer field in bytes, not including the `NUL`
+ //! terminator.
+ //!
+ //! \note This field is interpreted as a byte count, not a count of Unicode
+ //! code points.
+ uint32_t Length;
+
+ //! \brief The string, encoded in UTF-8, and terminated with a `NUL` byte.
+ uint8_t Buffer[0];
+};
+
+//! \brief CPU type values for MINIDUMP_SYSTEM_INFO::ProcessorArchitecture.
+//!
+//! \sa \ref PROCESSOR_ARCHITECTURE_x "PROCESSOR_ARCHITECTURE_*"
+enum MinidumpCPUArchitecture : uint16_t {
+ //! \brief 32-bit x86.
+ //!
+ //! These systems identify their CPUs generically as “x86” or “ia32”, or with
+ //! more specific names such as “i386”, “i486”, “i586”, and “i686”.
+ kMinidumpCPUArchitectureX86 = PROCESSOR_ARCHITECTURE_INTEL,
+
+ kMinidumpCPUArchitectureMIPS = PROCESSOR_ARCHITECTURE_MIPS,
+ kMinidumpCPUArchitectureAlpha = PROCESSOR_ARCHITECTURE_ALPHA,
+
+ //! \brief 32-bit PowerPC.
+ //!
+ //! These systems identify their CPUs generically as “ppc”, or with more
+ //! specific names such as “ppc6xx”, “ppc7xx”, and “ppc74xx”.
+ kMinidumpCPUArchitecturePPC = PROCESSOR_ARCHITECTURE_PPC,
+
+ kMinidumpCPUArchitectureSHx = PROCESSOR_ARCHITECTURE_SHX,
+
+ //! \brief 32-bit ARM.
+ //!
+ //! These systems identify their CPUs generically as “arm”, or with more
+ //! specific names such as “armv6” and “armv7”.
+ kMinidumpCPUArchitectureARM = PROCESSOR_ARCHITECTURE_ARM,
+
+ kMinidumpCPUArchitectureIA64 = PROCESSOR_ARCHITECTURE_IA64,
+ kMinidumpCPUArchitectureAlpha64 = PROCESSOR_ARCHITECTURE_ALPHA64,
+ kMinidumpCPUArchitectureMSIL = PROCESSOR_ARCHITECTURE_MSIL,
+
+ //! \brief 64-bit x86.
+ //!
+ //! These systems identify their CPUs as “x86_64”, “amd64”, or “x64”.
+ kMinidumpCPUArchitectureAMD64 = PROCESSOR_ARCHITECTURE_AMD64,
+
+ kMinidumpCPUArchitectureX86Win64 = PROCESSOR_ARCHITECTURE_IA32_ON_WIN64,
+ kMinidumpCPUArchitectureNeutral = PROCESSOR_ARCHITECTURE_NEUTRAL,
+ kMinidumpCPUArchitectureSPARC = 0x8001,
+
+ //! \brief 64-bit PowerPC.
+ //!
+ //! These systems identify their CPUs generically as “ppc64”, or with more
+ //! specific names such as “ppc970”.
+ kMinidumpCPUArchitecturePPC64 = 0x8002,
+
+ //! \brief 64-bit ARM.
+ //!
+ //! These systems identify their CPUs generically as “arm64” or “aarch64”, or
+ //! with more specific names such as “armv8”.
+ kMinidumpCPUArchitectureARM64 = 0x8003,
+
+ //! \brief Unknown CPU architecture.
+ kMinidumpCPUArchitectureUnknown = PROCESSOR_ARCHITECTURE_UNKNOWN,
+};
+
+//! \brief Operating system type values for MINIDUMP_SYSTEM_INFO::ProductType.
+//!
+//! \sa \ref VER_NT_x "VER_NT_*"
+enum MinidumpOSType : uint8_t {
+ //! \brief A “desktop” or “workstation” system.
+ kMinidumpOSTypeWorkstation = VER_NT_WORKSTATION,
+
+ //! \brief A “domain controller” system. Windows-specific.
+ kMinidumpOSTypeDomainController = VER_NT_DOMAIN_CONTROLLER,
+
+ //! \brief A “server” system.
+ kMinidumpOSTypeServer = VER_NT_SERVER,
+};
+
+//! \brief Operating system family values for MINIDUMP_SYSTEM_INFO::PlatformId.
+//!
+//! \sa \ref VER_PLATFORM_x "VER_PLATFORM_*"
+enum MinidumpOS : uint32_t {
+ //! \brief Windows 3.1.
+ kMinidumpOSWin32s = VER_PLATFORM_WIN32s,
+
+ //! \brief Windows 95, Windows 98, and Windows Me.
+ kMinidumpOSWin32Windows = VER_PLATFORM_WIN32_WINDOWS,
+
+ //! \brief Windows NT, Windows 2000, and later.
+ kMinidumpOSWin32NT = VER_PLATFORM_WIN32_NT,
+
+ kMinidumpOSUnix = 0x8000,
+
+ //! \brief Mac OS X, Darwin for traditional systems.
+ kMinidumpOSMacOSX = 0x8101,
+
+ //! \brief iOS, Darwin for mobile devices.
+ kMinidumpOSiOS = 0x8102,
+
+ //! \brief Linux, not including Android.
+ kMinidumpOSLinux = 0x8201,
+
+ kMinidumpOSSolaris = 0x8202,
+
+ //! \brief Android.
+ kMinidumpOSAndroid = 0x8203,
+
+ kMinidumpOSPS3 = 0x8204,
+
+ //! \brief Native Client (NaCl).
+ kMinidumpOSNaCl = 0x8205,
+
+ //! \brief Unknown operating system.
+ kMinidumpOSUnknown = 0xffffffff,
+};
+
+//! \brief A CodeView record linking to a `.pdb` 2.0 file.
+//!
+//! This format provides an indirect link to debugging data by referencing an
+//! external `.pdb` file by its name, timestamp, and age. This structure may be
+//! pointed to by MINIDUMP_MODULE::CvRecord. It has been superseded by
+//! MinidumpModuleCodeViewRecordPDB70.
+//!
+//! For more information about this structure and format, see <a
+//! href="http://www.debuginfo.com/articles/debuginfomatch.html#pdbfiles">Matching
+//! Debug Information</a>, PDB Files, and <a
+//! href="http://undocumented.rawol.com/sbs-w2k-1-windows-2000-debugging-support.pdf#page=63">Undocumented
+//! Windows 2000 Secrets</a>, Windows 2000 Debugging Support/Microsoft Symbol
+//! File Internals/CodeView Subsections.
+//!
+//! \sa IMAGE_DEBUG_MISC
+struct MinidumpModuleCodeViewRecordPDB20 {
+ //! \brief The magic number identifying this structure version, stored in
+ //! #signature.
+ //!
+ //! In a hex dump, this will appear as “NB10” when produced by a little-endian
+ //! machine.
+ static const uint32_t kSignature = '01BN';
+
+ //! \brief The magic number identifying this structure version, the value of
+ //! #kSignature.
+ uint32_t signature;
+
+ //! \brief The offset to CodeView data.
+ //!
+ //! In this structure, this field always has the value `0` because no CodeView
+ //! data is present, there is only a link to CodeView data stored in an
+ //! external file.
+ uint32_t offset;
+
+ //! \brief The time that the `.pdb` file was created, in `time_t` format, the
+ //! number of seconds since the POSIX epoch.
+ uint32_t timestamp;
+
+ //! \brief The revision of the `.pdb` file.
+ //!
+ //! A `.pdb` file’s age indicates incremental changes to it. When a `.pdb`
+ //! file is created, it has age `1`, and subsequent updates increase this
+ //! value.
+ uint32_t age;
+
+ //! \brief The path or file name of the `.pdb` file associated with the
+ //! module.
+ //!
+ //! This is a NUL-terminated string. On Windows, it will be encoded in the
+ //! code page of the system that linked the module. On other operating
+ //! systems, UTF-8 may be used.
+ uint8_t pdb_name[1];
+};
+
+//! \brief A CodeView record linking to a `.pdb` 7.0 file.
+//!
+//! This format provides an indirect link to debugging data by referencing an
+//! external `.pdb` file by its name, %UUID, and age. This structure may be
+//! pointed to by MINIDUMP_MODULE::CvRecord.
+//!
+//! For more information about this structure and format, see <a
+//! href="http://www.debuginfo.com/articles/debuginfomatch.html#pdbfiles">Matching
+//! Debug Information</a>, PDB Files.
+//!
+//! \sa MinidumpModuleCodeViewRecordPDB20
+//! \sa IMAGE_DEBUG_MISC
+struct MinidumpModuleCodeViewRecordPDB70 {
+ //! \brief The magic number identifying this structure version, stored in
+ //! #signature.
+ //!
+ //! In a hex dump, this will appear as “RSDS” when produced by a little-endian
+ //! machine.
+ static const uint32_t kSignature = 'SDSR';
+
+ //! \brief The magic number identifying this structure version, the value of
+ //! #kSignature.
+ uint32_t signature;
+
+ //! \brief The `.pdb` file’s unique identifier.
+ UUID uuid;
+
+ //! \brief The revision of the `.pdb` file.
+ //!
+ //! A `.pdb` file’s age indicates incremental changes to it. When a `.pdb`
+ //! file is created, it has age `1`, and subsequent updates increase this
+ //! value.
+ uint32_t age;
+
+ //! \brief The path or file name of the `.pdb` file associated with the
+ //! module.
+ //!
+ //! This is a NUL-terminated string. On Windows, it will be encoded in the
+ //! code page of the system that linked the module. On other operating
+ //! systems, UTF-8 may be used.
+ uint8_t pdb_name[1];
+};
+
+//! \brief A key-value pair.
+struct __attribute__((packed, aligned(4))) MinidumpSimpleStringDictionaryEntry {
+ //! \brief ::RVA of a MinidumpUTF8String containing the key of a key-value
+ //! pair.
+ RVA key;
+
+ //! \brief ::RVA of a MinidumpUTF8String containing the value of a key-value
+ //! pair.
+ RVA value;
+};
+
+//! \brief A list of key-value pairs.
+struct __attribute__((packed, aligned(4))) MinidumpSimpleStringDictionary {
+ //! \brief The number of key-value pairs present.
+ uint32_t count;
+
+ //! \brief A list of MinidumpSimpleStringDictionaryEntry entries.
+ MinidumpSimpleStringDictionaryEntry entries[0];
+};
+
+//! \brief Additional Crashpad-specific information carried within a minidump
+//! file.
+struct __attribute__((packed, aligned(4))) MinidumpCrashpadInfo {
+ //! \brief The size of the entire structure, in bytes.
+ //!
+ //! \sa version
+ uint32_t size;
+
+ //! \brief The structure’s version number. This can be used to determine which
+ //! other fields in the structure are valid.
+ //!
+ //! \sa size
+ uint32_t version;
+
+ //! \brief A MinidumpSimpleStringDictionary pointing to strings interpreted as
+ //! key-value pairs. The process that crashed controlled the data that
+ //! appears here.
+ //!
+ //! If MINIDUMP_LOCATION_DESCRIPTOR::DataSize is `0`, no key-value pairs are
+ //! present, and MINIDUMP_LOCATION_DESCRIPTOR::Rva should not be consulted.
+ //!
+ //! This field is present when #version is at least `1`.
+ MINIDUMP_LOCATION_DESCRIPTOR simple_annotations;
+};
+
+} // namespace crashpad
+
+#endif // CRASHPAD_MINIDUMP_MINIDUMP_EXTENSIONS_H_
« no previous file with comments | « minidump/minidump.gyp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698