Homework: xv6 and Interrupts and Exceptions

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 before lecture. Please email your answers to 6.828-homework@pdos.csail.mit.edu, preferably in plain text.

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.

The assigned chapter for today provides a commentary for these files, but you may find it useful to also 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, 5.12.2 and 5.14. 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 first instruction of syscall() to catch the very first system call (e.g., br syscall). What values are on the stack at this point?

Submit: The output of x/37x $esp at that breakpoint with each value labeled as to what it is (e.g., saved %ebp for trap, trapframe.eip, scratch space, etc.). If your stack dump doesn't reach a page boundary, you'll have to print more than 37 words.