LAPIC memory mapping
[akaros.git] / inc / elf.h
1 #ifndef JOS_INC_ELF_H
2 #define JOS_INC_ELF_H
3
4 #define ELF_MAGIC 0x464C457FU   /* "\x7FELF" in little endian */
5
6 #include <inc/types.h>
7
8 struct Elf {
9         uint32_t e_magic;       // must equal ELF_MAGIC
10         uint8_t e_elf[12];
11         uint16_t e_type;
12         uint16_t e_machine;
13         uint32_t e_version;
14         uint32_t e_entry;
15         uint32_t e_phoff;
16         uint32_t e_shoff;
17         uint32_t e_flags;
18         uint16_t e_ehsize;
19         uint16_t e_phentsize;
20         uint16_t e_phnum;
21         uint16_t e_shentsize;
22         uint16_t e_shnum;
23         uint16_t e_shstrndx;
24 };
25
26 struct Proghdr {
27         uint32_t p_type;
28         uint32_t p_offset;
29         uint32_t p_va;
30         uint32_t p_pa;
31         uint32_t p_filesz;
32         uint32_t p_memsz;
33         uint32_t p_flags;
34         uint32_t p_align;
35 };
36
37 struct Secthdr {
38         uint32_t sh_name;
39         uint32_t sh_type;
40         uint32_t sh_flags;
41         uint32_t sh_addr;
42         uint32_t sh_offset;
43         uint32_t sh_size;
44         uint32_t sh_link;
45         uint32_t sh_info;
46         uint32_t sh_addralign;
47         uint32_t sh_entsize;
48 };
49
50 // Values for Proghdr::p_type
51 #define ELF_PROG_LOAD           1
52
53 // Flag bits for Proghdr::p_flags
54 #define ELF_PROG_FLAG_EXEC      1
55 #define ELF_PROG_FLAG_WRITE     2
56 #define ELF_PROG_FLAG_READ      4
57
58 // Values for Secthdr::sh_type
59 #define ELF_SHT_NULL            0
60 #define ELF_SHT_PROGBITS        1
61 #define ELF_SHT_SYMTAB          2
62 #define ELF_SHT_STRTAB          3
63
64 // Values for Secthdr::sh_name
65 #define ELF_SHN_UNDEF           0
66
67 #endif /* !JOS_INC_ELF_H */