Read: xv6
trapasm.S,
trap.c,
syscall.c,
initcode.S,
usys.S.
Skim
vectors.S,
lapic.c,
ioapic.c,
picirq.c.
Hand-In Procedure
You are to turn in this homework during lecture. Please write up your answers to the exercises below and hand them in to a 6.828 staff member at the beginning of the lecture.
Introduction
Try to understand xv6's
trapasm.S,
trap.c,
syscall.c,
initcode.S,
usys.S.
Skim
vectors.S,
lapic.c,
ioapic.c,
picirq.c.
You will need to consult:
Chapter 5 of IA-32 Intel Architecture Software Developer's Manual, Volume 3: System programming guide; you can skip sections 5.7.1, 5.8.2, and 5.12.2. Be aware that terms such as exceptions, traps, interrupts, faults and aborts have no standard meaning.
Chapter 9 of the 1987 i386 Programmer's Reference Manual also covers exception and interrupt handling in IA32 processors.
Assignment:
In xv6, set a breakpoint at the beginning of syscall() to
catch the very first system call. What values are on the stack at
this point? Turn in the output of print-stack 35 at that
breakpoint with each value labeled as to what it is (e.g.,
saved %ebp for trap,
trapframe.eip, etc.).
As in Homework 3, you may find it easier to examine the appropriate stack when Bochs is simulating only one CPU instead of two. To do this, make a copy of .bochsrc called uni, find the line that starts with cpu: count=2, and change the 2 to 1. Then run bochs using this configuration, by running bochs -q -f uni.
This completes the homework.