Assignment 0
Contents
This assignment introduces us to the OS/161 environment: of how to compile the kernel, run the operating system, and to learn how to debug errors.
For setup instructions, look here
Building the Kernel
Running the OS
In ~/cs3231/root...
- Start -
sys161 kernel - Wait for debugger before start -
sys161 -w kernel
Debugging
In ~/cs3231/root...
- Execute
os161-gdb kernel Use the connect command
where -> show current call frames
frame n -> Inspect frame
nlist -> Show source code
From the where command, we see get this result
1 2 3 4 5 6 7 8 9 10 11 | (gdb) where #0 membar_any_any () at includelinks/machine/membar.h:47 #1 membar_store_store () at includelinks/machine/membar.h:58 #2 lamebus_write_register (bus=<optimised out>, slot=<optimised out>, offset=offset@entry=16, val=val@entry=0) at ../../arch/sys161/dev/lamebus_machdep.c:184 #3 0x800052ec in ltrace_stop (code=code@entry=0) at ../../dev/lamebus/ltrace.c:87 #4 0x8000ad58 in panic (fmt=fmt@entry=0x80023bd8 "I can't handle this... I think I'll just die now...\n") at ../../lib/kprintf.c:184 #5 0x8001b2a8 in mips_trap (tf=0x80027f28) at ../../arch/mips/locore/trap.c:315 #6 <signal handler called> #7 0x8000b504 in boot () at ../../main/main.c:140 #8 0x8000b5d4 in kmain (arguments=0x80026020 "") at ../../main/main.c:218 #9 0x8001d1ac in __start () at ../../arch/sys161/main/start.S:216 |
We can see that because of the signal handler being raised in #6, an exception was raised from #7.
Method One - frame 7, list
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | (gdb) frame 7
#7 0x8000b504 in boot () at ../../main/main.c:140
140 * foo = 'x'; /* attempt to access it */
(gdb) list
135 kheap_nextgeneration();
136
137 {
138 /* remove this section of code to fix ASST0 */
139 char *foo = NULL; /* create a NULL pointer */
140 * foo = 'x'; /* attempt to access it */
141 }
142
143 /*
144 * Make sure various things aren't screwed up.
(gdb) |
Method Two - list *0x8000b504
1 2 3 4 5 6 7 8 9 10 11 12 13 | (gdb) list *0x8000b504
0x8000b504 is in boot (../../main/main.c:140).
135 kheap_nextgeneration();
136
137 {
138 /* remove this section of code to fix ASST0 */
139 char *foo = NULL; /* create a NULL pointer */
140 * foo = 'x'; /* attempt to access it */
141 }
142
143 /*
144 * Make sure various things aren't screwed up.
(gdb) |
After finding this 'bug', we can remove it and ./rebuild.sh the kernel.
BTW it's located at ~/cs3231/asst0-src/kern/main/main.c