Dear bugs@,

for about two weeks I am having trouble running x11/alacritty on
my Apple MacBook Air M2 from 2022.
I suspect there is a missing BTI instruction in libmesas jit.

m2$ dmesg | grep ^OpenBSD
OpenBSD 7.7-current (GENERIC.MP) #11: Thu Jun 19 06:16:05 MDT 2025
m2$ pkg_info alacritty | head -1
Information for inst:alacritty-0.15.1
m2$ alacritty
Illegal instruction (core dumped)
m2$ lastcomm | head -2 
...
alacritty[36377]                      -DXB    mbuhl                            
ttyp5      1.12 secs Mon Jun 23 18:15 (0:00:01.11)


tb told me how to skip stripping libgallium so the stack trace is
more detailed.
Here are the last few instructions before the crash:

...

(gdb) p *fpme->current_variant->jit_func
$5 = {_Bool (struct draw_vs_jit_context *, const struct lp_jit_resources *, 
struct vertex_header *, const struct draw_vertex_buffer *, unsigned int, 
unsigned int, 
    unsigned int, struct pipe_vertex_buffer *, unsigned int, unsigned int, 
unsigned int, const unsigned int *, unsigned int, unsigned int)} 0xe452eb000
(gdb) p fpme->current_variant->jit_func
$6 = (draw_jit_vert_func) 0xe452eb000
(gdb) disassemble draw_jit_vert_func
Attempt to use a type name as an expression
(gdb) disassemble 0xe452eb000
No function contains specified address.
(gdb) x/200i 0xe452eb000
   0xe452eb000: stp     d15, d14, [sp, #-160]!
   0xe452eb004: sub     x9, sp, #0x80
   0xe452eb008: stp     d13, d12, [sp, #16]
   0xe452eb00c: stp     d11, d10, [sp, #32]
   0xe452eb010: stp     d9, d8, [sp, #48]
   0xe452eb014: stp     x29, x30, [sp, #64]
   0xe452eb018: add     x29, sp, #0x40
   0xe452eb01c: stp     x28, x27, [sp, #80]
   0xe452eb020: stp     x26, x25, [sp, #96]
   0xe452eb024: stp     x24, x23, [sp, #112]
   0xe452eb028: stp     x22, x21, [sp, #128]
   0xe452eb02c: stp     x20, x19, [sp, #144]
   0xe452eb030: and     sp, x9, #0xffffffffffffffe0
   0xe452eb034: ldr     w9, [x3, #56]
   0xe452eb038: ldr     w10, [x3, #72]
   0xe452eb03c: dup     v0.4s, w5
   0xe452eb040: stp     x0, x2, [sp, #80]
   0xe452eb044: ldr     w18, [x29, #96]
   0xe452eb048: movi    v1.2d, #0x0
   0xe452eb04c: subs    w12, w9, #0x3
   0xe452eb050: ldrsw   x9, [x7, #68]
   0xe452eb054: ldr     w0, [x29, #112]
   0xe452eb058: cset    w13, cc // cc = lo, ul, last
   0xe452eb05c: subs    w10, w10, #0x3
   0xe452eb060: ldrsw   x11, [x7, #52]
   0xe452eb064: cset    w14, cc // cc = lo, ul, last
   0xe452eb068: subs    w10, w10, w9
   0xe452eb06c: ldrsw   x2, [x7, #36]
   0xe452eb070: str     w10, [sp, #76]
   0xe452eb074: csinc   w10, w14, wzr, cs       // cs = hs, nlast
   0xe452eb078: cmn     w0, w18
   0xe452eb07c: csinc   w20, w10, wzr, cc       // cc = lo, ul, last
   0xe452eb080: subs    w10, w12, w11
   0xe452eb084: ldr     w15, [x3, #24]
   0xe452eb088: stp     w10, w4, [sp, #68]
   0xe452eb08c: ldr     w10, [x3, #40]
   0xe452eb090: csinc   w12, w13, wzr, cs       // cs = hs, nlast
   0xe452eb094: cmn     w0, w18
   0xe452eb098: ldrsw   x13, [x7, #20]
   0xe452eb09c: ldr     w17, [x3, #8]
   0xe452eb0a0: csinc   w12, w12, wzr, cc       // cc = lo, ul, last
   0xe452eb0a4: subs    w10, w10, #0xf
   0xe452eb0a8: ldr     x6, [x3]
   0xe452eb0ac: cset    w14, cc // cc = lo, ul, last
   0xe452eb0b0: subs    w10, w10, w2
   0xe452eb0b4: sub     w4, w4, #0x1
   0xe452eb0b8: csinc   w14, w14, wzr, cs       // cs = hs, nlast
   0xe452eb0bc: cmn     w0, w18
   0xe452eb0c0: str     w10, [sp, #64]
   0xe452eb0c4: csinc   w14, w14, wzr, cc       // cc = lo, ul, last
   0xe452eb0c8: subs    w15, w15, #0x7
   0xe452eb0cc: ldrsw   x10, [x7, #4]
   0xe452eb0d0: cset    w16, cc // cc = lo, ul, last
   0xe452eb0d4: subs    w15, w15, w13
   0xe452eb0d8: movi    v18.2d, #0xff000000ff
   0xe452eb0dc: csinc   w16, w16, wzr, cs       // cs = hs, nlast
   0xe452eb0e0: cmn     w0, w18
   0xe452eb0e4: add     x6, x6, x10
   0xe452eb0e8: csinc   w16, w16, wzr, cc       // cc = lo, ul, last
   0xe452eb0ec: subs    w17, w17, #0x3
   0xe452eb0f0: movi    v4.4s, #0x2
   0xe452eb0f4: cset    w5, cc  // cc = lo, ul, last
   0xe452eb0f8: subs    w17, w17, w10
   0xe452eb0fc: ldr     x10, [x3, #16]
   0xe452eb100: csinc   w5, w5, wzr, cs // cs = hs, nlast
--Type <RET> for more, q to quit, c to continue without paging--
   0xe452eb104: adds    w18, w0, w18
   0xe452eb108: ldr     x0, [x3, #32]
   0xe452eb10c: csinc   w5, w5, wzr, cc // cc = lo, ul, last
   0xe452eb110: add     x10, x10, x13
   0xe452eb114: ldr     x13, [x3, #48]
   0xe452eb118: add     x0, x0, x2
   0xe452eb11c: cmp     w5, #0x0
   0xe452eb120: add     x2, sp, #0x60
   0xe452eb124: csel    x6, x2, x6, ne  // ne = any
   0xe452eb128: cmp     w16, #0x0
   0xe452eb12c: fmov    v5.4s, #1.000000000000000000e+00
   0xe452eb130: csel    x7, x2, x10, ne // ne = any
   0xe452eb134: cmp     w14, #0x0
   0xe452eb138: ldr     x10, [x3, #64]
   0xe452eb13c: movi    v7.4s, #0x1
   0xe452eb140: movi    v20.2d, #0x0
   0xe452eb144: add     x11, x13, x11
   0xe452eb148: csel    x3, x2, x0, ne  // ne = any
   0xe452eb14c: cmp     w12, #0x0
   0xe452eb150: dup     v2.4s, w4
   0xe452eb154: str     w15, [sp, #60]
   0xe452eb158: mov     w15, w12
   0xe452eb15c: csel    x19, x2, x11, ne        // ne = any
   0xe452eb160: add     x9, x10, x9
   0xe452eb164: mov     w12, w20
   0xe452eb168: cmp     w20, #0x0
   0xe452eb16c: ldr     x20, [x29, #120]
   0xe452eb170: mov     w8, wzr
   0xe452eb174: csel    x21, x2, x9, ne // ne = any
   0xe452eb178: mov     w23, #0x437f0000                // #1132396544
   0xe452eb17c: mov     x24, #0x3f80000000000000        // #4575657221408423936
   0xe452eb180: str     q0, [sp, #32]
   0xe452eb184: b       0xe452eb3cc
   0xe452eb188: dup     v3.4s, v28.s[1]
   0xe452eb18c: fmul    v6.4s, v21.4s, v16.s[1]
   0xe452eb190: fadd    v16.4s, v19.4s, v28.4s
   0xe452eb194: fmul    v18.4s, v13.4s, v28.s[2]
   0xe452eb198: fmul    v19.4s, v14.4s, v28.s[3]
   0xe452eb19c: shl     v0.4s, v0.4s, #31

...

(gdb) s
557                                                     
&fpme->llvm->jit_resources[PIPE_SHADER_VERTEX],
(gdb) bt
#0  llvm_pipeline_generic (middle=0xe75ff16e0, fetch_info=0x669785e898, 
in_prim_info=0x669785e868)
    at 
/usr/xenocara/lib/mesa/mk/libgallium/../../src/gallium/auxiliary/draw/draw_pt_fetch_shade_pipeline_llvm.c:557
#1  0x0000000e24714748 [PAC] in llvm_middle_end_run (middle=0xe3e6ef018, 
fetch_elts=<optimized out>, fetch_count=<optimized out>, draw_elts=0xe54117530, 
draw_count=6, 
    prim_flags=6) at 
/usr/xenocara/lib/mesa/mk/libgallium/../../src/gallium/auxiliary/draw/draw_pt_fetch_shade_pipeline_llvm.c:780
#2  0x0000000e2472e430 [PAC] in vsplit_run_uint32 (frontend=0xe334ed000, 
start=0, count=<optimized out>)
    at 
/usr/xenocara/lib/mesa/mk/libgallium/../../src/gallium/auxiliary/draw/draw_pt_vsplit_tmp.h:173
#3  0x0000000e24712c00 [PAC] in draw_pt_arrays (draw=0xe54117000, 
prim=MESA_PRIM_TRIANGLES, index_bias_varies=<optimized out>, 
draw_info=0x669785eb6c, num_draws=1)
    at 
/usr/xenocara/lib/mesa/mk/libgallium/../../src/gallium/auxiliary/draw/draw_pt.c:161
#4  0x0000000e24712754 [PAC] in draw_instances (draw=0xe54117000, 
drawid_offset=0, info=0x669785eb78, draws=0x669785eb6c, num_draws=1)
    at 
/usr/xenocara/lib/mesa/mk/libgallium/../../src/gallium/auxiliary/draw/draw_pt.c:477
#5  0x0000000e24712664 [PAC] in draw_vbo (draw=0xe54117000, info=0x669785eb78, 
drawid_offset=0, indirect=<optimized out>, draws=<optimized out>, num_draws=1, 
    patch_vertices=<optimized out>) at 
/usr/xenocara/lib/mesa/mk/libgallium/../../src/gallium/auxiliary/draw/draw_pt.c:628
#6  0x0000000e24d6e94c [PAC] in llvmpipe_draw_vbo (pipe=0xd8e9b0000, 
info=0x669785eb78, drawid_offset=0, indirect=0x0, draws=0x669785eb6c, 
num_draws=1)
    at 
/usr/xenocara/lib/mesa/mk/libllvmpipe/../../src/gallium/drivers/llvmpipe/lp_draw_arrays.c:150
#7  0x0000000e241828d0 [PAC] in _mesa_validated_drawrangeelements 
(ctx=<optimized out>, index_bo=<optimized out>, mode=<optimized out>, 
    index_bounds_valid=<optimized out>, start=<optimized out>, end=4294967295, 
count=<optimized out>, type=<optimized out>, indices=<optimized out>, 
    basevertex=<optimized out>, numInstances=<optimized out>, 
baseInstance=<optimized out>) at 
/usr/xenocara/lib/mesa/mk/libmesa/../../src/mesa/main/draw.c:1705
#8  0x0000000e24182e64 [PAC] in 
_mesa_DrawElementsInstancedBaseVertexBaseInstance (mode=4, count=6, type=5125, 
indices=0x0, numInstances=4, basevertex=0, 
    baseInstance=0) at 
/usr/xenocara/lib/mesa/mk/libmesa/../../src/mesa/main/draw.c:1923
#9  0x0000000978a55b40 [PAC] in alacritty::display::Display::draw ()
#10 0x000000097897bac0 [PAC] in 
winit::event_loop::EventLoop<T>::run_app::{{closure}} ()
#11 0x00000009789a4d28 [PAC] in alacritty::alacritty ()
#12 0x00000009789a2c78 [PAC] in alacritty::main ()
#13 0x0000000978958c80 [PAC] in 
std::sys::backtrace::__rust_begin_short_backtrace ()
#14 0x00000009789c0ab4 [PAC] in std::rt::lang_start::{{closure}} ()
#15 0x0000000978ddc040 [PAC] in std::panicking::try::do_call ()
#16 0x0000000978ddc9dc [PAC] in __rust_try.llvm.383985035128269557 ()
#17 0x0000000978ddc150 in std::panicking::try::do_call ()
#18 0x0000000978ddc9dc [PAC] in __rust_try.llvm.383985035128269557 ()
#19 0x0000000978dd9120 in std::rt::lang_start_internal ()
#20 0x00000009789c0a88 [PAC] in std::rt::lang_start ()
#21 0x00000009789ad634 [PAC] in main ()
(gdb) s
566                                                     draw->start_instance,
(gdb) 
568                                                     draw->pt.user.drawid,
(gdb) 
569                                                     draw->pt.user.viewid);
(gdb) 
556           clipped = 
fpme->current_variant->jit_func(&fpme->llvm->vs_jit_context,
(gdb) s
0x0000000e452eb000 in ?? ()
(gdb) bt
#0  0x0000000e452eb000 in ?? ()
Backtrace stopped: previous frame identical to this frame (corrupt stack?)
(gdb) n
Cannot find bounds of current function
(gdb) si

Thread 1 received signal SIGILL, Illegal instruction.
0x0000000e452eb000 in ?? ()

I am not sure how to continue with this.

mbuhl

Reply via email to