X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=doc%2Fuserprog.texi;h=9db073776ab70c7fadb9e711325b991a23e5e552;hb=05b6f677e17b8bd2239009cdc6796c71e0327314;hp=884b757c59bafdc56d1990ecc7e67cedc8814c8d;hpb=8b4b30e474d03688b62ad2ccb6c1ec162c6d2a8d;p=pintos-anon diff --git a/doc/userprog.texi b/doc/userprog.texi index 884b757..9db0737 100644 --- a/doc/userprog.texi +++ b/doc/userprog.texi @@ -516,9 +516,9 @@ recommend against modifying code in the @file{filesys} directory.} We have provided you a user-level function for each system call in @file{lib/user/syscall.c}. These provide a way for user processes to -invoke each system call from a C program. Each of them calls an -assembly language routine in @file{lib/user/syscall-stub.S}, which in -turn invokes the system call interrupt and returns. +invoke each system call from a C program. Each uses a little inline +assembly code to invoke the system call and (if appropriate) returns the +system call's return value. When you're done with this part, and forevermore, Pintos should be bulletproof. Nothing that a user program can do should ever cause the @@ -686,7 +686,7 @@ provide a little bit of helpful code: Returns true if successful, false if USRC is invalid. */ static inline bool get_user (uint8_t *dst, const uint8_t *usrc) { int eax; - asm ("movl $1f, %%eax; movb %2, %%al; movb %%al, %0; 1:" + asm ("mov %%eax, offset 1f; mov %%al, %2; mov %0, %%al; 1:" : "=m" (*dst), "=&a" (eax) : "m" (*usrc)); return eax != 0; } @@ -695,7 +695,7 @@ static inline bool get_user (uint8_t *dst, const uint8_t *usrc) { Returns true if successful, false if UDST is invalid. */ static inline bool put_user (uint8_t *udst, uint8_t byte) { int eax; - asm ("movl $1f, %%eax; movb %b2, %0; 1:" + asm ("mov %%eax, offset 1f; mov %0, %b2; 1:" : "=m" (*udst), "=&a" (eax) : "r" (byte)); return eax != 0; }