xref: /inferno-os/utils/ld/elf.h (revision e45fa0eb0763b57d6fb0649c064bc3b95ccdea6c)
1 enum {
2 	Ehdr32sz	= 52,
3 	Phdr32sz	= 32,
4 	Shdr32sz	= 40,
5 
6 	Ehdr64sz	= 64,
7 	Phdr64sz	= 56,
8 	Shdr64sz	= 64,
9 };
10 
11 /* from /sys/src/libmach/elf.h */
12 enum {
13 	/* Ehdr codes */
14 	MAG0 = 0,		/* ident[] indexes */
15 	MAG1 = 1,
16 	MAG2 = 2,
17 	MAG3 = 3,
18 	CLASS = 4,
19 	DATA = 5,
20 	VERSION = 6,
21 
22 	ELFCLASSNONE = 0,	/* ident[CLASS] */
23 	ELFCLASS32 = 1,
24 	ELFCLASS64 = 2,
25 	ELFCLASSNUM = 3,
26 
27 	ELFDATANONE = 0,	/* ident[DATA] */
28 	ELFDATA2LSB = 1,
29 	ELFDATA2MSB = 2,
30 	ELFDATANUM = 3,
31 
32 	NOETYPE = 0,		/* type */
33 	REL = 1,
34 	EXEC = 2,
35 	DYN = 3,
36 	CORE = 4,
37 
38 	NONE = 0,		/* machine */
39 	M32 = 1,		/* AT&T WE 32100 */
40 	SPARC = 2,		/* Sun SPARC */
41 	I386 = 3,		/* Intel 80386 */
42 	M68K = 4,		/* Motorola 68000 */
43 	M88K = 5,		/* Motorola 88000 */
44 	I486 = 6,		/* Intel 80486 */
45 	I860 = 7,		/* Intel i860 */
46 	MIPS = 8,		/* Mips R2000 */
47 	S370 = 9,		/* Amdhal	*/
48 	SPARC64 = 18,		/* Sun SPARC v9 */
49 	POWER = 20,		/* PowerPC */
50 	POWER64 = 21,		/* PowerPC64 */
51 	ARM = 40,		/* ARM */
52 	AMD64 = 62,		/* Amd64 */
53 	ARM64 = 183,		/* ARM64 */
54 
55 	NO_VERSION = 0,		/* version, ident[VERSION] */
56 	CURRENT = 1,
57 
58 	/* Phdr Codes */
59 	NOPTYPE = 0,		/* type */
60 	PT_LOAD = 1,
61 	DYNAMIC = 2,
62 	INTERP = 3,
63 	NOTE = 4,
64 	SHLIB = 5,
65 	PHDR = 6,
66 
67 	R = 0x4,		/* flags */
68 	W = 0x2,
69 	X = 0x1,
70 
71 	/* Shdr Codes */
72 	Progbits = 1,	/* section types */
73 	Strtab = 3,
74 	Nobits = 8,
75 
76 	Swrite = 1,	/* section attributes (flags) */
77 	Salloc = 2,
78 	Sexec = 4,
79 };
80 
81 typedef void (*Putl)(long);
82 
83 void	elf32(int mach, int bo, int addpsects, void (*putpsects)(Putl));
84 void	elf32phdr(void (*putl)(long), ulong type, ulong off, ulong vaddr,
85 	ulong paddr, ulong filesz, ulong memsz, ulong prots, ulong align);
86 void	elf32shdr(void (*putl)(long), ulong name, ulong type, ulong flags,
87 	ulong vaddr, ulong off, ulong sectsz, ulong link, ulong addnl,
88 	ulong align, ulong entsz);
89 
90 void	elf64(int mach, int bo, int addpsects, void (*putpsects)(Putl));
91 void	elf64phdr(void (*putl)(long), void (*putll)(vlong), ulong type,
92 	uvlong off, uvlong vaddr, uvlong paddr, uvlong filesz, uvlong memsz,
93 	ulong prots, uvlong align);
94 void	elf64shdr(void (*putl)(long), void (*putll)(vlong), ulong name,
95 	ulong type, uvlong flags, uvlong vaddr, uvlong off, uvlong sectsz,
96 	ulong link, ulong addnl, uvlong align, uvlong entsz);
97