1 //===-- llvm/BinaryFormat/GOFF.h - GOFF definitions --------------*- C++-*-===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 //
9 // This header contains common, non-processor-specific data structures and
10 // constants for the GOFF file format.
11 //
12 // GOFF specifics can be found in MVS Program Management: Advanced Facilities.
13 //
14 //===----------------------------------------------------------------------===//
15 
16 #ifndef LLVM_BINARYFORMAT_GOFF_H
17 #define LLVM_BINARYFORMAT_GOFF_H
18 
19 #include "llvm/Support/DataTypes.h"
20 
21 namespace llvm {
22 namespace GOFF {
23 
24 constexpr uint8_t RecordLength = 80;
25 constexpr uint8_t RecordPrefixLength = 3;
26 constexpr uint8_t PayloadLength = 77;
27 
28 // Prefix byte on every record. This indicates GOFF format.
29 constexpr uint8_t PTVPrefix = 0x03;
30 
31 enum RecordType : uint8_t {
32   RT_ESD = 0,
33   RT_TXT = 1,
34   RT_RLD = 2,
35   RT_LEN = 3,
36   RT_END = 4,
37   RT_HDR = 15,
38 };
39 
40 enum ESDSymbolType : uint8_t {
41   ESD_ST_SectionDefinition = 0,
42   ESD_ST_ElementDefinition = 1,
43   ESD_ST_LabelDefinition = 2,
44   ESD_ST_PartReference = 3,
45   ESD_ST_ExternalReference = 4,
46 };
47 
48 enum ESDNameSpaceId : uint8_t {
49   ESD_NS_ProgramManagementBinder = 0,
50   ESD_NS_NormalName = 1,
51   ESD_NS_PseudoRegister = 2,
52   ESD_NS_Parts = 3
53 };
54 
55 enum ESDReserveQwords : uint8_t {
56   ESD_RQ_0 = 0,
57   ESD_RQ_1 = 1,
58   ESD_RQ_2 = 2,
59   ESD_RQ_3 = 3
60 };
61 
62 enum ESDAmode : uint8_t {
63   ESD_AMODE_None = 0,
64   ESD_AMODE_24 = 1,
65   ESD_AMODE_31 = 2,
66   ESD_AMODE_ANY = 3,
67   ESD_AMODE_64 = 4,
68   ESD_AMODE_MIN = 16,
69 };
70 
71 enum ESDRmode : uint8_t {
72   ESD_RMODE_None = 0,
73   ESD_RMODE_24 = 1,
74   ESD_RMODE_31 = 3,
75   ESD_RMODE_64 = 4,
76 };
77 
78 enum ESDTextStyle : uint8_t {
79   ESD_TS_ByteOriented = 0,
80   ESD_TS_Structured = 1,
81   ESD_TS_Unstructured = 2,
82 };
83 
84 enum ESDBindingAlgorithm : uint8_t {
85   ESD_BA_Concatenate = 0,
86   ESD_BA_Merge = 1,
87 };
88 
89 enum ESDTaskingBehavior : uint8_t {
90   ESD_TA_Unspecified = 0,
91   ESD_TA_NonReus = 1,
92   ESD_TA_Reus = 2,
93   ESD_TA_Rent = 3,
94 };
95 
96 enum ESDExecutable : uint8_t {
97   ESD_EXE_Unspecified = 0,
98   ESD_EXE_DATA = 1,
99   ESD_EXE_CODE = 2,
100 };
101 
102 enum ESDDuplicateSymbolSeverity : uint8_t {
103   ESD_DSS_NoWarning = 0,
104   ESD_DSS_Warning = 1,
105   ESD_DSS_Error = 2,
106   ESD_DSS_Reserved = 3,
107 };
108 
109 enum ESDBindingStrength : uint8_t {
110   ESD_BST_Strong = 0,
111   ESD_BST_Weak = 1,
112 };
113 
114 enum ESDLoadingBehavior : uint8_t {
115   ESD_LB_Initial = 0,
116   ESD_LB_Deferred = 1,
117   ESD_LB_NoLoad = 2,
118   ESD_LB_Reserved = 3,
119 };
120 
121 enum ESDBindingScope : uint8_t {
122   ESD_BSC_Unspecified = 0,
123   ESD_BSC_Section = 1,
124   ESD_BSC_Module = 2,
125   ESD_BSC_Library = 3,
126   ESD_BSC_ImportExport = 4,
127 };
128 
129 enum ESDLinkageType : uint8_t { ESD_LT_OS = 0, ESD_LT_XPLink = 1 };
130 
131 enum ESDAlignment : uint8_t {
132   ESD_ALIGN_Byte = 0,
133   ESD_ALIGN_Halfword = 1,
134   ESD_ALIGN_Fullword = 2,
135   ESD_ALIGN_Doubleword = 3,
136   ESD_ALIGN_Quadword = 4,
137   ESD_ALIGN_32byte = 5,
138   ESD_ALIGN_64byte = 6,
139   ESD_ALIGN_128byte = 7,
140   ESD_ALIGN_256byte = 8,
141   ESD_ALIGN_512byte = 9,
142   ESD_ALIGN_1024byte = 10,
143   ESD_ALIGN_2Kpage = 11,
144   ESD_ALIGN_4Kpage = 12,
145 };
146 
147 enum ENDEntryPointRequest : uint8_t {
148   END_EPR_None = 0,
149   END_EPR_EsdidOffset = 1,
150   END_EPR_ExternalName = 2,
151   END_EPR_Reserved = 3,
152 };
153 
154 // \brief Subsections of the primary C_CODE section in the object file.
155 enum SubsectionKind : uint8_t {
156   SK_PPA1 = 2,
157 };
158 } // end namespace GOFF
159 
160 } // end namespace llvm
161 
162 #endif // LLVM_BINARYFORMAT_GOFF_H
163