#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 */
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 = .;