aboutsummaryrefslogtreecommitdiff
path: root/kernel
diff options
context:
space:
mode:
authorMarvin Borner2021-04-05 00:20:13 +0200
committerMarvin Borner2021-04-05 00:20:13 +0200
commit248c0d2fd007eeeb108ff1a88924e3ef8ff84ba4 (patch)
treeca7a73c76e423d44e739228ddaa4a408af9ca526 /kernel
parent614df32883bd988a59ce1a2a201ce2dd8211ab3a (diff)
Made kernel elf-bootable
Diffstat (limited to 'kernel')
-rw-r--r--kernel/Makefile6
-rw-r--r--kernel/features/load.c7
-rw-r--r--kernel/link.ld3
3 files changed, 8 insertions, 8 deletions
diff --git a/kernel/Makefile b/kernel/Makefile
index 8970c1b..e4b181c 100644
--- a/kernel/Makefile
+++ b/kernel/Makefile
@@ -8,6 +8,7 @@ COBJS = main.o \
drivers/keyboard.o \
drivers/mouse.o \
drivers/pci.o \
+ drivers/rtc.o \
drivers/ide.o \
drivers/fb.o \
drivers/timer.o \
@@ -34,6 +35,5 @@ all: compile
@$(AS) $(ASFLAGS) $< -o $@
compile: $(COBJS)
- @mkdir -p ../build/
- @$(LD) -N -z undefs -ekernel_main -Ttext 0x00009000 -o ../build/kernel.elf -L../build/ $+ -lk
- @$(LD) -N -z max-page-size=0x1000 -Tlink.ld -o ../build/kernel.bin -L../build/ $+ -lk
+ @mkdir -p ../build/apps/
+ @$(LD) -N -z max-page-size=0x1000 -ekernel_main -Tlink.ld -o ../build/apps/kernel -L../build/ $+ -lk
diff --git a/kernel/features/load.c b/kernel/features/load.c
index 3dff831..d87bb94 100644
--- a/kernel/features/load.c
+++ b/kernel/features/load.c
@@ -9,8 +9,6 @@
#include <random.h>
#include <str.h>
-#define PROC_STACK_SIZE 0x4000
-
res elf_load(const char *path, struct proc *proc)
{
if (!memory_valid(path))
@@ -50,8 +48,11 @@ res elf_load(const char *path, struct proc *proc)
header.version != 1 || header.machine != ELF_MACHINE_386)
return -ENOEXEC;
+ if (!memory_valid((void *)header.entry))
+ return -ENOEXEC;
+
// ASLR
- u32 rand_off = (rand() & 0xffff) * PAGE_SIZE;
+ u32 rand_off = header.type == ELF_ETYPE_DYN ? (rand() & 0xffff) * PAGE_SIZE : 0;
// Loop through programs
for (u32 i = 0; i < header.phnum; i++) {
diff --git a/kernel/link.ld b/kernel/link.ld
index 3b92e82..d213070 100644
--- a/kernel/link.ld
+++ b/kernel/link.ld
@@ -1,7 +1,6 @@
-OUTPUT_FORMAT("binary")
OUTPUT_ARCH(i386)
ENTRY(kernel_main)
-phys = 0x00009000;
+phys = 0x00100000;
SECTIONS
{