parlib: Fix aggressively-saved FP state for signals
authorBarret Rhoden <brho@cs.berkeley.edu>
Fri, 15 Jun 2018 18:59:07 +0000 (14:59 -0400)
committerBarret Rhoden <brho@cs.berkeley.edu>
Fri, 15 Jun 2018 19:15:00 +0000 (15:15 -0400)
commitf3f00eeae350db3a7b9256a985bca677e4c502a8
treefa4cc0159017a5205c9f93e523f0255390c9b223
parentcffe4e593251391a5cd422c74520fdf955164fab
parlib: Fix aggressively-saved FP state for signals

In commit 5562ccb05015 ("parlib: Aggressively save and restore the FPU"),
we did not fix up the signal handling code.

The old __prep_sighandler() code was assuming that if a uthread didn't have
its GP register state saved, then it had FP state in the hardware and the
FPSAVED was not set.  This would be for e.g. HW contexts that got
interrupted.

With the change to aggressively save the FPU, that was not true: it was
saved and the bit was set.  Your GP state could be not saved, but your FP
state would be.

That would lead to other sorts of confusion, since the FPSAVED flag was on
for the signal handler.  That was causing an assertion when we tried to
run_current_uthread, which was a SW ctx (the signal handler).

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
user/parlib/signal.c