From: Helge Deller <del...@gmx.de> The hardware stores the instruction code in the lower bits of the FP exception register #1 on FP assist traps. This fixes the FP exception handler on Linux, as the Linux kernel uses the value to decide on the correct signal which should be pushed into userspace (see decode_fpu() in Linux kernel).
Signed-off-by: Helge Deller <del...@gmx.de> (cherry picked from commit 923976dfe367b0bfed45ff660c369f3fe65604a7) Signed-off-by: Michael Tokarev <m...@tls.msk.ru> diff --git a/target/hppa/int_helper.c b/target/hppa/int_helper.c index 58695def82..d87e5a5a34 100644 --- a/target/hppa/int_helper.c +++ b/target/hppa/int_helper.c @@ -175,6 +175,10 @@ void hppa_cpu_do_interrupt(CPUState *cs) } } env->cr[CR_IIR] = ldl_phys(cs->as, paddr); + if (i == EXCP_ASSIST) { + /* stuff insn code into bits of FP exception register #1 */ + env->fr[0] |= (env->cr[CR_IIR] & 0x03ffffff); + } } break; -- 2.39.5