PERFORCE change 110630 for review
Oleksandr Tymoshenko
gonzo at FreeBSD.org
Tue Nov 28 11:26:37 PST 2006
http://perforce.freebsd.org/chv.cgi?CH=110630
Change 110630 by gonzo at gonzo_jeevse on 2006/11/28 19:25:30
o Clean out debug printfs
o Move EPC modification to syscall function start, it should be
modified before syscall handler.
o Fill out v1 register with td_retval[1] value because it does
required by some syscall (for example fork).
Affected files ...
.. //depot/projects/mips2/src/sys/mips/mips/trap.c#12 edit
Differences ...
==== //depot/projects/mips2/src/sys/mips/mips/trap.c#12 (text+ko) ====
@@ -311,6 +311,16 @@
if (td->td_ucred != td->td_proc->p_ucred)
cred_update_thread(td);
+ /*
+ * XXXMIPS(1): Check for branch delay?
+ * XXXMIPS(2): Right now frame and td->td_frame point
+ * to the same memory area so after fork syscall
+ * epc register will be copied by cpu_fork call to
+ * new thread. We need to figure out the way to make
+ * sure these two pointers to be the same.
+ */
+ frame->tf_regs[TF_EPC] += 4;
+
code = frame->tf_regs[TF_V0] & 0x000fffff;
/*
@@ -335,14 +345,6 @@
callp = &p->p_sysent->sv_table[code];
nargs = callp->sy_narg & SYF_ARGMASK;
- /* syscallnames is available only of INVARIANTS are on */
-#ifdef INVARIANTS
- printf("syscall enter thread %p pid %d proc " \
- "%s code %d(%s) nargs: %d\n", td,
- td->td_proc->p_pid, td->td_proc->p_comm, code,
- syscallnames[code], nargs);
-#endif
-
/* Copy arguments from a0..a4 */
for(i = 0; i < MIN(nargs, 4 - args_shift); i++)
copyargs[i] = frame->tf_regs[TF_A0 + i + args_shift];
@@ -389,7 +391,7 @@
* XXXMIPS: should we consider this case for 32-bit or
* only for 64bits?
*/
- /* frame->tf_regs[TF_V1] = td->td_retval[1]; */
+ frame->tf_regs[TF_V1] = td->td_retval[1];
frame->tf_regs[TF_A3] = 0;
break;
@@ -425,18 +427,8 @@
(code >= 0 && code < SYS_MAXSYSCALL) ? syscallnames[code] : "???",
td->td_locks));
- /* XXXMIPS: Check for branch delay? */
- frame->tf_regs[TF_EPC] += 4;
userret(td, frame);
- /* syscallnames is available only of INVARIANTS are on */
-#ifdef INVARIANTS
- printf("syscall exit thread %p pid %d proc " \
- "%s code %d(%s) nargs: %d error=%d\n", td,
- td->td_proc->p_pid, td->td_proc->p_comm, code,
- syscallnames[code], nargs, error);
-#endif
-
CTR4(KTR_SYSC, "syscall exit thread %p pid %d proc %s code %d", td,
td->td_proc->p_pid, td->td_proc->p_comm, code);
More information about the p4-projects
mailing list