diff --git a/compile_commands.json b/compile_commands.json index 58fa469..41a18a7 100644 --- a/compile_commands.json +++ b/compile_commands.json @@ -1,21 +1,4 @@ [ - { - "arguments": [ - "/home/slinky/opt/cross/bin/i686-elf-gcc", - "-c", - "-ffreestanding", - "-O2", - "-Wall", - "-Wextra", - "-Ikernel", - "-o", - "obj/kernel/globals.o", - "kernel/globals.c" - ], - "directory": "/home/slinky/source/RockOS", - "file": "/home/slinky/source/RockOS/kernel/globals.c", - "output": "/home/slinky/source/RockOS/obj/kernel/globals.o" - }, { "arguments": [ "/home/slinky/opt/cross/bin/i686-elf-gcc", @@ -33,244 +16,6 @@ "file": "/home/slinky/source/RockOS/kernel/kmain.c", "output": "/home/slinky/source/RockOS/obj/kernel/kmain.o" }, - { - "arguments": [ - "/home/slinky/opt/cross/bin/i686-elf-gcc", - "-c", - "-ffreestanding", - "-O2", - "-Wall", - "-Wextra", - "-Ikernel", - "-o", - "obj/kernel/idt.o", - "kernel/idt.c" - ], - "directory": "/home/slinky/source/RockOS", - "file": "/home/slinky/source/RockOS/kernel/idt.c", - "output": "/home/slinky/source/RockOS/obj/kernel/idt.o" - }, - { - "arguments": [ - "/home/slinky/opt/cross/bin/i686-elf-gcc", - "-c", - "-ffreestanding", - "-O2", - "-Wall", - "-Wextra", - "-Ikernel", - "-o", - "obj/kernel/drivers/pic/pic.o", - "kernel/drivers/pic/pic.c" - ], - "directory": "/home/slinky/source/RockOS", - "file": "/home/slinky/source/RockOS/kernel/drivers/pic/pic.c", - "output": "/home/slinky/source/RockOS/obj/kernel/drivers/pic/pic.o" - }, - { - "arguments": [ - "/home/slinky/opt/cross/bin/i686-elf-gcc", - "-c", - "-ffreestanding", - "-O2", - "-Wall", - "-Wextra", - "-Ikernel", - "-o", - "obj/kernel/drivers/vga/vga_stream_writer.o", - "kernel/drivers/vga/vga_stream_writer.c" - ], - "directory": "/home/slinky/source/RockOS", - "file": "/home/slinky/source/RockOS/kernel/drivers/vga/vga_stream_writer.c", - "output": "/home/slinky/source/RockOS/obj/kernel/drivers/vga/vga_stream_writer.o" - }, - { - "arguments": [ - "/home/slinky/opt/cross/bin/i686-elf-gcc", - "-c", - "-ffreestanding", - "-O2", - "-Wall", - "-Wextra", - "-Ikernel", - "-o", - "obj/kernel/drivers/ps2/ps2.o", - "kernel/drivers/ps2/ps2.c" - ], - "directory": "/home/slinky/source/RockOS", - "file": "/home/slinky/source/RockOS/kernel/drivers/ps2/ps2.c", - "output": "/home/slinky/source/RockOS/obj/kernel/drivers/ps2/ps2.o" - }, - { - "arguments": [ - "/home/slinky/opt/cross/bin/i686-elf-gcc", - "-c", - "-ffreestanding", - "-O2", - "-Wall", - "-Wextra", - "-Ikernel", - "-o", - "obj/kernel/gdt.o", - "kernel/gdt.c" - ], - "directory": "/home/slinky/source/RockOS", - "file": "/home/slinky/source/RockOS/kernel/gdt.c", - "output": "/home/slinky/source/RockOS/obj/kernel/gdt.o" - }, - { - "arguments": [ - "/home/slinky/opt/cross/bin/i686-elf-gcc", - "-c", - "-ffreestanding", - "-O2", - "-Wall", - "-Wextra", - "-Ikernel", - "-o", - "obj/kernel/memory/mm.o", - "kernel/memory/mm.c" - ], - "directory": "/home/slinky/source/RockOS", - "file": "/home/slinky/source/RockOS/kernel/memory/mm.c", - "output": "/home/slinky/source/RockOS/obj/kernel/memory/mm.o" - }, - { - "arguments": [ - "/home/slinky/opt/cross/bin/i686-elf-gcc", - "-c", - "-ffreestanding", - "-O2", - "-Wall", - "-Wextra", - "-Ikernel", - "-o", - "obj/kernel/interrupts.o", - "kernel/interrupts.c" - ], - "directory": "/home/slinky/source/RockOS", - "file": "/home/slinky/source/RockOS/kernel/interrupts.c", - "output": "/home/slinky/source/RockOS/obj/kernel/interrupts.o" - }, - { - "arguments": [ - "/home/slinky/opt/cross/bin/i686-elf-gcc", - "-c", - "-ffreestanding", - "-O2", - "-Wall", - "-Wextra", - "-Ikernel", - "-o", - "obj/kernel/lib/stream.o", - "kernel/lib/stream.c" - ], - "directory": "/home/slinky/source/RockOS", - "file": "/home/slinky/source/RockOS/kernel/lib/stream.c", - "output": "/home/slinky/source/RockOS/obj/kernel/lib/stream.o" - }, - { - "arguments": [ - "/home/slinky/opt/cross/bin/i686-elf-gcc", - "-c", - "-ffreestanding", - "-O2", - "-Wall", - "-Wextra", - "-Ikernel", - "-o", - "obj/kernel/lib/print.o", - "kernel/lib/print.c" - ], - "directory": "/home/slinky/source/RockOS", - "file": "/home/slinky/source/RockOS/kernel/lib/print.c", - "output": "/home/slinky/source/RockOS/obj/kernel/lib/print.o" - }, - { - "arguments": [ - "/home/slinky/opt/cross/bin/i686-elf-gcc", - "-c", - "-ffreestanding", - "-O2", - "-Wall", - "-Wextra", - "-Ikernel", - "-o", - "obj/kernel/drivers/pic/pic_stubs.o", - "kernel/drivers/pic/pic_stubs.S" - ], - "directory": "/home/slinky/source/RockOS", - "file": "/home/slinky/source/RockOS/kernel/drivers/pic/pic_stubs.S", - "output": "/home/slinky/source/RockOS/obj/kernel/drivers/pic/pic_stubs.o" - }, - { - "arguments": [ - "/home/slinky/opt/cross/bin/i686-elf-gcc", - "-c", - "-ffreestanding", - "-O2", - "-Wall", - "-Wextra", - "-Ikernel", - "-o", - "obj/kernel/drivers/pit/pit_stubs.o", - "kernel/drivers/pit/pit_stubs.S" - ], - "directory": "/home/slinky/source/RockOS", - "file": "/home/slinky/source/RockOS/kernel/drivers/pit/pit_stubs.S", - "output": "/home/slinky/source/RockOS/obj/kernel/drivers/pit/pit_stubs.o" - }, - { - "arguments": [ - "/home/slinky/opt/cross/bin/i686-elf-gcc", - "-c", - "-ffreestanding", - "-O2", - "-Wall", - "-Wextra", - "-Ikernel", - "-o", - "obj/kernel/drivers/ps2/ps2_stubs.o", - "kernel/drivers/ps2/ps2_stubs.S" - ], - "directory": "/home/slinky/source/RockOS", - "file": "/home/slinky/source/RockOS/kernel/drivers/ps2/ps2_stubs.S", - "output": "/home/slinky/source/RockOS/obj/kernel/drivers/ps2/ps2_stubs.o" - }, - { - "arguments": [ - "/home/slinky/opt/cross/bin/i686-elf-gcc", - "-c", - "-ffreestanding", - "-O2", - "-Wall", - "-Wextra", - "-Ikernel", - "-o", - "obj/kernel/boot/boot.o", - "kernel/boot/boot.S" - ], - "directory": "/home/slinky/source/RockOS", - "file": "/home/slinky/source/RockOS/kernel/boot/boot.S", - "output": "/home/slinky/source/RockOS/obj/kernel/boot/boot.o" - }, - { - "arguments": [ - "/home/slinky/opt/cross/bin/i686-elf-gcc", - "-c", - "-ffreestanding", - "-O2", - "-Wall", - "-Wextra", - "-Ikernel", - "-o", - "obj/kernel/gdt_stubs.o", - "kernel/gdt_stubs.S" - ], - "directory": "/home/slinky/source/RockOS", - "file": "/home/slinky/source/RockOS/kernel/gdt_stubs.S", - "output": "/home/slinky/source/RockOS/obj/kernel/gdt_stubs.o" - }, { "arguments": [ "/home/slinky/opt/cross/bin/i686-elf-gcc", @@ -287,22 +32,5 @@ "directory": "/home/slinky/source/RockOS", "file": "/home/slinky/source/RockOS/kernel/common_stubs.S", "output": "/home/slinky/source/RockOS/obj/kernel/common_stubs.o" - }, - { - "arguments": [ - "/home/slinky/opt/cross/bin/i686-elf-gcc", - "-c", - "-ffreestanding", - "-O2", - "-Wall", - "-Wextra", - "-Ikernel", - "-o", - "obj/kernel/idt_stubs.o", - "kernel/idt_stubs.S" - ], - "directory": "/home/slinky/source/RockOS", - "file": "/home/slinky/source/RockOS/kernel/idt_stubs.S", - "output": "/home/slinky/source/RockOS/obj/kernel/idt_stubs.o" } ] diff --git a/kernel/common_stubs.S b/kernel/common_stubs.S index 72bee7f..a6c2f5e 100644 --- a/kernel/common_stubs.S +++ b/kernel/common_stubs.S @@ -13,4 +13,28 @@ enable_interrupts: .global io_wait io_wait: outb %al, $0x80 - ret \ No newline at end of file + ret + +.global liftoff +liftoff: + cli + + mov 4(%esp), %ecx + mov 8(%esp), %ebx + + mov $0x23, %ax + mov %ax, %ds + mov %ax, %es + mov %ax, %fs + mov %ax, %gs + + push $0x23 + push %ebx + push $0x202 + push $0x1B + push %ecx + + xor %eax, %eax + xor %edx, %edx + + iret \ No newline at end of file diff --git a/kernel/interrupts.c b/kernel/interrupts.c index 21db4f5..404413a 100644 --- a/kernel/interrupts.c +++ b/kernel/interrupts.c @@ -49,13 +49,13 @@ void common_interrupt_handler(struct registers *args) { uint32_t faulting_address; asm volatile("mov %%cr2, %0" : "=r"(faulting_address)); kprintf("\n--- PAGE FAULT ---\n"); - kprintf("Faulting Virtual Address (CR2): 0x%x\n", faulting_address); + kprintf("Faulted Virtual Address: 0x%x\n", faulting_address); kprintf("Error Code: 0x%x\n", args->error_code); - kprintf("Instruction Pointer (EIP): 0x%x\n", args->eip); + kprintf("Instruction Pointer: 0x%x\n", args->eip); kprintf("Caused by: %s, %s, running in %s mode\n", - (args->error_code & 0x01) ? "Page protection violation" : "Non-present page", - (args->error_code & 0x02) ? "Write operation" : "Read operation", - (args->error_code & 0x04) ? "User (Ring 3)" : "Supervisor (Ring 0)"); + (args->error_code & 0x01) ? "Protection Violation" : "Page Not Present", + (args->error_code & 0x02) ? "Write" : "Read", + (args->error_code & 0x04) ? "User" : "Supervisor"); while(1); break; } diff --git a/kernel/kmain.c b/kernel/kmain.c index 2ce815c..92aff0e 100644 --- a/kernel/kmain.c +++ b/kernel/kmain.c @@ -86,6 +86,11 @@ void load_origin_program(multiboot_info* mbi) { map_page(0xBFFFF000, stack_paddr, PAGE_PRESENT | PAGE_WRITABLE | PAGE_USER); kprintf("program loaded into memory @ [virt] 0x%x\n", elf->e_entry); + + extern void liftoff(uint32_t entry, uint32_t stack_top); + kprintf("launching origin process"); + uint32_t stack_top = 0xBFFFF000 + 4095; + liftoff(elf->e_entry, stack_top); } void kmain(uint32_t magic, multiboot_info* mbi) {