-
-/*
- * Clear registers on exec
- */
-setregs()
-{
- register int (**rp)();
- register int i, sigmask;
- register struct proc *p = u.u_procp;
-
- rp = &u.u_signal[1];
- for (sigmask = 1; rp < &u.u_signal[NSIG]; sigmask <<= 1, rp++)
- /* disallow masked signals to carry over? */
- if (p->p_sigcatch & sigmask && (p->p_sigmask & sigmask) == 0) {
- (void) spl6();
- p->p_sigcatch &= ~sigmask;
- *rp = SIG_DFL;
- (void) spl0();
- }
-#ifdef vax
-/*
- for (rp = &u.u_ar0[0]; rp < &u.u_ar0[16];)
- *rp++ = 0;
-*/
- u.u_ar0[PC] = u.u_exdata.ux_entloc+2;
-#endif
-#ifdef sun
- { register struct regs *r = (struct regs *)u.u_ar0;
- for (i = 0; i < 8; i++) {
- r->r_dreg[i] = 0;
- if (&r->r_areg[i] != &r->r_sp)
- r->r_areg[i] = 0;
- }
- r->r_sr = PSL_USERSET;
- r->r_pc = u.u_exdata.ux_entloc;
- }
-#endif
- for (i=0; i<NOFILE; i++) {
- if (u.u_pofile[i]&UF_EXCLOSE) {
- closef(u.u_ofile[i], u.u_pofile[i]);
- u.u_ofile[i] = NULL;
- u.u_pofile[i] = 0;
- }
- u.u_pofile[i] &= ~UF_MAPPED;
- }
-
- /*
- * Remember file name for accounting.
- */
- u.u_acflag &= ~AFORK;
- bcopy((caddr_t)u.u_dent.d_name, (caddr_t)u.u_comm,
- (unsigned)(u.u_dent.d_namlen + 1));
-#ifdef sun
- u.u_eosys = REALLYRETURN;
-#endif
-}