Segfault when building gtk/Gtk-4.0.gir on 32-bit armhf/armv7
When trying to build GTK 4.6.1 on 32-bit ARM running Alpine Linux edge, the generated introspect executable for gtk/Gtk-4.0.gir
returns SIGSEGV:
Command '['/tmp/gtk4.0/src/gtk-4.6.1/output/tmp-introspectsmnpketz/Gtk-4.0', '--introspect-dump=/tmp/gtk4.0/src/gtk-4.6.1/output/tmp-introspectsmnpketz/functions.txt,/tmp/gtk4.0/src/gtk-4.6.1/output/tmp-introspectsmnpketz/dump.xml']' died with <Signals.SIGSEGV: 11>.
Full build log with versions of dependencies and the compiler: https://gitlab.alpinelinux.org/alpine/aports/-/jobs/657649#L4227
Example generated source code: https://ptrc.gay/JyMFXith
Running the same executable and parameters in GDB returns the following backtrace:
/tmp/gtk4.0/src/gtk-4.6.1/output # gdb /tmp/gtk4.0/src/gtk-4.6.1/output/tmp-introspectcyc5pa15/Gtk-4.0
GNU gdb (GDB) 11.2
For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from /tmp/gtk4.0/src/gtk-4.6.1/output/tmp-introspectcyc5pa15/Gtk-4.0...
(gdb) run --introspect-dump=/tmp/gtk4.0/src/gtk-4.6.1/output/tmp-introspectcyc5pa15/functions.txt
,/tmp/gtk4.0/src/gtk-4.6.1/output/tmp-introspectcyc5pa15/dump.xml
Starting program: /tmp/gtk4.0/src/gtk-4.6.1/output/tmp-introspectcyc5pa15/Gtk-4.0 --introspect-dump=/tmp/gtk4.0/src/gtk-4.6.1/output/tmp-introspectcyc5pa15/functions.txt
,/tmp/gtk4.0/src/gtk-4.6.1/output/tmp-introspectcyc5pa15/dump.xml
(process:19336): GLib-GIO-CRITICAL **: 14:04:55.402: g_file_new_for_path: assertion 'path != NULL' failed
(process:19336): GLib-GIO-CRITICAL **: 14:04:55.403: g_file_replace: assertion 'G_IS_FILE (file)' failed
(process:19336): GLib-GObject-CRITICAL **: 14:04:55.403: g_object_unref: assertion 'G_IS_OBJECT (object)' failed
Program received signal SIGSEGV, Segmentation fault.
main (argc=2, argv=0xfffefd34) at /tmp/gtk4.0/src/gtk-4.6.1/output/tmp-introspectcyc5pa15/Gtk-4.0.c:623
623 g_printerr ("%s\n", error->message);
(gdb) bt full
#0 main (argc=2, argv=0xfffefd34) at /tmp/gtk4.0/src/gtk-4.6.1/output/tmp-introspectcyc5pa15/Gtk-4.0.c:623
error = 0x0
introspect_dump_prefix = 0x407a7c "--introspect-dump="
After upgrading gobject-introspection to 1.71 locally, the issue persisted, but with a different backtrace:
/tmp/gtk4.0/src/gtk-4.6.1/output # gdb /tmp/gtk4.0/src/gtk-4.6.1/output/tmp-introspectsmnpketz
/Gtk-4.0
GNU gdb (GDB) 11.2
For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from /tmp/gtk4.0/src/gtk-4.6.1/output/tmp-introspectsmnpketz/Gtk-4.0...
(gdb) run --introspect-dump=/tmp/gtk4.0/src/gtk-4.6.1/output/tmp-introspectsmnpketz/functions.txt,/tmp/gtk4.0/src/gtk-4.6.1/output/tmp-introspectsmnpketz/dump.xml
Starting program: /tmp/gtk4.0/src/gtk-4.6.1/output/tmp-introspectsmnpketz/Gtk-4.0 --introspect-dump=/tmp/gtk4.0/src/gtk-4.6.1/output/tmp-introspectsmnpketz/functions.txt,/tmp/gtk4.0/src/gtk-4.6.1/output/tmp-introspectsmnpketz/dump.xml
Program received signal SIGSEGV, Segmentation fault.
0xf7c00b30 in _gtk_buildable_parser_is_precompiled (data=data@entry=0xf6c750f8 <error: Cannot access memory at address 0xf6c750f8>, data_len=13235) at ../gtk/gtkbuilderprecompile.c:701
701 data_len > 4 &&
(gdb) bt full
#0 0xf7c00b30 in _gtk_buildable_parser_is_precompiled
(data=data@entry=0xf6c750f8 <error: Cannot access memory at address 0xf6c750f8>, data_len=13235) at ../gtk/gtkbuilderprecompile.c:701
#1 0xf7be8c2e in gtk_widget_class_set_template
(widget_class=widget_class@entry=0xf6e3cc10, template_bytes=template_bytes@entry=0xf6c7a6c0) at ../gtk/gtkwidget.c:11079
error = 0x0
data = 0x0
bytes_data = 0xf6c750f8
bytes_size = 13235
__func__ = "gtk_widget_class_set_template"
#2 0xf7be8dba in gtk_widget_class_set_template_from_resource
(widget_class=widget_class@entry=0xf6e3cc10, resource_name=<optimized out>)
at ../gtk/gtkwidget.c:11135
error = 0x0
bytes = 0xf6c7a6c0
__func__ = "gtk_widget_class_set_template_from_resource"
#3 0xf7a6dcd4 in gtk_about_dialog_class_init (klass=0xf6e3cc10)
at ../gtk/gtkaboutdialog.c:639
object_class = 0xf6e3cc10
widget_class = 0xf6e3cc10
#4 gtk_about_dialog_class_intern_init (klass=0xf6e3cc10) at ../gtk/gtkaboutdialog.c:284
#5 0xf78bced6 in g_type_class_ref () at /usr/lib/libgobject-2.0.so.0
#6 0x0040685c in dump_propertiesPython Exception <class 'gdb.error'>: No type named TypeNode.
(type=, out=0xf79ed6e8)
at /tmp/gtk4.0/src/gtk-4.6.1/output/tmp-introspectsmnpketz/Gtk-4.0.c:137
klass = 0xfffefe0a
i = 4144528384
n_properties = 4160257875
props = 0x41c250
#7 0x00406c0e in dump_object_typePython Exception <class 'gdb.error'>: No type named TypeNode.
(type=, symbol=0xf6f82a19 "gtk_about_dialog_get_type", out=0xf79ed6e8)
at /tmp/gtk4.0/src/gtk-4.6.1/output/tmp-introspectsmnpketz/Gtk-4.0.c:266
n_interfaces = 6
i = 6
interfaces = 0xf7087c00
#8 0x004070fe in dump_typePython Exception <class 'gdb.error'>: No type named TypeNode.
(type=, symbol=0xf6f82a19 "gtk_about_dialog_get_type", out=0xf79ed6e8)
at /tmp/gtk4.0/src/gtk-4.6.1/output/tmp-introspectsmnpketz/Gtk-4.0.c:413
#9 0x0040735a in dump_irepository
(arg=0xfffefe1c "/tmp/gtk4.0/src/gtk-4.6.1/output/tmp-introspectsmnpketz/functions.txt,/tmp/gtk4.0/src/gtk-4.6.1/output/tmp-introspectsmnpketz/dump.xml", error=0xfffefc74)
at /tmp/gtk4.0/src/gtk-4.6.1/output/tmp-introspectsmnpketz/Gtk-4.0.c:558
Python Exception <class 'gdb.error'>: No type named TypeNode.
type =
len = 34
line = 0xf6f82a10 "get-type:gtk_about_dialog_get_type"
function = 0xf6f82a19 "gtk_about_dialog_get_type"
Python Exception <class 'gdb.error'>: There is no member named keys.
output_types = 0xf79ed700
args = 0xf7273ca0
input_file = 0xf6d02d90
output_file = 0xf6d02da0
input = 0xf78e0a48
output = 0xf79ed6e8
in = 0xf755c528
self = 0xf7141e50
caught_error = 0
#10 0x00407510 in main (argc=2, argv=0xfffefcc4)
at /tmp/gtk4.0/src/gtk-4.6.1/output/tmp-introspectsmnpketz/Gtk-4.0.c:621
error = 0x0
introspect_dump_prefix = 0x407a7c "--introspect-dump="