xref: /inferno-os/utils/libmach/elf.h (revision 871e0f01ca6cdef953c81d1a5018d90fbd01838a)
1 /*
2  *	Definitions needed for  accessing Irix ELF headers
3  */
4 typedef struct {
5 	uchar	ident[16];	/* ident bytes */
6 	ushort	type;		/* file type */
7 	ushort	machine;	/* target machine */
8 	int	version;	/* file version */
9 	ulong	elfentry;	/* start address */
10 	ulong	phoff;		/* phdr file offset */
11 	ulong	shoff;		/* shdr file offset */
12 	int	flags;		/* file flags */
13 	ushort	ehsize;		/* sizeof ehdr */
14 	ushort	phentsize;	/* sizeof phdr */
15 	ushort	phnum;		/* number phdrs */
16 	ushort	shentsize;	/* sizeof shdr */
17 	ushort	shnum;		/* number shdrs */
18 	ushort	shstrndx;	/* shdr string index */
19 } Ehdr;
20 
21 typedef struct {
22 	int	type;		/* entry type */
23 	ulong	offset;		/* file offset */
24 	ulong	vaddr;		/* virtual address */
25 	ulong	paddr;		/* physical address */
26 	int	filesz;		/* file size */
27 	ulong	memsz;		/* memory size */
28 	int	flags;		/* entry flags */
29 	int	align;		/* memory/file alignment */
30 } Phdr;
31 
32 typedef struct {
33 	ulong	name;		/* section name */
34 	ulong	type;		/* SHT_... */
35 	ulong	flags;		/* SHF_... */
36 	ulong	addr;		/* virtual address */
37 	ulong	offset;		/* file offset */
38 	ulong	size;		/* section size */
39 	ulong	link;		/* misc info */
40 	ulong	info;		/* misc info */
41 	ulong	addralign;	/* memory alignment */
42 	ulong	entsize;	/* entry size if table */
43 } Shdr;
44 
45 enum {
46 	/* Ehdr codes */
47 	MAG0 = 0,		/* ident[] indexes */
48 	MAG1 = 1,
49 	MAG2 = 2,
50 	MAG3 = 3,
51 	CLASS = 4,
52 	DATA = 5,
53 	VERSION = 6,
54 
55 	ELFCLASSNONE = 0,	/* ident[CLASS] */
56 	ELFCLASS32 = 1,
57 	ELFCLASS64 = 2,
58 	ELFCLASSNUM = 3,
59 
60 	ELFDATANONE = 0,	/* ident[DATA] */
61 	ELFDATA2LSB = 1,
62 	ELFDATA2MSB = 2,
63 	ELFDATANUM = 3,
64 
65 	NOETYPE = 0,		/* type */
66 	REL = 1,
67 	EXEC = 2,
68 	DYN = 3,
69 	CORE = 4,
70 
71 	NONE = 0,		/* machine */
72 	M32 = 1,		/* AT&T WE 32100 */
73 	SPARC = 2,		/* Sun SPARC */
74 	I386 = 3,		/* Intel 80386 */
75 	M68K = 4,		/* Motorola 68000 */
76 	M88K = 5,		/* Motorola 88000 */
77 	I486 = 6,		/* Intel 80486 */
78 	I860 = 7,		/* Intel i860 */
79 	MIPS = 8,		/* Mips R2000 */
80 	S370 = 9,		/* Amdhal	*/
81 	SPARC64 = 18,		/* Sun SPARC v9 */
82 	POWER = 20,		/* PowerPC */
83 	POWER64 = 21,		/* PowerPC64 */
84 	ARM = 40,		/* ARM */
85 	AMD64 = 62,		/* Amd64 */
86 	ARM64 = 183,		/* ARM64 */
87 	RISCV = 243,		/* RISC-V */
88 
89 	NO_VERSION = 0,		/* version, ident[VERSION] */
90 	CURRENT = 1,
91 
92 	/* Phdr Codes */
93 	NOPTYPE = 0,		/* type */
94 	LOAD = 1,
95 	DYNAMIC = 2,
96 	INTERP = 3,
97 	NOTE = 4,
98 	SHLIB = 5,
99 	PHDR = 6,
100 
101 	R = 0x4,		/* flags */
102 	W = 0x2,
103 	X = 0x1,
104 
105 	/* Shdr Codes */
106 	Progbits = 1,	/* section types */
107 	Strtab = 3,
108 	Nobits = 8,
109 
110 	Swrite = 1,	/* section attributes */
111 	Salloc = 2,
112 	Sexec = 4,
113 };
114 
115 #define	ELF_MAG		((0x7f<<24) | ('E'<<16) | ('L'<<8) | 'F')
116