lock_test is trapping with a SIMD floating point error (trap 19) around
here:
40589d: f2 0f 51 c0 sqrtsd %xmm0,%xmm0
Maybe whatever exception that is thrown used to be masked, but isn't
anymore? Does the new XSAVE stuff treat MXCSR differently?
Or perhaps we were doing something wrong before, and the new FP code
exposes it?
To reproduce:
/ $ m px (for better debugging output)
/ $ lock_test -w7 -l10000 -tmcspdr -p10
HW TRAP frame (partial) at 0xffffffffc6944ad8 on core 5
rax 0x00000000001c835e
rbx 0x00007f7fffbfee00
rcx 0x00000000000002a1
rdx 0x0000000000000174
rbp 0x00007f7fffbfeda0
rsi 0x0000081db323551c
rdi 0x0000000000620620
r8 0x0000000000000000
r9 0x0000000000000000
r10 0x0000000000000000
r11 0x0000000000000200
r12 0x0000000000000064
r13 0x0000000000620620
r14 0x0000000000000008
r15 0x0000000000000064
trap 0x00000013 SIMD Floating-Point Exception
gsbs 0x0000000000000000
fsbs 0x0000000000000000
err 0x--------00000000
rip 0x000000000040589d
cs 0x------------0023
flag 0x0000000000010202
rsp 0x00007f7fffbfed10
ss 0x------------001b
err 0x0 (for PFs: User 4, Wr 2, Rd 1), aux 0x0000000000000000
Addr 0x000000000040589d is in lock_test at offset 0x000000000000589d
i tried making sure the mxcsr was the default value before the xsave64,
but that didn't do the trick.
incidentally, if you want to do an ldmxcsr on Qemu, you need
to:
lcr4(rcr4() | CR4_OSFXSR | CR4_OSXMME | CR4_OSXSAVE);
otherwise you get an Invalid Opcode. It doesn't seem to be
that way on hardware. Ah, bugs in qemu?
anyway, i hacked up the trap handler to print out a little more:
--- a/kern/arch/x86/trap.c
+++ b/kern/arch/x86/trap.c
@@ -389,7 +389,8 @@ static void trap_dispatch(struct hw_trapframe
*hw_tf) handled = __handle_page_fault(hw_tf, &aux);
break;
case T_FPERR:
+ case T_SIMDERR:
handled = try_handle_exception_fixup(hw_tf);
if (!handled)
handle_fperr(hw_tf);
break;
HW TRAP frame (partial) at 0xffff80013fd58f40 on core 7
rax 0x0000000000a45061
rbx 0x00007f7fffbfee10
rcx 0x0000000000001b25
rdx 0x00000000000000a9
rbp 0x00007f7fffbfedb0
rsi 0x0000004fc30822de
rdi 0x0000000000620390
r8 0x0000000000000000
r9 0x0000000000000000
r10 0x0000000000000000
r11 0x0000000000000200
r12 0x00000000000003e8
r13 0x0000000000620390
r14 0x0000000000000007
r15 0x00000000000003e8
trap 0x00000013 SIMD Floating-Point Exception
gsbs 0x0000000000000000
fsbs 0x0000000000000000
err 0x--------00000000
rip 0x000000000040589d
cs 0x------------0023
flag 0x0000000000010202
rsp 0x00007f7fffbfed20
ss 0x------------001b
Core 7: FP ERR, CW: 0x037f, SW: 0x0000, MXCSR 0x00000020
Core 7: The following faults are unmasked:
Killing the process.
That shit was made for floating point. SIMD errors might be different.
Any ideas?
Barret
--
You received this message because you are subscribed to the Google Groups
"Akaros" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
For more options, visit https://groups.google.com/d/optout.