X-Git-Url: http://git.dujemihanovic.xyz/projects?a=blobdiff_plain;f=kernel%2Fentry.s;h=10c95e8985955184b0b8f0afde73f5c99c692d13;hb=94770e6354578485b2aed68dcc3064e5d6862645;hp=a02df92d4703df4ada20654b433158c80ee1373f;hpb=1d0592f3c62d45b1fc23e807bf8cc2274496a4f5;p=nameless-os.git diff --git a/kernel/entry.s b/kernel/entry.s index a02df92..10c95e8 100644 --- a/kernel/entry.s +++ b/kernel/entry.s @@ -1,12 +1,11 @@ -; when our kernel source has functions before _start and we blindly transfer control to the beginning -; of the kernel binary, it will wrongly execute the other functions -; the solution is to link a small assembly routine (this) which executes a known label within the kernel -; so that this routine comes before the kernel in the resulting binary -; we cannot link the boot sector code and the kernel because the former needs to be a raw binary, while the -; kernel is compiled into an ELF object file which contains some metadata on the kernel code +bits 32 +extern kmain +extern __STACK_BOTTOM__ - bits 32 ; this is started in protected mode - extern _start ; the known label in the kernel source we will execute is, well, not in this assembly routine - - call _start ; call the known label - jmp $ ; it should never return, but hang forever if it does +global _start +_start: + mov ebp, __STACK_BOTTOM__ + mov esp, ebp + call kmain + hlt + jmp $-1