From 63ed037fdbb04a4855531f5ce980d8517752f640 Mon Sep 17 00:00:00 2001 From: Marvin Borner Date: Wed, 17 Mar 2021 22:33:31 +0100 Subject: Awesome! --- run | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'run') diff --git a/run b/run index bf27b42..8a49737 100755 --- a/run +++ b/run @@ -26,7 +26,7 @@ no_ask="${2}" # TODO: Support -enable-kvm: GPF?! qemu_with_flags() { network="rtl8139" - qemu-system-i386 -d guest_errors -cpu max -no-reboot -vga std -rtc base=localtime -m 256M -netdev user,id=net0,hostfwd=tcp:127.0.0.1:8000-10.0.2.15:8000 -device $network,netdev=net0 -object filter-dump,id=dump,netdev=net0,file=dump.pcap "$@" + qemu-system-i386 -cpu max -no-reboot -vga std -rtc base=localtime -m 256M -netdev user,id=net0,hostfwd=tcp:127.0.0.1:8000-10.0.2.15:8000 -device $network,netdev=net0 -object filter-dump,id=dump,netdev=net0,file=dump.pcap "$@" } make_cross() { @@ -173,10 +173,10 @@ make_debug() { make_disasm() { if [ -z "$1" ]; then - echo "Usage: './run disasm {kernel, apps/wm, ...} [-S]'" + echo "Usage: './run disasm {kernel.elf, apps/wm, ...} [-S]'" exit 1 fi - objdump -drwC "$2" -Mintel build/"$1".elf | less -R + objdump -drwC "$2" -Mintel build/"$1" | less -R #hexdump -C build/kernel.bin | less -R } -- cgit v1.2.3 From c97a50ba7baa70b40431594f410ca18e14af3b76 Mon Sep 17 00:00:00 2001 From: Marvin Borner Date: Fri, 19 Mar 2021 23:09:54 +0100 Subject: Some things --- kernel/drivers/interrupts.c | 1 + kernel/features/mm.c | 2 ++ kernel/features/proc.c | 7 ++++--- kernel/features/syscall.c | 1 + kernel/main.c | 6 ------ run | 4 ++-- 6 files changed, 10 insertions(+), 11 deletions(-) (limited to 'run') diff --git a/kernel/drivers/interrupts.c b/kernel/drivers/interrupts.c index 2e1444f..255f976 100644 --- a/kernel/drivers/interrupts.c +++ b/kernel/drivers/interrupts.c @@ -179,6 +179,7 @@ void isr_panic(struct regs *r) printf("\t-> Exception occurred in %s at addr 0x%x\n", proc->name, r->eip - proc->entry); proc_exit(proc, 1); + proc_yield(r); } else { __asm__ volatile("cli\nhlt"); } diff --git a/kernel/features/mm.c b/kernel/features/mm.c index af5e070..01e21e7 100644 --- a/kernel/features/mm.c +++ b/kernel/features/mm.c @@ -34,6 +34,8 @@ extern void paging_invalidate_tlb(void); void page_fault_handler(struct regs *r) { + print("--- PAGE FAULT! ---\n"); + // Check error code const char *type = (r->err_code & 1) ? "present" : "non-present"; const char *operation = (r->err_code & 2) ? "write" : "read"; diff --git a/kernel/features/proc.c b/kernel/features/proc.c index 5c38fff..aa595ff 100644 --- a/kernel/features/proc.c +++ b/kernel/features/proc.c @@ -59,7 +59,7 @@ void scheduler(struct regs *regs) } memory_switch_dir(((struct proc *)current->data)->page_dir); - memcpy(regs, &((struct proc *)current->data)->regs, sizeof(struct regs)); + memcpy(regs, &((struct proc *)current->data)->regs, sizeof(*regs)); if (regs->cs != GDT_USER_CODE_OFFSET) { regs->gs = GDT_USER_DATA_OFFSET; @@ -145,9 +145,10 @@ void proc_exit(struct proc *proc, int status) printf("Process %s exited with status %d (%s)\n", proc->name, status, status == 0 ? "success" : "error"); + virtual_destroy_dir(proc->page_dir); proc_clear_quantum(); // TODO: Add quantum to each process struct? - sti(); - hlt(); + + // The caller has to yield itself } void proc_yield(struct regs *r) diff --git a/kernel/features/syscall.c b/kernel/features/syscall.c index 2796372..2334947 100644 --- a/kernel/features/syscall.c +++ b/kernel/features/syscall.c @@ -82,6 +82,7 @@ static void syscall_handler(struct regs *r) } case SYS_EXIT: { proc_exit(proc_current(), (int)r->ebx); + proc_yield(r); break; } case SYS_BOOT: { // TODO: Move diff --git a/kernel/main.c b/kernel/main.c index d1afc01..5c5299e 100644 --- a/kernel/main.c +++ b/kernel/main.c @@ -18,15 +18,9 @@ #include #include -#include - void kernel_main(struct mem_info *mem_info, struct vid_info *vid_info); // Decl void kernel_main(struct mem_info *mem_info, struct vid_info *vid_info) { - // Clear stack - for (u32 i = 0; i < STACK_SIZE; i++) - ((u8 *)STACK_START)[-i] = 0; - // Serial connection serial_install(); serial_print("\nKernel was compiled at " __TIME__ " on " __DATE__ "\n"); diff --git a/run b/run index 8a49737..27a7f5f 100755 --- a/run +++ b/run @@ -183,10 +183,10 @@ make_disasm() { make_addr() { printf "Info: Make sure that you've turned the debug build on (e.g. with MELVIX_DEBUG=1)\n\n" if [ -z "$2" ]; then - echo "Usage: './run addr kernel 0x50042'" + echo "Usage: './run addr kernel.elf 0x50042'" exit 1 fi - addr2line -e build/"$1".elf -f -p "$2" + addr2line -e build/"$1" -f -p "$2" } make_cloc() { -- cgit v1.2.3