sigcode no longer in pcb
SCCS-vsn: sys/hp300/hp300/machdep.c 7.12
*
* from: Utah $Hdr: machdep.c 1.51 89/11/28$
*
*
* from: Utah $Hdr: machdep.c 1.51 89/11/28$
*
- * @(#)machdep.c 7.11 (Berkeley) %G%
+ * @(#)machdep.c 7.12 (Berkeley) %G%
/*
* Clear registers on exec
*/
/*
* Clear registers on exec
*/
+setregs(p, entry, retval)
+ register struct proc *p;
u_long entry;
int retval[2];
{
u_long entry;
int retval[2];
{
- register struct proc *p = curproc;
p->p_regs[PC] = entry & ~1;
#ifdef FPCOPROC
/* restore a null state frame */
p->p_regs[PC] = entry & ~1;
#ifdef FPCOPROC
/* restore a null state frame */
- u.u_pcb.pcb_fpregs.fpf_null = 0;
- m68881_restore(&u.u_pcb.pcb_fpregs);
+ p->p_addr->u_pcb.pcb_fpregs.fpf_null = 0;
+ m68881_restore(&p->p_addr->u_pcb.pcb_fpregs);
#endif
#ifdef HPUXCOMPAT
if (p->p_flag & SHPUX) {
#endif
#ifdef HPUXCOMPAT
if (p->p_flag & SHPUX) {
if ((p->p_pptr->p_flag & SHPUX) &&
(p->p_flag & STRC)) {
tweaksigcode(1);
if ((p->p_pptr->p_flag & SHPUX) &&
(p->p_flag & STRC)) {
tweaksigcode(1);
- u.u_pcb.pcb_flags |= PCB_HPUXTRACE;
- } else if (u.u_pcb.pcb_flags & PCB_HPUXTRACE) {
+ p->p_addr->u_pcb.pcb_flags |= PCB_HPUXTRACE;
+ } else if (p->p_addr->u_pcb.pcb_flags & PCB_HPUXTRACE) {
- u.u_pcb.pcb_flags &= ~PCB_HPUXTRACE;
+ p->p_addr->u_pcb.pcb_flags &= ~PCB_HPUXTRACE;
tweaksigcode(ishpux)
{
static short *sigtrap = NULL;
tweaksigcode(ishpux)
{
static short *sigtrap = NULL;
+ extern short sigcode[], esigcode[];
/* locate trap instruction in pcb_sigc */
if (sigtrap == NULL) {
/* locate trap instruction in pcb_sigc */
if (sigtrap == NULL) {
- register struct pcb *pcp = &u.u_pcb;
-
- sigtrap = &pcp->pcb_sigc[sizeof(pcp->pcb_sigc)/sizeof(short)];
- while (--sigtrap >= pcp->pcb_sigc)
+ sigtrap = esigcode;
+ while (--sigtrap >= sigcode)
if ((*sigtrap & 0xFFF0) == 0x4E40)
break;
if ((*sigtrap & 0xFFF0) == 0x4E40)
break;
- if (sigtrap < pcp->pcb_sigc)
panic("bogus sigcode\n");
}
*sigtrap = ishpux ? 0x4E42 : 0x4E41;
panic("bogus sigcode\n");
}
*sigtrap = ishpux ? 0x4E42 : 0x4E41;
register struct sigacts *ps = p->p_sigacts;
register short ft;
int oonstack, fsize;
register struct sigacts *ps = p->p_sigacts;
register short ft;
int oonstack, fsize;
+ extern char sigcode[], esigcode[];
frame = (struct frame *)p->p_regs;
ft = frame->f_format;
frame = (struct frame *)p->p_regs;
ft = frame->f_format;
/*
* Signal trampoline code is at base of user stack.
*/
/*
* Signal trampoline code is at base of user stack.
*/
- frame->f_pc = USRSTACK - sizeof(u.u_pcb.pcb_sigc);
+ frame->f_pc = USRSTACK - (esigcode - sigcode);
#ifdef DEBUG
if ((sigdebug & SDB_KSTACK) && p->p_pid == sigpid)
printf("sendsig(%d): sig %d returns\n",
#ifdef DEBUG
if ((sigdebug & SDB_KSTACK) && p->p_pid == sigpid)
printf("sendsig(%d): sig %d returns\n",
{
/* take a snap shot before clobbering any registers */
if (curproc)
{
/* take a snap shot before clobbering any registers */
if (curproc)
- resume((u_int)pcbb(curproc));
+ savectx(curproc->p_addr, 0);
boothowto = howto;
if ((howto&RB_NOSYNC) == 0 && waittime < 0 && bfreelist[0].b_forw) {
boothowto = howto;
if ((howto&RB_NOSYNC) == 0 && waittime < 0 && bfreelist[0].b_forw) {
-#define KSADDR ((int *)&(((char *)&u)[(UPAGES-1)*NBPG]))
+extern char kstack[];
+#define KSADDR ((int *)&(kstack[(UPAGES-1)*NBPG]))
- register int *ptr;
- int sz;
+ register int *ptr;
+ int sz;
{
register int i, val;
extern char *hexstr();
{
register int i, val;
extern char *hexstr();
if ((val = fuword(ptr++)) == -1)
break;
} else {
if ((val = fuword(ptr++)) == -1)
break;
} else {
- if (ustack == 0 && (ptr < KSADDR || ptr > KSADDR+(NBPG/4-1)))
+ if (ustack == 0 &&
+ (ptr < KSADDR || ptr > KSADDR+(NBPG/4-1)))