diff --git a/Architecture/aarch64/runtime/crt0.S b/Architecture/aarch64/runtime/crt0.S new file mode 100644 index 0000000..ec4b0f0 --- /dev/null +++ b/Architecture/aarch64/runtime/crt0.S @@ -0,0 +1,17 @@ +// .section ".text.boot" +// +// .global _start +// .org 0x80000 +// _start: +// ldr x5, =_start +// mov sp, x5 +// ldr x5, =_kernel_rodata_end +// ldr w6, =_bss_size +// 1: cbz w6, 2f +// str xzr, [x5], #8 +// sub w6, w6, #1 +// cbnz w6, 1b +// 2: bl arm64Entry +// Halt: +// wfe +// b Halt diff --git a/Architecture/aarch64/boot.S b/Architecture/aarch64/runtime/crt1.S similarity index 100% rename from Architecture/aarch64/boot.S rename to Architecture/aarch64/runtime/crt1.S diff --git a/Architecture/aarch64/runtime/crtbegin.c b/Architecture/aarch64/runtime/crtbegin.c new file mode 100644 index 0000000..507125b --- /dev/null +++ b/Architecture/aarch64/runtime/crtbegin.c @@ -0,0 +1 @@ +// C++ constructor/destructor stuff \ No newline at end of file diff --git a/Architecture/aarch64/runtime/crtend.c b/Architecture/aarch64/runtime/crtend.c new file mode 100644 index 0000000..507125b --- /dev/null +++ b/Architecture/aarch64/runtime/crtend.c @@ -0,0 +1 @@ +// C++ constructor/destructor stuff \ No newline at end of file diff --git a/Architecture/aarch64/runtime/crti.S b/Architecture/aarch64/runtime/crti.S new file mode 100644 index 0000000..fedcfbc --- /dev/null +++ b/Architecture/aarch64/runtime/crti.S @@ -0,0 +1,13 @@ +.section .init +.global _init +.type _init, @function +_init: +// push %rbp +// movq %rsp, %rbp + +.section .fini +.global _fini +.type _fini, @function +_fini: +// push %rbp +// movq %rsp, %rbp diff --git a/Architecture/aarch64/runtime/crtn.S b/Architecture/aarch64/runtime/crtn.S new file mode 100644 index 0000000..21c198b --- /dev/null +++ b/Architecture/aarch64/runtime/crtn.S @@ -0,0 +1,7 @@ +.section .init +// popq %rbp + ret + +.section .fini +// popq %rbp + ret diff --git a/Architecture/amd64/cpu/GlobalDescriptorTable.cpp b/Architecture/amd64/cpu/GlobalDescriptorTable.cpp index eadfc25..d7d95af 100644 --- a/Architecture/amd64/cpu/GlobalDescriptorTable.cpp +++ b/Architecture/amd64/cpu/GlobalDescriptorTable.cpp @@ -89,7 +89,7 @@ namespace GlobalDescriptorTable void *CPUStackPointer[MAX_CPU]; - __attribute__((no_stack_protector)) void Init(int Core) + __no_stack_protector void Init(int Core) { memcpy(&GDTEntries[Core], &GDTEntriesTemplate, sizeof(GlobalDescriptorTableEntries)); gdt[Core] = {.Length = sizeof(GlobalDescriptorTableEntries) - 1, .Entries = &GDTEntries[Core]}; @@ -143,7 +143,7 @@ namespace GlobalDescriptorTable trace("Global Descriptor Table initialized"); } - __attribute__((no_stack_protector)) void SetKernelStack(void *Stack) + __no_stack_protector void SetKernelStack(void *Stack) { if (Stack) tss[GetCurrentCPU()->ID].StackPointer[0] = (uint64_t)Stack; diff --git a/Architecture/amd64/linker.ld b/Architecture/amd64/linker.ld index 81d377d..1b993ed 100644 --- a/Architecture/amd64/linker.ld +++ b/Architecture/amd64/linker.ld @@ -1,7 +1,7 @@ OUTPUT_FORMAT(elf64-x86-64) OUTPUT_ARCH(i386:x86-64) -ENTRY(Entry) +ENTRY(_start) SECTIONS { diff --git a/Architecture/amd64/runtime/crt0.c b/Architecture/amd64/runtime/crt0.c new file mode 100644 index 0000000..35cf1ab --- /dev/null +++ b/Architecture/amd64/runtime/crt0.c @@ -0,0 +1,15 @@ +// #include + +// #include + +// int Entry(void *Info); + +// void _start(void *Raw) +// { +// error("Todo"); +// while (1) +// asmv("hlt"); +// Entry(NULL); +// return; +// } +// C stuff \ No newline at end of file diff --git a/Architecture/amd64/runtime/crt1.c b/Architecture/amd64/runtime/crt1.c new file mode 100644 index 0000000..5238647 --- /dev/null +++ b/Architecture/amd64/runtime/crt1.c @@ -0,0 +1,15 @@ +#include + +#include + +int Entry(void *Info); + +void _start(void *Raw) +{ + error("ERROR! INVALID BOOT PROTOCOL!"); + while (1) + asmv("hlt"); + Entry(NULL); + return; +} +// C stuff \ No newline at end of file diff --git a/Architecture/amd64/runtime/crtbegin.c b/Architecture/amd64/runtime/crtbegin.c new file mode 100644 index 0000000..507125b --- /dev/null +++ b/Architecture/amd64/runtime/crtbegin.c @@ -0,0 +1 @@ +// C++ constructor/destructor stuff \ No newline at end of file diff --git a/Architecture/amd64/runtime/crtend.c b/Architecture/amd64/runtime/crtend.c new file mode 100644 index 0000000..507125b --- /dev/null +++ b/Architecture/amd64/runtime/crtend.c @@ -0,0 +1 @@ +// C++ constructor/destructor stuff \ No newline at end of file diff --git a/Architecture/amd64/runtime/crti.S b/Architecture/amd64/runtime/crti.S new file mode 100644 index 0000000..9385571 --- /dev/null +++ b/Architecture/amd64/runtime/crti.S @@ -0,0 +1,13 @@ +.section .init +.global _init +.type _init, @function +_init: + push %rbp + movq %rsp, %rbp + +.section .fini +.global _fini +.type _fini, @function +_fini: + push %rbp + movq %rsp, %rbp diff --git a/Architecture/amd64/runtime/crtn.S b/Architecture/amd64/runtime/crtn.S new file mode 100644 index 0000000..2fe55b4 --- /dev/null +++ b/Architecture/amd64/runtime/crtn.S @@ -0,0 +1,7 @@ +.section .init + popq %rbp + ret + +.section .fini + popq %rbp + ret diff --git a/Architecture/i686/runtime/crt0.c b/Architecture/i686/runtime/crt0.c new file mode 100644 index 0000000..35cf1ab --- /dev/null +++ b/Architecture/i686/runtime/crt0.c @@ -0,0 +1,15 @@ +// #include + +// #include + +// int Entry(void *Info); + +// void _start(void *Raw) +// { +// error("Todo"); +// while (1) +// asmv("hlt"); +// Entry(NULL); +// return; +// } +// C stuff \ No newline at end of file diff --git a/Architecture/i686/boot.asm b/Architecture/i686/runtime/crt1.S similarity index 99% rename from Architecture/i686/boot.asm rename to Architecture/i686/runtime/crt1.S index 4697ef5..baeaa7c 100644 --- a/Architecture/i686/boot.asm +++ b/Architecture/i686/runtime/crt1.S @@ -63,7 +63,6 @@ Loop: hlt jmp Loop - section .bss align 16 KernelStack : diff --git a/Architecture/i686/runtime/crtbegin.c b/Architecture/i686/runtime/crtbegin.c new file mode 100644 index 0000000..507125b --- /dev/null +++ b/Architecture/i686/runtime/crtbegin.c @@ -0,0 +1 @@ +// C++ constructor/destructor stuff \ No newline at end of file diff --git a/Architecture/i686/runtime/crtend.c b/Architecture/i686/runtime/crtend.c new file mode 100644 index 0000000..507125b --- /dev/null +++ b/Architecture/i686/runtime/crtend.c @@ -0,0 +1 @@ +// C++ constructor/destructor stuff \ No newline at end of file diff --git a/Architecture/i686/runtime/crti.S b/Architecture/i686/runtime/crti.S new file mode 100644 index 0000000..7e721ed --- /dev/null +++ b/Architecture/i686/runtime/crti.S @@ -0,0 +1,13 @@ +.section .init +.global _init +.type _init, @function +_init: + push %ebp + movq %esp, %ebp + +.section .fini +.global _fini +.type _fini, @function +_fini: + push %ebp + movq %esp, %ebp diff --git a/Architecture/i686/runtime/crtn.S b/Architecture/i686/runtime/crtn.S new file mode 100644 index 0000000..f09ced9 --- /dev/null +++ b/Architecture/i686/runtime/crtn.S @@ -0,0 +1,7 @@ +.section .init + popq %ebp + ret + +.section .fini + popq %ebp + ret