STATUS: 70%

0000 T _signal		compatible
    0052 T _psignal		compatible
    00b6 T _issig		compatible
    0186 T _stop		compatible
    0216 T _psig		compatible
    02d4 T _fsig		compatible
    031e T _core		not compatible
    0512 T _grow		not compatible
    0640 T _ptrace		not compatible
    075c T _procxmt		compatible
This commit is contained in:
Oliver Lehmann 2008-06-04 18:21:46 +00:00
parent 6f3c512902
commit c2f94af6b9
1 changed files with 19 additions and 15 deletions

View File

@ -121,7 +121,7 @@ issig()
freeproc(q, 0) ; freeproc(q, 0) ;
} }
} else } else
if (u.u_signal[SIGCLD-1]) /* this is not compatible - r3 gets checked, not rr2 which is what u.u_signal is in */ if ((int)u.u_signal[SIGCLD-1])
return(n) ; return(n) ;
} else } else
if((u.u_signal[n-1]&1) == 0 || (p->p_flag&STRC)) if((u.u_signal[n-1]&1) == 0 || (p->p_flag&STRC))
@ -226,6 +226,7 @@ struct proc *p;
* user.h area followed by the entire * user.h area followed by the entire
* data+stack segments. * data+stack segments.
*/ */
int
core() core()
{ {
register struct inode *ip; register struct inode *ip;
@ -272,13 +273,13 @@ core()
} }
u.u_base.left = ctob(u.u_stakseg); u.u_base.left = ctob(u.u_stakseg);
u.u_base.right = ctob(u.u_segmts[NUSEGS-1].sg_limit); u.u_base.right = ctob(u.u_segmts[NUSEGS-1].sg_limit);
u.u_count = ctob(-u.u_segmts[NUSEGS-1].sg_limit+0x100); u.u_count = ctob(CPAS - u.u_segmts[NUSEGS-1].sg_limit);
writei(ip); writei(ip);
} }
} else } else
u.u_error = EACCES; u.u_error = EACCES;
iput(ip); iput(ip);
return(u.u_error==0); return(u.u_error==0); /* FIXME: this is not compatible extsb r2 is missing here... */
} }
/* /*
@ -287,37 +288,40 @@ core()
*/ */
grow(sp) grow(sp)
int sp; unsigned sp;
{ {
register j, si, i; register j, si, i;
register struct proc *p; register struct proc *p;
register a; register a;
/* somehow goto out should do the job but then everything gets /* FIXME: somehow goto out should do the job but then everything gets
ordered different in the ASM listing ordered different in the ASM listing
this needs more work... this needs more work...
*/ */
if((unsigned)sp >= ctob(-(u.u_ssize-1)+0x100)) if(sp >= ctob(CPAS - (u.u_ssize-1)))
return(0); return(0);
for(j=6;;) { for(j=6;;) {
if(!j--) --j;
if(!j)
return(0); return(0);
si=(-lbtoc((long)sp)+0x100)-u.u_ssize+sp; si=(CPAS - btoc(sp))-u.u_ssize+j;
if(si <= 0) if(si <= 0)
continue; continue;
if(!u.u_segmented) { if(!u.u_segmented) {
if((u.u_ssize + USIZE + i + u.u_dsize) >= 0x100) if((u.u_ssize + USIZE + si + u.u_dsize) >= CPAS)
continue; continue;
/* if(!estabur(u.u_tsize,u.u_dsize,u.u_ssize+i,1)) /* if(estabur(u.u_tsize,u.u_dsize,u.u_ssize+i,1))
goto out; goto out;
*/ estabur(u.u_tsize,u.u_dsize,u.u_ssize+i,1); */ estabur(u.u_tsize,u.u_dsize,u.u_ssize+si,1);
} else { } else {
if(u.u_ssize + i > 0x100) if(u.u_ssize + si > CPAS) {
continue; continue;
u.u_segmts[NUSEGS-1].sg_limit = -u.u_ssize+0x100; } else {
/* goto out;*/ u.u_segmts[NUSEGS-1].sg_limit = (CPAS - (u.u_ssize+si));
/* goto out;*/
}
} }
} }
out: out:
@ -364,7 +368,7 @@ ptrace()
sleep((caddr_t)&ipc, IPCPRI); sleep((caddr_t)&ipc, IPCPRI);
ipc.ip_lock = p->p_pid; ipc.ip_lock = p->p_pid;
ipc.ip_data = uap->data; ipc.ip_data = uap->data;
ipc.ip_addr.l = uap->addr.left&0x7f00; ipc.ip_addr.l = uap->addr.left&0x7f00; /* FIXME: not compatible */
ipc.ip_req = uap->req; ipc.ip_req = uap->req;
p->p_flag &= ~SWTED; p->p_flag &= ~SWTED;
setrun(p); setrun(p);