[Top] [Contents] [Index] [ ? ]

Footnotes

(1)

GDB might tell you that schedule() doesn't exist, which is arguably a GDB bug. You can work around this by setting the breakpoint by filename and line number, e.g. break thread.c:ln where ln is the line number of the first declaration in schedule(). At the time of this writing, that line is number 556.

(2)

This is because switch_threads() takes arguments on the stack and the 80x86 SVR4 calling convention requires the caller, not the called function, to remove them when the call is complete. See [ SysV-i386] chapter 3 for details.

(3)

Actually, virtual to physical translation on the 80x86 architecture occurs via an intermediate "linear address," but Pintos (and most modern 80x86 OSes) set up the CPU so that linear and virtual addresses are one and the same. Thus, you can effectively ignore this CPU feature.

(4)

Because we are working in binary, the "decimal" point might more correctly be called the "binary" point, but the meaning should be clear.

(5)

pintos-gdb is a wrapper around gdb (80x86) or i386-elf-gdb (SPARC) that loads the Pintos macros at startup.

(6)

You may get a warning of a remote failure reply. Ignore it, gdb will work anyway.

(7)

To be precise, GDB will stop only when running under Bochs. When running under QEMU, you must set a breakpoint in the page_fault function to stop execution when a page fault occurs. In that case, the btpagefault macro is unnecessary.

(8)

This is typically vi. To exit vi, type : q Enter.



This document was generated by Alison Norman on February 2, 2025 using texi2html