]> git.dujemihanovic.xyz Git - nameless-os.git/blobdiff - kernel/entry.s
Document the code
[nameless-os.git] / kernel / entry.s
index 236b81e967e459e4c6f684d137726dbf42743677..a02df92d4703df4ada20654b433158c80ee1373f 100644 (file)
@@ -1,5 +1,12 @@
-       bits 32
-       extern _start
+; 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
 
-       call _start
-       jmp $
+       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