From c35191e819ca0154a249d20ccac0a7dc3d1d0f65 Mon Sep 17 00:00:00 2001 From: rami Date: Wed, 3 Jul 2024 12:17:32 -0400 Subject: [PATCH] usermode switch func takes params --- Makefile | 2 +- kernel/init.asm | 3 ++- kernel/kernel.c | 5 ++--- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Makefile b/Makefile index 0629f87..c8cef4b 100644 --- a/Makefile +++ b/Makefile @@ -20,7 +20,7 @@ ISO := Hazel.iso CFLAGS := -ffreestanding -Wall -Wextra -Werror -I $(INCLUDEDIR) -I lib LDFLAGS := -ffreestanding -nostdlib -lgcc -T kernel/kernel.ld QEMUFLAGS := -cdrom $(BUILDDIR)/$(ISO) \ - -d int + -s -d int \ -m 512M \ -serial stdio diff --git a/kernel/init.asm b/kernel/init.asm index 47f47f1..5835e32 100644 --- a/kernel/init.asm +++ b/kernel/init.asm @@ -65,7 +65,8 @@ jmp_user_mode: mov fs, ax mov gs, ax ; SS is handled by iret - mov eax, esp + mov eax, [esp+4] ; esp arg + mov edx, [esp+8] ; eip arg push (4*8) | 3 push eax pushf diff --git a/kernel/kernel.c b/kernel/kernel.c index b3bf1b5..d66a444 100644 --- a/kernel/kernel.c +++ b/kernel/kernel.c @@ -12,10 +12,9 @@ struct idtr idtr = {0}; extern uint32_t isr_stub_table[32]; extern void pit_isr(void); -extern void jmp_user_mode(void); +extern void jmp_user_mode(uint32_t esp, uint32_t eip); void test_entry(void) { - asm volatile ("cli" ::); for (;;) {} } @@ -59,7 +58,7 @@ void kernel(multiboot_info_t *info) { ctx.ticks = 0; //pit_init(); - jmp_user_mode(); + jmp_user_mode(0x5000, (uint32_t)test_entry); halt: for (;;) {}