1#	$OpenBSD: elf,v 1.19 2021/04/28 04:41:14 drahn Exp $
2
3#------------------------------------------------------------------------------
4# elf:  file(1) magic for ELF executables
5#
6# We have to check the byte order flag to see what byte order all the
7# other stuff in the header is in.
8#
9# What're the correct byte orders for the nCUBE and the Fujitsu VPP500?
10#
11# updated by Daniel Quinlan (quinlan@yggdrasil.com)
120	string		\177ELF		ELF
13>4	byte		0		invalid class
14>4	byte		1		32-bit
15>4	byte		2		64-bit
16>5	byte		0		invalid byte order
17>5	byte		1		LSB
18>>16	leshort		0		no file type,
19!:mime	application/octet-stream
20>>16	leshort		1		relocatable,
21!:mime	application/x-object
22>>16	leshort		2		executable,
23!:mime	application/x-executable
24>>16	leshort		3		shared object,
25!:mime	application/x-sharedlib
26# Core handling from Peter Tobias <tobias@server.et-inf.fho-emden.de>
27# corrections by Christian 'Dr. Disk' Hechelmann <drdisk@ds9.au.s.shuttle.de>
28>>16	leshort		4		core file
29!:mime	application/x-coredump
30# Core file detection is not reliable.
31#>>>(0x38+0xcc) string	>\0		of '%s'
32#>>>(0x38+0x10) lelong	>0		(signal %d),
33>>16	leshort		&0xff00		processor-specific,
34>>18	leshort		0		no machine,
35>>18	leshort		1		AT&T WE32100 - invalid byte order,
36>>18	leshort		2		SPARC - invalid byte order,
37>>18	leshort		3		Intel 80386,
38>>18	leshort		4		Motorola
39>>>36	lelong		&0x01000000	68000 - invalid byte order,
40>>>36	lelong		&0x00810000	CPU32 - invalid byte order,
41>>>36	lelong		0		68020 - invalid byte order,
42>>18	leshort		5		Motorola 88000 - invalid byte order,
43>>18	leshort		6		Intel 80486,
44>>18	leshort		7		Intel 80860,
45# The official e_machine number for MIPS is now #8, regardless of endianness.
46# The second number (#10) will be deprecated later. For now, we still
47# say something if #10 is encountered, but only gory details for #8.
48>>18	leshort		8		MIPS,
49>>>36	lelong		&0x20		N32
50>>18	leshort		10		MIPS,
51>>>36	lelong		&0x20		N32
52>>18	leshort		8
53# only for 32-bit
54>>>4	byte		1
55>>>>36  lelong&0xf0000000	0x00000000	MIPS-I
56>>>>36  lelong&0xf0000000	0x10000000	MIPS-II
57>>>>36  lelong&0xf0000000	0x20000000	MIPS-III
58>>>>36  lelong&0xf0000000	0x30000000	MIPS-IV
59>>>>36  lelong&0xf0000000	0x40000000	MIPS-V
60>>>>36  lelong&0xf0000000	0x50000000	MIPS32
61>>>>36  lelong&0xf0000000	0x60000000	MIPS64
62>>>>36  lelong&0xf0000000	0x70000000	MIPS32 rel2
63>>>>36  lelong&0xf0000000	0x80000000	MIPS64 rel2
64# only for 64-bit
65>>>4	byte		2
66>>>>48  lelong&0xf0000000	0x00000000	MIPS-I
67>>>>48  lelong&0xf0000000	0x10000000	MIPS-II
68>>>>48  lelong&0xf0000000	0x20000000	MIPS-III
69>>>>48  lelong&0xf0000000	0x30000000	MIPS-IV
70>>>>48  lelong&0xf0000000	0x40000000	MIPS-V
71>>>>48  lelong&0xf0000000	0x50000000	MIPS32
72>>>>48  lelong&0xf0000000	0x60000000	MIPS64
73>>>>48  lelong&0xf0000000	0x70000000	MIPS32 rel2
74>>>>48  lelong&0xf0000000	0x80000000	MIPS64 rel2
75>>18	leshort		9		Amdahl - invalid byte order,
76>>18	leshort		10		MIPS (deprecated),
77>>18	leshort		11		RS6000 - invalid byte order,
78>>18	leshort		15		PA-RISC - invalid byte order,
79>>>50	leshort		0x0214		2.0
80>>>48	leshort		&0x0008		(LP64),
81>>18	leshort		16		nCUBE,
82>>18	leshort		17		Fujitsu VPP500,
83>>18	leshort		18		SPARC32PLUS,
84>>18	leshort		20		PowerPC,
85>>18	leshort		22		IBM S/390,
86>>18	leshort		36		NEC V800,
87>>18	leshort		37		Fujitsu FR20,
88>>18	leshort		38		TRW RH-32,
89>>18	leshort		39		Motorola RCE,
90>>18	leshort		40		ARM,
91>>18	leshort		41		Alpha,
92>>18	leshort		0xa390		IBM S/390 (obsolete),
93>>18	leshort		42		Renesas SH,
94>>18	leshort		43		SPARC V9 - invalid byte order,
95>>18	leshort		44		Siemens Tricore Embedded Processor,
96>>18	leshort		45		Argonaut RISC Core, Argonaut Technologies Inc.,
97>>18	leshort		46		Renesas H8/300,
98>>18	leshort		47		Renesas H8/300H,
99>>18	leshort		48		Renesas H8S,
100>>18	leshort		49		Renesas H8/500,
101>>18	leshort		50		IA-64,
102>>18	leshort		51		Stanford MIPS-X,
103>>18	leshort		52		Motorola Coldfire,
104>>18	leshort		53		Motorola M68HC12,
105>>18	leshort		54		Fujitsu MMA,
106>>18	leshort		55		Siemens PCP,
107>>18	leshort		56		Sony nCPU,
108>>18	leshort		57		Denso NDR1,
109>>18	leshort		58		Start*Core,
110>>18	leshort		59		Toyota ME16,
111>>18	leshort		60		ST100,
112>>18	leshort		61		Tinyj emb.,
113>>18	leshort		62		x86-64,
114>>18	leshort		63		Sony DSP,
115>>18	leshort		66		FX66,
116>>18	leshort		67		ST9+ 8/16 bit,
117>>18	leshort		68		ST7 8 bit,
118>>18	leshort		69		MC68HC16,
119>>18	leshort		70		MC68HC11,
120>>18	leshort		71		MC68HC08,
121>>18	leshort		72		MC68HC05,
122>>18	leshort		73		SGI SVx,
123>>18	leshort		74		ST19 8 bit,
124>>18	leshort		75		Digital VAX,
125>>18	leshort		76		Axis cris,
126>>18	leshort		77		Infineon 32-bit embedded,
127>>18	leshort		78		Element 14 64-bit DSP,
128>>18	leshort		79		LSI Logic 16-bit DSP,
129>>18	leshort		80		MMIX,
130>>18	leshort		81		Harvard machine-independent,
131>>18	leshort		82		SiTera Prism,
132>>18	leshort		83		Atmel AVR 8-bit,
133>>18	leshort		84		Fujitsu FR30,
134>>18	leshort		85		Mitsubishi D10V,
135>>18	leshort		86		Mitsubishi D30V,
136>>18	leshort		87		NEC v850,
137>>18	leshort		88		Renesas M32R,
138>>18	leshort		89		Matsushita MN10300,
139>>18	leshort		90		Matsushita MN10200,
140>>18	leshort		91		picoJava,
141>>18	leshort		92		OpenRISC,
142>>18	leshort		93		ARC Cores Tangent-A5,
143>>18	leshort		0x3426		OpenRISC (obsolete),
144>>18	leshort		0x8472		OpenRISC (obsolete),
145>>18	leshort		94		Tensilica Xtensa,
146>>18	leshort		97		NatSemi 32k,
147>>18	leshort		106		Analog Devices Blackfin,
148>>18	leshort		0x9026		Alpha (unofficial),
149>>18	leshort		183		AArch64,
150>>18	leshort		243		RISC-V,
151>>20	lelong		0		invalid version
152>>20	lelong		1		version 1
153>>36	lelong		1		MathCoPro/FPU/MAU Required
154>5	byte		2		MSB
155>>16	beshort		0		no file type,
156!:mime	application/octet-stream
157>>16	beshort		1		relocatable,
158!:mime	application/x-object
159>>16	beshort		2		executable,
160!:mime	application/x-executable
161>>16	beshort		3		shared object,
162!:mime	application/x-sharedlib
163>>16	beshort		4		core file,
164!:mime	application/x-coredump
165#>>>(0x38+0xcc) string	>\0		of '%s'
166#>>>(0x38+0x10) belong	>0		(signal %d),
167>>16	beshort		&0xff00		processor-specific,
168>>18	beshort		0		no machine,
169>>18	beshort		1		AT&T WE32100,
170>>18	beshort		2		SPARC,
171>>18	beshort		3		Intel 80386 - invalid byte order,
172>>18	beshort		4		Motorola
173>>>36	belong		&0x01000000	68000,
174>>>36	belong		&0x00810000	CPU32,
175>>>36	belong		0		68020,
176>>18	beshort		5		Motorola 88000,
177>>18	beshort		6		Intel 80486 - invalid byte order,
178>>18	beshort		7		Intel 80860,
179# only for MIPS - see comment in little-endian section above.
180>>18	beshort		8		MIPS,
181>>>36	belong		&0x20		N32
182>>18	beshort		10		MIPS,
183>>>36	belong		&0x20		N32
184>>18	beshort		8
185# only for 32-bit
186>>>4	byte		1
187>>>>36  belong&0xf0000000	0x00000000	MIPS-I
188>>>>36  belong&0xf0000000	0x10000000	MIPS-II
189>>>>36  belong&0xf0000000	0x20000000	MIPS-III
190>>>>36  belong&0xf0000000	0x30000000	MIPS-IV
191>>>>36  belong&0xf0000000	0x40000000	MIPS-V
192>>>>36  belong&0xf0000000	0x50000000	MIPS32
193>>>>36  belong&0xf0000000	0x60000000	MIPS64
194>>>>36  belong&0xf0000000	0x70000000	MIPS32 rel2
195>>>>36  belong&0xf0000000	0x80000000	MIPS64 rel2
196# only for 64-bit
197>>>4	byte		2
198>>>>48	belong&0xf0000000	0x00000000	MIPS-I
199>>>>48	belong&0xf0000000	0x10000000	MIPS-II
200>>>>48	belong&0xf0000000	0x20000000	MIPS-III
201>>>>48	belong&0xf0000000	0x30000000	MIPS-IV
202>>>>48	belong&0xf0000000	0x40000000	MIPS-V
203>>>>48	belong&0xf0000000	0x50000000	MIPS32
204>>>>48	belong&0xf0000000	0x60000000	MIPS64
205>>>>48	belong&0xf0000000	0x70000000	MIPS32 rel2
206>>>>48	belong&0xf0000000	0x80000000	MIPS64 rel2
207>>18	beshort		9		Amdahl,
208>>18	beshort		10		MIPS (deprecated),
209>>18	beshort		11		RS6000,
210>>18	beshort		15		PA-RISC
211>>>50	beshort		0x0214		2.0
212>>>48	beshort		&0x0008		(LP64)
213>>18	beshort		16		nCUBE,
214>>18	beshort		17		Fujitsu VPP500,
215>>18	beshort		18		SPARC32PLUS,
216>>>36	belong&0xffff00	&0x000100	V8+ Required,
217>>>36	belong&0xffff00	&0x000200	Sun UltraSPARC1 Extensions Required,
218>>>36	belong&0xffff00	&0x000400	HaL R1 Extensions Required,
219>>>36	belong&0xffff00	&0x000800	Sun UltraSPARC3 Extensions Required,
220>>18	beshort		20		PowerPC or cisco 4500,
221>>18	beshort		21		64-bit PowerPC or cisco 7500,
222>>18	beshort		22		IBM S/390,
223>>18	beshort		23		Cell SPU,
224>>18	beshort		24		cisco SVIP,
225>>18	beshort		25		cisco 7200,
226>>18	beshort		36		NEC V800 or cisco 12000,
227>>18	beshort		37		Fujitsu FR20,
228>>18	beshort		38		TRW RH-32,
229>>18	beshort		39		Motorola RCE,
230>>18	beshort		40		ARM,
231>>18	beshort		41		Alpha,
232>>18	beshort		42		Renesas SH,
233>>18	beshort		43		SPARC V9,
234>>18	beshort		44		Siemens Tricore Embedded Processor,
235>>18	beshort		45		Argonaut RISC Core, Argonaut Technologies Inc.,
236>>18	beshort		46		Renesas H8/300,
237>>18	beshort		47		Renesas H8/300H,
238>>18	beshort		48		Renesas H8S,
239>>18	beshort		49		Renesas H8/500,
240>>18	beshort		50		IA-64,
241>>18	beshort		51		Stanford MIPS-X,
242>>18	beshort		52		Motorola Coldfire,
243>>18	beshort		53		Motorola M68HC12,
244>>18	beshort		73		Cray NV1,
245>>18	beshort		75		Digital VAX,
246>>18	beshort		88		Renesas M32R,
247>>18	leshort		92		OpenRISC,
248>>18	leshort		0x3426		OpenRISC (obsolete),
249>>18	leshort		0x8472		OpenRISC (obsolete),
250>>18	beshort		94		Tensilica Xtensa,
251>>18	beshort		97		NatSemi 32k,
252>>18	beshort		0x18ad		AVR32 (unofficial),
253>>18	beshort		0x9026		Alpha (unofficial),
254>>18	beshort		0xa390		IBM S/390 (obsolete),
255>>20	belong		0		invalid version
256>>20	belong		1		version 1
257>>36	belong		1		MathCoPro/FPU/MAU Required
258