1317017Sdim//===- RawConstants.h -------------------------------------------*- C++ -*-===//
2317017Sdim//
3353358Sdim// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4353358Sdim// See https://llvm.org/LICENSE.txt for license information.
5353358Sdim// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6317017Sdim//
7317017Sdim//===----------------------------------------------------------------------===//
8317017Sdim
9317017Sdim#ifndef LLVM_DEBUGINFO_PDB_RAW_PDBRAWCONSTANTS_H
10317017Sdim#define LLVM_DEBUGINFO_PDB_RAW_PDBRAWCONSTANTS_H
11317017Sdim
12317017Sdim#include "llvm/ADT/BitmaskEnum.h"
13317017Sdim#include "llvm/DebugInfo/CodeView/CodeView.h"
14317017Sdim#include <cstdint>
15317017Sdim
16317017Sdimnamespace llvm {
17317017Sdimnamespace pdb {
18317017Sdim
19317017Sdimconst uint16_t kInvalidStreamIndex = 0xFFFF;
20317017Sdim
21317017Sdimenum PdbRaw_ImplVer : uint32_t {
22317017Sdim  PdbImplVC2 = 19941610,
23317017Sdim  PdbImplVC4 = 19950623,
24317017Sdim  PdbImplVC41 = 19950814,
25317017Sdim  PdbImplVC50 = 19960307,
26317017Sdim  PdbImplVC98 = 19970604,
27317017Sdim  PdbImplVC70Dep = 19990604, // deprecated
28317017Sdim  PdbImplVC70 = 20000404,
29317017Sdim  PdbImplVC80 = 20030901,
30317017Sdim  PdbImplVC110 = 20091201,
31317017Sdim  PdbImplVC140 = 20140508,
32317017Sdim};
33317017Sdim
34341825Sdimenum class PdbRaw_SrcHeaderBlockVer : uint32_t { SrcVerOne = 19980827 };
35341825Sdim
36317017Sdimenum class PdbRaw_FeatureSig : uint32_t {
37317017Sdim  VC110 = PdbImplVC110,
38317017Sdim  VC140 = PdbImplVC140,
39317017Sdim  NoTypeMerge = 0x4D544F4E,
40317017Sdim  MinimalDebugInfo = 0x494E494D,
41317017Sdim};
42317017Sdim
43317017Sdimenum PdbRaw_Features : uint32_t {
44317017Sdim  PdbFeatureNone = 0x0,
45317017Sdim  PdbFeatureContainsIdStream = 0x1,
46317017Sdim  PdbFeatureMinimalDebugInfo = 0x2,
47317017Sdim  PdbFeatureNoTypeMerging = 0x4,
48317017Sdim  LLVM_MARK_AS_BITMASK_ENUM(/* LargestValue = */ PdbFeatureNoTypeMerging)
49317017Sdim};
50317017Sdim
51317017Sdimenum PdbRaw_DbiVer : uint32_t {
52317017Sdim  PdbDbiVC41 = 930803,
53317017Sdim  PdbDbiV50 = 19960307,
54317017Sdim  PdbDbiV60 = 19970606,
55317017Sdim  PdbDbiV70 = 19990903,
56317017Sdim  PdbDbiV110 = 20091201
57317017Sdim};
58317017Sdim
59317017Sdimenum PdbRaw_TpiVer : uint32_t {
60317017Sdim  PdbTpiV40 = 19950410,
61317017Sdim  PdbTpiV41 = 19951122,
62317017Sdim  PdbTpiV50 = 19961031,
63317017Sdim  PdbTpiV70 = 19990903,
64317017Sdim  PdbTpiV80 = 20040203,
65317017Sdim};
66317017Sdim
67317017Sdimenum PdbRaw_DbiSecContribVer : uint32_t {
68317017Sdim  DbiSecContribVer60 = 0xeffe0000 + 19970605,
69317017Sdim  DbiSecContribV2 = 0xeffe0000 + 20140516
70317017Sdim};
71317017Sdim
72317017Sdimenum SpecialStream : uint32_t {
73317017Sdim  // Stream 0 contains the copy of previous version of the MSF directory.
74317017Sdim  // We are not currently using it, but technically if we find the main
75317017Sdim  // MSF is corrupted, we could fallback to it.
76317017Sdim  OldMSFDirectory = 0,
77317017Sdim
78317017Sdim  StreamPDB = 1,
79317017Sdim  StreamTPI = 2,
80317017Sdim  StreamDBI = 3,
81317017Sdim  StreamIPI = 4,
82317017Sdim
83317017Sdim  kSpecialStreamCount
84317017Sdim};
85317017Sdim
86317017Sdimenum class DbgHeaderType : uint16_t {
87317017Sdim  FPO,
88317017Sdim  Exception,
89317017Sdim  Fixup,
90317017Sdim  OmapToSrc,
91317017Sdim  OmapFromSrc,
92317017Sdim  SectionHdr,
93317017Sdim  TokenRidMap,
94317017Sdim  Xdata,
95317017Sdim  Pdata,
96317017Sdim  NewFPO,
97317017Sdim  SectionHdrOrig,
98317017Sdim  Max
99317017Sdim};
100317017Sdim
101317017Sdimenum class OMFSegDescFlags : uint16_t {
102320041Sdim  None = 0,
103317017Sdim  Read = 1 << 0,              // Segment is readable.
104317017Sdim  Write = 1 << 1,             // Segment is writable.
105317017Sdim  Execute = 1 << 2,           // Segment is executable.
106317017Sdim  AddressIs32Bit = 1 << 3,    // Descriptor describes a 32-bit linear address.
107317017Sdim  IsSelector = 1 << 8,        // Frame represents a selector.
108317017Sdim  IsAbsoluteAddress = 1 << 9, // Frame represents an absolute address.
109320041Sdim  IsGroup = 1 << 10,          // If set, descriptor represents a group.
110320041Sdim  LLVM_MARK_AS_BITMASK_ENUM(/* LargestValue = */ IsGroup)
111317017Sdim};
112317017Sdim
113320041SdimLLVM_ENABLE_BITMASK_ENUMS_IN_NAMESPACE();
114320041Sdim
115317017Sdim} // end namespace pdb
116317017Sdim} // end namespace llvm
117317017Sdim
118317017Sdim#endif // LLVM_DEBUGINFO_PDB_RAW_PDBRAWCONSTANTS_H
119