PERFORCE change 32320 for review
Peter Wemm
peter at FreeBSD.org
Sun Jun 1 13:42:21 PDT 2003
http://perforce.freebsd.org/chv.cgi?CH=32320
Change 32320 by peter at peter_hammer on 2003/06/01 13:42:17
initial workaround for ERESTART causing suscall args to be trashed.
I've got to do this better and make fast_syscall() do the register
unwinding itself on the way to doreti since we shouldn't depend on
having arrived via fast_syscall here.
Affected files ...
.. //depot/projects/hammer/sys/amd64/amd64/trap.c#22 edit
Differences ...
==== //depot/projects/hammer/sys/amd64/amd64/trap.c#22 (text+ko) ====
@@ -760,10 +760,14 @@
case ERESTART:
/*
- * Reconstruct pc, assuming lcall $X,y is 7 bytes,
- * int 0x80 is 2 bytes. We saved this in tf_err.
+ * Reconstruct pc, we know that 'syscall' is 2 bytes.
+ * We have to do a full context restore so that %r10
+ * (which was holding the value of %rcx) is restored for
+ * the next iteration.
*/
frame.tf_rip -= frame.tf_err;
+ frame.tf_r10 = frame.tf_rcx;
+ td->td_pcb->pcb_flags |= PCB_FULLCTX;
break;
case EJUSTRETURN:
More information about the p4-projects
mailing list