/[base]
ViewVC logotype

Revision 344123


Jump to revision: Previous Next
Author: luporl
Date: Thu Feb 14 15:15:32 2019 UTC (5 years, 4 months ago)
Changed paths: 1
Log Message:
[PPC64] Fix mismatch between thread flags and MSR

When sigreturn() restored a thread's context, SRR1 was being restored
to its previous value, but pcb_flags was not being touched.

This could cause a mismatch between the thread's MSR and its pcb_flags.
For instance, when the thread used the FPU for the first time inside
the signal handler, sigreturn() would clear SRR1, but not pcb_flags.
Then, the thread would return with the FPU bit cleared in MSR and,
the next time it tried to use the FPU, it would fail on a KASSERT
that checked if the FPU was disabled.

This change clears the FPU bit in both pcb_flags and frame->srr1,
as the code that restores the context expects to use the FPU trap
to re-enable it.

PR:		234539
Reported by:	sbruno
Reviewed by:	jhibbits, sbruno
Differential Revision:	https://reviews.freebsd.org/D19166


Changed paths

Path Details
Directoryhead/sys/powerpc/powerpc/exec_machdep.c modified , text changed

  ViewVC Help
Powered by ViewVC 1.1.27