On Fri, Apr 19, 2024 at 12:04:54AM +0000, James Cook wrote: > On Sun, Feb 18, 2024 at 08:35:26AM -0800, Evan Silberman wrote: > > Stuart Henderson <s...@spacehopper.org> wrote: > > > On 2024/02/18 09:02, Stuart Henderson wrote: > > > > On 2024/02/17 22:08, Greg Steuck wrote: > > > > > Oh wow, this is becoming eerily similar to the failures aja@ is > > > > > getting. Do > > > > > dig more into this! > > > > > > > > Antoine, can you send a dmesg from one of the exopi VMs, please? > > > > > > - specifically I am wondering if it could be someething to do with AVX, > > > with AVX512 being the most likely to cause problems - Evan's machine > > > does have this - my intel 11th gen doesn't because it has a mix of > > > P+E cores, E cores don't implement it, so they disable it on the P > > > cores too. > > > > > > ghc *does* have some code relating to AVX512. > > > > Breakthrough, ignore the previous reproducer and any association with > > template haskell. I can get a crash in GHCI very simply: > > > > ~ $ ghci > > GHCi, version 9.6.4: https://www.haskell.org/ghc/ :? for help > > ghci> import qualified Data.Text as T > > ghci> T.take 1 $ T.pack "aa" > > "Illegal instruction (core dumped) > > I'm seeing this on my OpenBSD 7.5 machine with an old AMD cpu (dmesg > follows signature). I have ghc-9.6.4p2 (which I think is after the > fix on this thread). Also pandoc doesn't work. > > $ pkg_info -I ghc pandoc > ghc-9.6.4p2 compiler for the functional language Haskell > pandoc-3.1.12.2 convert between markup and document formats > $ echo | pandoc -o tmp/test.html > Illegal instruction (core dumped) > $ ghci > GHCi, version 9.6.4: https://www.haskell.org/ghc/ :? for help > ghci> import qualified Data.Text as T > ghci> T.take 1 $ T.pack "aa" > "Illegal instruction (core dumped) > $ > > I also saw ghc die with a SIGILL when I tried to build pandoc from > ports (checked out from cvs with -rOPENBSD_7_5). It happened when > cabal was trying to build unicode-collation-0.1.3.6.
Here are some results of debugging with lldb. With cabal-bundler and pandoc, it seems to be the xgetbv instruction itself: $ lldb /usr/local/bin/cabal-bundler (lldb) target create "/usr/local/bin/cabal-bundler" Current executable set to '/usr/local/bin/cabal-bundler' (x86_64). (lldb) run Process 90738 launched: '/usr/local/bin/cabal-bundler' (x86_64) Process 90738 stopped * thread #1, stop reason = signal SIGILL frame #0: 0x00000000004c12ba cabal-bundler`___lldb_unnamed_symbol522 + 90 cabal-bundler`___lldb_unnamed_symbol522: -> 0x4c12ba <+90>: xgetbv 0x4c12bd <+93>: notl %eax 0x4c12bf <+95>: testb $-0x20, %al 0x4c12c1 <+97>: leaq 0x58(%rip), %rcx ; ___lldb_unnamed_symbol523 $ lldb pandoc /dev/null (lldb) target create "pandoc" Current executable set to '/usr/local/bin/pandoc' (x86_64). (lldb) settings set -- target.run-args "/dev/null" (lldb) run Process 25189 launched: '/usr/local/bin/pandoc' (x86_64) [WARNING] Could not deduce format from file extension Defaulting to markdown Process 25189 stopped * thread #1, stop reason = signal SIGILL frame #0: 0x00000000057697fa pandoc`___lldb_unnamed_symbol1367 + 90 pandoc`___lldb_unnamed_symbol1367: -> 0x57697fa <+90>: xgetbv 0x57697fd <+93>: notl %eax 0x57697ff <+95>: testb $-0x20, %al 0x5769801 <+97>: leaq 0x58(%rip), %rcx ; ___lldb_unnamed_symbol1368 (lldb) I tried doing the same for Evan's ghci example, but lldb did not automatically print assembly output as it did for pandoc. I don't really know how to use lldb. I tried the "di" command but I don't know if it's doing the right thing: $ lldb /usr/local/lib/ghc-9.6.4/bin/ghc-9.6.4 -- --interactive (lldb) target create "/usr/local/lib/ghc-9.6.4/bin/ghc-9.6.4" Current executable set to '/usr/local/lib/ghc-9.6.4/bin/ghc-9.6.4' (x86_64). (lldb) settings set -- target.run-args "--interactive" (lldb) run Process 14800 launched: '/usr/local/lib/ghc-9.6.4/bin/ghc-9.6.4' (x86_64) GHCi, version 9.6.4: https://www.haskell.org/ghc/ :? for help ghci> import qualified Data.Text as T ghci> T.take 1 $ T.pack "aa" "Process 14800 stopped * thread #1, stop reason = signal SIGILL frame #0: 0x00000002d2a1242b libc.so.99.0`_thread_sys_futex at -:2 warning: This version of LLDB has no plugin for the language "assembler". Inspection of frame variables will be limited. (lldb) di libc.so.99.0`_thread_sys_futex: 0x2d2a12410 <+0>: endbr64 0x2d2a12414 <+4>: movq 0x849ad(%rip), %r11 ; __retguard__thread_sys_futex 0x2d2a1241b <+11>: xorq (%rsp), %r11 0x2d2a1241f <+15>: pushq %r11 0x2d2a12421 <+17>: movl $0x53, %eax 0x2d2a12426 <+22>: movq %rcx, %r10 0x2d2a12429 <+25>: syscall -> 0x2d2a1242b <+27>: jae 0x2d2a1243c ; <+44> 0x2d2a1242d <+29>: movl %eax, %fs:0x20 0x2d2a12435 <+37>: movq $-0x1, %rax 0x2d2a1243c <+44>: popq %r11 0x2d2a1243e <+46>: xorq (%rsp), %r11 0x2d2a12442 <+50>: cmpq 0x8497f(%rip), %r11 ; __retguard__thread_sys_futex 0x2d2a12449 <+57>: je 0x2d2a1245c ; <+76> 0x2d2a1244b <+59>: int3 0x2d2a1244c <+60>: int3 0x2d2a1244d <+61>: int3 0x2d2a1244e <+62>: int3 0x2d2a1244f <+63>: int3 0x2d2a12450 <+64>: int3 0x2d2a12451 <+65>: int3 0x2d2a12452 <+66>: int3 0x2d2a12453 <+67>: int3 0x2d2a12454 <+68>: int3 0x2d2a12455 <+69>: int3 0x2d2a12456 <+70>: int3 0x2d2a12457 <+71>: int3 0x2d2a12458 <+72>: int3 0x2d2a12459 <+73>: int3 0x2d2a1245a <+74>: int3 0x2d2a1245b <+75>: int3 0x2d2a1245c <+76>: retq Similar result when I tried examining the core file under /usr/ports/pobj/pandoc-3.1.12.2/unicode-collation-0.1.3.6: $ doas -u _pbuild lldb -c ghc-9.6.4.core /usr/local/lib/ghc-9.6.4/bin/ghc-9.6.4 (lldb) target create "/usr/local/lib/ghc-9.6.4/bin/ghc-9.6.4" --core "ghc-9.6.4.core" Core file '/usr/ports/pobj/pandoc-3.1.12.2/unicode-collation-0.1.3.6/ghc-9.6.4.core' (x86_64) was loaded. warning: This version of LLDB has no plugin for the language "assembler". Inspection of frame variables will be limited. Could not load history file .(lldb) di libc.so.99.0`_thread_sys_futex: 0x2ac52e410 <+0>: endbr64 0x2ac52e414 <+4>: movq 0x849ad(%rip), %r11 ; __retguard__thread_sys_futex 0x2ac52e41b <+11>: xorq (%rsp), %r11 0x2ac52e41f <+15>: pushq %r11 0x2ac52e421 <+17>: movl $0x53, %eax 0x2ac52e426 <+22>: movq %rcx, %r10 0x2ac52e429 <+25>: syscall -> 0x2ac52e42b <+27>: jae 0x5b43c ; <+44> 0x2ac52e42d <+29>: movl %eax, %fs:0x20 0x2ac52e435 <+37>: movq $-0x1, %rax 0x2ac52e43c <+44>: popq %r11 0x2ac52e43e <+46>: xorq (%rsp), %r11 0x2ac52e442 <+50>: cmpq 0x8497f(%rip), %r11 ; __retguard__thread_sys_futex 0x2ac52e449 <+57>: je 0x5b45c ; <+76> 0x2ac52e44b <+59>: int3 0x2ac52e44c <+60>: int3 0x2ac52e44d <+61>: int3 0x2ac52e44e <+62>: int3 0x2ac52e44f <+63>: int3 0x2ac52e450 <+64>: int3 0x2ac52e451 <+65>: int3 0x2ac52e452 <+66>: int3 0x2ac52e453 <+67>: int3 0x2ac52e454 <+68>: int3 0x2ac52e455 <+69>: int3 0x2ac52e456 <+70>: int3 0x2ac52e457 <+71>: int3 0x2ac52e458 <+72>: int3 0x2ac52e459 <+73>: int3 0x2ac52e45a <+74>: int3 0x2ac52e45b <+75>: int3 0x2ac52e45c <+76>: retq (lldb) -- James