Lab2 initial changes
[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 typedef uint32_t Elf32_Addr;
9 typedef uint16_t Elf32_Half;
10 typedef uint32_t Elf32_Off;
11 typedef int32_t Elf32_Sword;
12 typedef uint32_t Elf32_Word;
13
14 struct Elf {
15         uint32_t e_magic;       // must equal ELF_MAGIC
16         uint8_t e_elf[12];
17         uint16_t e_type;
18         uint16_t e_machine;
19         uint32_t e_version;
20         uint32_t e_entry;
21         uint32_t e_phoff;
22         uint32_t e_shoff;
23         uint32_t e_flags;
24         uint16_t e_ehsize;
25         uint16_t e_phentsize;
26         uint16_t e_phnum;
27         uint16_t e_shentsize;
28         uint16_t e_shnum;
29         uint16_t e_shstrndx;
30 };
31
32 struct Proghdr {
33         uint32_t p_type;
34         uint32_t p_offset;
35         uint32_t p_va;
36         uint32_t p_pa;
37         uint32_t p_filesz;
38         uint32_t p_memsz;
39         uint32_t p_flags;
40         uint32_t p_align;
41 };
42
43 struct Secthdr {
44         uint32_t sh_name;
45         uint32_t sh_type;
46         uint32_t sh_flags;
47         uint32_t sh_addr;
48         uint32_t sh_offset;
49         uint32_t sh_size;
50         uint32_t sh_link;
51         uint32_t sh_info;
52         uint32_t sh_addralign;
53         uint32_t sh_entsize;
54 };
55
56 typedef struct {
57   unsigned long n_strx;         /* index into string table of name */
58   unsigned char n_type;         /* type of symbol */
59   unsigned char n_other;        /* misc info (usually empty) */
60   unsigned short n_desc;        /* description field */
61   unsigned long n_value;              /* value of symbol */
62 } stab_t;
63
64 /*
65 typedef struct {
66         Elf32_Word      st_name;
67         Elf32_Addr      st_value;
68         Elf32_Word      st_size;
69         unsigned char   st_info;
70         unsigned char   st_other;
71         Elf32_Half      st_shndx;
72 } Elf32_Sym;
73 */
74
75
76 // Values for Proghdr::p_type
77 #define ELF_PROG_LOAD           1
78
79 // Flag bits for Proghdr::p_flags
80 #define ELF_PROG_FLAG_EXEC      1
81 #define ELF_PROG_FLAG_WRITE     2
82 #define ELF_PROG_FLAG_READ      4
83
84 // Values for Secthdr::sh_type
85 #define ELF_SHT_NULL            0
86 #define ELF_SHT_PROGBITS        1
87 #define ELF_SHT_SYMTAB          2
88 #define ELF_SHT_STRTAB          3
89
90 // Values for Secthdr::sh_name
91 #define ELF_SHN_UNDEF           0
92
93 #endif /* !JOS_INC_ELF_H */