File: System\Reflection\PortableExecutable\DebugDirectory\DebugDirectoryEntryType.cs
Web Access
Project: src\runtime\src\libraries\System.Reflection.Metadata\src\System.Reflection.Metadata.csproj (System.Reflection.Metadata)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.

namespace System.Reflection.PortableExecutable
{
    public enum DebugDirectoryEntryType
    {
        /// <summary>
        /// An unknown value that is ignored by all tools.
        /// </summary>
        Unknown = 0,

        /// <summary>
        /// The COFF debug information (line numbers, symbol table, and string table).
        /// This type of debug information is also pointed to by fields in the file headers.
        /// </summary>
        Coff = 1,

        /// <summary>
        /// Associated PDB file description.
        /// </summary>
        /// <remarks>
        /// See https://github.com/dotnet/runtime/blob/main/src/libraries/System.Reflection.Metadata/specs/PE-COFF.md#codeview-debug-directory-entry-type-2 for specification.
        /// </remarks>
        CodeView = 2,

        /// <summary>
        /// Presence of this entry indicates deterministic PE/COFF file.
        /// </summary>
        /// <remarks>
        /// <para>
        /// The tool that produced the deterministic PE/COFF file guarantees that the entire content of the file
        /// is based solely on documented inputs given to the tool (such as source files, resource files, compiler options, etc.)
        /// rather than ambient environment variables (such as the current time, the operating system,
        /// the bitness of the process running the tool, etc.).
        /// </para>
        /// <para>
        /// The value of field TimeDateStamp in COFF File Header of a deterministic PE/COFF file
        /// does not indicate the date and time when the file was produced and should not be interpreted that way.
        /// Instead the value of the field is derived from a hash of the file content. The algorithm to calculate
        /// this value is an implementation detail of the tool that produced the file.
        /// </para>
        /// <para>
        /// The debug directory entry of type <see cref="Reproducible"/> must have all fields, except for Type zeroed.
        /// </para>
        /// <para>
        /// See https://github.com/dotnet/runtime/blob/main/src/libraries/System.Reflection.Metadata/specs/PE-COFF.md#deterministic-debug-directory-entry-type-16 for specification.
        /// </para>
        /// </remarks>
        Reproducible = 16,

        /// <summary>
        /// The entry points to a blob containing Embedded Portable PDB.
        /// </summary>
        /// <remarks>
        /// The Embedded Portable PDB blob has the following format:
        ///
        /// blob ::= uncompressed-size data
        ///
        /// Data spans the remainder of the blob and contains a Deflate-compressed Portable PDB.
        ///
        /// See https://github.com/dotnet/runtime/blob/main/src/libraries/System.Reflection.Metadata/specs/PE-COFF.md#embedded-portable-pdb-debug-directory-entry-type-17 for specification.
        /// </remarks>
        EmbeddedPortablePdb = 17,

        /// <summary>
        /// The entry stores crypto hash of the content of the symbol file the PE/COFF file was built with.
        /// </summary>
        /// <remarks>
        /// The hash can be used to validate that a given PDB file was built with the PE/COFF file and not altered in any way.
        /// More than one entry can be present, in case multiple PDBs were produced during the build of the PE/COFF file (e.g. private and public symbols).
        ///
        /// See https://github.com/dotnet/runtime/blob/main/src/libraries/System.Reflection.Metadata/specs/PE-COFF.md#pdb-checksum-debug-directory-entry-type-19 for specification.
        /// </remarks>
        PdbChecksum = 19,
    }
}