// Copyright 2014 The Crashpad Authors // // 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 <windows.h> #include <dbghelp.h> #include <stdint.h> #include <winnt.h> #include "base/compiler_specific.h" #include "build/build_config.h" #include "util/misc/pdb_structures.h" #include "util/misc/uuid.h" #if defined(COMPILER_MSVC) // C4200 is "nonstandard extension used : zero-sized array in struct/union". // We would like to globally disable this warning, but unfortunately, the // compiler is buggy and only supports disabling it with a pragma, so we can't // disable it with other silly warnings in the build files. See: // https://connect.microsoft.com/VisualStudio/feedback/details/1114440 #pragma warning(push) #pragma warning(disable: 4200) #define PACKED #pragma pack(push, 1) #else #define PACKED … #endif // COMPILER_MSVC 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 : uint32_t { … }; //! \brief A variable-length UTF-8-encoded string carried within a minidump //! file. //! //! \sa MINIDUMP_STRING struct alignas(4) PACKED MinidumpUTF8String { … }; //! \brief A variable-length array of bytes carried within a minidump file. //! The data have no intrinsic type and should be interpreted according //! to their referencing context. struct alignas(4) PACKED MinidumpByteArray { … }; //! \brief CPU type values for MINIDUMP_SYSTEM_INFO::ProcessorArchitecture. //! //! \sa \ref PROCESSOR_ARCHITECTURE_x "PROCESSOR_ARCHITECTURE_*" enum MinidumpCPUArchitecture : uint16_t { … }; //! \brief Operating system type values for MINIDUMP_SYSTEM_INFO::ProductType. //! //! \sa \ref VER_NT_x "VER_NT_*" enum MinidumpOSType : uint8_t { … }; //! \brief Operating system family values for MINIDUMP_SYSTEM_INFO::PlatformId. //! //! \sa \ref VER_PLATFORM_x "VER_PLATFORM_*" enum MinidumpOS : uint32_t { … }; //! \brief A list of ::RVA pointers. struct alignas(4) PACKED MinidumpRVAList { … }; //! \brief A key-value pair. struct alignas(4) PACKED MinidumpSimpleStringDictionaryEntry { … }; //! \brief A list of key-value pairs. struct alignas(4) PACKED MinidumpSimpleStringDictionary { … }; //! \brief A typed annotation object. struct alignas(4) PACKED MinidumpAnnotation { … }; //! \brief A list of annotation objects. struct alignas(4) PACKED MinidumpAnnotationList { … }; //! \brief Additional Crashpad-specific information about a module carried //! within a minidump file. //! //! This structure augments the information provided by MINIDUMP_MODULE. The //! minidump file must contain a module list stream //! (::kMinidumpStreamTypeModuleList) in order for this structure to appear. //! //! This structure is versioned. When changing this structure, leave the //! existing structure intact so that earlier parsers will be able to understand //! the fields they are aware of, and make additions at the end of the //! structure. Revise #kVersion and document each field’s validity based on //! #version, so that newer parsers will be able to determine whether the added //! fields are valid or not. //! //! \sa MinidumpModuleCrashpadInfoList struct alignas(4) PACKED MinidumpModuleCrashpadInfo { … }; //! \brief A link between a MINIDUMP_MODULE structure and additional //! Crashpad-specific information about a module carried within a minidump //! file. struct alignas(4) PACKED MinidumpModuleCrashpadInfoLink { … }; //! \brief Additional Crashpad-specific information about modules carried within //! a minidump file. //! //! This structure augments the information provided by //! MINIDUMP_MODULE_LIST. The minidump file must contain a module list stream //! (::kMinidumpStreamTypeModuleList) in order for this structure to appear. //! //! MinidumpModuleCrashpadInfoList::count may be less than the value of //! MINIDUMP_MODULE_LIST::NumberOfModules because not every MINIDUMP_MODULE //! structure carried within the minidump file will necessarily have //! Crashpad-specific information provided by a MinidumpModuleCrashpadInfo //! structure. struct alignas(4) PACKED MinidumpModuleCrashpadInfoList { … }; //! \brief Additional Crashpad-specific information carried within a minidump //! file. //! //! This structure is versioned. When changing this structure, leave the //! existing structure intact so that earlier parsers will be able to understand //! the fields they are aware of, and make additions at the end of the //! structure. Revise #kVersion and document each field’s validity based on //! #version, so that newer parsers will be able to determine whether the added //! fields are valid or not. struct alignas(4) PACKED MinidumpCrashpadInfo { … }; #if defined(COMPILER_MSVC) #pragma pack(pop) #pragma warning(pop) // C4200 #endif // COMPILER_MSVC #undef PACKED } // namespace crashpad #endif // CRASHPAD_MINIDUMP_MINIDUMP_EXTENSIONS_H_