more work, no changes

This commit is contained in:
Oliver Lehmann 2008-05-23 18:12:23 +00:00
parent f5db72bcb1
commit 3b9a936bd2
1 changed files with 38 additions and 18 deletions

View File

@ -262,17 +262,16 @@ core()
writei(ip); writei(ip);
} else { } else {
for(s=0;s<u.u_nsegs;s++) { for(s=0;s<u.u_nsegs;s++) {
if(!(u.u_segno[s]&0x80)) { if((u.u_segno[s]&0x80))
u.u_base.left = ctob(u.u_segno[s] & 0x7f); continue;
u.u_base.left = ctob(u.u_segno[s] & STAK);
u.u_base.right = 0; u.u_base.right = 0;
u.u_count = ctob((u.u_segmts[s].sg_limit)+1); u.u_count = ctob((u.u_segmts[s].sg_limit)+1);
writei(ip); writei(ip);
}
} }
u.u_base.left = ctob(u.u_stakseg); u.u_base.left = ctob(u.u_stakseg);
u.u_base.right = ctob(u.u_segmts[127].sg_limit); u.u_base.right = ctob(u.u_segmts[NUSEGS-1].sg_limit);
u.u_count = ctob(-u.u_segmts[127].sg_limit+0x100); u.u_count = ctob(-u.u_segmts[NUSEGS-1].sg_limit+0x100);
writei(ip); writei(ip);
} }
} else } else
@ -287,22 +286,42 @@ core()
*/ */
grow(sp) grow(sp)
unsigned sp; int sp;
{ {
register si, i; register j, si, i;
register struct proc *p; register struct proc *p;
register a; register a;
if(sp >= UBASE-ctob(u.u_ssize)) /* somehow goto out should do the job but then everything gets
ordered different in the ASM listing
this needs more work...
*/
if(sp >= ctob(-(u.u_ssize-1)+0x100))
return(0); return(0);
si = (UBASE-sp)/64 - u.u_ssize + SINCR;
for(j=6;;) {
if(!j--)
return(0);
si=(-lbtoc((long)sp)+0x100)-u.u_ssize+sp;
if(si <= 0) if(si <= 0)
return(0); continue;
if(estabur(u.u_tsize, u.u_dsize, u.u_ssize+si, u.u_sep, RO)) if(!u.u_segmented) {
return(0); if((u.u_ssize + USIZE + i + u.u_dsize) >= 0x100)
continue;
/* if(!estabur(u.u_tsize,u.u_dsize,u.u_ssize+i,1))
goto out;
*/ estabur(u.u_tsize,u.u_dsize,u.u_ssize+i,1);
} else {
if(u.u_ssize + i > 0x100)
continue;
u.u_segmts[NUSEGS-1].sg_limit = -u.u_ssize+0x100;
/* goto out;*/
}
}
out:
p = u.u_procp; p = u.u_procp;
expand(p->p_size+si); expand(p->p_size+si);
a = p->p_addr + p->p_size;
for(i=u.u_ssize; i; i--) { for(i=u.u_ssize; i; i--) {
a--; a--;
copyseg(a-si, a); copyseg(a-si, a);
@ -312,6 +331,7 @@ unsigned sp;
u.u_ssize += si; u.u_ssize += si;
return(1); return(1);
} }
/* /*
* sys-trace system call. * sys-trace system call.
*/ */