Therefore, for those who want to try the latter technique, we'll
provide a little bit of helpful code:
-@example
+@verbatim
/* Tries to copy a byte from user address USRC to kernel address DST.
Returns true if successful, false if USRC is invalid. */
static inline bool get_user (uint8_t *dst, const uint8_t *usrc) {
: "=m" (*udst), "=&a" (eax) : "r" (byte));
return eax != 0;
}
-@end example
+@end verbatim
Each of these functions assumes that the user address has already been
verified to be below @code{PHYS_BASE}. They also assume that you've
Here's what it would show in the above example, given that
@code{PHYS_BASE} is @t{0xc0000000}:
-@example
+@verbatim
bfffffc0 00 00 00 00 | ....|
bfffffd0 04 00 00 00 d8 ff ff bf-ed ff ff bf f5 ff ff bf |................|
bfffffe0 f8 ff ff bf fc ff ff bf-00 00 00 00 00 2f 62 69 |............./bi|
bffffff0 6e 2f 6c 73 00 2d 6c 00-2a 2e 68 00 2a 2e 63 00 |n/ls.-l.*.h.*.c.|
-@end example
+@end verbatim
@node System Calls
@section System Calls
@html
<CENTER>
@end html
-@multitable {Address} {Value}
+@multitable {@t{0xbffffe7c}} {Value}
@item Address @tab Value
@item @t{0xbffffe7c} @tab 3
@item @t{0xbffffe78} @tab 2