* Copyright (c) 1982, 1986, 1989 Regents of the University of California.
* All rights reserved.
*
- * %sccs.include.redist.c%
+ * Redistribution is only permitted until one year after the first shipment
+ * of 4.4BSD by the Regents. Otherwise, redistribution and use in source and
+ * binary forms are permitted provided that: (1) source distributions retain
+ * this entire copyright notice and comment, and (2) distributions including
+ * binaries display the following acknowledgement: This product includes
+ * software developed by the University of California, Berkeley and its
+ * contributors'' in the documentation or other materials provided with the
+ * distribution and in all advertising materials mentioning features or use
+ * of this software. Neither the name of the University nor the names of
+ * its contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ * THIS SOFTWARE IS PROVIDED AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*
- * @(#)kern_sig.c 7.25 (Berkeley) %G%
+ * @(#)kern_sig.c 7.23 (Berkeley) 6/28/90
*/
#include "param.h"
#include "timeb.h"
#include "times.h"
#include "buf.h"
+#include "text.h"
#include "seg.h"
+#include "vm.h"
#include "acct.h"
#include "uio.h"
#include "file.h"
#include "ktrace.h"
#include "machine/reg.h"
+#include "machine/pte.h"
#include "machine/psl.h"
#include "machine/mtpr.h"
-#include "../vm/vm_param.h"
#define ttystopsigmask (sigmask(SIGTSTP)|sigmask(SIGTTIN)|sigmask(SIGTTOU))
#define stopsigmask (sigmask(SIGSTOP)|ttystopsigmask)
case SIGTSTP:
case SIGTTIN:
case SIGTTOU:
- /*
- * If sending a tty stop signal to a member of an orphaned
- * process group, discard the signal here if the action
- * is default; don't stop the process below if sleeping,
- * and don't clear any pending SIGCONT.
- */
- if (p->p_pgrp->pg_jobc == 0 && action == SIG_DFL)
- return;
- /* FALLTHROUGH */
-
case SIGSTOP:
p->p_sig &= ~sigmask(SIGCONT);
break;
if (ctob(UPAGES + u.u_dsize + u.u_ssize) >=
u.u_rlimit[RLIMIT_CORE].rlim_cur)
return (EFAULT);
+ if (p->p_textp) {
+ VOP_LOCK(p->p_textp->x_vptr);
+ error = VOP_ACCESS(p->p_textp->x_vptr, VREAD, u.u_cred);
+ VOP_UNLOCK(p->p_textp->x_vptr);
+ if (error)
+ return (EFAULT);
+ }
ndp->ni_segflg = UIO_SYSSPACE;
ndp->ni_dirp = "core";
if (error = vn_open(ndp, FCREAT|FWRITE, 0644))
vput(vp);
return (EFAULT);
}
+#ifdef MAPMEM
+ if (error = mmcore(p)) {
+ vput(vp);
+ return (error);
+ }
+#endif
VATTR_NULL(&vattr);
vattr.va_size = 0;
VOP_SETATTR(vp, &vattr, u.u_cred);
error = vn_rdwr(UIO_WRITE, vp, (caddr_t)&u, ctob(UPAGES), (off_t)0,
UIO_SYSSPACE, IO_NODELOCKED|IO_UNIT, ndp->ni_cred, (int *)0);
if (error == 0)
- error = vn_rdwr(UIO_WRITE, vp, u.u_daddr,
+ error = vn_rdwr(UIO_WRITE, vp,
+ (caddr_t)ctob(dptov(p, 0)),
(int)ctob(u.u_dsize), (off_t)ctob(UPAGES), UIO_USERSPACE,
IO_NODELOCKED|IO_UNIT, ndp->ni_cred, (int *)0);
if (error == 0)
error = vn_rdwr(UIO_WRITE, vp,
- trunc_page(USRSTACK - ctob(u.u_ssize)),
- round_page(ctob(u.u_ssize)),
+ (caddr_t)ctob(sptov(p, u.u_ssize - 1)),
+ (int)ctob(u.u_ssize),
(off_t)ctob(UPAGES) + ctob(u.u_dsize), UIO_USERSPACE,
IO_NODELOCKED|IO_UNIT, ndp->ni_cred, (int *)0);
vput(vp);