sysrfork() does *not* do a procsave before forking.  thus the
floating point registers in the new process are just going to
be a copy of whatever was last saved, and perhaps nothing.

on my atom system (but not some others), this attached
program does fault.  i wrote a bit of it in assembler to control
what was in F0.  the c compiler wasn't keeping things in a
register.

have i missed something or do we need a procsave() in fork?

- erik

---
sed 's/.//' >fp.c <<'//GO.SYSIN DD fp.c'
-#include <u.h>
-#include <libc.h>
-
-char *theformat = "%g\n";
-
-void
-main(void)
-{
-       extern void dofp(void);
-
-       dofp();
-}
//GO.SYSIN DD fp.c
echo myfp.s
sed 's/.//' >myfp.s <<'//GO.SYSIN DD myfp.s'
-TEXT   dofp(SB), $0
-       SUBL            $12, SP
-       FLD1
-       CALL            fork(SB)
-
-       MOVL            $2000, AX
-       MOVL            AX, 0x0(SP)
-       CALL            sleep(SB)
-
-       MOVL            theformat(SB), AX
-       MOVL            AX, 0x0(SP)
-       FMOVDP  F0,0x4(SP)
-       CALL            print(SB)
-       ADDL            $12, SP
-       RET
//GO.SYSIN DD myfp.s

Reply via email to