- itrunc(ip, (u_long)0);
- u.u_acflag |= ACORE;
- u.u_error = rdwri(UIO_WRITE, ip,
- (caddr_t)&u,
- ctob(UPAGES),
- 0, 1, (int *)0);
- if (u.u_error == 0)
- u.u_error = rdwri(UIO_WRITE, ip,
- (caddr_t)ctob(dptov(u.u_procp, 0)),
- ctob(u.u_dsize),
- ctob(UPAGES), 0, (int *)0);
- if (u.u_error == 0)
- u.u_error = rdwri(UIO_WRITE, ip,
- (caddr_t)ctob(sptov(u.u_procp, u.u_ssize - 1)),
- ctob(u.u_ssize),
- ctob(UPAGES)+ctob(u.u_dsize), 0, (int *)0);
+ VATTR_NULL(&vattr);
+ vattr.va_size = 0;
+ VOP_SETATTR(vp, &vattr, cred, p);
+ p->p_acflag |= ACORE;
+ bcopy(p, &p->p_addr->u_kproc.kp_proc, sizeof(struct proc));
+ fill_eproc(p, &p->p_addr->u_kproc.kp_eproc);
+#ifdef HPUXCOMPAT
+ /*
+ * BLETCH! If we loaded from an HPUX format binary file
+ * we have to dump an HPUX style user struct so that the
+ * HPUX debuggers can grok it.
+ */
+ if (p->p_addr->u_pcb.pcb_flags & PCB_HPUXBIN)
+ error = hpuxdumpu(vp, cred);
+ else
+#endif
+ error = vn_rdwr(UIO_WRITE, vp, (caddr_t) p->p_addr, ctob(UPAGES),
+ (off_t)0, UIO_SYSSPACE, IO_NODELOCKED|IO_UNIT, cred, (int *) NULL,
+ p);
+ if (error == 0)
+ error = vn_rdwr(UIO_WRITE, vp, vm->vm_daddr,
+ (int)ctob(vm->vm_dsize), (off_t)ctob(UPAGES), UIO_USERSPACE,
+ IO_NODELOCKED|IO_UNIT, cred, (int *) NULL, p);
+ if (error == 0)
+ error = vn_rdwr(UIO_WRITE, vp,
+ (caddr_t) trunc_page(USRSTACK - ctob(vm->vm_ssize)),
+ round_page(ctob(vm->vm_ssize)),
+ (off_t)ctob(UPAGES) + ctob(vm->vm_dsize), UIO_USERSPACE,
+ IO_NODELOCKED|IO_UNIT, cred, (int *) NULL, p);