Crashes GTK4 applications with a segfault on Intel G33 graphics (Intel 82G33/G31 Express)
Hi there, I came from GNOME Shell's bug tracker and I'm unsure if this has already been reported and/or fixed (I tried looking around, but I don't really have the expertise to tell similar problems apart), so here goes just in case this problem had not been reported before with this hardware combination.
On Fedora 35 with GNOME 41 and Mesa 21.3.6 (but it's been happening for maybe a year now, so it affects various previous versions), any GTK4 application will imediately crash on startup when launched on my Dell Inspiron 530n desktop computer equipped with an onboard Intel "G33" graphics card (according to GNOME Control Center; lspci
says it's an Intel 82G33/G31 Express Integrated Graphics
chip), which I think means an Intel GMA 3100 here. The CPU is a Core2 Quad Q9300.
This machine used to run everything fine for many years so far.
Here's a backtrace from the segfault that occurs when you try to run gtk4-demo on that machine. I tried installing as many of the relevant debuginfo packages as possible, though couldn't get all of them because I didn't have nearly enough disk space on /
for this.
Please let me know if you need more information and how I can provide it.
$ gdb gtk4-demo
Reading symbols from gtk4-demo...
Reading symbols from /usr/lib/debug/usr/bin/gtk4-demo-4.4.1-1.fc35.x86_64.debug...
(gdb) set pagination 0
(gdb) run
Starting program: /usr/bin/gtk4-demo
Thread 1 "gtk4-demo" received signal SIGSEGV, Segmentation fault.
0x00007fffd5767217 in run_vp (ctx=0x7fffd4299010, stage=<optimized out>) at ../src/mesa/tnl/t_vb_program.c:365
365 COPY_CLEAN_4V(machine->VertAttribs[attr], size, data);
(gdb) bt full
#0 0x00007fffd5767217 in run_vp (ctx=0x7fffd4299010, stage=<optimized out>) at ../src/mesa/tnl/t_vb_program.c:365
ptr = 0x0
size = 4
stride = 16
data = 0x0
attr = 17
tnl = <optimized out>
store = 0x55555647a3a0
VB = <optimized out>
program = 0x555556d63de0
machine = 0x55555647afe0
outputs = {0, 32, 0, 0, 4294955024, 32767, 756350552, 0, 4294955160, 32767, 4145747597, 32767, 1447656544, 21845, 4294954944, 32767, 4294954960, 32767, 4160558481, 32767, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 1447655616, 21845, 1447655616, 21845, 0, 0, 1447655616, 21845, 1447656544, 21845, 0, 0, 4294955680, 32767, 4145850402, 32767, 0, 0, 4294967295, 0, 0, 0, 3558896752, 32767, 1447655616, 21845, 2, 0, 191, 0, 3559618328, 32767, 3559493648, 32767}
numOutputs = 2
i = 0
j = <optimized out>
#1 0x00007fffd575e4ee in _tnl_run_pipeline (ctx=ctx@entry=0x7fffd4299010) at ../src/mesa/tnl/t_pipeline.c:241
s = 0x555556312568
tnl = 0x555556312280
__tmp = <optimized out>
i = 7
#2 0x00007fffd56aec9c in intelRunPipeline (ctx=0x7fffd4299010) at ../src/mesa/drivers/dri/i915/intel_tris.c:1087
intel = 0x7fffd4299010
#3 0x00007fffd575d348 in _tnl_draw_prims (ctx=0x7fffd4299010, arrays=0x555556313bb0, prim=0x7fffffffd2e0, nr_prims=1, ib=0x0, index_bounds_valid=<optimized out>, min_index=<optimized out>, max_index=<optimized out>, num_instances=1, base_instance=0) at ../src/mesa/tnl/t_draw.c:528
this_nr_prims = <optimized out>
bo = {0x5555564a1890, 0x7ffff6f34878 <_dl_catch_exception+136>, 0x7fffffffd270, 0x0, 0x7ffff6e64e10 <dlsym_doit>, 0x7fffffffd310, 0x7ffff6e78640 <malloc>, 0x7ffff6e78bb0 <free>, 0x7fffffffd270, 0x7fffffffd17c, 0x555557e9c9b0, 0x0, 0x555556137620, 0x0, 0x0, 0x7fffd6569ca0 <drmIoctl+48>, 0x1, 0x7fffd6569ca0 <drmIoctl+48>, 0x555556177f30, 0xbda31cecb9e12b00, 0x555556177f30, 0x7fffd575e17c <_tnl_update_inputs+284>, 0x555556177f30, 0x1fff87fff, 0x555556178078, 0x0, 0x7fffd4299010, 0x555556313bb0, 0x7fffffffd2e0, 0x1, 0x0, 0x7fffd575e217 <_tnl_draw+87>, 0x1}
nr_bo = 1
inst = 0
tnl = 0x555556312280
TEST_SPLIT = 0
max = <optimized out>
max_basevertex = <optimized out>
i = <optimized out>
__func__ = <optimized out>
#4 0x00007fffd5846505 in _mesa_draw_gallium_fallback (ctx=0x7fffd4299010, info=0x7fffffffd370, drawid_offset=0, draws=<optimized out>, num_draws=1) at ../src/mesa/main/draw.c:1016
prim = {mode = 4 '\004', begin = true, end = true, start = 0, count = 6, basevertex = 0, draw_id = 0}
i = 0
ib = {count = 3559493648, index_size_shift = 0 '\000', obj = 0x902000, ptr = 0x0}
index_size = 0
min_index = <optimized out>
max_index = 5
index_bounds_valid = <optimized out>
prim = <optimized out>
max_count = <optimized out>
num_prims = <optimized out>
#5 0x00007fffd5845425 in _mesa_draw_arrays (ctx=<optimized out>, mode=<optimized out>, start=<optimized out>, count=<optimized out>, numInstances=<optimized out>, baseInstance=<optimized out>) at ../src/mesa/main/draw.c:1319
info = {mode = PIPE_PRIM_TRIANGLES, index_size = 0 '\000', view_mask = 0 '\000', primitive_restart = false, has_user_indices = false, index_bounds_valid = true, increment_draw_id = false, take_index_buffer_ownership = false, index_bias_varies = false, _pad = 3 '\003', start_instance = 0, instance_count = 1, restart_index = 32767, index = {resource = 0x4, gl_bo = 0x4, user = 0x4}, min_index = 0, max_index = 5}
draw = {start = 0, count = 6, index_bias = 32767}
#6 0x00007ffff7c53695 in gsk_ngl_command_queue_execute (self=<optimized out>, surface_height=<optimized out>, scale_factor=<optimized out>, scissor=0x0) at ../gsk/ngl/gsknglcommandqueue.c:1116
i = <optimized out>
u = <optimized out>
i = <optimized out>
batch = 0x555557dfb720
_g_boolean_var_ = <optimized out>
bind = <optimized out>
count = <optimized out>
scissor_test = {origin = {x = 3.86102125e+13, y = -nan(0x7fd450)}, size = {width = 3.0611365e-41, height = 3.0611365e-41}}
has_scissor = 0
scissor_state = 0
program = 45
width = <optimized out>
height = 50
n_binds = 0
n_fbos = 1
n_uniforms = 5
n_programs = 1
vao_id = 1
vbo_id = 1
textures = {-1, -1, -1, -1}
framebuffer = <optimized out>
next_batch_index = <optimized out>
active = -1
#7 0x00007ffff7c4b81c in gsk_ngl_render_job_render (root=<optimized out>, job=0x5555560c7690) at ../gsk/ngl/gsknglrenderjob.c:3964
start_time = 10072204820881
scale_factor = 1
surface_height = 629
start_time = <optimized out>
scale_factor = <optimized out>
surface_height = <optimized out>
__func__ = <optimized out>
_g_boolean_var_ = <optimized out>
_g_boolean_var_ = <optimized out>
_g_boolean_var_ = <optimized out>
#8 gsk_ngl_renderer_render (renderer=0x55555615f2a0, root=<optimized out>, update_area=<optimized out>) at ../gsk/ngl/gsknglrenderer.c:215
self = <optimized out>
render_region = 0x0
viewport = {origin = {x = 0, y = 0}, size = {width = 828, height = 629}}
job = 0x5555560c7690
surface = <optimized out>
scale_factor = <optimized out>
#9 0x00007ffff7c20b9d in gsk_renderer_render (renderer=0x55555615f2a0, root=0x555557e6cc40, region=<optimized out>) at ../gsk/gskrenderer.c:454
priv = 0x55555615f260
clip = 0x555557821f90
__func__ = "gsk_renderer_render"
#10 0x00007ffff7af4a02 in gtk_widget_render (widget=<optimized out>, surface=<optimized out>, region=0x555557ddb410) at ../gtk/gtkwidget.c:11682
priv = <optimized out>
snapshot = <optimized out>
renderer = 0x55555615f2a0
root = 0x555557e6cc40
x = 14
y = 12
before_snapshot = <optimized out>
before_render = 0
#11 0x00007ffff7af53f9 in surface_render () at ../gtk/gtkwindow.c:3237
default_icon_name = 0x0
GtkWindowGroup_private_offset = -16
signals = {0, 0}
props = {0x0, 0x555555beca80}
props = {0x0, 0x555555ce0a60, 0x555555cd0ce0, 0x555555ce06e0}
gtk_window_controls_parent_class = 0x555555ce5e90
org_kde_kwin_server_decoration_requests = {{name = 0x7ffff7ca8096 "release", signature = 0x7ffff7c8d55b "", types = 0x7ffff7fa5600 <server_decoration_types.lto_priv>}, {name = 0x7ffff7ce0cc9 "request_mode", signature = 0x7ffff7ce35ca "u", types = 0x7ffff7fa5600 <server_decoration_types.lto_priv>}}
parent_buildable_iface = 0x555555d32210
parent_buildable_iface = 0x555555d32210
disable_startup_notification = 0
server_decoration_types = {0x0, 0x7ffff7f933c0 <org_kde_kwin_server_decoration_interface>, 0x7ffff6ad4a20 <wl_surface_interface>}
gtk_window_handle_parent_class = 0x555555ce5e90
GtkWindowControls_private_offset = 0
org_kde_kwin_server_decoration_events = {{name = 0x7ffff7ca08c1 "mode", signature = 0x7ffff7ce35ca "u", types = 0x7ffff7fa5600 <server_decoration_types.lto_priv>}}
GtkWindowHandle_private_offset = 0
org_kde_kwin_server_decoration_interface = {name = 0x7ffff7ce1048 "org_kde_kwin_server_decoration", version = 1, method_count = 2, methods = 0x7ffff7f93380 <org_kde_kwin_server_decoration_requests>, event_count = 1, events = 0x7ffff7f93360 <org_kde_kwin_server_decoration_events>}
#12 0x00007ffff7bb53e8 in _gdk_marshal_BOOLEAN__BOXEDv (closure=0x555557086f70, return_value=0x7fffffffd800, instance=<optimized out>, args=<optimized out>, marshal_data=<optimized out>, n_params=<optimized out>, param_types=0x555555d795e0) at gdk/gdkmarshalers.c:130
cc = <optimized out>
data1 = 0x555555e4c300
data2 = <optimized out>
callback = 0x7ffff7af53e0 <surface_render>
v_return = <optimized out>
arg0 = 0x555557ddb410
args_copy = {{gp_offset = 32, fp_offset = 48, overflow_arg_area = 0x7fffffffd990, reg_save_area = 0x7fffffffd8d0}}
__func__ = "_gdk_marshal_BOOLEAN__BOXEDv"
#13 0x00007ffff76c0aba in _g_closure_invoke_va (param_types=0x555555d795e0, n_params=<optimized out>, args=0x7fffffffd8b0, instance=0x555555e4c300, return_value=0x7fffffffd800, closure=0x555557086f70) at ../gobject/gclosure.c:893
marshal = <optimized out>
marshal_data = <optimized out>
in_marshal = 0
real_closure = 0x555557086f50
real_closure = <optimized out>
__func__ = <optimized out>
_g_boolean_var_ = <optimized out>
marshal = <optimized out>
marshal_data = <optimized out>
in_marshal = <optimized out>
_g_boolean_var_ = <optimized out>
cunion = <optimized out>
new_int = <optimized out>
old_int = <optimized out>
success = <optimized out>
tmp = <optimized out>
gaicae_oldval = <optimized out>
cunion = <optimized out>
new_int = <optimized out>
old_int = <optimized out>
success = <optimized out>
tmp = <optimized out>
gaicae_oldval = <optimized out>
#14 g_signal_emit_valist (instance=0x555555e4c300, signal_id=<optimized out>, detail=0, var_args=var_args@entry=0x7fffffffd8b0) at ../gobject/gsignal.c:3406
return_accu = 0x7fffffffd800
accu = {g_type = 20, data = {{v_int = 0, v_uint = 0, v_long = 0, v_ulong = 0, v_int64 = 0, v_uint64 = 0, v_float = 0, v_double = 0, v_pointer = 0x0}, {v_int = 0, v_uint = 0, v_long = 0, v_ulong = 0, v_int64 = 0, v_uint64 = 0, v_float = 0, v_double = 0, v_pointer = 0x0}}}
accumulator = 0x55555615c7f0
emission = {next = 0x7fffffffda60, instance = 0x555555e4c300, ihint = {signal_id = 252, detail = 0, run_type = (G_SIGNAL_RUN_FIRST | G_SIGNAL_ACCUMULATOR_FIRST_RUN)}, state = EMISSION_RUN, chain_type = 93825004445280}
signal_id = 252
instance_type = 93825004445280
emission_return = {g_type = 20, data = {{v_int = 0, v_uint = 0, v_long = 0, v_ulong = 0, v_int64 = 0, v_uint64 = 0, v_float = 0, v_double = 0, v_pointer = 0x0}, {v_int = 0, v_uint = 0, v_long = 0, v_ulong = 0, v_int64 = 0, v_uint64 = 0, v_float = 0, v_double = 0, v_pointer = 0x0}}}
rtype = 20
static_scope = 0
fastpath_handler = <optimized out>
closure = <optimized out>
run_type = <optimized out>
hlist = <optimized out>
l = <optimized out>
fastpath = 1
instance_and_params = <optimized out>
signal_return_type = <optimized out>
param_values = <optimized out>
node = <optimized out>
i = <optimized out>
n_params = <optimized out>
__func__ = "g_signal_emit_valist"
#15 0x00007ffff76c0c03 in g_signal_emit (instance=instance@entry=0x555555e4c300, signal_id=<optimized out>, detail=detail@entry=0) at ../gobject/gsignal.c:3553
var_args = {{gp_offset = 24, fp_offset = 48, overflow_arg_area = 0x7fffffffd990, reg_save_area = 0x7fffffffd8d0}}
#16 0x00007ffff7bd6f6a in gdk_surface_process_updates_internal (surface=0x555555e4c300) at ../gdk/gdksurface.c:1272
expose_region = 0x555557ddb410
handled = 21845
#17 gdk_surface_paint_on_clock (clock=<optimized out>, data=0x555555e4c300) at ../gdk/gdksurface.c:1360
surface = 0x555555e4c300
__func__ = "gdk_surface_paint_on_clock"
#18 0x00007ffff76c0aba in _g_closure_invoke_va (param_types=0x0, n_params=<optimized out>, args=0x7fffffffdb60, instance=0x55555615d140, return_value=0x0, closure=0x55555615c0c0) at ../gobject/gclosure.c:893
marshal = <optimized out>
marshal_data = <optimized out>
in_marshal = 0
real_closure = 0x55555615c0a0
real_closure = <optimized out>
__func__ = <optimized out>
_g_boolean_var_ = <optimized out>
marshal = <optimized out>
marshal_data = <optimized out>
in_marshal = <optimized out>
_g_boolean_var_ = <optimized out>
cunion = <optimized out>
new_int = <optimized out>
old_int = <optimized out>
success = <optimized out>
tmp = <optimized out>
gaicae_oldval = <optimized out>
cunion = <optimized out>
new_int = <optimized out>
old_int = <optimized out>
success = <optimized out>
tmp = <optimized out>
gaicae_oldval = <optimized out>
#19 g_signal_emit_valist (instance=0x55555615d140, signal_id=<optimized out>, detail=0, var_args=var_args@entry=0x7fffffffdb60) at ../gobject/gsignal.c:3406
return_accu = 0x0
accu = {g_type = 0, data = {{v_int = 0, v_uint = 0, v_long = 0, v_ulong = 0, v_int64 = 0, v_uint64 = 0, v_float = 0, v_double = 0, v_pointer = 0x0}, {v_int = 0, v_uint = 0, v_long = 0, v_ulong = 0, v_int64 = 0, v_uint64 = 0, v_float = 0, v_double = 0, v_pointer = 0x0}}}
accumulator = 0x0
emission = {next = 0x0, instance = 0x55555615d140, ihint = {signal_id = 248, detail = 0, run_type = (G_SIGNAL_RUN_FIRST | G_SIGNAL_ACCUMULATOR_FIRST_RUN)}, state = EMISSION_RUN, chain_type = 93825004846592}
signal_id = 248
instance_type = 93825004846592
emission_return = {g_type = 0, data = {{v_int = 0, v_uint = 0, v_long = 0, v_ulong = 0, v_int64 = 0, v_uint64 = 0, v_float = 0, v_double = 0, v_pointer = 0x0}, {v_int = 0, v_uint = 0, v_long = 0, v_ulong = 0, v_int64 = 0, v_uint64 = 0, v_float = 0, v_double = 0, v_pointer = 0x0}}}
rtype = 4
static_scope = 0
fastpath_handler = <optimized out>
closure = <optimized out>
run_type = <optimized out>
hlist = <optimized out>
l = <optimized out>
fastpath = 1
instance_and_params = <optimized out>
signal_return_type = <optimized out>
param_values = <optimized out>
node = <optimized out>
i = <optimized out>
n_params = <optimized out>
__func__ = "g_signal_emit_valist"
#20 0x00007ffff76c0c03 in g_signal_emit (instance=instance@entry=0x55555615d140, signal_id=<optimized out>, detail=detail@entry=0) at ../gobject/gsignal.c:3553
var_args = {{gp_offset = 24, fp_offset = 48, overflow_arg_area = 0x7fffffffdc40, reg_save_area = 0x7fffffffdb80}}
#21 0x00007ffff7bce568 in _gdk_frame_clock_emit_paint (frame_clock=0x55555615d140) at ../gdk/gdkframeclock.c:709
before = 10072166233732
before = <optimized out>
#22 gdk_frame_clock_paint_idle (data=data@entry=0x55555615d140) at ../gdk/gdkframeclockidle.c:606
clock = 0x55555615d140
clock_idle = 0x55555615d140
priv = 0x55555615d030
skip_to_resume_events = 0
timings = <optimized out>
before = 10072142591576
__func__ = "gdk_frame_clock_paint_idle"
#23 0x00007ffff77408b1 in g_timeout_dispatch (source=0x555557972ca0, callback=0x7ffff7bcdf90 <gdk_frame_clock_paint_idle>, user_data=0x55555615d140) at ../glib/gmain.c:4933
timeout_source = 0x555557972ca0
again = <optimized out>
#24 0x00007ffff774005f in g_main_dispatch (context=0x555555bda310) at ../glib/gmain.c:3381
dispatch = 0x7ffff7740890 <g_timeout_dispatch>
prev_source = 0x0
begin_time_nsec = 10072142591233
was_in_call = <optimized out>
user_data = 0x55555615d140
callback = 0x7ffff7bcdf90 <gdk_frame_clock_paint_idle>
cb_funcs = 0x7ffff78243e0 <g_source_callback_funcs>
cb_data = 0x5555571f05d0
need_destroy = <optimized out>
source = 0x555557972ca0
current = 0x555555bf02c0
i = 0
__func__ = <optimized out>
#25 g_main_context_dispatch (context=0x555555bda310) at ../glib/gmain.c:4099
No locals.
#26 0x00007ffff77952a8 in g_main_context_iterate.constprop.0 (context=context@entry=0x555555bda310, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>) at ../glib/gmain.c:4175
max_priority = 120
timeout = 0
some_ready = 1
nfds = 6
allocated_nfds = 10
fds = <optimized out>
begin_time_nsec = 10072142585546
#27 0x00007ffff773d853 in g_main_context_iteration (context=context@entry=0x555555bda310, may_block=may_block@entry=1) at ../glib/gmain.c:4240
retval = <optimized out>
#28 0x00007ffff75943d5 in g_application_run (application=0x555555bd20e0, argc=<optimized out>, argv=<optimized out>) at ../gio/gapplication.c:2569
arguments = 0x555555bda290
status = 0
context = 0x555555bda310
acquired_context = <optimized out>
__func__ = "g_application_run"
#29 0x000055555558c082 in main (argc=1, argv=0x7fffffffe028) at ../demos/gtk-demo/main.c:1114
app = 0x555555bd20e0
accels = {{action_and_target = 0x5555555d2270 "app.about", accelerators = {0x5555555d227a "F1", 0x0}}, {action_and_target = 0x5555555d227d "app.quit", accelerators = {0x5555555d2286 "<Control>q", 0x0}}}
i = 2
app_entries = {{name = 0x5555555c814f "about", activate = 0x5555555b24f0 <activate_about>, parameter_type = 0x0, state = 0x0, change_state = 0x0, padding = {0, 0, 0}}, {name = 0x5555555c8122 "quit", activate = 0x5555555b27b0 <activate_quit>, parameter_type = 0x0, state = 0x0, change_state = 0x0, padding = {0, 0, 0}}, {name = 0x5555555d26e2 "inspector", activate = 0x5555555b27e0 <activate_inspector>, parameter_type = 0x0, state = 0x0, change_state = 0x0, padding = {0, 0, 0}}}
(gdb)