]> git.lizzy.rs Git - plan9front.git/blob - sys/src/libmach/elf.h
9bootfat: rename open() to fileinit and make it static as its really a internal funct...
[plan9front.git] / sys / src / libmach / elf.h
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         ARM = 40,                       /* ARM */
84         AMD64 = 62,             /* Amd64 */
85
86         NO_VERSION = 0,         /* version, ident[VERSION] */
87         CURRENT = 1,
88
89         /* Phdr Codes */
90         NOPTYPE = 0,            /* type */
91         LOAD = 1,
92         DYNAMIC = 2,
93         INTERP = 3,
94         NOTE = 4,
95         SHLIB = 5,
96         PHDR = 6,
97
98         R = 0x4,                /* flags */
99         W = 0x2,
100         X = 0x1,
101
102         /* Shdr Codes */
103         Progbits = 1,   /* section types */
104         Strtab = 3,
105         Nobits = 8,
106
107         Swrite = 1,     /* section attributes */
108         Salloc = 2,
109         Sexec = 4,
110 };
111
112 #define ELF_MAG         ((0x7f<<24) | ('E'<<16) | ('L'<<8) | 'F')