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// See
14// https://www.ibm.com/docs/en/zos/3.1.0?topic=facilities-generalized-object-file-format-goff
15//
16//===----------------------------------------------------------------------===//
17
18#ifndef LLVM_BINARYFORMAT_GOFF_H
19#define LLVM_BINARYFORMAT_GOFF_H
20
21#include "llvm/Support/DataTypes.h"
22
23namespace llvm {
24
25namespace GOFF {
26
27/// \brief Length of the parts of a physical GOFF record.
28constexpr uint8_t RecordLength = 80;
29constexpr uint8_t RecordPrefixLength = 3;
30constexpr uint8_t PayloadLength = 77;
31constexpr uint8_t RecordContentLength = RecordLength - RecordPrefixLength;
32
33/// \brief Maximum data length before starting a new card for RLD and TXT data.
34///
35/// The maximum number of bytes that can be included in an RLD or TXT record and
36/// their continuations is a SIGNED 16 bit int despite what the spec says. The
37/// number of bytes we allow ourselves to attach to a card is thus arbitrarily
38/// limited to 32K-1 bytes.
39constexpr uint16_t MaxDataLength = 32 * 1024 - 1;
40
41/// \brief Prefix byte on every record. This indicates GOFF format.
42constexpr uint8_t PTVPrefix = 0x03;
43
44enum RecordType : uint8_t {
45 RT_ESD = 0,
46 RT_TXT = 1,
47 RT_RLD = 2,
48 RT_LEN = 3,
49 RT_END = 4,
50 RT_HDR = 15,
51};
52
53enum ESDSymbolType : uint8_t {
54 ESD_ST_SectionDefinition = 0,
55 ESD_ST_ElementDefinition = 1,
56 ESD_ST_LabelDefinition = 2,
57 ESD_ST_PartReference = 3,
58 ESD_ST_ExternalReference = 4,
59};
60
61enum ESDNameSpaceId : uint8_t {
62 ESD_NS_ProgramManagementBinder = 0,
63 ESD_NS_NormalName = 1,
64 ESD_NS_PseudoRegister = 2,
65 ESD_NS_Parts = 3
66};
67
68enum ESDReserveQwords : uint8_t {
69 ESD_RQ_0 = 0,
70 ESD_RQ_1 = 1,
71 ESD_RQ_2 = 2,
72 ESD_RQ_3 = 3
73};
74
75enum ESDAmode : uint8_t {
76 ESD_AMODE_None = 0,
77 ESD_AMODE_24 = 1,
78 ESD_AMODE_31 = 2,
79 ESD_AMODE_ANY = 3,
80 ESD_AMODE_64 = 4,
81 ESD_AMODE_MIN = 16,
82};
83
84enum ESDRmode : uint8_t {
85 ESD_RMODE_None = 0,
86 ESD_RMODE_24 = 1,
87 ESD_RMODE_31 = 3,
88 ESD_RMODE_64 = 4,
89};
90
91enum ESDTextStyle : uint8_t {
92 ESD_TS_ByteOriented = 0,
93 ESD_TS_Structured = 1,
94 ESD_TS_Unstructured = 2,
95};
96
97enum ESDBindingAlgorithm : uint8_t {
98 ESD_BA_Concatenate = 0,
99 ESD_BA_Merge = 1,
100};
101
102enum ESDTaskingBehavior : uint8_t {
103 ESD_TA_Unspecified = 0,
104 ESD_TA_NonReus = 1,
105 ESD_TA_Reus = 2,
106 ESD_TA_Rent = 3,
107};
108
109enum ESDExecutable : uint8_t {
110 ESD_EXE_Unspecified = 0,
111 ESD_EXE_DATA = 1,
112 ESD_EXE_CODE = 2,
113};
114
115enum ESDDuplicateSymbolSeverity : uint8_t {
116 ESD_DSS_NoWarning = 0,
117 ESD_DSS_Warning = 1,
118 ESD_DSS_Error = 2,
119 ESD_DSS_Reserved = 3,
120};
121
122enum ESDBindingStrength : uint8_t {
123 ESD_BST_Strong = 0,
124 ESD_BST_Weak = 1,
125};
126
127enum ESDLoadingBehavior : uint8_t {
128 ESD_LB_Initial = 0,
129 ESD_LB_Deferred = 1,
130 ESD_LB_NoLoad = 2,
131 ESD_LB_Reserved = 3,
132};
133
134enum ESDBindingScope : uint8_t {
135 ESD_BSC_Unspecified = 0,
136 ESD_BSC_Section = 1,
137 ESD_BSC_Module = 2,
138 ESD_BSC_Library = 3,
139 ESD_BSC_ImportExport = 4,
140};
141
142enum ESDLinkageType : uint8_t { ESD_LT_OS = 0, ESD_LT_XPLink = 1 };
143
144enum ESDAlignment : uint8_t {
145 ESD_ALIGN_Byte = 0,
146 ESD_ALIGN_Halfword = 1,
147 ESD_ALIGN_Fullword = 2,
148 ESD_ALIGN_Doubleword = 3,
149 ESD_ALIGN_Quadword = 4,
150 ESD_ALIGN_32byte = 5,
151 ESD_ALIGN_64byte = 6,
152 ESD_ALIGN_128byte = 7,
153 ESD_ALIGN_256byte = 8,
154 ESD_ALIGN_512byte = 9,
155 ESD_ALIGN_1024byte = 10,
156 ESD_ALIGN_2Kpage = 11,
157 ESD_ALIGN_4Kpage = 12,
158};
159
160enum ENDEntryPointRequest : uint8_t {
161 END_EPR_None = 0,
162 END_EPR_EsdidOffset = 1,
163 END_EPR_ExternalName = 2,
164 END_EPR_Reserved = 3,
165};
166
167// \brief Subsections of the primary C_CODE section in the object file.
168enum SubsectionKind : uint8_t {
169 SK_PPA1 = 2,
170 SK_PPA2 = 4,
171};
172} // end namespace GOFF
173
174} // end namespace llvm
175
176#endif // LLVM_BINARYFORMAT_GOFF_H
177

source code of llvm/include/llvm/BinaryFormat/GOFF.h