made the jump to ring 3
This commit is contained in:
@@ -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": [
|
"arguments": [
|
||||||
"/home/slinky/opt/cross/bin/i686-elf-gcc",
|
"/home/slinky/opt/cross/bin/i686-elf-gcc",
|
||||||
@@ -33,244 +16,6 @@
|
|||||||
"file": "/home/slinky/source/RockOS/kernel/kmain.c",
|
"file": "/home/slinky/source/RockOS/kernel/kmain.c",
|
||||||
"output": "/home/slinky/source/RockOS/obj/kernel/kmain.o"
|
"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": [
|
"arguments": [
|
||||||
"/home/slinky/opt/cross/bin/i686-elf-gcc",
|
"/home/slinky/opt/cross/bin/i686-elf-gcc",
|
||||||
@@ -287,22 +32,5 @@
|
|||||||
"directory": "/home/slinky/source/RockOS",
|
"directory": "/home/slinky/source/RockOS",
|
||||||
"file": "/home/slinky/source/RockOS/kernel/common_stubs.S",
|
"file": "/home/slinky/source/RockOS/kernel/common_stubs.S",
|
||||||
"output": "/home/slinky/source/RockOS/obj/kernel/common_stubs.o"
|
"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"
|
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -14,3 +14,27 @@ enable_interrupts:
|
|||||||
io_wait:
|
io_wait:
|
||||||
outb %al, $0x80
|
outb %al, $0x80
|
||||||
ret
|
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
|
||||||
@@ -49,13 +49,13 @@ void common_interrupt_handler(struct registers *args) {
|
|||||||
uint32_t faulting_address;
|
uint32_t faulting_address;
|
||||||
asm volatile("mov %%cr2, %0" : "=r"(faulting_address));
|
asm volatile("mov %%cr2, %0" : "=r"(faulting_address));
|
||||||
kprintf("\n--- PAGE FAULT ---\n");
|
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("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",
|
kprintf("Caused by: %s, %s, running in %s mode\n",
|
||||||
(args->error_code & 0x01) ? "Page protection violation" : "Non-present page",
|
(args->error_code & 0x01) ? "Protection Violation" : "Page Not Present",
|
||||||
(args->error_code & 0x02) ? "Write operation" : "Read operation",
|
(args->error_code & 0x02) ? "Write" : "Read",
|
||||||
(args->error_code & 0x04) ? "User (Ring 3)" : "Supervisor (Ring 0)");
|
(args->error_code & 0x04) ? "User" : "Supervisor");
|
||||||
while(1);
|
while(1);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -86,6 +86,11 @@ void load_origin_program(multiboot_info* mbi) {
|
|||||||
map_page(0xBFFFF000, stack_paddr, PAGE_PRESENT | PAGE_WRITABLE | PAGE_USER);
|
map_page(0xBFFFF000, stack_paddr, PAGE_PRESENT | PAGE_WRITABLE | PAGE_USER);
|
||||||
|
|
||||||
kprintf("program loaded into memory @ [virt] 0x%x\n", elf->e_entry);
|
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) {
|
void kmain(uint32_t magic, multiboot_info* mbi) {
|
||||||
|
|||||||
Reference in New Issue
Block a user