projects
/
unix-history
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
tags
|
clone url
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
BSD 4_3 release
[unix-history]
/
usr
/
src
/
sys
/
sys
/
sys_process.c
diff --git
a/usr/src/sys/sys/sys_process.c
b/usr/src/sys/sys/sys_process.c
index
6b65692
..
4328c8e
100644
(file)
--- a/
usr/src/sys/sys/sys_process.c
+++ b/
usr/src/sys/sys/sys_process.c
@@
-1,20
+1,27
@@
-/* sys_process.c 6.1 83/07/29 */
+/*
+ * Copyright (c) 1982, 1986 Regents of the University of California.
+ * All rights reserved. The Berkeley software License Agreement
+ * specifies the terms and conditions for redistribution.
+ *
+ * @(#)sys_process.c 7.1 (Berkeley) 6/5/86
+ */
#include "../machine/reg.h"
#include "../machine/psl.h"
#include "../machine/pte.h"
#include "../machine/reg.h"
#include "../machine/psl.h"
#include "../machine/pte.h"
-#include "../h/param.h"
-#include "../h/systm.h"
-#include "../h/dir.h"
-#include "../h/user.h"
-#include "../h/proc.h"
-#include "../h/inode.h"
-#include "../h/text.h"
-#include "../h/seg.h"
-#include "../h/vm.h"
-#include "../h/buf.h"
-#include "../h/acct.h"
+#include "param.h"
+#include "systm.h"
+#include "dir.h"
+#include "user.h"
+#include "proc.h"
+#include "inode.h"
+#include "text.h"
+#include "seg.h"
+#include "vm.h"
+#include "buf.h"
+#include "acct.h"
+#include "ptrace.h"
/*
* Priority for tracing
/*
* Priority for tracing
@@
-79,7
+86,7
@@
ptrace()
wakeup((caddr_t)&ipc);
}
wakeup((caddr_t)&ipc);
}
-#if
def vax
+#if
defined(vax)
#define NIPCREG 16
int ipcreg[NIPCREG] =
{R0,R1,R2,R3,R4,R5,R6,R7,R8,R9,R10,R11,AP,FP,SP,PC};
#define NIPCREG 16
int ipcreg[NIPCREG] =
{R0,R1,R2,R3,R4,R5,R6,R7,R8,R9,R10,R11,AP,FP,SP,PC};
@@
-106,38
+113,33
@@
procxmt()
ipc.ip_req = 0;
switch (i) {
ipc.ip_req = 0;
switch (i) {
- /* read user I */
- case 1:
+ case PT_READ_I: /* read the child's text space */
if (!useracc((caddr_t)ipc.ip_addr, 4, B_READ))
goto error;
ipc.ip_data = fuiword((caddr_t)ipc.ip_addr);
break;
if (!useracc((caddr_t)ipc.ip_addr, 4, B_READ))
goto error;
ipc.ip_data = fuiword((caddr_t)ipc.ip_addr);
break;
- /* read user D */
- case 2:
+ case PT_READ_D: /* read the child's data space */
if (!useracc((caddr_t)ipc.ip_addr, 4, B_READ))
goto error;
ipc.ip_data = fuword((caddr_t)ipc.ip_addr);
break;
if (!useracc((caddr_t)ipc.ip_addr, 4, B_READ))
goto error;
ipc.ip_data = fuword((caddr_t)ipc.ip_addr);
break;
- /* read u */
- case 3:
+ case PT_READ_U: /* read the child's u. */
i = (int)ipc.ip_addr;
if (i<0 || i >= ctob(UPAGES))
goto error;
ipc.ip_data = *(int *)PHYSOFF(&u, i);
break;
i = (int)ipc.ip_addr;
if (i<0 || i >= ctob(UPAGES))
goto error;
ipc.ip_data = *(int *)PHYSOFF(&u, i);
break;
- /* write user I */
- /* Must set up to allow writing */
- case 4:
+ case PT_WRITE_I: /* write the child's text space */
/*
* If text, must assure exclusive use
*/
if (xp = u.u_procp->p_textp) {
if (xp->x_count!=1 || xp->x_iptr->i_mode&ISVTX)
goto error;
/*
* If text, must assure exclusive use
*/
if (xp = u.u_procp->p_textp) {
if (xp->x_count!=1 || xp->x_iptr->i_mode&ISVTX)
goto error;
- xp->x_
iptr->i_flag &= ~ITEXT
;
+ xp->x_
flag |= XTRC
;
}
i = -1;
if ((i = suiword((caddr_t)ipc.ip_addr, ipc.ip_data)) < 0) {
}
i = -1;
if ((i = suiword((caddr_t)ipc.ip_addr, ipc.ip_data)) < 0) {
@@
-153,15
+155,13
@@
procxmt()
xp->x_flag |= XWRIT;
break;
xp->x_flag |= XWRIT;
break;
- /* write user D */
- case 5:
+ case PT_WRITE_D: /* write the child's data space */
if (suword((caddr_t)ipc.ip_addr, 0) < 0)
goto error;
(void) suword((caddr_t)ipc.ip_addr, ipc.ip_data);
break;
if (suword((caddr_t)ipc.ip_addr, 0) < 0)
goto error;
(void) suword((caddr_t)ipc.ip_addr, ipc.ip_data);
break;
- /* write u */
- case 6:
+ case PT_WRITE_U: /* write the child's u. */
i = (int)ipc.ip_addr;
p = (int *)PHYSOFF(&u, i);
for (i=0; i<NIPCREG; i++)
i = (int)ipc.ip_addr;
p = (int *)PHYSOFF(&u, i);
for (i=0; i<NIPCREG; i++)
@@
-178,22
+178,19
@@
procxmt()
*p = ipc.ip_data;
break;
*p = ipc.ip_data;
break;
- /* set signal and continue */
- /* one version causes a trace-trap */
- case 9:
- case 7:
+ case PT_STEP: /* single step the child */
+ case PT_CONTINUE: /* continue the child */
if ((int)ipc.ip_addr != 1)
u.u_ar0[PC] = (int)ipc.ip_addr;
if ((unsigned)ipc.ip_data > NSIG)
goto error;
u.u_procp->p_cursig = ipc.ip_data; /* see issig */
if ((int)ipc.ip_addr != 1)
u.u_ar0[PC] = (int)ipc.ip_addr;
if ((unsigned)ipc.ip_data > NSIG)
goto error;
u.u_procp->p_cursig = ipc.ip_data; /* see issig */
- if (i ==
9
)
+ if (i ==
PT_STEP
)
u.u_ar0[PS] |= PSL_T;
wakeup((caddr_t)&ipc);
return (1);
u.u_ar0[PS] |= PSL_T;
wakeup((caddr_t)&ipc);
return (1);
- /* force exit */
- case 8:
+ case PT_KILL: /* kill the child process */
wakeup((caddr_t)&ipc);
exit(u.u_procp->p_cursig);
wakeup((caddr_t)&ipc);
exit(u.u_procp->p_cursig);