9pc64: handle special case in fpurestore() for procexec()/procsetup()

when a process does an exec, it calls procsetup() which
unconditionally sets the sets the TS flag and fpstate=FPinit
and fpurestore() should not revert the fpstate.
This commit is contained in:
cinap_lenrek 2017-11-16 23:15:08 +01:00
parent 859d5c9146
commit 435a9a150e

View file

@ -721,16 +721,14 @@ void
fpurestore(int ostate)
{
int astate = up->fpstate;
if((astate & ~(FPnouser|FPkernel|FPindexm)) == FPactive)
_stts();
if((astate & FPindexm) == (ostate & FPindexm)){
if((ostate & ~(FPnouser|FPkernel|FPindexm)) == FPactive){
if((astate & ~(FPpush|FPnouser|FPkernel|FPindexm)) != FPactive)
goto saved;
if(astate == (FPpush | (ostate & ~FPillegal))){
if((ostate & ~(FPnouser|FPkernel|FPindexm)) == FPactive)
_clts();
}
} else {
saved:
if(astate == FPinit) /* don't restore on procexec()/procsetup() */
return;
if((astate & ~(FPnouser|FPkernel|FPindexm)) == FPactive)
_stts();
up->fpsave = up->fpslot[ostate>>FPindexs];
ostate = FPinactive | (ostate & (FPillegal|FPpush|FPnouser|FPkernel|FPindexm));
}