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