<?xml version="1.0" encoding="UTF-8"?>
<data>
	<enumDef name="ObjectTypeEnum" type="UInt16">
		<entry name="unknown" value="0" />
		<entry name="relocatable" value="1" />
		<entry name="executable" value="2" />
		<entry name="shared object" value="3" />
		<entry name="core file" value="4" />
	</enumDef>
	<enumDef name="ArchitectureEnum" type="UInt16">
		<entry value="0" name="No machine" />
		<entry value="1" name="AT&amp;T WE 32100" />
		<entry value="2" name="SUN SPARC" />
		<entry value="3" name="Intel 80386" />
		<entry value="4" name="Motorola m68k family" />
		<entry value="5" name="Motorola m88k family" />
		<entry value="7" name="Intel 80860" />
		<entry value="8" name="MIPS R3000 big-endian" />
		<entry value="9" name="IBM System/370" />
		<entry value="10" name="MIPS R3000 little-endian" />
		<entry value="15" name="HPPA" />
		<entry value="17" name="Fujitsu VPP500" />
		<entry value="18" name="Sun's v8plus" />
		<entry value="19" name="Intel 80960" />
		<entry value="20" name="PowerPC" />
		<entry value="21" name="PowerPC 64-bit" />
		<entry value="22" name="IBM S390" />
		<entry value="36" name="NEC V800 series" />
		<entry value="37" name="Fujitsu FR20" />
		<entry value="38" name="TRW RH-32" />
		<entry value="39" name="Motorola RCE" />
		<entry value="40" name="ARM" />
		<entry value="41" name="Digital Alpha" />
		<entry value="42" name="Hitachi SH" />
		<entry value="43" name="SPARC v9 64-bit" />
		<entry value="44" name="Siemens Tricore" />
		<entry value="45" name="Argonaut RISC Core" />
		<entry value="46" name="Hitachi H8/300" />
		<entry value="47" name="Hitachi H8/300H" />
		<entry value="48" name="Hitachi H8S" />
		<entry value="49" name="Hitachi H8/500" />
		<entry value="50" name="Intel Merced" />
		<entry value="51" name="Stanford MIPS-X" />
		<entry value="52" name="Motorola Coldfire" />
		<entry value="53" name="Motorola M68HC12" />
		<entry value="54" name="Fujitsu MMA Multimedia Accelerator" />
		<entry value="55" name="Siemens PCP" />
		<entry value="56" name="Sony nCPU embeeded RISC" />
		<entry value="57" name="Denso NDR1 microprocessor" />
		<entry value="58" name="Motorola Start*Core processor" />
		<entry value="59" name="Toyota ME16 processor" />
		<entry value="60" name="STMicroelectronic ST100 processor" />
		<entry value="61" name="Advanced Logic Corp. Tinyj emb.fam" />
		<entry value="62" name="AMD x86-64 architecture" />
		<entry value="63" name="Sony DSP Processor" />
		<entry value="66" name="Siemens FX66 microcontroller" />
		<entry value="67" name="STMicroelectronics ST9+ 8/16 mc" />
	</enumDef>
	<enumDef name="ClassEnum" type="UInt8">
		<entry value="0" name="None" />
		<entry value="1" name="32 bit" />
		<entry value="2" name="64 bit" />
	</enumDef>
	<enumDef name="EndiannessEnum" type="UInt8">
		<entry value="0" name="None" />
		<entry value="1" name="little endian" />
		<entry value="2" name="big endian" />
	</enumDef>
	<enumDef name="ABIEnum" type="UInt8">
		<entry value="0" name="UNIX System V ABI" />
		<entry value="1" name="HP-UX" />
		<entry value="2" name="NetBSD" />
		<entry value="3" name="Linux" />
		<entry value="6" name="Sun Solaris" />
		<entry value="7" name="IBM AIX" />
		<entry value="8" name="SGI Irix" />
		<entry value="9" name="FreeBSD" />
		<entry value="10" name="Compaq TRU64 UNIX" />
		<entry value="11" name="Novell Modesto" />
		<entry value="12" name="OpenBSD" />
		<entry value="97" name="ARM" />
		<entry value="255" name="Standalone (embedded) application" />
	</enumDef>
	<struct name="Elf32_Ehdr" defaultLockOffset="0x0">
		<struct name="e_ident">
			<array name="magic" length="4">
				<primitive name="magic" type="Char" />
			</array>
			<enum name="arch class" enum="ClassEnum" type="UInt8" />
			<enum name="endianness" enum="EndiannessEnum" type="UInt8" />
			<primitive name="version" type="UInt8" />
			<enum name="ABI" enum="ABIEnum" type="UInt8" />
			<primitive name="ABI version" type="UInt8" />
			<array name="padding" length="7">
				<primitive name="padding" type="UInt8" />
			</array>
		</struct>
		<primitive name="e_type" type="UInt16" />
		<primitive name="e_machine" type="UInt16" />
		<primitive name="e_version" type="UInt32" />
		<primitive name="e_entry" type="UInt32" />
		<pointer name="e_phoff" type="UInt32">
			<array name="Program headers" length="function(root) { return root.e_phnum.value; }">
				<struct name="Elf32_Phdr">
					<primitive name="p_type" type="UInt32" />
					<pointer name="p_offset" type="UInt32">
						<array name="Data" length="function() { return this.parent.parent.p_filesz.value; }">
							<primitive type="UInt8" />
						</array>
					</pointer>
					<primitive name="p_vaddr" type="UInt32" />
					<primitive name="p_paddr" type="UInt32" />
					<primitive name="p_filesz" type="UInt32" />
					<primitive name="p_memsz" type="UInt32" />
					<primitive name="p_flags" type="UInt32" />
					<primitive name="p_align" type="UInt32" />
				</struct>
			</array>
		</pointer>
		<pointer name="e_shoff" type="UInt32">
			<array name="Section headers" length="function(root) { return root.e_shnum.value; }">
				<struct name="Elf32_Shdr">
					<primitive name="sh_name" type="UInt32" />
					<primitive name="sh_type" type="UInt32" />
					<primitive name="sh_flags" type="UInt32" />
					<primitive name="sh_addr" type="UInt32" />
					<pointer name="sh_offset" type="UInt32">
						<union name="Alternatives">
							<array name="Data" length="function() { return this.parent.parent.parent.sh_size.value; }">
								<primitive type="UInt8" />
							</array>
							<!-- <array name="Data" totallength="sh_size">
								<struct name="Elf32_Sym">
									<primitive name="st_name" type="UInt32" />
									<primitive name="st_value" type="UInt32" />
									<primitive name="st_size" type="UInt32" />
									<primitive name="st_info" type="Char" />
									<primitive name="st_other" type="Char" />
									<primitive name="st_shndx" type="UInt16" />
								</struct>
							</array>
							<array name="Data" totallength="sh_size">
								<string name="asd" />
							</array> -->
						</union>
					</pointer>
					<primitive name="sh_size" type="UInt32" />
					<primitive name="sh_link" type="UInt32" />
					<primitive name="sh_info" type="UInt32" />
					<primitive name="sh_addralign" type="UInt32" />
					<primitive name="sh_entsize" type="UInt32" />
				</struct>
			</array>
		</pointer>
		<primitive name="e_flags" type="UInt32" />
		<primitive name="e_ehsize" type="UInt16" />
		<primitive name="e_phentsize" type="UInt16" />
		<primitive name="e_phnum" type="UInt16" />
		<primitive name="e_shentsize" type="UInt16" />
		<primitive name="e_shnum" type="UInt16" />
		<primitive name="e_shstrndx" type="UInt16" />
	</struct>
</data>
