elf revision 80588
168349Sobrien
268349Sobrien#------------------------------------------------------------------------------
368349Sobrien# elf:  file(1) magic for ELF executables
468349Sobrien#
568349Sobrien# We have to check the byte order flag to see what byte order all the
668349Sobrien# other stuff in the header is in.
768349Sobrien#
868349Sobrien# MIPS R3000 may also be for MIPS R2000.
968349Sobrien# What're the correct byte orders for the nCUBE and the Fujitsu VPP500?
1068349Sobrien#
1168349Sobrien# updated by Daniel Quinlan (quinlan@yggdrasil.com)
1268349Sobrien0	string		\177ELF		ELF
1368349Sobrien>4	byte		0		invalid class
1468349Sobrien>4	byte		1		32-bit
1569216Sobrien# only for MIPS
1668349Sobrien>>18	beshort		8
1769216Sobrien>>18	beshort		10
1868349Sobrien>>>36   belong          &0x20           N32
1968349Sobrien>4	byte		2		64-bit
2068349Sobrien>5	byte		0		invalid byte order
2168349Sobrien>5	byte		1		LSB
2269216Sobrien# only for MIPS R3000_BE
2369216Sobrien>>18    leshort		8
2469216Sobrien# only for 32-bit
2569216Sobrien>>>4	byte		1
2669216Sobrien>>>>36  lelong&0xf0000000       0x00000000      mips-1
2769216Sobrien>>>>36  lelong&0xf0000000       0x10000000      mips-2
2869216Sobrien>>>>36  lelong&0xf0000000       0x20000000      mips-3
2969216Sobrien>>>>36  lelong&0xf0000000       0x30000000      mips-4
3069216Sobrien>>>>36  lelong&0xf0000000       0x40000000      mips-5
3169216Sobrien>>>>36  lelong&0xf0000000       0x50000000      mips-6
3269216Sobrien# only for 64-bit
3369216Sobrien>>>4	byte		2
3469216Sobrien>>>>48  lelong&0xf0000000       0x00000000      mips-1
3569216Sobrien>>>>48  lelong&0xf0000000       0x10000000      mips-2
3669216Sobrien>>>>48  lelong&0xf0000000       0x20000000      mips-3
3769216Sobrien>>>>48  lelong&0xf0000000       0x30000000      mips-4
3869216Sobrien>>>>48  lelong&0xf0000000       0x40000000      mips-5
3969216Sobrien>>>>48  lelong&0xf0000000       0x50000000      mips-6
4068349Sobrien>>16	leshort		0		no file type,
4168349Sobrien>>16	leshort		1		relocatable,
4268349Sobrien>>16	leshort		2		executable,
4368349Sobrien>>16	leshort		3		shared object,
4468349Sobrien# Core handling from Peter Tobias <tobias@server.et-inf.fho-emden.de>
4568349Sobrien# corrections by Christian 'Dr. Disk' Hechelmann <drdisk@ds9.au.s.shuttle.de>
4668349Sobrien>>16	leshort		4		core file
4768349Sobrien>>>(0x38+0xcc) string	>\0		of '%s'
4868349Sobrien>>>(0x38+0x10) lelong	>0		(signal %d),
4968349Sobrien>>16	leshort		&0xff00		processor-specific,
5068349Sobrien>>18	leshort		0		no machine,
5168349Sobrien>>18	leshort		1		AT&T WE32100 - invalid byte order,
5268349Sobrien>>18	leshort		2		SPARC - invalid byte order,
5368349Sobrien>>18	leshort		3		Intel 80386,
5468349Sobrien>>18	leshort		4		Motorola 68000 - invalid byte order,
5568349Sobrien>>18	leshort		5		Motorola 88000 - invalid byte order,
5668349Sobrien>>18	leshort		6		Intel 80486,
5768349Sobrien>>18	leshort		7		Intel 80860,
5869216Sobrien# "officially" big endian, but binutils bfd only emits magic #8 for MIPS.
5969216Sobrien>>18	leshort		8		MIPS R3000_LE [bfd bug],
6068349Sobrien>>18	leshort		9		Amdahl - invalid byte order,
6168349Sobrien>>18	leshort		10		MIPS R3000_LE,
6268349Sobrien>>18	leshort		11		RS6000 - invalid byte order,
6368349Sobrien>>18	leshort		15		PA-RISC - invalid byte order,
6474784Sobrien>>>50	leshort		0x0214		2.0
6574784Sobrien>>>48	leshort		&0x0008		(LP64),
6668349Sobrien>>18	leshort		16		nCUBE,
6768349Sobrien>>18	leshort		17		Fujitsu VPP500,
6868349Sobrien>>18	leshort		18		SPARC32PLUS,
6968349Sobrien>>18	leshort		20		PowerPC,
7068349Sobrien>>18	leshort		36		NEC V800,
7168349Sobrien>>18	leshort		37		Fujitsu FR20,
7268349Sobrien>>18	leshort		38		TRW RH-32,
7368349Sobrien>>18	leshort		39		Motorola RCE,
7475937Sobrien>>18	leshort		40		ARM,
7568349Sobrien>>18	leshort		41		Alpha,
7668349Sobrien>>18	leshort		42		Hitachi SH,
7768349Sobrien>>18	leshort		43		SPARC V9 - invalid byte order,
7868349Sobrien>>18	leshort		44		Siemens Tricore Embedded Processor,
7968349Sobrien>>18	leshort		45		Argonaut RISC Core, Argonaut Technologies Inc.,
8068349Sobrien>>18	leshort		46		Hitachi H8/300,
8168349Sobrien>>18	leshort		47		Hitachi H8/300H,
8268349Sobrien>>18	leshort		48		Hitachi H8S,
8368349Sobrien>>18	leshort		49		Hitachi H8/500,
8468349Sobrien>>18	leshort		50		IA-64 (Intel 64 bit architecture)
8568349Sobrien>>18	leshort		51		Stanford MIPS-X,
8668349Sobrien>>18	leshort		52		Motorola Coldfire,
8768349Sobrien>>18	leshort		53		Motorola M68HC12,
8868349Sobrien>>18	leshort		75		Digital VAX,
8968349Sobrien>>18	leshort		0x9026		Alpha (unofficial),
9068349Sobrien>>20	lelong		0		invalid version
9168349Sobrien>>20	lelong		1		version 1
9268349Sobrien>>36	lelong		1		MathCoPro/FPU/MAU Required
9368349Sobrien>5	byte		2		MSB
9468349Sobrien# only for MIPS R3000_BE
9568349Sobrien>>18    beshort		8
9668349Sobrien# only for 32-bit
9768349Sobrien>>>4	byte		1
9868349Sobrien>>>>36  belong&0xf0000000       0x00000000      mips-1
9968349Sobrien>>>>36  belong&0xf0000000       0x10000000      mips-2
10068349Sobrien>>>>36  belong&0xf0000000       0x20000000      mips-3
10168349Sobrien>>>>36  belong&0xf0000000       0x30000000      mips-4
10268349Sobrien>>>>36  belong&0xf0000000       0x40000000      mips-5
10368349Sobrien>>>>36  belong&0xf0000000       0x50000000      mips-6
10468349Sobrien# only for 64-bit
10568349Sobrien>>>4	byte		2
10668349Sobrien>>>>48  belong&0xf0000000       0x00000000      mips-1
10768349Sobrien>>>>48  belong&0xf0000000       0x10000000      mips-2
10868349Sobrien>>>>48  belong&0xf0000000       0x20000000      mips-3
10968349Sobrien>>>>48  belong&0xf0000000       0x30000000      mips-4
11068349Sobrien>>>>48  belong&0xf0000000       0x40000000      mips-5
11168349Sobrien>>>>48  belong&0xf0000000       0x50000000      mips-6
11268349Sobrien>>16	beshort		0		no file type,
11368349Sobrien>>16	beshort		1		relocatable,
11468349Sobrien>>16	beshort		2		executable,
11568349Sobrien>>16	beshort		3		shared object,
11668349Sobrien>>16	beshort		4		core file,
11768349Sobrien>>>(0x38+0xcc) string	>\0		of '%s'
11868349Sobrien>>>(0x38+0x10) belong	>0		(signal %d),
11968349Sobrien>>16	beshort		&0xff00		processor-specific,
12068349Sobrien>>18	beshort		0		no machine,
12168349Sobrien>>18	beshort		1		AT&T WE32100,
12268349Sobrien>>18	beshort		2		SPARC,
12368349Sobrien>>18	beshort		3		Intel 80386 - invalid byte order,
12468349Sobrien>>18	beshort		4		Motorola 68000,
12568349Sobrien>>18	beshort		5		Motorola 88000,
12668349Sobrien>>18	beshort		6		Intel 80486 - invalid byte order,
12768349Sobrien>>18	beshort		7		Intel 80860,
12868349Sobrien>>18	beshort		8		MIPS R3000_BE,
12968349Sobrien>>18	beshort		9		Amdahl,
13068349Sobrien>>18	beshort		10		MIPS R3000_LE - invalid byte order,
13168349Sobrien>>18	beshort		11		RS6000,
13274784Sobrien>>18	beshort		15		PA-RISC
13374784Sobrien>>>50	beshort		0x0214		2.0
13474784Sobrien>>>48	beshort		&0x0008		(LP64)
13568349Sobrien>>18	beshort		16		nCUBE,
13668349Sobrien>>18	beshort		17		Fujitsu VPP500,
13768349Sobrien>>18	beshort		18		SPARC32PLUS,
13868349Sobrien>>>36	belong&0xffff00	&0x000100	V8+ Required,
13968349Sobrien>>>36	belong&0xffff00	&0x000200	Sun UltraSPARC1 Extensions Required,
14068349Sobrien>>>36	belong&0xffff00	&0x000400	HaL R1 Extensions Required,
14168349Sobrien>>>36	belong&0xffff00	&0x000800	Sun UltraSPARC3 Extensions Required,
14268349Sobrien>>18	beshort		20		PowerPC or cisco 4500,
14368349Sobrien>>18	beshort		21		cisco 7500,
14468349Sobrien>>18	beshort		24		cisco SVIP,
14568349Sobrien>>18	beshort		25		cisco 7200,
14668349Sobrien>>18	beshort		36		NEC V800 or cisco 12000,
14768349Sobrien>>18	beshort		37		Fujitsu FR20,
14868349Sobrien>>18	beshort		38		TRW RH-32,
14968349Sobrien>>18	beshort		39		Motorola RCE,
15075937Sobrien>>18	beshort		40		ARM,
15168349Sobrien>>18	beshort		41		Alpha,
15268349Sobrien>>18	beshort		42		Hitachi SH,
15368349Sobrien>>18	beshort		43		SPARC V9,
15468349Sobrien>>18	beshort		44		Siemens Tricore Embedded Processor,
15568349Sobrien>>18	beshort		45		Argonaut RISC Core, Argonaut Technologies Inc.,
15668349Sobrien>>18	beshort		46		Hitachi H8/300,
15768349Sobrien>>18	beshort		47		Hitachi H8/300H,
15868349Sobrien>>18	beshort		48		Hitachi H8S,
15968349Sobrien>>18	beshort		49		Hitachi H8/500,
16068349Sobrien>>18	beshort		50		Intel Merced Processor,
16168349Sobrien>>18	beshort		51		Stanford MIPS-X,
16268349Sobrien>>18	beshort		52		Motorola Coldfire,
16368349Sobrien>>18	beshort		53		Motorola M68HC12,
16480588Sobrien>>18	beshort		73		Cray NV1,
16568349Sobrien>>18	beshort		75		Digital VAX,
16668349Sobrien>>18	beshort		0x9026		Alpha (unofficial),
16768349Sobrien>>20	belong		0		invalid version
16868349Sobrien>>20	belong		1		version 1
16968349Sobrien>>36	belong		1		MathCoPro/FPU/MAU Required
17080588Sobrien>8	string		>\0		(%s)
17180588Sobrien>8	string		\0
17280588Sobrien>>7	byte		0		(SYSV)
17380588Sobrien>>7	byte		1		(HP-UX)
17480588Sobrien>>7	byte		2		(NetBSD)
17580588Sobrien>>7	byte		3		(GNU/Linux)
17680588Sobrien>>7	byte		4		(GNU/Hurd)
17780588Sobrien>>7	byte		5		(86Open)
17880588Sobrien>>7	byte		6		(Solaris)
17980588Sobrien>>7	byte		7		(Monterey)
18080588Sobrien>>7	byte		8		(IRIX)
18180588Sobrien>>7	byte		9		(FreeBSD)
18280588Sobrien>>7	byte		10		(Tru64)
18380588Sobrien>>7	byte		11		(Novell Modesto)
18480588Sobrien>>7	byte		12		(OpenBSD)
18580588Sobrien>>7	byte		97		(ARM)
18680588Sobrien>>7	byte		255		(embedded)
187