Fix asm constraints to avoid SI, DI for byte and word access.
authorBen Pfaff <blp@cs.stanford.edu>
Sat, 2 Aug 2008 11:30:43 +0000 (11:30 +0000)
committerBen Pfaff <blp@cs.stanford.edu>
Sat, 2 Aug 2008 11:30:43 +0000 (11:30 +0000)
Thanks to Ed Lyle Karrels <karrels@stanford.edu> for reporting the
problem.

doc/userprog.texi
solutions/p2.patch
src/userprog/gdt.c

index 5bd0bb2b0d5681a14ceeeca5e49d9ff2b1ef724c..612bb81ba553166d0796c84a923155a7e404ce45 100644 (file)
@@ -443,7 +443,7 @@ put_user (uint8_t *udst, uint8_t byte)
 {
   int error_code;
   asm ("movl $1f, %0; movb %b2, %1; 1:"
-       : "=&a" (error_code), "=m" (*udst) : "r" (byte));
+       : "=&a" (error_code), "=m" (*udst) : "q" (byte));
   return error_code != -1;
 }
 @end verbatim
index 00711a2a484aead2743ddcb81a6cd0bd7e86167d..4c2660e8ddeb12a73c5f33f2a3410e2a2ae5dcb6 100644 (file)
@@ -620,7 +620,7 @@ diff -u src/userprog/syscall.c~ src/userprog/syscall.c
 +{
 +  int eax;
 +  asm ("movl $1f, %%eax; movb %b2, %0; 1:"
-+       : "=m" (*udst), "=&a" (eax) : "r" (byte));
++       : "=m" (*udst), "=&a" (eax) : "q" (byte));
 +  return eax != 0;
 +}
 + 
index a7423b7ec986cfeae0fe439a6f697e51f5eff92c..e866037e2a24dc412da2f2068d4fe69476260756 100644 (file)
@@ -50,7 +50,7 @@ gdt_init (void)
      6.2.4 "Task Register".  */
   gdtr_operand = make_gdtr_operand (sizeof gdt - 1, gdt);
   asm volatile ("lgdt %0" : : "m" (gdtr_operand));
-  asm volatile ("ltr %w0" : : "r" (SEL_TSS));
+  asm volatile ("ltr %w0" : : "q" (SEL_TSS));
 }
 \f
 /* System segment or code/data segment? */