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