17daf246e4baf0837e25429668cc23e92b6afe3b3mmentovai/* Copyright (c) 2006, Google Inc.
27daf246e4baf0837e25429668cc23e92b6afe3b3mmentovai * All rights reserved.
33261e8b6eac44a41341f112821482bee6c940c98mmentovai *
47daf246e4baf0837e25429668cc23e92b6afe3b3mmentovai * Redistribution and use in source and binary forms, with or without
57daf246e4baf0837e25429668cc23e92b6afe3b3mmentovai * modification, are permitted provided that the following conditions are
67daf246e4baf0837e25429668cc23e92b6afe3b3mmentovai * met:
73261e8b6eac44a41341f112821482bee6c940c98mmentovai *
87daf246e4baf0837e25429668cc23e92b6afe3b3mmentovai *     * Redistributions of source code must retain the above copyright
97daf246e4baf0837e25429668cc23e92b6afe3b3mmentovai * notice, this list of conditions and the following disclaimer.
107daf246e4baf0837e25429668cc23e92b6afe3b3mmentovai *     * Redistributions in binary form must reproduce the above
117daf246e4baf0837e25429668cc23e92b6afe3b3mmentovai * copyright notice, this list of conditions and the following disclaimer
127daf246e4baf0837e25429668cc23e92b6afe3b3mmentovai * in the documentation and/or other materials provided with the
137daf246e4baf0837e25429668cc23e92b6afe3b3mmentovai * distribution.
147daf246e4baf0837e25429668cc23e92b6afe3b3mmentovai *     * Neither the name of Google Inc. nor the names of its
157daf246e4baf0837e25429668cc23e92b6afe3b3mmentovai * contributors may be used to endorse or promote products derived from
167daf246e4baf0837e25429668cc23e92b6afe3b3mmentovai * this software without specific prior written permission.
173261e8b6eac44a41341f112821482bee6c940c98mmentovai *
187daf246e4baf0837e25429668cc23e92b6afe3b3mmentovai * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
197daf246e4baf0837e25429668cc23e92b6afe3b3mmentovai * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
207daf246e4baf0837e25429668cc23e92b6afe3b3mmentovai * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
217daf246e4baf0837e25429668cc23e92b6afe3b3mmentovai * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
227daf246e4baf0837e25429668cc23e92b6afe3b3mmentovai * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
237daf246e4baf0837e25429668cc23e92b6afe3b3mmentovai * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
247daf246e4baf0837e25429668cc23e92b6afe3b3mmentovai * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
257daf246e4baf0837e25429668cc23e92b6afe3b3mmentovai * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
267daf246e4baf0837e25429668cc23e92b6afe3b3mmentovai * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
277daf246e4baf0837e25429668cc23e92b6afe3b3mmentovai * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
287daf246e4baf0837e25429668cc23e92b6afe3b3mmentovai * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */
293261e8b6eac44a41341f112821482bee6c940c98mmentovai
303261e8b6eac44a41341f112821482bee6c940c98mmentovai/* minidump_format.h: A cross-platform reimplementation of minidump-related
313261e8b6eac44a41341f112821482bee6c940c98mmentovai * portions of DbgHelp.h from the Windows Platform SDK.
323261e8b6eac44a41341f112821482bee6c940c98mmentovai *
333261e8b6eac44a41341f112821482bee6c940c98mmentovai * (This is C99 source, please don't corrupt it with C++.)
343261e8b6eac44a41341f112821482bee6c940c98mmentovai *
352e0e2234b9e9d7d82c4c3c20396bdf8f18007e6cmmentovai * Structures that are defined by Microsoft to contain a zero-length array
362e0e2234b9e9d7d82c4c3c20396bdf8f18007e6cmmentovai * are instead defined here to contain an array with one element, as
372e0e2234b9e9d7d82c4c3c20396bdf8f18007e6cmmentovai * zero-length arrays are forbidden by standard C and C++.  In these cases,
382e0e2234b9e9d7d82c4c3c20396bdf8f18007e6cmmentovai * *_minsize constants are provided to be used in place of sizeof.  For a
392e0e2234b9e9d7d82c4c3c20396bdf8f18007e6cmmentovai * cleaner interface to these sizes when using C++, see minidump_size.h.
402e0e2234b9e9d7d82c4c3c20396bdf8f18007e6cmmentovai *
413261e8b6eac44a41341f112821482bee6c940c98mmentovai * These structures are also sufficient to populate minidump files.
423261e8b6eac44a41341f112821482bee6c940c98mmentovai *
433261e8b6eac44a41341f112821482bee6c940c98mmentovai * These definitions may be extended to support handling minidump files
443261e8b6eac44a41341f112821482bee6c940c98mmentovai * for other CPUs and other operating systems.
453261e8b6eac44a41341f112821482bee6c940c98mmentovai *
463261e8b6eac44a41341f112821482bee6c940c98mmentovai * Because precise data type sizes are crucial for this implementation to
473261e8b6eac44a41341f112821482bee6c940c98mmentovai * function properly and portably in terms of interoperability with minidumps
483261e8b6eac44a41341f112821482bee6c940c98mmentovai * produced by DbgHelp on Windows, a set of primitive types with known sizes
493261e8b6eac44a41341f112821482bee6c940c98mmentovai * are used as the basis of each structure defined by this file.  DbgHelp
503261e8b6eac44a41341f112821482bee6c940c98mmentovai * on Windows is assumed to be the reference implementation; this file
513261e8b6eac44a41341f112821482bee6c940c98mmentovai * seeks to provide a cross-platform compatible implementation.  To avoid
523261e8b6eac44a41341f112821482bee6c940c98mmentovai * collisions with the types and values defined and used by DbgHelp in the
533261e8b6eac44a41341f112821482bee6c940c98mmentovai * event that this implementation is used on Windows, each type and value
543261e8b6eac44a41341f112821482bee6c940c98mmentovai * defined here is given a new name, beginning with "MD".  Names of the
55683c86e6c585e79e36eaa3a55ca6191f7cc87db4mmentovai * equivalent types and values in the Windows Platform SDK are given in
563261e8b6eac44a41341f112821482bee6c940c98mmentovai * comments.
573261e8b6eac44a41341f112821482bee6c940c98mmentovai *
583261e8b6eac44a41341f112821482bee6c940c98mmentovai * Author: Mark Mentovai */
59a8b48f29ddff17cdb1c3e620814bc98dc1b829eadoshimun@gmail.com
603261e8b6eac44a41341f112821482bee6c940c98mmentovai
61e5dc60822e5938fea2ae892ccddb906641ba174emmentovai#ifndef GOOGLE_BREAKPAD_COMMON_MINIDUMP_FORMAT_H__
62e5dc60822e5938fea2ae892ccddb906641ba174emmentovai#define GOOGLE_BREAKPAD_COMMON_MINIDUMP_FORMAT_H__
633261e8b6eac44a41341f112821482bee6c940c98mmentovai
642e0e2234b9e9d7d82c4c3c20396bdf8f18007e6cmmentovai#include <stddef.h>
653261e8b6eac44a41341f112821482bee6c940c98mmentovai
66e5dc60822e5938fea2ae892ccddb906641ba174emmentovai#include "google_breakpad/common/breakpad_types.h"
673261e8b6eac44a41341f112821482bee6c940c98mmentovai
683261e8b6eac44a41341f112821482bee6c940c98mmentovai
695ac32b6534688b71a2b6fe7841cf7e552a992d01mmentovai#if defined(_MSC_VER)
705ac32b6534688b71a2b6fe7841cf7e552a992d01mmentovai/* Disable "zero-sized array in struct/union" warnings when compiling in
715ac32b6534688b71a2b6fe7841cf7e552a992d01mmentovai * MSVC.  DbgHelp.h does this too. */
725ac32b6534688b71a2b6fe7841cf7e552a992d01mmentovai#pragma warning(push)
735ac32b6534688b71a2b6fe7841cf7e552a992d01mmentovai#pragma warning(disable:4200)
745ac32b6534688b71a2b6fe7841cf7e552a992d01mmentovai#endif  /* _MSC_VER */
755ac32b6534688b71a2b6fe7841cf7e552a992d01mmentovai
765ac32b6534688b71a2b6fe7841cf7e552a992d01mmentovai
773261e8b6eac44a41341f112821482bee6c940c98mmentovai/*
783261e8b6eac44a41341f112821482bee6c940c98mmentovai * guiddef.h
793261e8b6eac44a41341f112821482bee6c940c98mmentovai */
803261e8b6eac44a41341f112821482bee6c940c98mmentovai
813261e8b6eac44a41341f112821482bee6c940c98mmentovaitypedef struct {
826162aed3c3fcfc53373c963ac375d39a5dfa5a25ted.mielczarek@gmail.com  uint32_t data1;
836162aed3c3fcfc53373c963ac375d39a5dfa5a25ted.mielczarek@gmail.com  uint16_t data2;
846162aed3c3fcfc53373c963ac375d39a5dfa5a25ted.mielczarek@gmail.com  uint16_t data3;
856162aed3c3fcfc53373c963ac375d39a5dfa5a25ted.mielczarek@gmail.com  uint8_t  data4[8];
86355c757b495016b1db1e8f53d2806c2667e1e4a1mmentovai} MDGUID;  /* GUID */
873261e8b6eac44a41341f112821482bee6c940c98mmentovai
883261e8b6eac44a41341f112821482bee6c940c98mmentovai
893261e8b6eac44a41341f112821482bee6c940c98mmentovai/*
903261e8b6eac44a41341f112821482bee6c940c98mmentovai * WinNT.h
913261e8b6eac44a41341f112821482bee6c940c98mmentovai */
923261e8b6eac44a41341f112821482bee6c940c98mmentovai
931a1890a52aaf8bfbea34a8d918423e6c81f3ea80ted.mielczarek/* Non-x86 CPU identifiers found in the high 24 bits of
94e5dc60822e5938fea2ae892ccddb906641ba174emmentovai * (MDRawContext*).context_flags.  These aren't used by Breakpad, but are
9582a6c6037b0dac132b86a88dccf6673efb52a51cmmentovai * defined here for reference, to avoid assigning values that conflict
9682a6c6037b0dac132b86a88dccf6673efb52a51cmmentovai * (although some values already conflict). */
9782a6c6037b0dac132b86a88dccf6673efb52a51cmmentovai#define MD_CONTEXT_IA64  0x00080000  /* CONTEXT_IA64 */
9882a6c6037b0dac132b86a88dccf6673efb52a51cmmentovai/* Additional values from winnt.h in the Windows CE 5.0 SDK: */
9982a6c6037b0dac132b86a88dccf6673efb52a51cmmentovai#define MD_CONTEXT_SHX   0x000000c0  /* CONTEXT_SH4 (Super-H, includes SH3) */
10082a6c6037b0dac132b86a88dccf6673efb52a51cmmentovai#define MD_CONTEXT_ALPHA 0x00020000  /* CONTEXT_ALPHA */
10182a6c6037b0dac132b86a88dccf6673efb52a51cmmentovai
1021a1890a52aaf8bfbea34a8d918423e6c81f3ea80ted.mielczarek/* As of Windows 7 SP1, the number of flag bits has increased to
1031a1890a52aaf8bfbea34a8d918423e6c81f3ea80ted.mielczarek * include 0x40 (CONTEXT_XSTATE):
1041a1890a52aaf8bfbea34a8d918423e6c81f3ea80ted.mielczarek * http://msdn.microsoft.com/en-us/library/hh134238%28v=vs.85%29.aspx */
1051a1890a52aaf8bfbea34a8d918423e6c81f3ea80ted.mielczarek#define MD_CONTEXT_CPU_MASK 0xffffff00
1063402cae5e58f7503adc4d9de6d9ea69e725ddcb2mmentovai
10782a6c6037b0dac132b86a88dccf6673efb52a51cmmentovai
1083402cae5e58f7503adc4d9de6d9ea69e725ddcb2mmentovai/* This is a base type for MDRawContextX86 and MDRawContextPPC.  This
1093402cae5e58f7503adc4d9de6d9ea69e725ddcb2mmentovai * structure should never be allocated directly.  The actual structure type
1103402cae5e58f7503adc4d9de6d9ea69e725ddcb2mmentovai * can be determined by examining the context_flags field. */
1113402cae5e58f7503adc4d9de6d9ea69e725ddcb2mmentovaitypedef struct {
1126162aed3c3fcfc53373c963ac375d39a5dfa5a25ted.mielczarek@gmail.com  uint32_t context_flags;
1133402cae5e58f7503adc4d9de6d9ea69e725ddcb2mmentovai} MDRawContextBase;
1143402cae5e58f7503adc4d9de6d9ea69e725ddcb2mmentovai
1159276b0d3017ad5ca93c8b593cacf317e1eaa114eted.mielczarek#include "minidump_cpu_amd64.h"
1169276b0d3017ad5ca93c8b593cacf317e1eaa114eted.mielczarek#include "minidump_cpu_arm.h"
117a157c99f9fdfc5f5072db05a5075ae23fce43c88mark@chromium.org#include "minidump_cpu_arm64.h"
1185f22d6a7f471f2352d394c188560fd06830e14f3gordana.cmiljanovic@imgtec.com#include "minidump_cpu_mips.h"
119a194d6f1acbcd3f941b228901a02a0708f1c2ad5nealsid#include "minidump_cpu_ppc.h"
120a194d6f1acbcd3f941b228901a02a0708f1c2ad5nealsid#include "minidump_cpu_ppc64.h"
1219276b0d3017ad5ca93c8b593cacf317e1eaa114eted.mielczarek#include "minidump_cpu_sparc.h"
1229276b0d3017ad5ca93c8b593cacf317e1eaa114eted.mielczarek#include "minidump_cpu_x86.h"
1233261e8b6eac44a41341f112821482bee6c940c98mmentovai
1243261e8b6eac44a41341f112821482bee6c940c98mmentovai/*
1253261e8b6eac44a41341f112821482bee6c940c98mmentovai * WinVer.h
1263261e8b6eac44a41341f112821482bee6c940c98mmentovai */
1273261e8b6eac44a41341f112821482bee6c940c98mmentovai
1283261e8b6eac44a41341f112821482bee6c940c98mmentovai
1293261e8b6eac44a41341f112821482bee6c940c98mmentovaitypedef struct {
1306162aed3c3fcfc53373c963ac375d39a5dfa5a25ted.mielczarek@gmail.com  uint32_t signature;
1316162aed3c3fcfc53373c963ac375d39a5dfa5a25ted.mielczarek@gmail.com  uint32_t struct_version;
1326162aed3c3fcfc53373c963ac375d39a5dfa5a25ted.mielczarek@gmail.com  uint32_t file_version_hi;
1336162aed3c3fcfc53373c963ac375d39a5dfa5a25ted.mielczarek@gmail.com  uint32_t file_version_lo;
1346162aed3c3fcfc53373c963ac375d39a5dfa5a25ted.mielczarek@gmail.com  uint32_t product_version_hi;
1356162aed3c3fcfc53373c963ac375d39a5dfa5a25ted.mielczarek@gmail.com  uint32_t product_version_lo;
1366162aed3c3fcfc53373c963ac375d39a5dfa5a25ted.mielczarek@gmail.com  uint32_t file_flags_mask;    /* Identifies valid bits in fileFlags */
1376162aed3c3fcfc53373c963ac375d39a5dfa5a25ted.mielczarek@gmail.com  uint32_t file_flags;
1386162aed3c3fcfc53373c963ac375d39a5dfa5a25ted.mielczarek@gmail.com  uint32_t file_os;
1396162aed3c3fcfc53373c963ac375d39a5dfa5a25ted.mielczarek@gmail.com  uint32_t file_type;
1406162aed3c3fcfc53373c963ac375d39a5dfa5a25ted.mielczarek@gmail.com  uint32_t file_subtype;
1416162aed3c3fcfc53373c963ac375d39a5dfa5a25ted.mielczarek@gmail.com  uint32_t file_date_hi;
1426162aed3c3fcfc53373c963ac375d39a5dfa5a25ted.mielczarek@gmail.com  uint32_t file_date_lo;
143355c757b495016b1db1e8f53d2806c2667e1e4a1mmentovai} MDVSFixedFileInfo;  /* VS_FIXEDFILEINFO */
1443261e8b6eac44a41341f112821482bee6c940c98mmentovai
1453261e8b6eac44a41341f112821482bee6c940c98mmentovai/* For (MDVSFixedFileInfo).signature */
1463261e8b6eac44a41341f112821482bee6c940c98mmentovai#define MD_VSFIXEDFILEINFO_SIGNATURE 0xfeef04bd
1473261e8b6eac44a41341f112821482bee6c940c98mmentovai     /* VS_FFI_SIGNATURE */
1483261e8b6eac44a41341f112821482bee6c940c98mmentovai
1493261e8b6eac44a41341f112821482bee6c940c98mmentovai/* For (MDVSFixedFileInfo).version */
1503261e8b6eac44a41341f112821482bee6c940c98mmentovai#define MD_VSFIXEDFILEINFO_VERSION 0x00010000
1513261e8b6eac44a41341f112821482bee6c940c98mmentovai     /* VS_FFI_STRUCVERSION */
1523261e8b6eac44a41341f112821482bee6c940c98mmentovai
1533261e8b6eac44a41341f112821482bee6c940c98mmentovai/* For (MDVSFixedFileInfo).file_flags_mask and
1543261e8b6eac44a41341f112821482bee6c940c98mmentovai * (MDVSFixedFileInfo).file_flags */
1553261e8b6eac44a41341f112821482bee6c940c98mmentovai#define MD_VSFIXEDFILEINFO_FILE_FLAGS_DEBUG        0x00000001
1563261e8b6eac44a41341f112821482bee6c940c98mmentovai     /* VS_FF_DEBUG */
1573261e8b6eac44a41341f112821482bee6c940c98mmentovai#define MD_VSFIXEDFILEINFO_FILE_FLAGS_PRERELEASE   0x00000002
1583261e8b6eac44a41341f112821482bee6c940c98mmentovai     /* VS_FF_PRERELEASE */
1593261e8b6eac44a41341f112821482bee6c940c98mmentovai#define MD_VSFIXEDFILEINFO_FILE_FLAGS_PATCHED      0x00000004
1603261e8b6eac44a41341f112821482bee6c940c98mmentovai     /* VS_FF_PATCHED */
1613261e8b6eac44a41341f112821482bee6c940c98mmentovai#define MD_VSFIXEDFILEINFO_FILE_FLAGS_PRIVATEBUILD 0x00000008
1623261e8b6eac44a41341f112821482bee6c940c98mmentovai     /* VS_FF_PRIVATEBUILD */
1633261e8b6eac44a41341f112821482bee6c940c98mmentovai#define MD_VSFIXEDFILEINFO_FILE_FLAGS_INFOINFERRED 0x00000010
1643261e8b6eac44a41341f112821482bee6c940c98mmentovai     /* VS_FF_INFOINFERRED */
1653261e8b6eac44a41341f112821482bee6c940c98mmentovai#define MD_VSFIXEDFILEINFO_FILE_FLAGS_SPECIALBUILD 0x00000020
1663261e8b6eac44a41341f112821482bee6c940c98mmentovai     /* VS_FF_SPECIALBUILD */
1673261e8b6eac44a41341f112821482bee6c940c98mmentovai
1683261e8b6eac44a41341f112821482bee6c940c98mmentovai/* For (MDVSFixedFileInfo).file_os: high 16 bits */
169355c757b495016b1db1e8f53d2806c2667e1e4a1mmentovai#define MD_VSFIXEDFILEINFO_FILE_OS_UNKNOWN    0          /* VOS_UNKNOWN */
170355c757b495016b1db1e8f53d2806c2667e1e4a1mmentovai#define MD_VSFIXEDFILEINFO_FILE_OS_DOS        (1 << 16)  /* VOS_DOS */
171355c757b495016b1db1e8f53d2806c2667e1e4a1mmentovai#define MD_VSFIXEDFILEINFO_FILE_OS_OS216      (2 << 16)  /* VOS_OS216 */
172355c757b495016b1db1e8f53d2806c2667e1e4a1mmentovai#define MD_VSFIXEDFILEINFO_FILE_OS_OS232      (3 << 16)  /* VOS_OS232 */
173355c757b495016b1db1e8f53d2806c2667e1e4a1mmentovai#define MD_VSFIXEDFILEINFO_FILE_OS_NT         (4 << 16)  /* VOS_NT */
174355c757b495016b1db1e8f53d2806c2667e1e4a1mmentovai#define MD_VSFIXEDFILEINFO_FILE_OS_WINCE      (5 << 16)  /* VOS_WINCE */
1753261e8b6eac44a41341f112821482bee6c940c98mmentovai/* Low 16 bits */
176355c757b495016b1db1e8f53d2806c2667e1e4a1mmentovai#define MD_VSFIXEDFILEINFO_FILE_OS__BASE      0          /* VOS__BASE */
177355c757b495016b1db1e8f53d2806c2667e1e4a1mmentovai#define MD_VSFIXEDFILEINFO_FILE_OS__WINDOWS16 1          /* VOS__WINDOWS16 */
178355c757b495016b1db1e8f53d2806c2667e1e4a1mmentovai#define MD_VSFIXEDFILEINFO_FILE_OS__PM16      2          /* VOS__PM16 */
179355c757b495016b1db1e8f53d2806c2667e1e4a1mmentovai#define MD_VSFIXEDFILEINFO_FILE_OS__PM32      3          /* VOS__PM32 */
180355c757b495016b1db1e8f53d2806c2667e1e4a1mmentovai#define MD_VSFIXEDFILEINFO_FILE_OS__WINDOWS32 4          /* VOS__WINDOWS32 */
1813261e8b6eac44a41341f112821482bee6c940c98mmentovai
1823261e8b6eac44a41341f112821482bee6c940c98mmentovai/* For (MDVSFixedFileInfo).file_type */
183355c757b495016b1db1e8f53d2806c2667e1e4a1mmentovai#define MD_VSFIXEDFILEINFO_FILE_TYPE_UNKNOWN    0  /* VFT_UNKNOWN */
184355c757b495016b1db1e8f53d2806c2667e1e4a1mmentovai#define MD_VSFIXEDFILEINFO_FILE_TYPE_APP        1  /* VFT_APP */
185355c757b495016b1db1e8f53d2806c2667e1e4a1mmentovai#define MD_VSFIXEDFILEINFO_FILE_TYPE_DLL        2  /* VFT_DLL */
186355c757b495016b1db1e8f53d2806c2667e1e4a1mmentovai#define MD_VSFIXEDFILEINFO_FILE_TYPE_DRV        3  /* VFT_DLL */
187355c757b495016b1db1e8f53d2806c2667e1e4a1mmentovai#define MD_VSFIXEDFILEINFO_FILE_TYPE_FONT       4  /* VFT_FONT */
188355c757b495016b1db1e8f53d2806c2667e1e4a1mmentovai#define MD_VSFIXEDFILEINFO_FILE_TYPE_VXD        5  /* VFT_VXD */
189355c757b495016b1db1e8f53d2806c2667e1e4a1mmentovai#define MD_VSFIXEDFILEINFO_FILE_TYPE_STATIC_LIB 7  /* VFT_STATIC_LIB */
1903261e8b6eac44a41341f112821482bee6c940c98mmentovai
1913261e8b6eac44a41341f112821482bee6c940c98mmentovai/* For (MDVSFixedFileInfo).file_subtype */
1923261e8b6eac44a41341f112821482bee6c940c98mmentovai#define MD_VSFIXEDFILEINFO_FILE_SUBTYPE_UNKNOWN                0
1933261e8b6eac44a41341f112821482bee6c940c98mmentovai     /* VFT2_UNKNOWN */
1943261e8b6eac44a41341f112821482bee6c940c98mmentovai/* with file_type = MD_VSFIXEDFILEINFO_FILETYPE_DRV */
1953261e8b6eac44a41341f112821482bee6c940c98mmentovai#define MD_VSFIXEDFILEINFO_FILE_SUBTYPE_DRV_PRINTER            1
1963261e8b6eac44a41341f112821482bee6c940c98mmentovai     /* VFT2_DRV_PRINTER */
1973261e8b6eac44a41341f112821482bee6c940c98mmentovai#define MD_VSFIXEDFILEINFO_FILE_SUBTYPE_DRV_KEYBOARD           2
1983261e8b6eac44a41341f112821482bee6c940c98mmentovai     /* VFT2_DRV_KEYBOARD */
1993261e8b6eac44a41341f112821482bee6c940c98mmentovai#define MD_VSFIXEDFILEINFO_FILE_SUBTYPE_DRV_LANGUAGE           3
2003261e8b6eac44a41341f112821482bee6c940c98mmentovai     /* VFT2_DRV_LANGUAGE */
2013261e8b6eac44a41341f112821482bee6c940c98mmentovai#define MD_VSFIXEDFILEINFO_FILE_SUBTYPE_DRV_DISPLAY            4
2023261e8b6eac44a41341f112821482bee6c940c98mmentovai     /* VFT2_DRV_DISPLAY */
2033261e8b6eac44a41341f112821482bee6c940c98mmentovai#define MD_VSFIXEDFILEINFO_FILE_SUBTYPE_DRV_MOUSE              5
2043261e8b6eac44a41341f112821482bee6c940c98mmentovai     /* VFT2_DRV_MOUSE */
2053261e8b6eac44a41341f112821482bee6c940c98mmentovai#define MD_VSFIXEDFILEINFO_FILE_SUBTYPE_DRV_NETWORK            6
2063261e8b6eac44a41341f112821482bee6c940c98mmentovai     /* VFT2_DRV_NETWORK */
2073261e8b6eac44a41341f112821482bee6c940c98mmentovai#define MD_VSFIXEDFILEINFO_FILE_SUBTYPE_DRV_SYSTEM             7
2083261e8b6eac44a41341f112821482bee6c940c98mmentovai     /* VFT2_DRV_SYSTEM */
2093261e8b6eac44a41341f112821482bee6c940c98mmentovai#define MD_VSFIXEDFILEINFO_FILE_SUBTYPE_DRV_INSTALLABLE        8
2103261e8b6eac44a41341f112821482bee6c940c98mmentovai     /* VFT2_DRV_INSTALLABLE */
2113261e8b6eac44a41341f112821482bee6c940c98mmentovai#define MD_VSFIXEDFILEINFO_FILE_SUBTYPE_DRV_SOUND              9
2123261e8b6eac44a41341f112821482bee6c940c98mmentovai     /* VFT2_DRV_SOUND */
2133261e8b6eac44a41341f112821482bee6c940c98mmentovai#define MD_VSFIXEDFILEINFO_FILE_SUBTYPE_DRV_COMM              10
2143261e8b6eac44a41341f112821482bee6c940c98mmentovai     /* VFT2_DRV_COMM */
2153261e8b6eac44a41341f112821482bee6c940c98mmentovai#define MD_VSFIXEDFILEINFO_FILE_SUBTYPE_DRV_INPUTMETHOD       11
2163261e8b6eac44a41341f112821482bee6c940c98mmentovai     /* VFT2_DRV_INPUTMETHOD */
2173261e8b6eac44a41341f112821482bee6c940c98mmentovai#define MD_VSFIXEDFILEINFO_FILE_SUBTYPE_DRV_VERSIONED_PRINTER 12
2183261e8b6eac44a41341f112821482bee6c940c98mmentovai     /* VFT2_DRV_VERSIONED_PRINTER */
2193261e8b6eac44a41341f112821482bee6c940c98mmentovai/* with file_type = MD_VSFIXEDFILEINFO_FILETYPE_FONT */
2203261e8b6eac44a41341f112821482bee6c940c98mmentovai#define MD_VSFIXEDFILEINFO_FILE_SUBTYPE_FONT_RASTER            1
2213261e8b6eac44a41341f112821482bee6c940c98mmentovai     /* VFT2_FONT_RASTER */
2223261e8b6eac44a41341f112821482bee6c940c98mmentovai#define MD_VSFIXEDFILEINFO_FILE_SUBTYPE_FONT_VECTOR            2
2233261e8b6eac44a41341f112821482bee6c940c98mmentovai     /* VFT2_FONT_VECTOR */
2243261e8b6eac44a41341f112821482bee6c940c98mmentovai#define MD_VSFIXEDFILEINFO_FILE_SUBTYPE_FONT_TRUETYPE          3
2253261e8b6eac44a41341f112821482bee6c940c98mmentovai     /* VFT2_FONT_TRUETYPE */
2263261e8b6eac44a41341f112821482bee6c940c98mmentovai
2273261e8b6eac44a41341f112821482bee6c940c98mmentovai
2283261e8b6eac44a41341f112821482bee6c940c98mmentovai/*
2293261e8b6eac44a41341f112821482bee6c940c98mmentovai * DbgHelp.h
2303261e8b6eac44a41341f112821482bee6c940c98mmentovai */
2313261e8b6eac44a41341f112821482bee6c940c98mmentovai
2323261e8b6eac44a41341f112821482bee6c940c98mmentovai
233355c757b495016b1db1e8f53d2806c2667e1e4a1mmentovai/* An MDRVA is an offset into the minidump file.  The beginning of the
234355c757b495016b1db1e8f53d2806c2667e1e4a1mmentovai * MDRawHeader is at offset 0. */
2356162aed3c3fcfc53373c963ac375d39a5dfa5a25ted.mielczarek@gmail.comtypedef uint32_t MDRVA;  /* RVA */
2363261e8b6eac44a41341f112821482bee6c940c98mmentovai
2373261e8b6eac44a41341f112821482bee6c940c98mmentovaitypedef struct {
2386162aed3c3fcfc53373c963ac375d39a5dfa5a25ted.mielczarek@gmail.com  uint32_t  data_size;
2393261e8b6eac44a41341f112821482bee6c940c98mmentovai  MDRVA     rva;
240355c757b495016b1db1e8f53d2806c2667e1e4a1mmentovai} MDLocationDescriptor;  /* MINIDUMP_LOCATION_DESCRIPTOR */
2413261e8b6eac44a41341f112821482bee6c940c98mmentovai
2423261e8b6eac44a41341f112821482bee6c940c98mmentovai
2433261e8b6eac44a41341f112821482bee6c940c98mmentovaitypedef struct {
244355c757b495016b1db1e8f53d2806c2667e1e4a1mmentovai  /* The base address of the memory range on the host that produced the
245355c757b495016b1db1e8f53d2806c2667e1e4a1mmentovai   * minidump. */
2466162aed3c3fcfc53373c963ac375d39a5dfa5a25ted.mielczarek@gmail.com  uint64_t             start_of_memory_range;
247355c757b495016b1db1e8f53d2806c2667e1e4a1mmentovai
2483261e8b6eac44a41341f112821482bee6c940c98mmentovai  MDLocationDescriptor memory;
249355c757b495016b1db1e8f53d2806c2667e1e4a1mmentovai} MDMemoryDescriptor;  /* MINIDUMP_MEMORY_DESCRIPTOR */
2503261e8b6eac44a41341f112821482bee6c940c98mmentovai
2513261e8b6eac44a41341f112821482bee6c940c98mmentovai
2523261e8b6eac44a41341f112821482bee6c940c98mmentovaitypedef struct {
2536162aed3c3fcfc53373c963ac375d39a5dfa5a25ted.mielczarek@gmail.com  uint32_t  signature;
2546162aed3c3fcfc53373c963ac375d39a5dfa5a25ted.mielczarek@gmail.com  uint32_t  version;
2556162aed3c3fcfc53373c963ac375d39a5dfa5a25ted.mielczarek@gmail.com  uint32_t  stream_count;
256355c757b495016b1db1e8f53d2806c2667e1e4a1mmentovai  MDRVA     stream_directory_rva;  /* A |stream_count|-sized array of
257355c757b495016b1db1e8f53d2806c2667e1e4a1mmentovai                                    * MDRawDirectory structures. */
2586162aed3c3fcfc53373c963ac375d39a5dfa5a25ted.mielczarek@gmail.com  uint32_t  checksum;              /* Can be 0.  In fact, that's all that's
259355c757b495016b1db1e8f53d2806c2667e1e4a1mmentovai                                    * been found in minidump files. */
2606162aed3c3fcfc53373c963ac375d39a5dfa5a25ted.mielczarek@gmail.com  uint32_t  time_date_stamp;       /* time_t */
2616162aed3c3fcfc53373c963ac375d39a5dfa5a25ted.mielczarek@gmail.com  uint64_t  flags;
262355c757b495016b1db1e8f53d2806c2667e1e4a1mmentovai} MDRawHeader;  /* MINIDUMP_HEADER */
2633261e8b6eac44a41341f112821482bee6c940c98mmentovai
2643261e8b6eac44a41341f112821482bee6c940c98mmentovai/* For (MDRawHeader).signature and (MDRawHeader).version.  Note that only the
2653261e8b6eac44a41341f112821482bee6c940c98mmentovai * low 16 bits of (MDRawHeader).version are MD_HEADER_VERSION.  Per the
2663261e8b6eac44a41341f112821482bee6c940c98mmentovai * documentation, the high 16 bits are implementation-specific. */
2673261e8b6eac44a41341f112821482bee6c940c98mmentovai#define MD_HEADER_SIGNATURE 0x504d444d /* 'PMDM' */
2683261e8b6eac44a41341f112821482bee6c940c98mmentovai     /* MINIDUMP_SIGNATURE */
2693261e8b6eac44a41341f112821482bee6c940c98mmentovai#define MD_HEADER_VERSION   0x0000a793 /* 42899 */
2703261e8b6eac44a41341f112821482bee6c940c98mmentovai     /* MINIDUMP_VERSION */
2713261e8b6eac44a41341f112821482bee6c940c98mmentovai
272355c757b495016b1db1e8f53d2806c2667e1e4a1mmentovai/* For (MDRawHeader).flags: */
2733261e8b6eac44a41341f112821482bee6c940c98mmentovaitypedef enum {
274e47047b3835dcbb5da7fe7f5f9b6d78a5307122awaylonis  /* MD_NORMAL is the standard type of minidump.  It includes full
275355c757b495016b1db1e8f53d2806c2667e1e4a1mmentovai   * streams for the thread list, module list, exception, system info,
276355c757b495016b1db1e8f53d2806c2667e1e4a1mmentovai   * and miscellaneous info.  A memory list stream is also present,
277355c757b495016b1db1e8f53d2806c2667e1e4a1mmentovai   * pointing to the same stack memory contained in the thread list,
278355c757b495016b1db1e8f53d2806c2667e1e4a1mmentovai   * as well as a 256-byte region around the instruction address that
279355c757b495016b1db1e8f53d2806c2667e1e4a1mmentovai   * was executing when the exception occurred.  Stack memory is from
280355c757b495016b1db1e8f53d2806c2667e1e4a1mmentovai   * 4 bytes below a thread's stack pointer up to the top of the
281355c757b495016b1db1e8f53d2806c2667e1e4a1mmentovai   * memory region encompassing the stack. */
282e47047b3835dcbb5da7fe7f5f9b6d78a5307122awaylonis  MD_NORMAL                            = 0x00000000,
283e47047b3835dcbb5da7fe7f5f9b6d78a5307122awaylonis  MD_WITH_DATA_SEGS                    = 0x00000001,
284e47047b3835dcbb5da7fe7f5f9b6d78a5307122awaylonis  MD_WITH_FULL_MEMORY                  = 0x00000002,
285e47047b3835dcbb5da7fe7f5f9b6d78a5307122awaylonis  MD_WITH_HANDLE_DATA                  = 0x00000004,
286e47047b3835dcbb5da7fe7f5f9b6d78a5307122awaylonis  MD_FILTER_MEMORY                     = 0x00000008,
287e47047b3835dcbb5da7fe7f5f9b6d78a5307122awaylonis  MD_SCAN_MEMORY                       = 0x00000010,
288e47047b3835dcbb5da7fe7f5f9b6d78a5307122awaylonis  MD_WITH_UNLOADED_MODULES             = 0x00000020,
289e47047b3835dcbb5da7fe7f5f9b6d78a5307122awaylonis  MD_WITH_INDIRECTLY_REFERENCED_MEMORY = 0x00000040,
290e47047b3835dcbb5da7fe7f5f9b6d78a5307122awaylonis  MD_FILTER_MODULE_PATHS               = 0x00000080,
291e47047b3835dcbb5da7fe7f5f9b6d78a5307122awaylonis  MD_WITH_PROCESS_THREAD_DATA          = 0x00000100,
292e47047b3835dcbb5da7fe7f5f9b6d78a5307122awaylonis  MD_WITH_PRIVATE_READ_WRITE_MEMORY    = 0x00000200,
293e47047b3835dcbb5da7fe7f5f9b6d78a5307122awaylonis  MD_WITHOUT_OPTIONAL_DATA             = 0x00000400,
294e47047b3835dcbb5da7fe7f5f9b6d78a5307122awaylonis  MD_WITH_FULL_MEMORY_INFO             = 0x00000800,
295e47047b3835dcbb5da7fe7f5f9b6d78a5307122awaylonis  MD_WITH_THREAD_INFO                  = 0x00001000,
29680745c59dec4eaaefb36d159b53591a2c60ae37fted.mielczarek  MD_WITH_CODE_SEGS                    = 0x00002000,
29780745c59dec4eaaefb36d159b53591a2c60ae37fted.mielczarek  MD_WITHOUT_AUXILLIARY_SEGS           = 0x00004000,
29880745c59dec4eaaefb36d159b53591a2c60ae37fted.mielczarek  MD_WITH_FULL_AUXILLIARY_STATE        = 0x00008000,
29980745c59dec4eaaefb36d159b53591a2c60ae37fted.mielczarek  MD_WITH_PRIVATE_WRITE_COPY_MEMORY    = 0x00010000,
30080745c59dec4eaaefb36d159b53591a2c60ae37fted.mielczarek  MD_IGNORE_INACCESSIBLE_MEMORY        = 0x00020000,
30180745c59dec4eaaefb36d159b53591a2c60ae37fted.mielczarek  MD_WITH_TOKEN_INFORMATION            = 0x00040000
302355c757b495016b1db1e8f53d2806c2667e1e4a1mmentovai} MDType;  /* MINIDUMP_TYPE */
3033261e8b6eac44a41341f112821482bee6c940c98mmentovai
3043261e8b6eac44a41341f112821482bee6c940c98mmentovai
3053261e8b6eac44a41341f112821482bee6c940c98mmentovaitypedef struct {
3066162aed3c3fcfc53373c963ac375d39a5dfa5a25ted.mielczarek@gmail.com  uint32_t             stream_type;
3073261e8b6eac44a41341f112821482bee6c940c98mmentovai  MDLocationDescriptor location;
308355c757b495016b1db1e8f53d2806c2667e1e4a1mmentovai} MDRawDirectory;  /* MINIDUMP_DIRECTORY */
3093261e8b6eac44a41341f112821482bee6c940c98mmentovai
3103261e8b6eac44a41341f112821482bee6c940c98mmentovai/* For (MDRawDirectory).stream_type */
3113261e8b6eac44a41341f112821482bee6c940c98mmentovaitypedef enum {
312e47047b3835dcbb5da7fe7f5f9b6d78a5307122awaylonis  MD_UNUSED_STREAM               =  0,
313e47047b3835dcbb5da7fe7f5f9b6d78a5307122awaylonis  MD_RESERVED_STREAM_0           =  1,
314e47047b3835dcbb5da7fe7f5f9b6d78a5307122awaylonis  MD_RESERVED_STREAM_1           =  2,
315e47047b3835dcbb5da7fe7f5f9b6d78a5307122awaylonis  MD_THREAD_LIST_STREAM          =  3,  /* MDRawThreadList */
316e47047b3835dcbb5da7fe7f5f9b6d78a5307122awaylonis  MD_MODULE_LIST_STREAM          =  4,  /* MDRawModuleList */
317e47047b3835dcbb5da7fe7f5f9b6d78a5307122awaylonis  MD_MEMORY_LIST_STREAM          =  5,  /* MDRawMemoryList */
318e47047b3835dcbb5da7fe7f5f9b6d78a5307122awaylonis  MD_EXCEPTION_STREAM            =  6,  /* MDRawExceptionStream */
319e47047b3835dcbb5da7fe7f5f9b6d78a5307122awaylonis  MD_SYSTEM_INFO_STREAM          =  7,  /* MDRawSystemInfo */
320e47047b3835dcbb5da7fe7f5f9b6d78a5307122awaylonis  MD_THREAD_EX_LIST_STREAM       =  8,
321e47047b3835dcbb5da7fe7f5f9b6d78a5307122awaylonis  MD_MEMORY_64_LIST_STREAM       =  9,
322e47047b3835dcbb5da7fe7f5f9b6d78a5307122awaylonis  MD_COMMENT_STREAM_A            = 10,
323e47047b3835dcbb5da7fe7f5f9b6d78a5307122awaylonis  MD_COMMENT_STREAM_W            = 11,
324e47047b3835dcbb5da7fe7f5f9b6d78a5307122awaylonis  MD_HANDLE_DATA_STREAM          = 12,
325e47047b3835dcbb5da7fe7f5f9b6d78a5307122awaylonis  MD_FUNCTION_TABLE_STREAM       = 13,
326e47047b3835dcbb5da7fe7f5f9b6d78a5307122awaylonis  MD_UNLOADED_MODULE_LIST_STREAM = 14,
327e47047b3835dcbb5da7fe7f5f9b6d78a5307122awaylonis  MD_MISC_INFO_STREAM            = 15,  /* MDRawMiscInfo */
32880745c59dec4eaaefb36d159b53591a2c60ae37fted.mielczarek  MD_MEMORY_INFO_LIST_STREAM     = 16,  /* MDRawMemoryInfoList */
32980745c59dec4eaaefb36d159b53591a2c60ae37fted.mielczarek  MD_THREAD_INFO_LIST_STREAM     = 17,
33080745c59dec4eaaefb36d159b53591a2c60ae37fted.mielczarek  MD_HANDLE_OPERATION_LIST_STREAM = 18,
3315ac32b6534688b71a2b6fe7841cf7e552a992d01mmentovai  MD_LAST_RESERVED_STREAM        = 0x0000ffff,
3325ac32b6534688b71a2b6fe7841cf7e552a992d01mmentovai
333e5dc60822e5938fea2ae892ccddb906641ba174emmentovai  /* Breakpad extension types.  0x4767 = "Gg" */
33484b0fc6b7342b8bec16a2056bd9a160e87232ac8ted.mielczarek  MD_BREAKPAD_INFO_STREAM        = 0x47670001,  /* MDRawBreakpadInfo  */
33508c5838aa96f7d8246ebb1883d0aec959ac38487cdn@chromium.org  MD_ASSERTION_INFO_STREAM       = 0x47670002,  /* MDRawAssertionInfo */
33684b0fc6b7342b8bec16a2056bd9a160e87232ac8ted.mielczarek  /* These are additional minidump stream values which are specific to
33784b0fc6b7342b8bec16a2056bd9a160e87232ac8ted.mielczarek   * the linux breakpad implementation. */
33884b0fc6b7342b8bec16a2056bd9a160e87232ac8ted.mielczarek  MD_LINUX_CPU_INFO              = 0x47670003,  /* /proc/cpuinfo      */
33984b0fc6b7342b8bec16a2056bd9a160e87232ac8ted.mielczarek  MD_LINUX_PROC_STATUS           = 0x47670004,  /* /proc/$x/status    */
34084b0fc6b7342b8bec16a2056bd9a160e87232ac8ted.mielczarek  MD_LINUX_LSB_RELEASE           = 0x47670005,  /* /etc/lsb-release   */
34184b0fc6b7342b8bec16a2056bd9a160e87232ac8ted.mielczarek  MD_LINUX_CMD_LINE              = 0x47670006,  /* /proc/$x/cmdline   */
34284b0fc6b7342b8bec16a2056bd9a160e87232ac8ted.mielczarek  MD_LINUX_ENVIRON               = 0x47670007,  /* /proc/$x/environ   */
34384b0fc6b7342b8bec16a2056bd9a160e87232ac8ted.mielczarek  MD_LINUX_AUXV                  = 0x47670008,  /* /proc/$x/auxv      */
34484b0fc6b7342b8bec16a2056bd9a160e87232ac8ted.mielczarek  MD_LINUX_MAPS                  = 0x47670009,  /* /proc/$x/maps      */
345e2f4be928865f991e7177248bc4daadb0bd4aed0mdempsky@chromium.org  MD_LINUX_DSO_DEBUG             = 0x4767000A   /* MDRawDebug{32,64}  */
346355c757b495016b1db1e8f53d2806c2667e1e4a1mmentovai} MDStreamType;  /* MINIDUMP_STREAM_TYPE */
3473261e8b6eac44a41341f112821482bee6c940c98mmentovai
3483261e8b6eac44a41341f112821482bee6c940c98mmentovai
3493261e8b6eac44a41341f112821482bee6c940c98mmentovaitypedef struct {
3506162aed3c3fcfc53373c963ac375d39a5dfa5a25ted.mielczarek@gmail.com  uint32_t length;     /* Length of buffer in bytes (not characters),
3513562017ff5a65fff770cd798903ee294db912aa2ivan.penkov@gmail.com                        * excluding 0-terminator */
3526162aed3c3fcfc53373c963ac375d39a5dfa5a25ted.mielczarek@gmail.com  uint16_t buffer[1];  /* UTF-16-encoded, 0-terminated */
353aa57b8e3dedd3cdc9f627cddae9c80b285d5a39bmmentovai} MDString;  /* MINIDUMP_STRING */
354aa57b8e3dedd3cdc9f627cddae9c80b285d5a39bmmentovai
3552e0e2234b9e9d7d82c4c3c20396bdf8f18007e6cmmentovaistatic const size_t MDString_minsize = offsetof(MDString, buffer[0]);
3562e0e2234b9e9d7d82c4c3c20396bdf8f18007e6cmmentovai
357aa57b8e3dedd3cdc9f627cddae9c80b285d5a39bmmentovai
358aa57b8e3dedd3cdc9f627cddae9c80b285d5a39bmmentovaitypedef struct {
3596162aed3c3fcfc53373c963ac375d39a5dfa5a25ted.mielczarek@gmail.com  uint32_t             thread_id;
3606162aed3c3fcfc53373c963ac375d39a5dfa5a25ted.mielczarek@gmail.com  uint32_t             suspend_count;
3616162aed3c3fcfc53373c963ac375d39a5dfa5a25ted.mielczarek@gmail.com  uint32_t             priority_class;
3626162aed3c3fcfc53373c963ac375d39a5dfa5a25ted.mielczarek@gmail.com  uint32_t             priority;
3636162aed3c3fcfc53373c963ac375d39a5dfa5a25ted.mielczarek@gmail.com  uint64_t             teb;             /* Thread environment block */
3643261e8b6eac44a41341f112821482bee6c940c98mmentovai  MDMemoryDescriptor   stack;
365355c757b495016b1db1e8f53d2806c2667e1e4a1mmentovai  MDLocationDescriptor thread_context;  /* MDRawContext[CPU] */
366355c757b495016b1db1e8f53d2806c2667e1e4a1mmentovai} MDRawThread;  /* MINIDUMP_THREAD */
3673261e8b6eac44a41341f112821482bee6c940c98mmentovai
3683261e8b6eac44a41341f112821482bee6c940c98mmentovai
3693261e8b6eac44a41341f112821482bee6c940c98mmentovaitypedef struct {
3706162aed3c3fcfc53373c963ac375d39a5dfa5a25ted.mielczarek@gmail.com  uint32_t    number_of_threads;
3712e0e2234b9e9d7d82c4c3c20396bdf8f18007e6cmmentovai  MDRawThread threads[1];
372355c757b495016b1db1e8f53d2806c2667e1e4a1mmentovai} MDRawThreadList;  /* MINIDUMP_THREAD_LIST */
3733261e8b6eac44a41341f112821482bee6c940c98mmentovai
3742e0e2234b9e9d7d82c4c3c20396bdf8f18007e6cmmentovaistatic const size_t MDRawThreadList_minsize = offsetof(MDRawThreadList,
3752e0e2234b9e9d7d82c4c3c20396bdf8f18007e6cmmentovai                                                       threads[0]);
3762e0e2234b9e9d7d82c4c3c20396bdf8f18007e6cmmentovai
3773261e8b6eac44a41341f112821482bee6c940c98mmentovai
3783261e8b6eac44a41341f112821482bee6c940c98mmentovaitypedef struct {
3796162aed3c3fcfc53373c963ac375d39a5dfa5a25ted.mielczarek@gmail.com  uint64_t             base_of_image;
3806162aed3c3fcfc53373c963ac375d39a5dfa5a25ted.mielczarek@gmail.com  uint32_t             size_of_image;
3816162aed3c3fcfc53373c963ac375d39a5dfa5a25ted.mielczarek@gmail.com  uint32_t             checksum;         /* 0 if unknown */
3826162aed3c3fcfc53373c963ac375d39a5dfa5a25ted.mielczarek@gmail.com  uint32_t             time_date_stamp;  /* time_t */
383aa57b8e3dedd3cdc9f627cddae9c80b285d5a39bmmentovai  MDRVA                module_name_rva;  /* MDString, pathname or filename */
3843261e8b6eac44a41341f112821482bee6c940c98mmentovai  MDVSFixedFileInfo    version_info;
3853261e8b6eac44a41341f112821482bee6c940c98mmentovai
3863261e8b6eac44a41341f112821482bee6c940c98mmentovai  /* The next field stores a CodeView record and is populated when a module's
3873261e8b6eac44a41341f112821482bee6c940c98mmentovai   * debug information resides in a PDB file.  It identifies the PDB file. */
3883261e8b6eac44a41341f112821482bee6c940c98mmentovai  MDLocationDescriptor cv_record;
3893261e8b6eac44a41341f112821482bee6c940c98mmentovai
3903261e8b6eac44a41341f112821482bee6c940c98mmentovai  /* The next field is populated when a module's debug information resides
3913261e8b6eac44a41341f112821482bee6c940c98mmentovai   * in a DBG file.  It identifies the DBG file.  This field is effectively
3923261e8b6eac44a41341f112821482bee6c940c98mmentovai   * obsolete with modules built by recent toolchains. */
3933261e8b6eac44a41341f112821482bee6c940c98mmentovai  MDLocationDescriptor misc_record;
3943261e8b6eac44a41341f112821482bee6c940c98mmentovai
3953261e8b6eac44a41341f112821482bee6c940c98mmentovai  /* Alignment problem: reserved0 and reserved1 are defined by the platform
3963261e8b6eac44a41341f112821482bee6c940c98mmentovai   * SDK as 64-bit quantities.  However, that results in a structure whose
3973261e8b6eac44a41341f112821482bee6c940c98mmentovai   * alignment is unpredictable on different CPUs and ABIs.  If the ABI
3983261e8b6eac44a41341f112821482bee6c940c98mmentovai   * specifies full alignment of 64-bit quantities in structures (as ppc
3993261e8b6eac44a41341f112821482bee6c940c98mmentovai   * does), there will be padding between miscRecord and reserved0.  If
4003261e8b6eac44a41341f112821482bee6c940c98mmentovai   * 64-bit quantities can be aligned on 32-bit boundaries (as on x86),
4013261e8b6eac44a41341f112821482bee6c940c98mmentovai   * this padding will not exist.  (Note that the structure up to this point
4023261e8b6eac44a41341f112821482bee6c940c98mmentovai   * contains 1 64-bit member followed by 21 32-bit members.)
4033261e8b6eac44a41341f112821482bee6c940c98mmentovai   * As a workaround, reserved0 and reserved1 are instead defined here as
4043261e8b6eac44a41341f112821482bee6c940c98mmentovai   * four 32-bit quantities.  This should be harmless, as there are
4053261e8b6eac44a41341f112821482bee6c940c98mmentovai   * currently no known uses for these fields. */
4066162aed3c3fcfc53373c963ac375d39a5dfa5a25ted.mielczarek@gmail.com  uint32_t             reserved0[2];
4076162aed3c3fcfc53373c963ac375d39a5dfa5a25ted.mielczarek@gmail.com  uint32_t             reserved1[2];
408355c757b495016b1db1e8f53d2806c2667e1e4a1mmentovai} MDRawModule;  /* MINIDUMP_MODULE */
4093261e8b6eac44a41341f112821482bee6c940c98mmentovai
4103261e8b6eac44a41341f112821482bee6c940c98mmentovai/* The inclusion of a 64-bit type in MINIDUMP_MODULE forces the struct to
4113261e8b6eac44a41341f112821482bee6c940c98mmentovai * be tail-padded out to a multiple of 64 bits under some ABIs (such as PPC).
4123261e8b6eac44a41341f112821482bee6c940c98mmentovai * This doesn't occur on systems that don't tail-pad in this manner.  Define
4133261e8b6eac44a41341f112821482bee6c940c98mmentovai * this macro to be the usable size of the MDRawModule struct, and use it in
4143261e8b6eac44a41341f112821482bee6c940c98mmentovai * place of sizeof(MDRawModule). */
4153261e8b6eac44a41341f112821482bee6c940c98mmentovai#define MD_MODULE_SIZE 108
4163261e8b6eac44a41341f112821482bee6c940c98mmentovai
4173261e8b6eac44a41341f112821482bee6c940c98mmentovai
4183261e8b6eac44a41341f112821482bee6c940c98mmentovai/* (MDRawModule).cv_record can reference MDCVInfoPDB20 or MDCVInfoPDB70.
4193261e8b6eac44a41341f112821482bee6c940c98mmentovai * Ref.: http://www.debuginfo.com/articles/debuginfomatch.html
4203261e8b6eac44a41341f112821482bee6c940c98mmentovai * MDCVInfoPDB70 is the expected structure type with recent toolchains. */
4213261e8b6eac44a41341f112821482bee6c940c98mmentovai
4223261e8b6eac44a41341f112821482bee6c940c98mmentovaitypedef struct {
4236162aed3c3fcfc53373c963ac375d39a5dfa5a25ted.mielczarek@gmail.com  uint32_t signature;
4246162aed3c3fcfc53373c963ac375d39a5dfa5a25ted.mielczarek@gmail.com  uint32_t offset;     /* Offset to debug data (expect 0 in minidump) */
4253261e8b6eac44a41341f112821482bee6c940c98mmentovai} MDCVHeader;
4263261e8b6eac44a41341f112821482bee6c940c98mmentovai
4273261e8b6eac44a41341f112821482bee6c940c98mmentovaitypedef struct {
4283261e8b6eac44a41341f112821482bee6c940c98mmentovai  MDCVHeader cv_header;
4296162aed3c3fcfc53373c963ac375d39a5dfa5a25ted.mielczarek@gmail.com  uint32_t   signature;         /* time_t debug information created */
4306162aed3c3fcfc53373c963ac375d39a5dfa5a25ted.mielczarek@gmail.com  uint32_t   age;               /* revision of PDB file */
4316162aed3c3fcfc53373c963ac375d39a5dfa5a25ted.mielczarek@gmail.com  uint8_t    pdb_file_name[1];  /* Pathname or filename of PDB file */
4323261e8b6eac44a41341f112821482bee6c940c98mmentovai} MDCVInfoPDB20;
4333261e8b6eac44a41341f112821482bee6c940c98mmentovai
4342e0e2234b9e9d7d82c4c3c20396bdf8f18007e6cmmentovaistatic const size_t MDCVInfoPDB20_minsize = offsetof(MDCVInfoPDB20,
4352e0e2234b9e9d7d82c4c3c20396bdf8f18007e6cmmentovai                                                     pdb_file_name[0]);
4362e0e2234b9e9d7d82c4c3c20396bdf8f18007e6cmmentovai
437355c757b495016b1db1e8f53d2806c2667e1e4a1mmentovai#define MD_CVINFOPDB20_SIGNATURE 0x3031424e  /* cvHeader.signature = '01BN' */
4383261e8b6eac44a41341f112821482bee6c940c98mmentovai
4393261e8b6eac44a41341f112821482bee6c940c98mmentovaitypedef struct {
4406162aed3c3fcfc53373c963ac375d39a5dfa5a25ted.mielczarek@gmail.com  uint32_t  cv_signature;
441355c757b495016b1db1e8f53d2806c2667e1e4a1mmentovai  MDGUID    signature;         /* GUID, identifies PDB file */
4426162aed3c3fcfc53373c963ac375d39a5dfa5a25ted.mielczarek@gmail.com  uint32_t  age;               /* Identifies incremental changes to PDB file */
4436162aed3c3fcfc53373c963ac375d39a5dfa5a25ted.mielczarek@gmail.com  uint8_t   pdb_file_name[1];  /* Pathname or filename of PDB file,
444355c757b495016b1db1e8f53d2806c2667e1e4a1mmentovai                                * 0-terminated 8-bit character data (UTF-8?) */
4453261e8b6eac44a41341f112821482bee6c940c98mmentovai} MDCVInfoPDB70;
4463261e8b6eac44a41341f112821482bee6c940c98mmentovai
4472e0e2234b9e9d7d82c4c3c20396bdf8f18007e6cmmentovaistatic const size_t MDCVInfoPDB70_minsize = offsetof(MDCVInfoPDB70,
4482e0e2234b9e9d7d82c4c3c20396bdf8f18007e6cmmentovai                                                     pdb_file_name[0]);
4492e0e2234b9e9d7d82c4c3c20396bdf8f18007e6cmmentovai
450355c757b495016b1db1e8f53d2806c2667e1e4a1mmentovai#define MD_CVINFOPDB70_SIGNATURE 0x53445352  /* cvSignature = 'SDSR' */
4513261e8b6eac44a41341f112821482bee6c940c98mmentovai
4529abfe3d0a5bbefd85c54feda0dac2d030cbb5635mmentovaitypedef struct {
4536162aed3c3fcfc53373c963ac375d39a5dfa5a25ted.mielczarek@gmail.com  uint32_t data1[2];
4546162aed3c3fcfc53373c963ac375d39a5dfa5a25ted.mielczarek@gmail.com  uint32_t data2;
4556162aed3c3fcfc53373c963ac375d39a5dfa5a25ted.mielczarek@gmail.com  uint32_t data3;
4566162aed3c3fcfc53373c963ac375d39a5dfa5a25ted.mielczarek@gmail.com  uint32_t data4;
4576162aed3c3fcfc53373c963ac375d39a5dfa5a25ted.mielczarek@gmail.com  uint32_t data5[3];
4586162aed3c3fcfc53373c963ac375d39a5dfa5a25ted.mielczarek@gmail.com  uint8_t  extra[2];
4599abfe3d0a5bbefd85c54feda0dac2d030cbb5635mmentovai} MDCVInfoELF;
4609abfe3d0a5bbefd85c54feda0dac2d030cbb5635mmentovai
46148dab62c2df1621db0e5b57f400e1fc38c1b37eemmentovai/* In addition to the two CodeView record formats above, used for linking
46248dab62c2df1621db0e5b57f400e1fc38c1b37eemmentovai * to external pdb files, it is possible for debugging data to be carried
46348dab62c2df1621db0e5b57f400e1fc38c1b37eemmentovai * directly in the CodeView record itself.  These signature values will
46448dab62c2df1621db0e5b57f400e1fc38c1b37eemmentovai * be found in the first 4 bytes of the CodeView record.  Additional values
46548dab62c2df1621db0e5b57f400e1fc38c1b37eemmentovai * not commonly experienced in the wild are given by "Microsoft Symbol and
46648dab62c2df1621db0e5b57f400e1fc38c1b37eemmentovai * Type Information", http://www.x86.org/ftp/manuals/tools/sym.pdf, section
46748dab62c2df1621db0e5b57f400e1fc38c1b37eemmentovai * 7.2.  An in-depth description of the CodeView 4.1 format is given by
46848dab62c2df1621db0e5b57f400e1fc38c1b37eemmentovai * "Undocumented Windows 2000 Secrets", Windows 2000 Debugging Support/
46948dab62c2df1621db0e5b57f400e1fc38c1b37eemmentovai * Microsoft Symbol File Internals/CodeView Subsections,
47048dab62c2df1621db0e5b57f400e1fc38c1b37eemmentovai * http://www.rawol.com/features/undocumented/sbs-w2k-1-windows-2000-debugging-support.pdf
47148dab62c2df1621db0e5b57f400e1fc38c1b37eemmentovai */
47248dab62c2df1621db0e5b57f400e1fc38c1b37eemmentovai#define MD_CVINFOCV41_SIGNATURE 0x3930424e  /* '90BN', CodeView 4.10. */
47348dab62c2df1621db0e5b57f400e1fc38c1b37eemmentovai#define MD_CVINFOCV50_SIGNATURE 0x3131424e  /* '11BN', CodeView 5.0,
47448dab62c2df1621db0e5b57f400e1fc38c1b37eemmentovai                                             * MS C7-format (/Z7). */
47548dab62c2df1621db0e5b57f400e1fc38c1b37eemmentovai
47648dab62c2df1621db0e5b57f400e1fc38c1b37eemmentovai#define MD_CVINFOUNKNOWN_SIGNATURE 0xffffffff  /* An unlikely value. */
47748dab62c2df1621db0e5b57f400e1fc38c1b37eemmentovai
4783261e8b6eac44a41341f112821482bee6c940c98mmentovai/* (MDRawModule).miscRecord can reference MDImageDebugMisc.  The Windows
4793261e8b6eac44a41341f112821482bee6c940c98mmentovai * structure is actually defined in WinNT.h.  This structure is effectively
4803261e8b6eac44a41341f112821482bee6c940c98mmentovai * obsolete with modules built by recent toolchains. */
4813261e8b6eac44a41341f112821482bee6c940c98mmentovai
4823261e8b6eac44a41341f112821482bee6c940c98mmentovaitypedef struct {
4836162aed3c3fcfc53373c963ac375d39a5dfa5a25ted.mielczarek@gmail.com  uint32_t  data_type;    /* IMAGE_DEBUG_TYPE_*, not defined here because
484355c757b495016b1db1e8f53d2806c2667e1e4a1mmentovai                           * this debug record type is mostly obsolete. */
4856162aed3c3fcfc53373c963ac375d39a5dfa5a25ted.mielczarek@gmail.com  uint32_t  length;       /* Length of entire MDImageDebugMisc structure */
4866162aed3c3fcfc53373c963ac375d39a5dfa5a25ted.mielczarek@gmail.com  uint8_t   unicode;      /* True if data is multibyte */
4876162aed3c3fcfc53373c963ac375d39a5dfa5a25ted.mielczarek@gmail.com  uint8_t   reserved[3];
4886162aed3c3fcfc53373c963ac375d39a5dfa5a25ted.mielczarek@gmail.com  uint8_t   data[1];
489355c757b495016b1db1e8f53d2806c2667e1e4a1mmentovai} MDImageDebugMisc;  /* IMAGE_DEBUG_MISC */
4903261e8b6eac44a41341f112821482bee6c940c98mmentovai
4912e0e2234b9e9d7d82c4c3c20396bdf8f18007e6cmmentovaistatic const size_t MDImageDebugMisc_minsize = offsetof(MDImageDebugMisc,
4922e0e2234b9e9d7d82c4c3c20396bdf8f18007e6cmmentovai                                                        data[0]);
4932e0e2234b9e9d7d82c4c3c20396bdf8f18007e6cmmentovai
4943261e8b6eac44a41341f112821482bee6c940c98mmentovai
4953261e8b6eac44a41341f112821482bee6c940c98mmentovaitypedef struct {
4966162aed3c3fcfc53373c963ac375d39a5dfa5a25ted.mielczarek@gmail.com  uint32_t    number_of_modules;
4972e0e2234b9e9d7d82c4c3c20396bdf8f18007e6cmmentovai  MDRawModule modules[1];
498355c757b495016b1db1e8f53d2806c2667e1e4a1mmentovai} MDRawModuleList;  /* MINIDUMP_MODULE_LIST */
4993261e8b6eac44a41341f112821482bee6c940c98mmentovai
5002e0e2234b9e9d7d82c4c3c20396bdf8f18007e6cmmentovaistatic const size_t MDRawModuleList_minsize = offsetof(MDRawModuleList,
5012e0e2234b9e9d7d82c4c3c20396bdf8f18007e6cmmentovai                                                       modules[0]);
5022e0e2234b9e9d7d82c4c3c20396bdf8f18007e6cmmentovai
5033261e8b6eac44a41341f112821482bee6c940c98mmentovai
5043261e8b6eac44a41341f112821482bee6c940c98mmentovaitypedef struct {
5056162aed3c3fcfc53373c963ac375d39a5dfa5a25ted.mielczarek@gmail.com  uint32_t           number_of_memory_ranges;
5062e0e2234b9e9d7d82c4c3c20396bdf8f18007e6cmmentovai  MDMemoryDescriptor memory_ranges[1];
507355c757b495016b1db1e8f53d2806c2667e1e4a1mmentovai} MDRawMemoryList;  /* MINIDUMP_MEMORY_LIST */
5083261e8b6eac44a41341f112821482bee6c940c98mmentovai
5092e0e2234b9e9d7d82c4c3c20396bdf8f18007e6cmmentovaistatic const size_t MDRawMemoryList_minsize = offsetof(MDRawMemoryList,
5102e0e2234b9e9d7d82c4c3c20396bdf8f18007e6cmmentovai                                                       memory_ranges[0]);
5112e0e2234b9e9d7d82c4c3c20396bdf8f18007e6cmmentovai
5123261e8b6eac44a41341f112821482bee6c940c98mmentovai
5133261e8b6eac44a41341f112821482bee6c940c98mmentovai#define MD_EXCEPTION_MAXIMUM_PARAMETERS 15
5143261e8b6eac44a41341f112821482bee6c940c98mmentovai
5153261e8b6eac44a41341f112821482bee6c940c98mmentovaitypedef struct {
5166162aed3c3fcfc53373c963ac375d39a5dfa5a25ted.mielczarek@gmail.com  uint32_t  exception_code;     /* Windows: MDExceptionCodeWin,
517b5c78cc8d1bdbd96a0d31750cd35d2475752c7a0ted.mielczarek                                 * Mac OS X: MDExceptionMac,
518b5c78cc8d1bdbd96a0d31750cd35d2475752c7a0ted.mielczarek                                 * Linux: MDExceptionCodeLinux. */
5196162aed3c3fcfc53373c963ac375d39a5dfa5a25ted.mielczarek@gmail.com  uint32_t  exception_flags;    /* Windows: 1 if noncontinuable,
520355c757b495016b1db1e8f53d2806c2667e1e4a1mmentovai                                   Mac OS X: MDExceptionCodeMac. */
5216162aed3c3fcfc53373c963ac375d39a5dfa5a25ted.mielczarek@gmail.com  uint64_t  exception_record;   /* Address (in the minidump-producing host's
522355c757b495016b1db1e8f53d2806c2667e1e4a1mmentovai                                 * memory) of another MDException, for
523355c757b495016b1db1e8f53d2806c2667e1e4a1mmentovai                                 * nested exceptions. */
5246162aed3c3fcfc53373c963ac375d39a5dfa5a25ted.mielczarek@gmail.com  uint64_t  exception_address;  /* The address that caused the exception.
525355c757b495016b1db1e8f53d2806c2667e1e4a1mmentovai                                 * Mac OS X: exception subcode (which is
526355c757b495016b1db1e8f53d2806c2667e1e4a1mmentovai                                 *           typically the address). */
5276162aed3c3fcfc53373c963ac375d39a5dfa5a25ted.mielczarek@gmail.com  uint32_t  number_parameters;  /* Number of valid elements in
528355c757b495016b1db1e8f53d2806c2667e1e4a1mmentovai                                 * exception_information. */
5296162aed3c3fcfc53373c963ac375d39a5dfa5a25ted.mielczarek@gmail.com  uint32_t  __align;
5306162aed3c3fcfc53373c963ac375d39a5dfa5a25ted.mielczarek@gmail.com  uint64_t  exception_information[MD_EXCEPTION_MAXIMUM_PARAMETERS];
531355c757b495016b1db1e8f53d2806c2667e1e4a1mmentovai} MDException;  /* MINIDUMP_EXCEPTION */
532355c757b495016b1db1e8f53d2806c2667e1e4a1mmentovai
533a194d6f1acbcd3f941b228901a02a0708f1c2ad5nealsid#include "minidump_exception_linux.h"
534d9b40724ed6a6c243eaef196e617071ec36d4282thestig@chromium.org#include "minidump_exception_mac.h"
535d9b40724ed6a6c243eaef196e617071ec36d4282thestig@chromium.org#include "minidump_exception_ps3.h"
536a194d6f1acbcd3f941b228901a02a0708f1c2ad5nealsid#include "minidump_exception_solaris.h"
537d9b40724ed6a6c243eaef196e617071ec36d4282thestig@chromium.org#include "minidump_exception_win32.h"
538ea2bba970675e01f9964f82d3f44960c1aad05dcmmentovai
5393261e8b6eac44a41341f112821482bee6c940c98mmentovaitypedef struct {
5406162aed3c3fcfc53373c963ac375d39a5dfa5a25ted.mielczarek@gmail.com  uint32_t             thread_id;         /* Thread in which the exception
541355c757b495016b1db1e8f53d2806c2667e1e4a1mmentovai                                           * occurred.  Corresponds to
542355c757b495016b1db1e8f53d2806c2667e1e4a1mmentovai                                           * (MDRawThread).thread_id. */
5436162aed3c3fcfc53373c963ac375d39a5dfa5a25ted.mielczarek@gmail.com  uint32_t             __align;
5443261e8b6eac44a41341f112821482bee6c940c98mmentovai  MDException          exception_record;
545355c757b495016b1db1e8f53d2806c2667e1e4a1mmentovai  MDLocationDescriptor thread_context;    /* MDRawContext[CPU] */
546355c757b495016b1db1e8f53d2806c2667e1e4a1mmentovai} MDRawExceptionStream;  /* MINIDUMP_EXCEPTION_STREAM */
5473261e8b6eac44a41341f112821482bee6c940c98mmentovai
5483261e8b6eac44a41341f112821482bee6c940c98mmentovai
5493261e8b6eac44a41341f112821482bee6c940c98mmentovaitypedef union {
5503261e8b6eac44a41341f112821482bee6c940c98mmentovai  struct {
5516162aed3c3fcfc53373c963ac375d39a5dfa5a25ted.mielczarek@gmail.com    uint32_t vendor_id[3];               /* cpuid 0: ebx, edx, ecx */
5526162aed3c3fcfc53373c963ac375d39a5dfa5a25ted.mielczarek@gmail.com    uint32_t version_information;        /* cpuid 1: eax */
5536162aed3c3fcfc53373c963ac375d39a5dfa5a25ted.mielczarek@gmail.com    uint32_t feature_information;        /* cpuid 1: edx */
5546162aed3c3fcfc53373c963ac375d39a5dfa5a25ted.mielczarek@gmail.com    uint32_t amd_extended_cpu_features;  /* cpuid 0x80000001, ebx */
5553261e8b6eac44a41341f112821482bee6c940c98mmentovai  } x86_cpu_info;
5563261e8b6eac44a41341f112821482bee6c940c98mmentovai  struct {
557972816ca0a2c53907b4a75c8351bed0802c9e91bdigit@chromium.org    uint32_t cpuid;
558972816ca0a2c53907b4a75c8351bed0802c9e91bdigit@chromium.org    uint32_t elf_hwcaps;    /* linux specific, 0 otherwise */
559972816ca0a2c53907b4a75c8351bed0802c9e91bdigit@chromium.org  } arm_cpu_info;
560972816ca0a2c53907b4a75c8351bed0802c9e91bdigit@chromium.org  struct {
5616162aed3c3fcfc53373c963ac375d39a5dfa5a25ted.mielczarek@gmail.com    uint64_t processor_features[2];
5623261e8b6eac44a41341f112821482bee6c940c98mmentovai  } other_cpu_info;
56382a6c6037b0dac132b86a88dccf6673efb52a51cmmentovai} MDCPUInformation;  /* CPU_INFORMATION */
5643261e8b6eac44a41341f112821482bee6c940c98mmentovai
565972816ca0a2c53907b4a75c8351bed0802c9e91bdigit@chromium.org/* For (MDCPUInformation).arm_cpu_info.elf_hwcaps.
566972816ca0a2c53907b4a75c8351bed0802c9e91bdigit@chromium.org * This matches the Linux kernel definitions from <asm/hwcaps.h> */
567972816ca0a2c53907b4a75c8351bed0802c9e91bdigit@chromium.orgtypedef enum {
568972816ca0a2c53907b4a75c8351bed0802c9e91bdigit@chromium.org  MD_CPU_ARM_ELF_HWCAP_SWP       = (1 << 0),
569972816ca0a2c53907b4a75c8351bed0802c9e91bdigit@chromium.org  MD_CPU_ARM_ELF_HWCAP_HALF      = (1 << 1),
570972816ca0a2c53907b4a75c8351bed0802c9e91bdigit@chromium.org  MD_CPU_ARM_ELF_HWCAP_THUMB     = (1 << 2),
571972816ca0a2c53907b4a75c8351bed0802c9e91bdigit@chromium.org  MD_CPU_ARM_ELF_HWCAP_26BIT     = (1 << 3),
572972816ca0a2c53907b4a75c8351bed0802c9e91bdigit@chromium.org  MD_CPU_ARM_ELF_HWCAP_FAST_MULT = (1 << 4),
573972816ca0a2c53907b4a75c8351bed0802c9e91bdigit@chromium.org  MD_CPU_ARM_ELF_HWCAP_FPA       = (1 << 5),
574972816ca0a2c53907b4a75c8351bed0802c9e91bdigit@chromium.org  MD_CPU_ARM_ELF_HWCAP_VFP       = (1 << 6),
575972816ca0a2c53907b4a75c8351bed0802c9e91bdigit@chromium.org  MD_CPU_ARM_ELF_HWCAP_EDSP      = (1 << 7),
576972816ca0a2c53907b4a75c8351bed0802c9e91bdigit@chromium.org  MD_CPU_ARM_ELF_HWCAP_JAVA      = (1 << 8),
577972816ca0a2c53907b4a75c8351bed0802c9e91bdigit@chromium.org  MD_CPU_ARM_ELF_HWCAP_IWMMXT    = (1 << 9),
578972816ca0a2c53907b4a75c8351bed0802c9e91bdigit@chromium.org  MD_CPU_ARM_ELF_HWCAP_CRUNCH    = (1 << 10),
579972816ca0a2c53907b4a75c8351bed0802c9e91bdigit@chromium.org  MD_CPU_ARM_ELF_HWCAP_THUMBEE   = (1 << 11),
580972816ca0a2c53907b4a75c8351bed0802c9e91bdigit@chromium.org  MD_CPU_ARM_ELF_HWCAP_NEON      = (1 << 12),
581972816ca0a2c53907b4a75c8351bed0802c9e91bdigit@chromium.org  MD_CPU_ARM_ELF_HWCAP_VFPv3     = (1 << 13),
582972816ca0a2c53907b4a75c8351bed0802c9e91bdigit@chromium.org  MD_CPU_ARM_ELF_HWCAP_VFPv3D16  = (1 << 14),
583972816ca0a2c53907b4a75c8351bed0802c9e91bdigit@chromium.org  MD_CPU_ARM_ELF_HWCAP_TLS       = (1 << 15),
584972816ca0a2c53907b4a75c8351bed0802c9e91bdigit@chromium.org  MD_CPU_ARM_ELF_HWCAP_VFPv4     = (1 << 16),
585972816ca0a2c53907b4a75c8351bed0802c9e91bdigit@chromium.org  MD_CPU_ARM_ELF_HWCAP_IDIVA     = (1 << 17),
586972816ca0a2c53907b4a75c8351bed0802c9e91bdigit@chromium.org  MD_CPU_ARM_ELF_HWCAP_IDIVT     = (1 << 18),
587972816ca0a2c53907b4a75c8351bed0802c9e91bdigit@chromium.org} MDCPUInformationARMElfHwCaps;
5883261e8b6eac44a41341f112821482bee6c940c98mmentovai
5893261e8b6eac44a41341f112821482bee6c940c98mmentovaitypedef struct {
5903261e8b6eac44a41341f112821482bee6c940c98mmentovai  /* The next 3 fields and numberOfProcessors are from the SYSTEM_INFO
5913261e8b6eac44a41341f112821482bee6c940c98mmentovai   * structure as returned by GetSystemInfo */
5926162aed3c3fcfc53373c963ac375d39a5dfa5a25ted.mielczarek@gmail.com  uint16_t         processor_architecture;
5936162aed3c3fcfc53373c963ac375d39a5dfa5a25ted.mielczarek@gmail.com  uint16_t         processor_level;         /* x86: 5 = 586, 6 = 686, ... */
594972816ca0a2c53907b4a75c8351bed0802c9e91bdigit@chromium.org                                            /* ARM: 6 = ARMv6, 7 = ARMv7 ... */
5956162aed3c3fcfc53373c963ac375d39a5dfa5a25ted.mielczarek@gmail.com  uint16_t         processor_revision;      /* x86: 0xMMSS, where MM=model,
596355c757b495016b1db1e8f53d2806c2667e1e4a1mmentovai                                             *      SS=stepping */
597972816ca0a2c53907b4a75c8351bed0802c9e91bdigit@chromium.org                                            /* ARM: 0 */
5982e0e2234b9e9d7d82c4c3c20396bdf8f18007e6cmmentovai
5996162aed3c3fcfc53373c963ac375d39a5dfa5a25ted.mielczarek@gmail.com  uint8_t          number_of_processors;
6006162aed3c3fcfc53373c963ac375d39a5dfa5a25ted.mielczarek@gmail.com  uint8_t          product_type;            /* Windows: VER_NT_* from WinNT.h */
6013261e8b6eac44a41341f112821482bee6c940c98mmentovai
6023261e8b6eac44a41341f112821482bee6c940c98mmentovai  /* The next 5 fields are from the OSVERSIONINFO structure as returned
6033261e8b6eac44a41341f112821482bee6c940c98mmentovai   * by GetVersionEx */
6046162aed3c3fcfc53373c963ac375d39a5dfa5a25ted.mielczarek@gmail.com  uint32_t         major_version;
6056162aed3c3fcfc53373c963ac375d39a5dfa5a25ted.mielczarek@gmail.com  uint32_t         minor_version;
6066162aed3c3fcfc53373c963ac375d39a5dfa5a25ted.mielczarek@gmail.com  uint32_t         build_number;
6076162aed3c3fcfc53373c963ac375d39a5dfa5a25ted.mielczarek@gmail.com  uint32_t         platform_id;
608aa57b8e3dedd3cdc9f627cddae9c80b285d5a39bmmentovai  MDRVA            csd_version_rva;  /* MDString further identifying the
609355c757b495016b1db1e8f53d2806c2667e1e4a1mmentovai                                      * host OS.
610355c757b495016b1db1e8f53d2806c2667e1e4a1mmentovai                                      * Windows: name of the installed OS
61182a6c6037b0dac132b86a88dccf6673efb52a51cmmentovai                                      *          service pack.
61282a6c6037b0dac132b86a88dccf6673efb52a51cmmentovai                                      * Mac OS X: the Apple OS build number
61382a6c6037b0dac132b86a88dccf6673efb52a51cmmentovai                                      *           (sw_vers -buildVersion).
61482a6c6037b0dac132b86a88dccf6673efb52a51cmmentovai                                      * Linux: uname -srvmo */
6153261e8b6eac44a41341f112821482bee6c940c98mmentovai
6166162aed3c3fcfc53373c963ac375d39a5dfa5a25ted.mielczarek@gmail.com  uint16_t         suite_mask;       /* Windows: VER_SUITE_* from WinNT.h */
6176162aed3c3fcfc53373c963ac375d39a5dfa5a25ted.mielczarek@gmail.com  uint16_t         reserved2;
6182e0e2234b9e9d7d82c4c3c20396bdf8f18007e6cmmentovai
6193261e8b6eac44a41341f112821482bee6c940c98mmentovai  MDCPUInformation cpu;
62082a6c6037b0dac132b86a88dccf6673efb52a51cmmentovai} MDRawSystemInfo;  /* MINIDUMP_SYSTEM_INFO */
62182a6c6037b0dac132b86a88dccf6673efb52a51cmmentovai
62282a6c6037b0dac132b86a88dccf6673efb52a51cmmentovai/* For (MDRawSystemInfo).processor_architecture: */
62382a6c6037b0dac132b86a88dccf6673efb52a51cmmentovaitypedef enum {
62482a6c6037b0dac132b86a88dccf6673efb52a51cmmentovai  MD_CPU_ARCHITECTURE_X86       =  0,  /* PROCESSOR_ARCHITECTURE_INTEL */
62582a6c6037b0dac132b86a88dccf6673efb52a51cmmentovai  MD_CPU_ARCHITECTURE_MIPS      =  1,  /* PROCESSOR_ARCHITECTURE_MIPS */
62682a6c6037b0dac132b86a88dccf6673efb52a51cmmentovai  MD_CPU_ARCHITECTURE_ALPHA     =  2,  /* PROCESSOR_ARCHITECTURE_ALPHA */
62782a6c6037b0dac132b86a88dccf6673efb52a51cmmentovai  MD_CPU_ARCHITECTURE_PPC       =  3,  /* PROCESSOR_ARCHITECTURE_PPC */
62882a6c6037b0dac132b86a88dccf6673efb52a51cmmentovai  MD_CPU_ARCHITECTURE_SHX       =  4,  /* PROCESSOR_ARCHITECTURE_SHX
62982a6c6037b0dac132b86a88dccf6673efb52a51cmmentovai                                        * (Super-H) */
63082a6c6037b0dac132b86a88dccf6673efb52a51cmmentovai  MD_CPU_ARCHITECTURE_ARM       =  5,  /* PROCESSOR_ARCHITECTURE_ARM */
63182a6c6037b0dac132b86a88dccf6673efb52a51cmmentovai  MD_CPU_ARCHITECTURE_IA64      =  6,  /* PROCESSOR_ARCHITECTURE_IA64 */
63282a6c6037b0dac132b86a88dccf6673efb52a51cmmentovai  MD_CPU_ARCHITECTURE_ALPHA64   =  7,  /* PROCESSOR_ARCHITECTURE_ALPHA64 */
63382a6c6037b0dac132b86a88dccf6673efb52a51cmmentovai  MD_CPU_ARCHITECTURE_MSIL      =  8,  /* PROCESSOR_ARCHITECTURE_MSIL
63482a6c6037b0dac132b86a88dccf6673efb52a51cmmentovai                                        * (Microsoft Intermediate Language) */
63582a6c6037b0dac132b86a88dccf6673efb52a51cmmentovai  MD_CPU_ARCHITECTURE_AMD64     =  9,  /* PROCESSOR_ARCHITECTURE_AMD64 */
63682a6c6037b0dac132b86a88dccf6673efb52a51cmmentovai  MD_CPU_ARCHITECTURE_X86_WIN64 = 10,
63782a6c6037b0dac132b86a88dccf6673efb52a51cmmentovai      /* PROCESSOR_ARCHITECTURE_IA32_ON_WIN64 (WoW64) */
6389abfe3d0a5bbefd85c54feda0dac2d030cbb5635mmentovai  MD_CPU_ARCHITECTURE_SPARC     = 0x8001, /* Breakpad-defined value for SPARC */
6398826ca6748e735f4330dd5a7d0db2dc0eab0cc50thestig@chromium.org  MD_CPU_ARCHITECTURE_PPC64     = 0x8002, /* Breakpad-defined value for PPC64 */
640a157c99f9fdfc5f5072db05a5075ae23fce43c88mark@chromium.org  MD_CPU_ARCHITECTURE_ARM64     = 0x8003, /* Breakpad-defined value for ARM64 */
64182a6c6037b0dac132b86a88dccf6673efb52a51cmmentovai  MD_CPU_ARCHITECTURE_UNKNOWN   = 0xffff  /* PROCESSOR_ARCHITECTURE_UNKNOWN */
64282a6c6037b0dac132b86a88dccf6673efb52a51cmmentovai} MDCPUArchitecture;
64382a6c6037b0dac132b86a88dccf6673efb52a51cmmentovai
64482a6c6037b0dac132b86a88dccf6673efb52a51cmmentovai/* For (MDRawSystemInfo).platform_id: */
64582a6c6037b0dac132b86a88dccf6673efb52a51cmmentovaitypedef enum {
64682a6c6037b0dac132b86a88dccf6673efb52a51cmmentovai  MD_OS_WIN32S        = 0,  /* VER_PLATFORM_WIN32s (Windows 3.1) */
64782a6c6037b0dac132b86a88dccf6673efb52a51cmmentovai  MD_OS_WIN32_WINDOWS = 1,  /* VER_PLATFORM_WIN32_WINDOWS (Windows 95-98-Me) */
64882a6c6037b0dac132b86a88dccf6673efb52a51cmmentovai  MD_OS_WIN32_NT      = 2,  /* VER_PLATFORM_WIN32_NT (Windows NT, 2000+) */
64982a6c6037b0dac132b86a88dccf6673efb52a51cmmentovai  MD_OS_WIN32_CE      = 3,  /* VER_PLATFORM_WIN32_CE, VER_PLATFORM_WIN32_HH
65082a6c6037b0dac132b86a88dccf6673efb52a51cmmentovai                             * (Windows CE, Windows Mobile, "Handheld") */
65182a6c6037b0dac132b86a88dccf6673efb52a51cmmentovai
652e5dc60822e5938fea2ae892ccddb906641ba174emmentovai  /* The following values are Breakpad-defined. */
65382a6c6037b0dac132b86a88dccf6673efb52a51cmmentovai  MD_OS_UNIX          = 0x8000,  /* Generic Unix-ish */
65482a6c6037b0dac132b86a88dccf6673efb52a51cmmentovai  MD_OS_MAC_OS_X      = 0x8101,  /* Mac OS X/Darwin */
65563f97ad134db3fa175c489b50b66a79bf0c95025qsr@chromium.org  MD_OS_IOS           = 0x8102,  /* iOS */
6569abfe3d0a5bbefd85c54feda0dac2d030cbb5635mmentovai  MD_OS_LINUX         = 0x8201,  /* Linux */
6575187de1ae5cb7df2343b650416aa805084bdf8dadigit@chromium.org  MD_OS_SOLARIS       = 0x8202,  /* Solaris */
658d9b40724ed6a6c243eaef196e617071ec36d4282thestig@chromium.org  MD_OS_ANDROID       = 0x8203,  /* Android */
65942faddc9c3be48a8a29236ab866013288d25491emseaborn@chromium.org  MD_OS_PS3           = 0x8204,  /* PS3 */
66042faddc9c3be48a8a29236ab866013288d25491emseaborn@chromium.org  MD_OS_NACL          = 0x8205   /* Native Client (NaCl) */
66182a6c6037b0dac132b86a88dccf6673efb52a51cmmentovai} MDOSPlatform;
6623261e8b6eac44a41341f112821482bee6c940c98mmentovai
6633261e8b6eac44a41341f112821482bee6c940c98mmentovaitypedef struct {
6643562017ff5a65fff770cd798903ee294db912aa2ivan.penkov@gmail.com  uint16_t year;
6653562017ff5a65fff770cd798903ee294db912aa2ivan.penkov@gmail.com  uint16_t month;
6663562017ff5a65fff770cd798903ee294db912aa2ivan.penkov@gmail.com  uint16_t day_of_week;
6673562017ff5a65fff770cd798903ee294db912aa2ivan.penkov@gmail.com  uint16_t day;
6683562017ff5a65fff770cd798903ee294db912aa2ivan.penkov@gmail.com  uint16_t hour;
6693562017ff5a65fff770cd798903ee294db912aa2ivan.penkov@gmail.com  uint16_t minute;
6703562017ff5a65fff770cd798903ee294db912aa2ivan.penkov@gmail.com  uint16_t second;
6713562017ff5a65fff770cd798903ee294db912aa2ivan.penkov@gmail.com  uint16_t milliseconds;
6723562017ff5a65fff770cd798903ee294db912aa2ivan.penkov@gmail.com} MDSystemTime;  /* SYSTEMTIME */
6733562017ff5a65fff770cd798903ee294db912aa2ivan.penkov@gmail.com
6743562017ff5a65fff770cd798903ee294db912aa2ivan.penkov@gmail.comtypedef struct {
6753562017ff5a65fff770cd798903ee294db912aa2ivan.penkov@gmail.com  /* Required field.  The bias is the difference, in minutes, between
6763562017ff5a65fff770cd798903ee294db912aa2ivan.penkov@gmail.com   * Coordinated Universal Time (UTC) and local time.
6773562017ff5a65fff770cd798903ee294db912aa2ivan.penkov@gmail.com   *   Formula: UTC = local time + bias */
6783562017ff5a65fff770cd798903ee294db912aa2ivan.penkov@gmail.com  int32_t bias;
6793562017ff5a65fff770cd798903ee294db912aa2ivan.penkov@gmail.com  /* A description for standard time.  For example, "EST" could indicate Eastern
6803562017ff5a65fff770cd798903ee294db912aa2ivan.penkov@gmail.com   * Standard Time.  In practice this contains the full time zone names.  This
6813562017ff5a65fff770cd798903ee294db912aa2ivan.penkov@gmail.com   * string can be empty. */
6823562017ff5a65fff770cd798903ee294db912aa2ivan.penkov@gmail.com  uint16_t standard_name[32];  /* UTF-16-encoded, 0-terminated */
6833562017ff5a65fff770cd798903ee294db912aa2ivan.penkov@gmail.com  /* A MDSystemTime structure that contains a date and local time when the
6843562017ff5a65fff770cd798903ee294db912aa2ivan.penkov@gmail.com   * transition from daylight saving time to standard time occurs on this
6853562017ff5a65fff770cd798903ee294db912aa2ivan.penkov@gmail.com   * operating system.  If the time zone does not support daylight saving time,
6863562017ff5a65fff770cd798903ee294db912aa2ivan.penkov@gmail.com   * the month member in the MDSystemTime structure is zero. */
6873562017ff5a65fff770cd798903ee294db912aa2ivan.penkov@gmail.com  MDSystemTime standard_date;
6883562017ff5a65fff770cd798903ee294db912aa2ivan.penkov@gmail.com  /* The bias value to be used during local time translations that occur during
6893562017ff5a65fff770cd798903ee294db912aa2ivan.penkov@gmail.com   * standard time. */
6903562017ff5a65fff770cd798903ee294db912aa2ivan.penkov@gmail.com  int32_t standard_bias;
6913562017ff5a65fff770cd798903ee294db912aa2ivan.penkov@gmail.com  /* A description for daylight saving time.  For example, "PDT" could indicate
6923562017ff5a65fff770cd798903ee294db912aa2ivan.penkov@gmail.com   * Pacific Daylight Time.  In practice this contains the full time zone names.
6933562017ff5a65fff770cd798903ee294db912aa2ivan.penkov@gmail.com   * This string can be empty. */
6943562017ff5a65fff770cd798903ee294db912aa2ivan.penkov@gmail.com  uint16_t daylight_name[32];  /* UTF-16-encoded, 0-terminated */
6953562017ff5a65fff770cd798903ee294db912aa2ivan.penkov@gmail.com  /* A MDSystemTime structure that contains a date and local time when the
6963562017ff5a65fff770cd798903ee294db912aa2ivan.penkov@gmail.com   * transition from standard time to daylight saving time occurs on this
6973562017ff5a65fff770cd798903ee294db912aa2ivan.penkov@gmail.com   * operating system.  If the time zone does not support daylight saving time,
6983562017ff5a65fff770cd798903ee294db912aa2ivan.penkov@gmail.com   * the month member in the MDSystemTime structure is zero.*/
6993562017ff5a65fff770cd798903ee294db912aa2ivan.penkov@gmail.com  MDSystemTime daylight_date;
7003562017ff5a65fff770cd798903ee294db912aa2ivan.penkov@gmail.com  /* The bias value to be used during local time translations that occur during
7013562017ff5a65fff770cd798903ee294db912aa2ivan.penkov@gmail.com   * daylight saving time. */
7023562017ff5a65fff770cd798903ee294db912aa2ivan.penkov@gmail.com  int32_t daylight_bias;
7033562017ff5a65fff770cd798903ee294db912aa2ivan.penkov@gmail.com} MDTimeZoneInformation;  /* TIME_ZONE_INFORMATION */
7043562017ff5a65fff770cd798903ee294db912aa2ivan.penkov@gmail.com
7053562017ff5a65fff770cd798903ee294db912aa2ivan.penkov@gmail.com/* MAX_PATH from windef.h */
7063562017ff5a65fff770cd798903ee294db912aa2ivan.penkov@gmail.com#define MD_MAX_PATH 260
7073562017ff5a65fff770cd798903ee294db912aa2ivan.penkov@gmail.com
7083562017ff5a65fff770cd798903ee294db912aa2ivan.penkov@gmail.com/* The miscellaneous information stream contains a variety
7093562017ff5a65fff770cd798903ee294db912aa2ivan.penkov@gmail.com * of small pieces of information.  A member is valid if
7103562017ff5a65fff770cd798903ee294db912aa2ivan.penkov@gmail.com * it's within the available size and its corresponding
7113562017ff5a65fff770cd798903ee294db912aa2ivan.penkov@gmail.com * bit is set. */
7123562017ff5a65fff770cd798903ee294db912aa2ivan.penkov@gmail.comtypedef struct {
7136162aed3c3fcfc53373c963ac375d39a5dfa5a25ted.mielczarek@gmail.com  uint32_t size_of_info;  /* Length of entire MDRawMiscInfo structure. */
7146162aed3c3fcfc53373c963ac375d39a5dfa5a25ted.mielczarek@gmail.com  uint32_t flags1;
71582a6c6037b0dac132b86a88dccf6673efb52a51cmmentovai
71682a6c6037b0dac132b86a88dccf6673efb52a51cmmentovai  /* The next field is only valid if flags1 contains
71782a6c6037b0dac132b86a88dccf6673efb52a51cmmentovai   * MD_MISCINFO_FLAGS1_PROCESS_ID. */
7186162aed3c3fcfc53373c963ac375d39a5dfa5a25ted.mielczarek@gmail.com  uint32_t process_id;
71982a6c6037b0dac132b86a88dccf6673efb52a51cmmentovai
72082a6c6037b0dac132b86a88dccf6673efb52a51cmmentovai  /* The next 3 fields are only valid if flags1 contains
72182a6c6037b0dac132b86a88dccf6673efb52a51cmmentovai   * MD_MISCINFO_FLAGS1_PROCESS_TIMES. */
7226162aed3c3fcfc53373c963ac375d39a5dfa5a25ted.mielczarek@gmail.com  uint32_t process_create_time;  /* time_t process started */
7236162aed3c3fcfc53373c963ac375d39a5dfa5a25ted.mielczarek@gmail.com  uint32_t process_user_time;    /* seconds of user CPU time */
7246162aed3c3fcfc53373c963ac375d39a5dfa5a25ted.mielczarek@gmail.com  uint32_t process_kernel_time;  /* seconds of kernel CPU time */
7253261e8b6eac44a41341f112821482bee6c940c98mmentovai
7263261e8b6eac44a41341f112821482bee6c940c98mmentovai  /* The following fields are not present in MINIDUMP_MISC_INFO but are
7271b9922ced527aeee4b085aa58916af43d86b99eemark@chromium.org   * in MINIDUMP_MISC_INFO_2.  When this struct is populated, these values
7281b9922ced527aeee4b085aa58916af43d86b99eemark@chromium.org   * may not be set.  Use flags1 and size_of_info to determine whether these
72982a6c6037b0dac132b86a88dccf6673efb52a51cmmentovai   * values are present.  These are only valid when flags1 contains
73082a6c6037b0dac132b86a88dccf6673efb52a51cmmentovai   * MD_MISCINFO_FLAGS1_PROCESSOR_POWER_INFO. */
7316162aed3c3fcfc53373c963ac375d39a5dfa5a25ted.mielczarek@gmail.com  uint32_t processor_max_mhz;
7326162aed3c3fcfc53373c963ac375d39a5dfa5a25ted.mielczarek@gmail.com  uint32_t processor_current_mhz;
7336162aed3c3fcfc53373c963ac375d39a5dfa5a25ted.mielczarek@gmail.com  uint32_t processor_mhz_limit;
7346162aed3c3fcfc53373c963ac375d39a5dfa5a25ted.mielczarek@gmail.com  uint32_t processor_max_idle_state;
7356162aed3c3fcfc53373c963ac375d39a5dfa5a25ted.mielczarek@gmail.com  uint32_t processor_current_idle_state;
73682a6c6037b0dac132b86a88dccf6673efb52a51cmmentovai
7373562017ff5a65fff770cd798903ee294db912aa2ivan.penkov@gmail.com  /* The following fields are not present in MINIDUMP_MISC_INFO_2 but are
7381b9922ced527aeee4b085aa58916af43d86b99eemark@chromium.org   * in MINIDUMP_MISC_INFO_3.  When this struct is populated, these values
7391b9922ced527aeee4b085aa58916af43d86b99eemark@chromium.org   * may not be set.  Use flags1 and size_of_info to determine whether these
7403562017ff5a65fff770cd798903ee294db912aa2ivan.penkov@gmail.com   * values are present. */
7413562017ff5a65fff770cd798903ee294db912aa2ivan.penkov@gmail.com
7423562017ff5a65fff770cd798903ee294db912aa2ivan.penkov@gmail.com  /* The following field is only valid if flags1 contains
7433562017ff5a65fff770cd798903ee294db912aa2ivan.penkov@gmail.com   * MD_MISCINFO_FLAGS1_PROCESS_INTEGRITY. */
7443562017ff5a65fff770cd798903ee294db912aa2ivan.penkov@gmail.com  uint32_t process_integrity_level;
7453562017ff5a65fff770cd798903ee294db912aa2ivan.penkov@gmail.com
7463562017ff5a65fff770cd798903ee294db912aa2ivan.penkov@gmail.com  /* The following field is only valid if flags1 contains
7473562017ff5a65fff770cd798903ee294db912aa2ivan.penkov@gmail.com   * MD_MISCINFO_FLAGS1_PROCESS_EXECUTE_FLAGS. */
7483562017ff5a65fff770cd798903ee294db912aa2ivan.penkov@gmail.com  uint32_t process_execute_flags;
7493562017ff5a65fff770cd798903ee294db912aa2ivan.penkov@gmail.com
7503562017ff5a65fff770cd798903ee294db912aa2ivan.penkov@gmail.com  /* The following field is only valid if flags1 contains
7513562017ff5a65fff770cd798903ee294db912aa2ivan.penkov@gmail.com   * MD_MISCINFO_FLAGS1_PROTECTED_PROCESS. */
7523562017ff5a65fff770cd798903ee294db912aa2ivan.penkov@gmail.com  uint32_t protected_process;
7533562017ff5a65fff770cd798903ee294db912aa2ivan.penkov@gmail.com
7543562017ff5a65fff770cd798903ee294db912aa2ivan.penkov@gmail.com  /* The following 2 fields are only valid if flags1 contains
7553562017ff5a65fff770cd798903ee294db912aa2ivan.penkov@gmail.com   * MD_MISCINFO_FLAGS1_TIMEZONE. */
7563562017ff5a65fff770cd798903ee294db912aa2ivan.penkov@gmail.com  uint32_t time_zone_id;
7573562017ff5a65fff770cd798903ee294db912aa2ivan.penkov@gmail.com  MDTimeZoneInformation time_zone;
7583562017ff5a65fff770cd798903ee294db912aa2ivan.penkov@gmail.com
7593562017ff5a65fff770cd798903ee294db912aa2ivan.penkov@gmail.com  /* The following fields are not present in MINIDUMP_MISC_INFO_3 but are
7601b9922ced527aeee4b085aa58916af43d86b99eemark@chromium.org   * in MINIDUMP_MISC_INFO_4.  When this struct is populated, these values
7611b9922ced527aeee4b085aa58916af43d86b99eemark@chromium.org   * may not be set.  Use flags1 and size_of_info to determine whether these
7621b9922ced527aeee4b085aa58916af43d86b99eemark@chromium.org   * values are present. */
7633562017ff5a65fff770cd798903ee294db912aa2ivan.penkov@gmail.com
7641b9922ced527aeee4b085aa58916af43d86b99eemark@chromium.org  /* The following 2 fields are only valid if flags1 contains
7651b9922ced527aeee4b085aa58916af43d86b99eemark@chromium.org   * MD_MISCINFO_FLAGS1_BUILDSTRING. */
7663562017ff5a65fff770cd798903ee294db912aa2ivan.penkov@gmail.com  uint16_t build_string[MD_MAX_PATH];  /* UTF-16-encoded, 0-terminated */
7673562017ff5a65fff770cd798903ee294db912aa2ivan.penkov@gmail.com  uint16_t dbg_bld_str[40];            /* UTF-16-encoded, 0-terminated */
7681b9922ced527aeee4b085aa58916af43d86b99eemark@chromium.org} MDRawMiscInfo;  /* MINIDUMP_MISC_INFO, MINIDUMP_MISC_INFO_2,
7691b9922ced527aeee4b085aa58916af43d86b99eemark@chromium.org                   * MINIDUMP_MISC_INFO_3, MINIDUMP_MISC_INFO_4,
7701b9922ced527aeee4b085aa58916af43d86b99eemark@chromium.org                   * MINIDUMP_MISC_INFO_N */
7713562017ff5a65fff770cd798903ee294db912aa2ivan.penkov@gmail.com
7723562017ff5a65fff770cd798903ee294db912aa2ivan.penkov@gmail.comstatic const size_t MD_MISCINFO_SIZE =
7733562017ff5a65fff770cd798903ee294db912aa2ivan.penkov@gmail.com    offsetof(MDRawMiscInfo, processor_max_mhz);
7743562017ff5a65fff770cd798903ee294db912aa2ivan.penkov@gmail.comstatic const size_t MD_MISCINFO2_SIZE =
7753562017ff5a65fff770cd798903ee294db912aa2ivan.penkov@gmail.com    offsetof(MDRawMiscInfo, process_integrity_level);
7763562017ff5a65fff770cd798903ee294db912aa2ivan.penkov@gmail.comstatic const size_t MD_MISCINFO3_SIZE =
7773562017ff5a65fff770cd798903ee294db912aa2ivan.penkov@gmail.com    offsetof(MDRawMiscInfo, build_string[0]);
7783562017ff5a65fff770cd798903ee294db912aa2ivan.penkov@gmail.comstatic const size_t MD_MISCINFO4_SIZE = sizeof(MDRawMiscInfo);
779355c757b495016b1db1e8f53d2806c2667e1e4a1mmentovai
78082a6c6037b0dac132b86a88dccf6673efb52a51cmmentovai/* For (MDRawMiscInfo).flags1.  These values indicate which fields in the
78182a6c6037b0dac132b86a88dccf6673efb52a51cmmentovai * MDRawMiscInfoStructure are valid. */
78282a6c6037b0dac132b86a88dccf6673efb52a51cmmentovaitypedef enum {
7833562017ff5a65fff770cd798903ee294db912aa2ivan.penkov@gmail.com  MD_MISCINFO_FLAGS1_PROCESS_ID            = 0x00000001,
78482a6c6037b0dac132b86a88dccf6673efb52a51cmmentovai      /* MINIDUMP_MISC1_PROCESS_ID */
7853562017ff5a65fff770cd798903ee294db912aa2ivan.penkov@gmail.com  MD_MISCINFO_FLAGS1_PROCESS_TIMES         = 0x00000002,
78682a6c6037b0dac132b86a88dccf6673efb52a51cmmentovai      /* MINIDUMP_MISC1_PROCESS_TIMES */
7873562017ff5a65fff770cd798903ee294db912aa2ivan.penkov@gmail.com  MD_MISCINFO_FLAGS1_PROCESSOR_POWER_INFO  = 0x00000004,
78882a6c6037b0dac132b86a88dccf6673efb52a51cmmentovai      /* MINIDUMP_MISC1_PROCESSOR_POWER_INFO */
7893562017ff5a65fff770cd798903ee294db912aa2ivan.penkov@gmail.com  MD_MISCINFO_FLAGS1_PROCESS_INTEGRITY     = 0x00000010,
7903562017ff5a65fff770cd798903ee294db912aa2ivan.penkov@gmail.com      /* MINIDUMP_MISC3_PROCESS_INTEGRITY */
7913562017ff5a65fff770cd798903ee294db912aa2ivan.penkov@gmail.com  MD_MISCINFO_FLAGS1_PROCESS_EXECUTE_FLAGS = 0x00000020,
7923562017ff5a65fff770cd798903ee294db912aa2ivan.penkov@gmail.com      /* MINIDUMP_MISC3_PROCESS_EXECUTE_FLAGS */
7933562017ff5a65fff770cd798903ee294db912aa2ivan.penkov@gmail.com  MD_MISCINFO_FLAGS1_TIMEZONE              = 0x00000040,
7943562017ff5a65fff770cd798903ee294db912aa2ivan.penkov@gmail.com      /* MINIDUMP_MISC3_TIMEZONE */
7953562017ff5a65fff770cd798903ee294db912aa2ivan.penkov@gmail.com  MD_MISCINFO_FLAGS1_PROTECTED_PROCESS     = 0x00000080,
7963562017ff5a65fff770cd798903ee294db912aa2ivan.penkov@gmail.com      /* MINIDUMP_MISC3_PROTECTED_PROCESS */
7971b9922ced527aeee4b085aa58916af43d86b99eemark@chromium.org  MD_MISCINFO_FLAGS1_BUILDSTRING           = 0x00000100,
7981b9922ced527aeee4b085aa58916af43d86b99eemark@chromium.org      /* MINIDUMP_MISC4_BUILDSTRING */
79982a6c6037b0dac132b86a88dccf6673efb52a51cmmentovai} MDMiscInfoFlags1;
8003261e8b6eac44a41341f112821482bee6c940c98mmentovai
8016162aed3c3fcfc53373c963ac375d39a5dfa5a25ted.mielczarek@gmail.com/*
80280745c59dec4eaaefb36d159b53591a2c60ae37fted.mielczarek * Around DbgHelp version 6.0, the style of new LIST structures changed
80380745c59dec4eaaefb36d159b53591a2c60ae37fted.mielczarek * from including an array of length 1 at the end of the struct to
80480745c59dec4eaaefb36d159b53591a2c60ae37fted.mielczarek * represent the variable-length data to including explicit
80580745c59dec4eaaefb36d159b53591a2c60ae37fted.mielczarek * "size of header", "size of entry" and "number of entries" fields
80680745c59dec4eaaefb36d159b53591a2c60ae37fted.mielczarek * in the header, presumably to allow backwards-compatibly-extending
80780745c59dec4eaaefb36d159b53591a2c60ae37fted.mielczarek * the structures in the future. The actual list entries follow the
80880745c59dec4eaaefb36d159b53591a2c60ae37fted.mielczarek * header data directly in this case.
80980745c59dec4eaaefb36d159b53591a2c60ae37fted.mielczarek */
81080745c59dec4eaaefb36d159b53591a2c60ae37fted.mielczarek
81180745c59dec4eaaefb36d159b53591a2c60ae37fted.mielczarektypedef struct {
8126162aed3c3fcfc53373c963ac375d39a5dfa5a25ted.mielczarek@gmail.com  uint32_t size_of_header;    /* sizeof(MDRawMemoryInfoList) */
8136162aed3c3fcfc53373c963ac375d39a5dfa5a25ted.mielczarek@gmail.com  uint32_t size_of_entry;     /* sizeof(MDRawMemoryInfo) */
8146162aed3c3fcfc53373c963ac375d39a5dfa5a25ted.mielczarek@gmail.com  uint64_t number_of_entries;
81580745c59dec4eaaefb36d159b53591a2c60ae37fted.mielczarek} MDRawMemoryInfoList;  /* MINIDUMP_MEMORY_INFO_LIST */
81680745c59dec4eaaefb36d159b53591a2c60ae37fted.mielczarek
81780745c59dec4eaaefb36d159b53591a2c60ae37fted.mielczarektypedef struct {
8186162aed3c3fcfc53373c963ac375d39a5dfa5a25ted.mielczarek@gmail.com  uint64_t  base_address;           /* Base address of a region of pages */
8196162aed3c3fcfc53373c963ac375d39a5dfa5a25ted.mielczarek@gmail.com  uint64_t  allocation_base;        /* Base address of a range of pages
82080745c59dec4eaaefb36d159b53591a2c60ae37fted.mielczarek                                     * within this region. */
8216162aed3c3fcfc53373c963ac375d39a5dfa5a25ted.mielczarek@gmail.com  uint32_t  allocation_protection;  /* Memory protection when this region
82280745c59dec4eaaefb36d159b53591a2c60ae37fted.mielczarek                                     * was originally allocated:
82380745c59dec4eaaefb36d159b53591a2c60ae37fted.mielczarek                                     * MDMemoryProtection */
8246162aed3c3fcfc53373c963ac375d39a5dfa5a25ted.mielczarek@gmail.com  uint32_t  __alignment1;
8256162aed3c3fcfc53373c963ac375d39a5dfa5a25ted.mielczarek@gmail.com  uint64_t  region_size;
8266162aed3c3fcfc53373c963ac375d39a5dfa5a25ted.mielczarek@gmail.com  uint32_t  state;                  /* MDMemoryState */
8276162aed3c3fcfc53373c963ac375d39a5dfa5a25ted.mielczarek@gmail.com  uint32_t  protection;             /* MDMemoryProtection */
8286162aed3c3fcfc53373c963ac375d39a5dfa5a25ted.mielczarek@gmail.com  uint32_t  type;                   /* MDMemoryType */
8296162aed3c3fcfc53373c963ac375d39a5dfa5a25ted.mielczarek@gmail.com  uint32_t  __alignment2;
83080745c59dec4eaaefb36d159b53591a2c60ae37fted.mielczarek} MDRawMemoryInfo;  /* MINIDUMP_MEMORY_INFO */
83180745c59dec4eaaefb36d159b53591a2c60ae37fted.mielczarek
83280745c59dec4eaaefb36d159b53591a2c60ae37fted.mielczarek/* For (MDRawMemoryInfo).state */
83380745c59dec4eaaefb36d159b53591a2c60ae37fted.mielczarektypedef enum {
83480745c59dec4eaaefb36d159b53591a2c60ae37fted.mielczarek  MD_MEMORY_STATE_COMMIT   = 0x1000,  /* physical storage has been allocated */
83580745c59dec4eaaefb36d159b53591a2c60ae37fted.mielczarek  MD_MEMORY_STATE_RESERVE  = 0x2000,  /* reserved, but no physical storage */
83680745c59dec4eaaefb36d159b53591a2c60ae37fted.mielczarek  MD_MEMORY_STATE_FREE     = 0x10000  /* available to be allocated */
83780745c59dec4eaaefb36d159b53591a2c60ae37fted.mielczarek} MDMemoryState;
83880745c59dec4eaaefb36d159b53591a2c60ae37fted.mielczarek
83980745c59dec4eaaefb36d159b53591a2c60ae37fted.mielczarek/* For (MDRawMemoryInfo).allocation_protection and .protection */
84080745c59dec4eaaefb36d159b53591a2c60ae37fted.mielczarektypedef enum {
84180745c59dec4eaaefb36d159b53591a2c60ae37fted.mielczarek  MD_MEMORY_PROTECT_NOACCESS          = 0x01,  /* PAGE_NOACCESS */
84280745c59dec4eaaefb36d159b53591a2c60ae37fted.mielczarek  MD_MEMORY_PROTECT_READONLY          = 0x02,  /* PAGE_READONLY */
84380745c59dec4eaaefb36d159b53591a2c60ae37fted.mielczarek  MD_MEMORY_PROTECT_READWRITE         = 0x04,  /* PAGE_READWRITE */
84480745c59dec4eaaefb36d159b53591a2c60ae37fted.mielczarek  MD_MEMORY_PROTECT_WRITECOPY         = 0x08,  /* PAGE_WRITECOPY */
84580745c59dec4eaaefb36d159b53591a2c60ae37fted.mielczarek  MD_MEMORY_PROTECT_EXECUTE           = 0x10,  /* PAGE_EXECUTE */
84680745c59dec4eaaefb36d159b53591a2c60ae37fted.mielczarek  MD_MEMORY_PROTECT_EXECUTE_READ      = 0x20,  /* PAGE_EXECUTE_READ */
84780745c59dec4eaaefb36d159b53591a2c60ae37fted.mielczarek  MD_MEMORY_PROTECT_EXECUTE_READWRITE = 0x40,  /* PAGE_EXECUTE_READWRITE */
84880745c59dec4eaaefb36d159b53591a2c60ae37fted.mielczarek  MD_MEMORY_PROTECT_EXECUTE_WRITECOPY = 0x80,  /* PAGE_EXECUTE_WRITECOPY */
84980745c59dec4eaaefb36d159b53591a2c60ae37fted.mielczarek  /* These options can be combined with the previous flags. */
85080745c59dec4eaaefb36d159b53591a2c60ae37fted.mielczarek  MD_MEMORY_PROTECT_GUARD             = 0x100,  /* PAGE_GUARD */
85180745c59dec4eaaefb36d159b53591a2c60ae37fted.mielczarek  MD_MEMORY_PROTECT_NOCACHE           = 0x200,  /* PAGE_NOCACHE */
85280745c59dec4eaaefb36d159b53591a2c60ae37fted.mielczarek  MD_MEMORY_PROTECT_WRITECOMBINE      = 0x400,  /* PAGE_WRITECOMBINE */
85380745c59dec4eaaefb36d159b53591a2c60ae37fted.mielczarek} MDMemoryProtection;
85480745c59dec4eaaefb36d159b53591a2c60ae37fted.mielczarek
85580745c59dec4eaaefb36d159b53591a2c60ae37fted.mielczarek/* Used to mask the mutually exclusive options from the combinable flags. */
8566162aed3c3fcfc53373c963ac375d39a5dfa5a25ted.mielczarek@gmail.comconst uint32_t MD_MEMORY_PROTECTION_ACCESS_MASK = 0xFF;
85780745c59dec4eaaefb36d159b53591a2c60ae37fted.mielczarek
85880745c59dec4eaaefb36d159b53591a2c60ae37fted.mielczarek/* For (MDRawMemoryInfo).type */
85980745c59dec4eaaefb36d159b53591a2c60ae37fted.mielczarektypedef enum {
86080745c59dec4eaaefb36d159b53591a2c60ae37fted.mielczarek  MD_MEMORY_TYPE_PRIVATE = 0x20000,   /* not shared by other processes */
86180745c59dec4eaaefb36d159b53591a2c60ae37fted.mielczarek  MD_MEMORY_TYPE_MAPPED  = 0x40000,   /* mapped into the view of a section */
86280745c59dec4eaaefb36d159b53591a2c60ae37fted.mielczarek  MD_MEMORY_TYPE_IMAGE   = 0x1000000  /* mapped into the view of an image */
86380745c59dec4eaaefb36d159b53591a2c60ae37fted.mielczarek} MDMemoryType;
8643261e8b6eac44a41341f112821482bee6c940c98mmentovai
8655ac32b6534688b71a2b6fe7841cf7e552a992d01mmentovai/*
866e5dc60822e5938fea2ae892ccddb906641ba174emmentovai * Breakpad extension types
8675ac32b6534688b71a2b6fe7841cf7e552a992d01mmentovai */
8685ac32b6534688b71a2b6fe7841cf7e552a992d01mmentovai
8695ac32b6534688b71a2b6fe7841cf7e552a992d01mmentovai
8705ac32b6534688b71a2b6fe7841cf7e552a992d01mmentovaitypedef struct {
871e5dc60822e5938fea2ae892ccddb906641ba174emmentovai  /* validity is a bitmask with values from MDBreakpadInfoValidity, indicating
8725ac32b6534688b71a2b6fe7841cf7e552a992d01mmentovai   * which of the other fields in the structure are valid. */
8736162aed3c3fcfc53373c963ac375d39a5dfa5a25ted.mielczarek@gmail.com  uint32_t validity;
8745ac32b6534688b71a2b6fe7841cf7e552a992d01mmentovai
8755ac32b6534688b71a2b6fe7841cf7e552a992d01mmentovai  /* Thread ID of the handler thread.  dump_thread_id should correspond to
8765ac32b6534688b71a2b6fe7841cf7e552a992d01mmentovai   * the thread_id of an MDRawThread in the minidump's MDRawThreadList if
8775ac32b6534688b71a2b6fe7841cf7e552a992d01mmentovai   * a dedicated thread in that list was used to produce the minidump.  If
8785ac32b6534688b71a2b6fe7841cf7e552a992d01mmentovai   * the MDRawThreadList does not contain a dedicated thread used to produce
8795ac32b6534688b71a2b6fe7841cf7e552a992d01mmentovai   * the minidump, this field should be set to 0 and the validity field
880e5dc60822e5938fea2ae892ccddb906641ba174emmentovai   * must not contain MD_BREAKPAD_INFO_VALID_DUMP_THREAD_ID. */
8816162aed3c3fcfc53373c963ac375d39a5dfa5a25ted.mielczarek@gmail.com  uint32_t dump_thread_id;
8825ac32b6534688b71a2b6fe7841cf7e552a992d01mmentovai
8835ac32b6534688b71a2b6fe7841cf7e552a992d01mmentovai  /* Thread ID of the thread that requested the minidump be produced.  As
8845ac32b6534688b71a2b6fe7841cf7e552a992d01mmentovai   * with dump_thread_id, requesting_thread_id should correspond to the
8855ac32b6534688b71a2b6fe7841cf7e552a992d01mmentovai   * thread_id of an MDRawThread in the minidump's MDRawThreadList.  For
8865ac32b6534688b71a2b6fe7841cf7e552a992d01mmentovai   * minidumps produced as a result of an exception, requesting_thread_id
8875ac32b6534688b71a2b6fe7841cf7e552a992d01mmentovai   * will be the same as the MDRawExceptionStream's thread_id field.  For
8885ac32b6534688b71a2b6fe7841cf7e552a992d01mmentovai   * minidumps produced "manually" at the program's request,
8895ac32b6534688b71a2b6fe7841cf7e552a992d01mmentovai   * requesting_thread_id will indicate which thread caused the dump to be
8905ac32b6534688b71a2b6fe7841cf7e552a992d01mmentovai   * written.  If the minidump was produced at the request of something
8915ac32b6534688b71a2b6fe7841cf7e552a992d01mmentovai   * other than a thread in the MDRawThreadList, this field should be set
8925ac32b6534688b71a2b6fe7841cf7e552a992d01mmentovai   * to 0 and the validity field must not contain
893e5dc60822e5938fea2ae892ccddb906641ba174emmentovai   * MD_BREAKPAD_INFO_VALID_REQUESTING_THREAD_ID. */
8946162aed3c3fcfc53373c963ac375d39a5dfa5a25ted.mielczarek@gmail.com  uint32_t requesting_thread_id;
895e5dc60822e5938fea2ae892ccddb906641ba174emmentovai} MDRawBreakpadInfo;
8965ac32b6534688b71a2b6fe7841cf7e552a992d01mmentovai
897e5dc60822e5938fea2ae892ccddb906641ba174emmentovai/* For (MDRawBreakpadInfo).validity: */
8985ac32b6534688b71a2b6fe7841cf7e552a992d01mmentovaitypedef enum {
8995ac32b6534688b71a2b6fe7841cf7e552a992d01mmentovai  /* When set, the dump_thread_id field is valid. */
900e5dc60822e5938fea2ae892ccddb906641ba174emmentovai  MD_BREAKPAD_INFO_VALID_DUMP_THREAD_ID       = 1 << 0,
9015ac32b6534688b71a2b6fe7841cf7e552a992d01mmentovai
9025ac32b6534688b71a2b6fe7841cf7e552a992d01mmentovai  /* When set, the requesting_thread_id field is valid. */
903e5dc60822e5938fea2ae892ccddb906641ba174emmentovai  MD_BREAKPAD_INFO_VALID_REQUESTING_THREAD_ID = 1 << 1
904e5dc60822e5938fea2ae892ccddb906641ba174emmentovai} MDBreakpadInfoValidity;
9055ac32b6534688b71a2b6fe7841cf7e552a992d01mmentovai
906baff938211b0127f6254c3179eb9a58af49ce8d0mmentovaitypedef struct {
907baff938211b0127f6254c3179eb9a58af49ce8d0mmentovai  /* expression, function, and file are 0-terminated UTF-16 strings.  They
908baff938211b0127f6254c3179eb9a58af49ce8d0mmentovai   * may be truncated if necessary, but should always be 0-terminated when
909baff938211b0127f6254c3179eb9a58af49ce8d0mmentovai   * written to a file.
910baff938211b0127f6254c3179eb9a58af49ce8d0mmentovai   * Fixed-length strings are used because MiniDumpWriteDump doesn't offer
911baff938211b0127f6254c3179eb9a58af49ce8d0mmentovai   * a way for user streams to point to arbitrary RVAs for strings. */
9126162aed3c3fcfc53373c963ac375d39a5dfa5a25ted.mielczarek@gmail.com  uint16_t expression[128];  /* Assertion that failed... */
9136162aed3c3fcfc53373c963ac375d39a5dfa5a25ted.mielczarek@gmail.com  uint16_t function[128];    /* ...within this function... */
9146162aed3c3fcfc53373c963ac375d39a5dfa5a25ted.mielczarek@gmail.com  uint16_t file[128];        /* ...in this file... */
9156162aed3c3fcfc53373c963ac375d39a5dfa5a25ted.mielczarek@gmail.com  uint32_t line;             /* ...at this line. */
9166162aed3c3fcfc53373c963ac375d39a5dfa5a25ted.mielczarek@gmail.com  uint32_t type;
917baff938211b0127f6254c3179eb9a58af49ce8d0mmentovai} MDRawAssertionInfo;
918baff938211b0127f6254c3179eb9a58af49ce8d0mmentovai
919b86e7ec7f09489a9f6a982a305406dd79a85bbd5ted.mielczarek/* For (MDRawAssertionInfo).type: */
920baff938211b0127f6254c3179eb9a58af49ce8d0mmentovaitypedef enum {
921baff938211b0127f6254c3179eb9a58af49ce8d0mmentovai  MD_ASSERTION_INFO_TYPE_UNKNOWN = 0,
922baff938211b0127f6254c3179eb9a58af49ce8d0mmentovai
923baff938211b0127f6254c3179eb9a58af49ce8d0mmentovai  /* Used for assertions that would be raised by the MSVC CRT but are
924baff938211b0127f6254c3179eb9a58af49ce8d0mmentovai   * directed to an invalid parameter handler instead. */
925b86e7ec7f09489a9f6a982a305406dd79a85bbd5ted.mielczarek  MD_ASSERTION_INFO_TYPE_INVALID_PARAMETER,
926b86e7ec7f09489a9f6a982a305406dd79a85bbd5ted.mielczarek
927b86e7ec7f09489a9f6a982a305406dd79a85bbd5ted.mielczarek  /* Used for assertions that would be raised by the MSVC CRT but are
928b86e7ec7f09489a9f6a982a305406dd79a85bbd5ted.mielczarek   * directed to a pure virtual call handler instead. */
929b86e7ec7f09489a9f6a982a305406dd79a85bbd5ted.mielczarek  MD_ASSERTION_INFO_TYPE_PURE_VIRTUAL_CALL
930baff938211b0127f6254c3179eb9a58af49ce8d0mmentovai} MDAssertionInfoData;
9315ac32b6534688b71a2b6fe7841cf7e552a992d01mmentovai
93284b0fc6b7342b8bec16a2056bd9a160e87232ac8ted.mielczarek/* These structs are used to store the DSO debug data in Linux minidumps,
933e2f4be928865f991e7177248bc4daadb0bd4aed0mdempsky@chromium.org * which is necessary for converting minidumps to usable coredumps.
934e2f4be928865f991e7177248bc4daadb0bd4aed0mdempsky@chromium.org * Because of a historical accident, several fields are variably encoded
935e2f4be928865f991e7177248bc4daadb0bd4aed0mdempsky@chromium.org * according to client word size, so tools potentially need to support both. */
936e2f4be928865f991e7177248bc4daadb0bd4aed0mdempsky@chromium.org
937e2f4be928865f991e7177248bc4daadb0bd4aed0mdempsky@chromium.orgtypedef struct {
938e2f4be928865f991e7177248bc4daadb0bd4aed0mdempsky@chromium.org  uint32_t  addr;
939e2f4be928865f991e7177248bc4daadb0bd4aed0mdempsky@chromium.org  MDRVA     name;
940e2f4be928865f991e7177248bc4daadb0bd4aed0mdempsky@chromium.org  uint32_t  ld;
941e2f4be928865f991e7177248bc4daadb0bd4aed0mdempsky@chromium.org} MDRawLinkMap32;
942e2f4be928865f991e7177248bc4daadb0bd4aed0mdempsky@chromium.org
943e2f4be928865f991e7177248bc4daadb0bd4aed0mdempsky@chromium.orgtypedef struct {
944e2f4be928865f991e7177248bc4daadb0bd4aed0mdempsky@chromium.org  uint32_t  version;
945e2f4be928865f991e7177248bc4daadb0bd4aed0mdempsky@chromium.org  MDRVA     map;  /* array of MDRawLinkMap32 */
946e2f4be928865f991e7177248bc4daadb0bd4aed0mdempsky@chromium.org  uint32_t  dso_count;
947e2f4be928865f991e7177248bc4daadb0bd4aed0mdempsky@chromium.org  uint32_t  brk;
948e2f4be928865f991e7177248bc4daadb0bd4aed0mdempsky@chromium.org  uint32_t  ldbase;
949e2f4be928865f991e7177248bc4daadb0bd4aed0mdempsky@chromium.org  uint32_t  dynamic;
950e2f4be928865f991e7177248bc4daadb0bd4aed0mdempsky@chromium.org} MDRawDebug32;
951e2f4be928865f991e7177248bc4daadb0bd4aed0mdempsky@chromium.org
95284b0fc6b7342b8bec16a2056bd9a160e87232ac8ted.mielczarektypedef struct {
953e2f4be928865f991e7177248bc4daadb0bd4aed0mdempsky@chromium.org  uint64_t  addr;
95484b0fc6b7342b8bec16a2056bd9a160e87232ac8ted.mielczarek  MDRVA     name;
955e2f4be928865f991e7177248bc4daadb0bd4aed0mdempsky@chromium.org  uint64_t  ld;
956e2f4be928865f991e7177248bc4daadb0bd4aed0mdempsky@chromium.org} MDRawLinkMap64;
95784b0fc6b7342b8bec16a2056bd9a160e87232ac8ted.mielczarek
95884b0fc6b7342b8bec16a2056bd9a160e87232ac8ted.mielczarektypedef struct {
9596162aed3c3fcfc53373c963ac375d39a5dfa5a25ted.mielczarek@gmail.com  uint32_t  version;
960e2f4be928865f991e7177248bc4daadb0bd4aed0mdempsky@chromium.org  MDRVA     map;  /* array of MDRawLinkMap64 */
9616162aed3c3fcfc53373c963ac375d39a5dfa5a25ted.mielczarek@gmail.com  uint32_t  dso_count;
962e2f4be928865f991e7177248bc4daadb0bd4aed0mdempsky@chromium.org  uint64_t  brk;
963e2f4be928865f991e7177248bc4daadb0bd4aed0mdempsky@chromium.org  uint64_t  ldbase;
964e2f4be928865f991e7177248bc4daadb0bd4aed0mdempsky@chromium.org  uint64_t  dynamic;
965e2f4be928865f991e7177248bc4daadb0bd4aed0mdempsky@chromium.org} MDRawDebug64;
96684b0fc6b7342b8bec16a2056bd9a160e87232ac8ted.mielczarek
9675ac32b6534688b71a2b6fe7841cf7e552a992d01mmentovai#if defined(_MSC_VER)
9685ac32b6534688b71a2b6fe7841cf7e552a992d01mmentovai#pragma warning(pop)
9695ac32b6534688b71a2b6fe7841cf7e552a992d01mmentovai#endif  /* _MSC_VER */
9705ac32b6534688b71a2b6fe7841cf7e552a992d01mmentovai
9715ac32b6534688b71a2b6fe7841cf7e552a992d01mmentovai
972e5dc60822e5938fea2ae892ccddb906641ba174emmentovai#endif  /* GOOGLE_BREAKPAD_COMMON_MINIDUMP_FORMAT_H__ */
973