aboutsummaryrefslogtreecommitdiff
path: root/kernel/inc/load.h
diff options
context:
space:
mode:
authorMarvin Borner2020-08-10 16:01:04 +0200
committerMarvin Borner2020-08-10 16:01:04 +0200
commit54ece9141e9ad8cfb59f2c8315c84b8e247275f7 (patch)
treecc578f577c296719bf869e8e6816322367e96004 /kernel/inc/load.h
parentf42aa2d995704c748c370d3e7b3684512361bc09 (diff)
Started elf parser/loader
Diffstat (limited to 'kernel/inc/load.h')
-rw-r--r--kernel/inc/load.h52
1 files changed, 52 insertions, 0 deletions
diff --git a/kernel/inc/load.h b/kernel/inc/load.h
index 60fecf9..597d3b5 100644
--- a/kernel/inc/load.h
+++ b/kernel/inc/load.h
@@ -5,6 +5,58 @@
#include <proc.h>
+#define ELF_MAG 0x7F // 0
+#define ELF_32 (1) // 4: 32-bit Architecture
+#define ELF_LITTLE (1) // 5: Little Endian
+#define ELF_CURRENT (1) // 6: ELF Current Version
+#define ELF_386 (3) // header->machine x86 machine type
+
+#define ET_NONE 0 // Unkown type
+#define ET_REL 1 // Relocatable file
+#define ET_EXEC 2 // Executable file
+
+struct elf_header {
+ u8 ident[16];
+ u16 type;
+ u16 machine;
+ u32 version;
+ u32 entry;
+ u32 phoff;
+ u32 shoff;
+ u32 flags;
+ u16 ehsize;
+ u16 phentsize;
+ u16 phnum;
+ u16 shentsize;
+ u16 shnum;
+ u16 shstrndx;
+};
+
+struct elf_section_header {
+ u32 name;
+ u32 type;
+ u32 flags;
+ u32 addr;
+ u32 offset;
+ u32 size;
+ u32 link;
+ u32 info;
+ u32 addralign;
+ u32 entsize;
+};
+
+struct elf_program_header {
+ u32 type;
+ u32 offset;
+ u32 vaddr;
+ u32 paddr;
+ u32 filesz;
+ u32 memsz;
+ u32 flags;
+ u32 align;
+};
+
void bin_load(char *path, struct proc *proc);
+void elf_load(char *path, struct proc *proc);
#endif