| Index: util/misc/pdb_structures.h
|
| diff --git a/util/misc/pdb_structures.h b/util/misc/pdb_structures.h
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..04d76eec5cf4ef2c1c3a18e9acd88f342da777a1
|
| --- /dev/null
|
| +++ b/util/misc/pdb_structures.h
|
| @@ -0,0 +1,131 @@
|
| +// Copyright 2015 The Crashpad Authors. All rights reserved.
|
| +//
|
| +// Licensed under the Apache License, Version 2.0 (the "License");
|
| +// you may not use this file except in compliance with the License.
|
| +// You may obtain a copy of the License at
|
| +//
|
| +// http://www.apache.org/licenses/LICENSE-2.0
|
| +//
|
| +// Unless required by applicable law or agreed to in writing, software
|
| +// distributed under the License is distributed on an "AS IS" BASIS,
|
| +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
| +// See the License for the specific language governing permissions and
|
| +// limitations under the License.
|
| +
|
| +#ifndef CRASHPAD_UTIL_MISC_PDB_STRUCTURES_H_
|
| +#define CRASHPAD_UTIL_MISC_PDB_STRUCTURES_H_
|
| +
|
| +#include "util/misc/uuid.h"
|
| +
|
| +namespace crashpad {
|
| +
|
| +//! \brief A CodeView record linking to a `.pdb` 2.0 file.
|
| +//!
|
| +//! This format provides an indirect link to debugging data by referencing an
|
| +//! external `.pdb` file by its name, timestamp, and age. This structure may be
|
| +//! pointed to by MINIDUMP_MODULE::CvRecord. It has been superseded by
|
| +//! CodeViewRecordPDB70.
|
| +//!
|
| +//! For more information about this structure and format, see <a
|
| +//! href="http://www.debuginfo.com/articles/debuginfomatch.html#pdbfiles">Matching
|
| +//! Debug Information</a>, PDB Files, and <a
|
| +//! href="http://undocumented.rawol.com/sbs-w2k-1-windows-2000-debugging-support.pdf#page=63">Undocumented
|
| +//! Windows 2000 Secrets</a>, Windows 2000 Debugging Support/Microsoft Symbol
|
| +//! File Internals/CodeView Subsections.
|
| +//!
|
| +//! \sa IMAGE_DEBUG_MISC
|
| +struct CodeViewRecordPDB20 {
|
| + //! \brief The magic number identifying this structure version, stored in
|
| + //! #signature.
|
| + //!
|
| + //! In a hex dump, this will appear as “NB10” when produced by a little-endian
|
| + //! machine.
|
| + static const uint32_t kSignature = '01BN';
|
| +
|
| + //! \brief The magic number identifying this structure version, the value of
|
| + //! #kSignature.
|
| + uint32_t signature;
|
| +
|
| + //! \brief The offset to CodeView data.
|
| + //!
|
| + //! In this structure, this field always has the value `0` because no CodeView
|
| + //! data is present, there is only a link to CodeView data stored in an
|
| + //! external file.
|
| + uint32_t offset;
|
| +
|
| + //! \brief The time that the `.pdb` file was created, in `time_t` format, the
|
| + //! number of seconds since the POSIX epoch.
|
| + uint32_t timestamp;
|
| +
|
| + //! \brief The revision of the `.pdb` file.
|
| + //!
|
| + //! A `.pdb` file’s age indicates incremental changes to it. When a `.pdb`
|
| + //! file is created, it has age `1`, and subsequent updates increase this
|
| + //! value.
|
| + uint32_t age;
|
| +
|
| + //! \brief The path or file name of the `.pdb` file associated with the
|
| + //! module.
|
| + //!
|
| + //! This is a NUL-terminated string. On Windows, it will be encoded in the
|
| + //! code page of the system that linked the module. On other operating
|
| + //! systems, UTF-8 may be used.
|
| + uint8_t pdb_name[1];
|
| +};
|
| +
|
| +//! \brief A CodeView record linking to a `.pdb` 7.0 file.
|
| +//!
|
| +//! This format provides an indirect link to debugging data by referencing an
|
| +//! external `.pdb` file by its name, %UUID, and age. This structure may be
|
| +//! pointed to by MINIDUMP_MODULE::CvRecord.
|
| +//!
|
| +//! For more information about this structure and format, see <a
|
| +//! href="http://www.debuginfo.com/articles/debuginfomatch.html#pdbfiles">Matching
|
| +//! Debug Information</a>, PDB Files.
|
| +//!
|
| +//! \sa CodeViewRecordPDB20
|
| +//! \sa IMAGE_DEBUG_MISC
|
| +struct CodeViewRecordPDB70 {
|
| + // UUID has a constructor, which makes it non-POD, which makes this structure
|
| + // non-POD. In order for the default constructor to zero-initialize other
|
| + // members, an explicit constructor must be provided.
|
| + CodeViewRecordPDB70()
|
| + : signature(),
|
| + uuid(),
|
| + age(),
|
| + pdb_name() {
|
| + }
|
| +
|
| + //! \brief The magic number identifying this structure version, stored in
|
| + //! #signature.
|
| + //!
|
| + //! In a hex dump, this will appear as “RSDS” when produced by a little-endian
|
| + //! machine.
|
| + static const uint32_t kSignature = 'SDSR';
|
| +
|
| + //! \brief The magic number identifying this structure version, the value of
|
| + //! #kSignature.
|
| + uint32_t signature;
|
| +
|
| + //! \brief The `.pdb` file’s unique identifier.
|
| + UUID uuid;
|
| +
|
| + //! \brief The revision of the `.pdb` file.
|
| + //!
|
| + //! A `.pdb` file’s age indicates incremental changes to it. When a `.pdb`
|
| + //! file is created, it has age `1`, and subsequent updates increase this
|
| + //! value.
|
| + uint32_t age;
|
| +
|
| + //! \brief The path or file name of the `.pdb` file associated with the
|
| + //! module.
|
| + //!
|
| + //! This is a NUL-terminated string. On Windows, it will be encoded in the
|
| + //! code page of the system that linked the module. On other operating
|
| + //! systems, UTF-8 may be used.
|
| + uint8_t pdb_name[1];
|
| +};
|
| +
|
| +} // namespace crashpad
|
| +
|
| +#endif // CRASHPAD_UTIL_MISC_PDB_STRUCTURES_H_
|
|
|