Print a simple stack trace on panic.
Pass init=X to the kernel to specify the first program to run in user space.
A separate toolchain for building the kernel that doesn't provide C library headers.
Use __builtin_frame_address to print the call stack.
Load the init program into memory.

The code for parsing the path on the CD is lame.
Fix the algorithm for find a path on an ISO9660 file system.
Create a new task for the init program.

This page faults immediately after the switch to ring 3 because the pages are
marked as system only.
Parse the init program's ELF headers and start it.
Be more careful about stack under- and over-flows.
Implement the _exit system call.
Basic implementation of the write syscall.
Allocate and zero out the BSS.
Set the right permissions for the user space pages.
Print the call stack of the interrupted task.
Fix clearing the BSS and increase the user land stack size.
Include the EIP as the first entry in the call stack.
Run dash as the init program.