diff --git a/Makefile b/Makefile index 97b38ad..eedb0fe 100644 --- a/Makefile +++ b/Makefile @@ -37,8 +37,8 @@ ASMFLAGS = -target elf-i386 -ffreestanding -c -g LDKERNELFLAGS = --script=script.ld endif -OBJECTS = ./kernel.o ./console.o ./drivers/vga.o ./drivers/uart.o ./drivers/keyboard.o \ - ./cpu/idt.o ./cpu/gdt.o ./cpu/swtch.o ./cpu/vectors.o ./lib/mem.o ./proc.o ./lib/string.o \ +OBJECTS = ./kernel/kstart.o ./kernel.o ./console.o ./drivers/vga.o ./drivers/uart.o ./drivers/keyboard.o \ + ./cpu/idt.o ./cpu/gdt.o ./cpu/swtch.o ./cpu/vectors.o ./kernel/mem.o ./proc.o ./lib/string.o \ ./fs/fs.o ./drivers/ata.o ./lib/string.o ./proc.o ./drivers/pit.o ./kernel/vm.o run: image.bin diff --git a/cpu/idt.c b/cpu/idt.c index 91d8d02..06669df 100644 --- a/cpu/idt.c +++ b/cpu/idt.c @@ -1,5 +1,6 @@ #include "isr.h" #include "gdt.h" +#include "memlayout.h" #include "../syscall.h" #include "../proc.h" #include "../drivers/port.h" @@ -117,10 +118,11 @@ void trap(registers_t *r) { } static void* get_userspace_ptr(uint32_t ptr) { - if (ptr >= 0xffffffff - USER_BASE) { + if (ptr > KERNBASE) { return 0; } - return (void*)(ptr + USER_BASE); + // FIXME: check if ptr is mapped and a valid 0-terminated string + return (void*)(ptr); } static int handle_puts(const char* s) {