37 enum segment_type : uint16_t
44 SegmentStringTable = 0x05,
45 GroupDefinition = 0x06,
49 DescriptorNames = 0x43,
51 DebugRelocation = 0x45,
53 SymbolStringTable = 0x48,
55 segment_type type = Null;
56 uint16_t attributes = 0;
59 uint8_t log2_align = 0;
60 uint8_t reserved1 = 0;
62 uint32_t file_size = 0;
63 uint32_t memory_size = 0;
64 uint32_t base_address = 0;
65 uint16_t name_offset = 0;
67 uint16_t reserved2 = 0;
68 uint32_t reserved3 = 0;
70 std::shared_ptr<Linker::Contents> contents;
72 static constexpr uint16_t Attribute_Iterated = 0x0001;
73 static constexpr uint16_t Attribute_Huge = 0x0002;
74 static constexpr uint16_t Attribute_ImplicitBss = 0x0004;
75 static constexpr uint16_t Attribute_Pure = 0x0008;
76 static constexpr uint16_t Attribute_ExpandDown = 0x0010;
77 static constexpr uint16_t Attribute_Private = 0x0020;
78 static constexpr uint16_t Attribute_32Bit = 0x0040;
79 static constexpr uint16_t Attribute_MemoryImage = 0x8000;
81 static constexpr uint16_t Attribute_SymbolTable_Bell = 0x0000;
82 static constexpr uint16_t Attribute_SymbolTable_XOut = 0x0001;
83 static constexpr uint16_t Attribute_SymbolTable_IslandDebugger = 0x0002;
85 static constexpr uint16_t Attribute_Relocation_XOutSegmented = 0x0001;
86 static constexpr uint16_t Attribute_Relocation_8086Segmented = 0x0002;
112 enum relocation_format_type
122 enum symbol_format_type
129 SYM_STRING_TABLE = 5,
132 uint16_t header_size = 0;
133 uint32_t text_size = 0;
134 uint32_t data_size = 0;
135 uint32_t bss_size = 0;
136 uint32_t symbol_table_size = 0;
137 uint32_t relocation_size = 0;
138 uint32_t entry_address = 0;
139 cpu_type cpu = CPU_None;
140 ::EndianType endiantype = ::LittleEndian;
141 relocation_format_type relocation_format;
142 symbol_format_type symbol_format;
143 uint16_t runtime_environment = 0;
146 uint32_t text_relocation_size = 0;
147 uint32_t data_relocation_size = 0;
148 uint32_t text_base_address = 0;
149 uint32_t data_base_address = 0;
150 uint32_t stack_size = 0;
151 uint32_t segment_table_offset = 0;
152 uint32_t segment_table_size = 0;
153 uint32_t machine_dependent_table_offset = 0;
154 uint32_t machine_dependent_table_size = 0;
155 enum machine_dependent_table_format_type : uint8_t
160 machine_dependent_table_format_type machine_dependent_table_format = MDT_None;
161 uint32_t page_size = 0;
162 enum operating_system_type : uint8_t
167 OS_ConcurrentCPM = 3,
169 operating_system_type operating_system = OS_None;
170 enum system_version_type : uint8_t
172 SystemVersion_Xenix2 = 0,
173 SystemVersion_Xenix3 = 1,
174 SystemVersion_Xenix5 = 2,
176 system_version_type system_version = SystemVersion_Xenix2;
177 uint16_t entry_segment = 0;
178 uint16_t header_reserved1 = 0;
180 std::vector<Segment> segments;
182 uint8_t GetCPUByte()
const;
183 uint8_t GetRelSymByte()
const;
186 offset_t GetPageSize()
const;
189 static constexpr uint16_t Flag_Executable = 0x0001;
190 static constexpr uint16_t Flag_SeparateInsData = 0x0002;
191 static constexpr uint16_t Flag_PureText = 0x0004;
192 static constexpr uint16_t Flag_FixedStack = 0x0008;
193 static constexpr uint16_t Flag_TextOverlay = 0x0010;
194 static constexpr uint16_t Flag_LargeData = 0x0020;
195 static constexpr uint16_t Flag_LargeText = 0x0040;
196 static constexpr uint16_t Flag_FloatingPoint = 0x0080;
197 static constexpr uint16_t Flag_VirtualModule = 0x0100;
198 static constexpr uint16_t Flag_HugeData = 0x0100;
199 static constexpr uint16_t Flag_Iterated = 0x0200;
200 static constexpr uint16_t Flag_Absolute = 0x0400;
201 static constexpr uint16_t Flag_SegmentTable = 0x0800;
202 static constexpr uint16_t Flag_AdvisoryLocking = 0x1000;
203 static constexpr uint16_t Flag_Xenix53Required = 0x2000;
205 static constexpr uint16_t Flag_Xenix2x = 0x4000;
206 static constexpr uint16_t Flag_Xenix3x = 0x8000;
207 static constexpr uint16_t Flag_Xenix5x = 0xC000;
209 void Clear()
override;