Add comments.
authorBen Pfaff <blp@cs.stanford.edu>
Thu, 2 Sep 2004 04:16:24 +0000 (04:16 +0000)
committerBen Pfaff <blp@cs.stanford.edu>
Thu, 2 Sep 2004 04:16:24 +0000 (04:16 +0000)
src/threads/intr-stubs.h
src/threads/intr-stubs.pl
src/threads/kernel.lds.S

index b1f503943a852b23909d569c76756e9731cd47ec..3f2db7e1870d5d0401ef63dd821b73b878a34804 100644 (file)
@@ -1,9 +1,20 @@
 #ifndef HEADER_INTR_STUBS_H
 #define HEADER_INTR_STUBS_H
 
-extern void (*const intr_stubs[256]) (void);
+/* Interrupt stubs.
 
-void intr_entry (void);
+   These are little snippets of code in intr-stubs.S, one for
+   each of the 256 possible x86 interrupts.  They just push the
+   interrupt vector number on the stack (and, for interrupts that
+   don't have an error code, a fake error code), then jump to
+   intr_entry().
+
+   This array points to each of the interrupt stub entry points
+   so that intr_init() can easily find them. */
+typedef void intr_stub_func (void);
+extern intr_stub_func *intr_stubs[256];
+
+/* Interrupt return path. */
 void intr_exit (void);
 
 #endif /* intr-stubs.h */
index 22eaf59d339f4ee216e77cf9938f82140a5f6b70..a52f37974e4749bbd319fd339b0ca83dbbb282c5 100755 (executable)
@@ -42,7 +42,7 @@ intr_entry:
        movl %eax, %ds
        movl %eax, %es
 
-       # Call handler.
+       # Call interrupt handler.
        pushl %esp
 .globl intr_handler
        call intr_handler
@@ -55,5 +55,7 @@ intr_exit:
        popl %es
        popl %ds
        addl $8, %esp
+
+        # Return to caller.
        iret
 EOF
index b5426e034b8c9c9662fe53c67908b95728a5e9e5..b911b29fa45853714f6e069468c1cdd8b4f20b9d 100644 (file)
@@ -2,17 +2,20 @@
 
 OUTPUT_FORMAT("elf32-i386")
 OUTPUT_ARCH("i386")
-ENTRY(start)
+ENTRY(start)                   /* Kernel starts at "start" symbol. */
 SECTIONS
 {
+  /* Specifies the virtual address for the kernel base. */
   . = LOADER_PHYS_BASE + LOADER_KERN_BASE;
 
   _start = .;
 
+  /* Kernel starts with code, followed by read-only data and writable data. */
   .text : { *(.text) } = 0x9090
   .rodata : { *(.rodata) *(.rodata.*) }
   .data : { *(.data) }
 
+  /* BSS (zero-initialized data) is after everything else. */
   _start_bss = .;
   .bss : { *(.bss) }
   _end_bss = .;