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