aboutsummaryrefslogtreecommitdiff
path: root/kernel/inc
diff options
context:
space:
mode:
authorMarvin Borner2021-03-20 19:55:51 +0100
committerGitHub2021-03-20 19:55:51 +0100
commit5132bac014d63331acf61bb60b9254023f76b869 (patch)
tree8e2946b7a6630da13ee403c787f77270aeb6185d /kernel/inc
parent435231378798819304eef427bad8e77dffea85df (diff)
parentb96c27bba0b242fc860fc9a2fcb63f121312fa7e (diff)
Merged ELF loading
Diffstat (limited to 'kernel/inc')
-rw-r--r--kernel/inc/fb.h2
-rw-r--r--kernel/inc/load.h100
-rw-r--r--kernel/inc/mm.h9
3 files changed, 109 insertions, 2 deletions
diff --git a/kernel/inc/fb.h b/kernel/inc/fb.h
index 212230b..3b545fd 100644
--- a/kernel/inc/fb.h
+++ b/kernel/inc/fb.h
@@ -4,7 +4,9 @@
#define FB_H
#include <boot.h>
+#include <mm.h>
+void fb_map_buffer(struct page_dir *dir, struct vid_info *boot);
void fb_install(struct vid_info *boot);
#endif
diff --git a/kernel/inc/load.h b/kernel/inc/load.h
index bd3b10d..28bdc54 100644
--- a/kernel/inc/load.h
+++ b/kernel/inc/load.h
@@ -6,6 +6,106 @@
#include <def.h>
#include <proc.h>
+/**
+ * ELF
+ */
+
+#define ELF_MAG0 0x7F
+#define ELF_MAG1 'E'
+#define ELF_MAG2 'L'
+#define ELF_MAG3 'F'
+
+#define ELF_IDENT_COUNT 16
+#define ELF_IDENT_MAG0 0
+#define ELF_IDENT_MAG1 1
+#define ELF_IDENT_MAG2 2
+#define ELF_IDENT_MAG3 3
+
+#define ELF_IDENT_CLASS 4
+#define ELF_IDENT_CLASS_NONE 0
+#define ELF_IDENT_CLASS_32 1
+#define ELF_IDENT_CLASS_64 2
+
+#define ELF_IDENT_DATA 5
+#define ELF_IDENT_DATA_NONE 0
+#define ELF_IDENT_DATA_LSB 1
+#define ELF_IDENT_DATA_MSB 2
+
+#define ELF_IDENT_VERSION 6
+#define ELF_IDENT_OSABI 7
+#define ELF_IDENT_ABIVERSION 8
+#define ELF_IDENT_PAD 9
+
+#define ELF_ETYPE_NONE 0
+#define ELF_ETYPE_REL 1
+#define ELF_ETYPE_EXEC 2
+#define ELF_ETYPE_DYN 3
+#define ELF_ETYPE_CORE 4
+
+#define ELF_MACHINE_NONE 0
+#define ELF_MACHINE_SPARC 2
+#define ELF_MACHINE_386 3
+#define ELF_MACHINE_SPARC32PLUS 18
+#define ELF_MACHINE_SPARCV9 43
+#define ELF_MACHINE_AMD64 62
+
+#define ELF_FLAG_SPARC_EXT_MASK 0xffff00
+#define ELF_FLAG_SPARC_32PLUS 0x000100
+#define ELF_FLAG_SPARC_SUN_US1 0x000200
+#define ELF_FLAG_SPARC_HAL_R1 0x000400
+#define ELF_FLAG_SPARC_SUN_US3 0x000800
+#define ELF_FLAG_SPARCV9_MM 0x3
+#define ELF_FLAG_SPARCV9_TSO 0x0
+#define ELF_FLAG_SPARCV9_PSO 0x1
+#define ELF_FLAG_SPARCV9_RMO 0x2
+
+#define ELF_PROGRAM_X 0x1
+#define ELF_PROGRAM_W 0x2
+#define ELF_PROGRAM_R 0x4
+
+#define ELF_SECTION_TYPE_NULL 0
+#define ELF_SECTION_TYPE_PROGBITS 1
+#define ELF_SECTION_TYPE_SYMTAB 2
+#define ELF_SECTION_TYPE_STRTAB 3
+#define ELF_SECTION_TYPE_RELA 4
+#define ELF_SECTION_TYPE_HASH 5
+#define ELF_SECTION_TYPE_DYNAMIC 6
+#define ELF_SECTION_TYPE_NOTE 7
+#define ELF_SECTION_TYPE_NOBITS 8
+#define ELF_SECTION_TYPE_REL 9
+#define ELF_SECTION_TYPE_SHLIB 10
+#define ELF_SECTION_TYPE_DYNSYM 11
+#define ELF_SECTION_TYPE_COUNT 12
+
+struct PACKED elf_header {
+ u8 ident[ELF_IDENT_COUNT];
+ 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_program {
+ u32 type;
+ u32 offset;
+ u32 vaddr;
+ u32 paddr;
+ u32 filesz;
+ u32 memsz;
+ u32 flags;
+ u32 align;
+};
+
s32 bin_load(const char *path, struct proc *proc);
+s32 elf_load(const char *path, struct proc *proc);
#endif
diff --git a/kernel/inc/mm.h b/kernel/inc/mm.h
index 98dcf46..5a307b2 100644
--- a/kernel/inc/mm.h
+++ b/kernel/inc/mm.h
@@ -13,6 +13,13 @@ struct memory_range {
};
/**
+ * Lowlevel paging
+ */
+
+void paging_enable(void);
+void page_fault_handler(struct regs *r);
+
+/**
* Physical
*/
@@ -109,6 +116,4 @@ u8 memory_valid(const void *addr);
void memory_install(struct mem_info *mem_info, struct vid_info *vid_info);
-void page_fault_handler(struct regs *r);
-
#endif