Quellcode durchsuchen

lesson 23, steps 1 and 2

Carlos vor 9 Jahren
Ursprung
Commit
92ff191c3d
4 geänderte Dateien mit 54 neuen und 6 gelöschten Zeilen
  1. 1 2
      23-fixes/Makefile
  2. 46 0
      23-fixes/README.md
  3. 6 3
      23-fixes/boot/kernel_entry.asm
  4. 1 1
      23-fixes/kernel/kernel.c

+ 1 - 2
23-fixes/Makefile

@@ -7,8 +7,7 @@ OBJ = ${C_SOURCES:.c=.o cpu/interrupt.o}
 CC = /usr/local/i386elfgcc/bin/i386-elf-gcc
 GDB = /usr/local/i386elfgcc/bin/i386-elf-gdb
 # -g: Use debugging symbols in gcc
-CFLAGS = -g -m32 -nostdlib -nostdinc -fno-builtin -fno-stack-protector -nostartfiles -nodefaultlibs \
-		 -Wall -Wextra -Werror
+CFLAGS = -g -ffreestanding -Wall -Wextra -fno-exceptions
 
 # First rule is run by default
 os-image.bin: boot/bootsect.bin kernel.bin

+ 46 - 0
23-fixes/README.md

@@ -7,4 +7,50 @@ JamesM's tutorial](http://wiki.osdev.org/James_Molloy%27s_Tutorial_Known_Bugs).
 Since we followed his tutorial for lessons 18-22 (interrupts through malloc), we'll
 need to make sure we fix any of the issues before moving on.
 
+1. Wrong CFLAGS
+---------------
+
+We add  `-ffreestanding` when compiling `.o` files, which includes `kernel_entry.o` and thus
+`kernel.bin` and `os-image.bin`.
+
+Before, we disabled libgcc (not libc) through the use of `-nostdlib` and we didn't re-enable
+it for linking. Since this is tricky, we'll delete `-nostdlib`
+
+
+2. Not setting a stack
+----------------------
+
+
+
+3. kernel.c `main()` function
+-----------------------------
+
+Modify `kernel/kernel.c` and change `main()` to `kernel_main()` since gcc recognizes "main" as 
+a special keyword and we don't want to mess with that.
+
+Change `boot/kernel_entry.asm` to point to the new name accordingly.
+
+To fix the `i386-elf-ld: warning: cannot find entry symbol _start; defaulting to 0000000000001000`
+warning message, add a `global _start;` and define the `_start:` label in `boot/kernel_entry.asm`.
+
+4. Reinvented datatypes
+-----------------------
+<stddef.h> to provide size\_t
+
+
+
+5. Missing functions
+--------------------
+
+6. Interrupt handlers
+---------------------
+- also cli, sti in interrupt handlers
+
+
+7. Structs and attributes
+-------------------------
+
+8. Improperly aligned `kmalloc`
+-------------------------------
+
 

+ 6 - 3
23-fixes/boot/kernel_entry.asm

@@ -1,4 +1,7 @@
+global _start;
 [bits 32]
-[extern main] ; Define calling point. Must have same name as kernel.c 'main' function
-call main ; Calls the C function. The linker will know where it is placed in memory
-jmp $
+
+_start:
+    [extern kernel_main] ; Define calling point. Must have same name as kernel.c 'main' function
+    call kernel_main ; Calls the C function. The linker will know where it is placed in memory
+    jmp $

+ 1 - 1
23-fixes/kernel/kernel.c

@@ -4,7 +4,7 @@
 #include "../libc/string.h"
 #include "../libc/mem.h"
 
-void main() {
+void kernel_main() {
     isr_install();
     irq_install();