Bug#908549: gimp: segfault when using measuring tool
Bernhard Übelacker
bernhardu at mailbox.org
Tue Sep 11 22:44:29 BST 2018
Hello,
just tried to reproduce this issue.
I think this is a case of stack exhaustion.
Thread 1 "gimp" received signal SIGSEGV, Segmentation fault.
0xb7099247 in g_closure_ref (closure=0x259ffe0) at ../../../../gobject/gclosure.c:547
547 ../../../../gobject/gclosure.c: Datei oder Verzeichnis nicht gefunden.
(gdb) bt
#0 0xb7099247 in g_closure_ref (closure=0x259ffe0) at ../../../../gobject/gclosure.c:547
#1 0xb7099b67 in g_closure_invoke (closure=0x259ffe0, return_value=0x0, n_param_values=1, param_values=0xbf800170, invocation_hint=0xbf800114) at ../../../../gobject/gclosure.c:782
#2 0xb70ad04d in signal_emit_unlocked_R (node=node at entry=0x2452f30, detail=detail at entry=0, instance=instance at entry=0x2cd11a8, emission_return=0x0, instance_and_params=0xbf800170) at ../../../../gobject/gsignal.c:3565
#3 0xb70b59a3 in g_signal_emit_valist (instance=<optimized out>, signal_id=<optimized out>, detail=<optimized out>, var_args=0xbf8002dc "M5[") at ../../../../gobject/gsignal.c:3391
#4 0xb70b6155 in g_signal_emit (instance=0x2cd11a8, signal_id=567, detail=0) at ../../../../gobject/gsignal.c:3447
#5 0x005b3579 in gimp_tool_widget_changed (widget=0x2cd11a8) at gimptoolwidget.c:372
...
#67352 0x005b3579 in gimp_tool_widget_changed (widget=0x2cd11a8) at gimptoolwidget.c:372
#67353 0xb70a03c7 in g_object_notify_by_spec_internal (pspec=0x2cc5a68, object=0x2cd11a8) at ../../../../gobject/gobject.c:1175
#67354 g_object_notify (object=0x2cd11a8, property_name=0x8b565d "unit-angle") at ../../../../gobject/gobject.c:1223
#67355 0x0059a280 in gimp_tool_compass_update_angle (compass=compass at entry=0x2cd11a8, orientation=GIMP_COMPASS_ORIENTATION_AUTO, flip=flip at entry=0) at gimptoolcompass.c:1172
#67356 0x0059afaf in gimp_tool_compass_changed (widget=0x2cd11a8) at gimptoolcompass.c:460
#67357 0xb7099cc8 in g_closure_invoke (closure=0x259ffe0, return_value=0x0, n_param_values=1, param_values=0xbfffe7f0, invocation_hint=0xbfffe794) at ../../../../gobject/gclosure.c:804
#67358 0xb70ad04d in signal_emit_unlocked_R (node=node at entry=0x2452f30, detail=detail at entry=0, instance=instance at entry=0x2cd11a8, emission_return=0x0, instance_and_params=0xbfffe7f0) at ../../../../gobject/gsignal.c:3565
#67359 0xb70b59a3 in g_signal_emit_valist (instance=<optimized out>, signal_id=<optimized out>, detail=<optimized out>, var_args=0xbfffe95c "M5[") at ../../../../gobject/gsignal.c:3391
#67360 0xb70b6155 in g_signal_emit (instance=0x2cd11a8, signal_id=567, detail=0) at ../../../../gobject/gsignal.c:3447
#67361 0x005b3579 in gimp_tool_widget_changed (widget=0x2cd11a8) at gimptoolwidget.c:372
#67362 0xb709d79d in g_object_notify_queue_thaw (object=object at entry=0x2cd11a8, nqueue=<optimized out>) at ../../../../gobject/gobject.c:296
#67363 0xb709f3fe in g_object_new_internal (class=class at entry=0x2286560, params=params at entry=0xbfffec5c, n_params=n_params at entry=7) at ../../../../gobject/gobject.c:1856
#67364 0xb70a1010 in g_object_new_valist (object_type=<optimized out>, first_property_name=<optimized out>, var_args=<optimized out>) at ../../../../gobject/gobject.c:2122
#67365 0xb70a10c9 in g_object_new (object_type=40330576, first_property_name=0x8c26e1 "shell") at ../../../../gobject/gobject.c:1642
#67366 0x0059b953 in gimp_tool_compass_new (shell=0x2824060, orientation=GIMP_COMPASS_ORIENTATION_AUTO, n_points=1, x1=896, y1=904, x2=0, y2=0, x3=0, y3=0) at gimptoolcompass.c:1192
#67367 0x0051e88a in gimp_measure_tool_start (coords=0xbfffef38, display=0x22dcf28, measure=0xd3ba60) at gimpmeasuretool.c:454
#67368 gimp_measure_tool_button_press (tool=0xd3ba60, coords=0xbfffef38, time=836017, state=GDK_BUTTON1_MASK, press_type=GIMP_BUTTON_PRESS_NORMAL, display=0x22dcf28) at gimpmeasuretool.c:250
#67369 0x0053f2f8 in gimp_tool_button_press (tool=0xd3ba60, coords=0xbfffef38, time=836017, state=GDK_BUTTON1_MASK, press_type=GIMP_BUTTON_PRESS_NORMAL, display=0x22dcf28) at gimptool.c:710
#67370 0x004f13a2 in tool_manager_button_press_active (gimp=0xd240a8, coords=0xbfffef38, time=836017, state=GDK_BUTTON1_MASK, press_type=GIMP_BUTTON_PRESS_NORMAL, display=0x22dcf28) at tool_manager.c:287
#67371 0x0058915a in gimp_display_shell_canvas_tool_events_internal (canvas=canvas at entry=0x280db90, event=event at entry=0x6b38b20, shell=shell at entry=0x2824060, next_event=0xbffff048) at gimpdisplayshell-tool-events.c:776
#67372 0x00589503 in gimp_display_shell_canvas_tool_events (canvas=0x280db90, event=0x6b38b20, shell=0x2824060) at gimpdisplayshell-tool-events.c:307
#67373 0xb7b4c6e7 in _gtk_marshal_BOOLEAN__BOXED (closure=0x282c1e0, return_value=0xbffff1d8, n_param_values=2, param_values=0xbffff220, invocation_hint=0xbffff1c4, marshal_data=0x0) at ./gtk/gtkmarshalers.c:84
#67374 0xb7099cc8 in g_closure_invoke (closure=0x282c1e0, return_value=0xbffff1d8, n_param_values=2, param_values=0xbffff220, invocation_hint=0xbffff1c4) at ../../../../gobject/gclosure.c:804
#67375 0xb70acf62 in signal_emit_unlocked_R (node=node at entry=0xeb03e0, detail=detail at entry=0, instance=instance at entry=0x280db90, emission_return=0xbffff2f8, instance_and_params=0xbffff220) at ../../../../gobject/gsignal.c:3635
#67376 0xb70b56c9 in g_signal_emit_valist (instance=<optimized out>, signal_id=<optimized out>, detail=<optimized out>, var_args=0xbffff3a0 "\310\363\377\277\220\264", <incomplete sequence \356>) at ../../../../gobject/gsignal.c:3401
#67377 0xb70b6155 in g_signal_emit (instance=0x280db90, signal_id=133, detail=0) at ../../../../gobject/gsignal.c:3447
#67378 0xb7c6e4d4 in gtk_widget_event_internal (widget=widget at entry=0x280db90, event=event at entry=0x6b38b20) at ./gtk/gtkwidget.c:5010
#67379 0xb7c6e779 in IA__gtk_widget_event (widget=0x280db90, event=0x6b38b20) at ./gtk/gtkwidget.c:4807
#67380 0xb7b4a459 in IA__gtk_propagate_event (widget=0x280db90, event=0x6b38b20) at ./gtk/gtkmain.c:2503
#67381 0xb7b4a8ad in IA__gtk_main_do_event (event=0x6b38b20) at ./gtk/gtkmain.c:1698
#67382 0xb79bb629 in gdk_event_dispatch (source=0xd02870, callback=0x0, user_data=0x0) at ./gdk/x11/gdkevents-x11.c:2425
#67383 0xb6fa4f30 in g_main_dispatch (context=0xd02950) at ../../../../glib/gmain.c:3177
#67384 g_main_context_dispatch (context=0xd02950) at ../../../../glib/gmain.c:3830
#67385 0xb6fa51a9 in g_main_context_iterate (context=0xd02950, block=block at entry=1, dispatch=dispatch at entry=1, self=<optimized out>) at ../../../../glib/gmain.c:3903
#67386 0xb6fa5559 in g_main_loop_run (loop=0x26b89f0) at ../../../../glib/gmain.c:4099
#67387 0x0048fc3d in app_run (full_prog_name=0xc74510 "/usr/bin/gimp", filenames=<optimized out>, alternate_system_gimprc=0x0, alternate_gimprc=0x0, session_name=0x0, batch_interpreter=0x0, batch_commands=0x0, as_new=0, no_interface=0, no_data=0, no_fonts=0, no_splash=0, be_verbose=0, use_shm=1, use_cpu_accel=1, console_messages=0, use_debug_handler=0, show_playground=0, show_debug_menu=0, stack_trace_mode=GIMP_STACK_TRACE_NEVER, pdb_compat_mode=GIMP_PDB_COMPAT_ON, backtrace_file=0xc73a70 "/home/benutzer/.config/GIMP/2.10/CrashLog/GIMP-crash-20565434526299610.txt") at app.c:433
#67388 0x0048f429 in main (argc=<optimized out>, argv=<optimized out>) at main.c:524
It looks like we reach some floating point calculation that gets stored,
then some widgets get redrawn and the calculation is done again and compared
to the stored one. Unfortunately they do never compare as equal.
That might be because that floating point comparision is done from registers
instead from memory in function gimp_tool_compass_changed (gimptoolcompass.c):
89 struct _GimpToolCompassPrivate
90 {
99 gdouble pixel_angle;
114 };
1080 gdouble pixel_angle;
1125 pixel_angle = atan2 (gimp_vector2_cross_product (&radius1, &radius2).x,
1126 gimp_vector2_inner_product (&radius1, &radius2));
1168 if (unit_angle != private->unit_angle)
1169 {
1170 private->unit_angle = unit_angle;
1171
1172 g_object_notify (G_OBJECT (compass), "unit-angle");
1173 }
(gdb) nexti
0x0059a14b 1161 if (pixel_angle != private->pixel_angle)
1: unit_angle = <optimized out>
2: x/i $pc
=> 0x59a14b <gimp_tool_compass_update_angle+587>: fucomip %st(1),%st
3: private->unit_angle = 2.188940552730084
(gdb) info float
R7: Valid 0x40008c179a1db749b5de +2.188940552730083914
R6: Valid 0x40008c179a1db749b800 +2.188940552730084033
=>R5: Valid 0x40008c179a1db749b800 +2.188940552730084033
R4: Empty 0x00000000000000000000
R3: Empty 0x4006b100000000000000
R2: Empty 0x00000000000000000000
R1: Empty 0x00000000000000000000
R0: Empty 0x00000000000000000000
Status Word: 0x2837 IE DE ZE UE PE
TOP: 5
Control Word: 0x037f IM DM ZM OM UM PM
PC: Extended Precision (64-bits)
RC: Round to nearest
Tag Word: 0x03ff
Instruction Pointer: 0x00:0x00000000
Operand Pointer: 0x00:0x00000000
Opcode: 0x0000
Unfortunately private->unit_angle seems to just store a truncated value into its
8 bytes of storage, but the register is wider - therefore the values get never equal.
One workaround could be to force the compiler to compare just
an integer representation [1] [2]. But we might need an integer type of
the same size - can we rely on being sizeof(gdouble)==8 on all architectures?
Therefore could we just use a memcmp?
Another workaround could probably be to add to CFLAGS -ffloat-store [3].
Both workarounds are currently not yet tested.
Kind regards,
Bernhard
[1] https://floating-point-gui.de/errors/comparison/ (last paragraph)
[2] http://www.cygnus-software.com/papers/comparingfloats/comparing_floating_point_numbers_obsolete.htm
[3] https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html
-------------- next part --------------
apt install xserver-xorg sddm openbox xterm mc devscripts dpkg-dev systemd-coredump gdb gimp gimp-dbgsym libglib2.0-0-dbgsym
apt build-dep gimp
systemctl start sddm
mkdir gimp/orig -p
cd gimp/orig
apt source gimp
cd ../..
export DISPLAY=:0
benutzer at debian:~$ gdb -q --args gimp
Reading symbols from gimp...(no debugging symbols found)...done.
(gdb) set height 0
(gdb) set width 0
(gdb) set pagination off
(gdb) run
Starting program: /usr/bin/gimp
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/i386-linux-gnu/libthread_db.so.1".
Missing fast-path babl conversion detected, Implementing missing babl fast paths
accelerates GEGL, GIMP and other software using babl, warnings are printed on
first occurance of formats used where a conversion has to be synthesized
programmatically by babl based on format description
*WARNING* missing babl fast path(s): "Y u16" to "Y' u8"
[New Thread 0xb5424b40 (LWP 11501)]
Kindprozess »dbus-launch« konnte nicht ausgeführt werden (Datei oder Verzeichnis nicht gefunden)
*WARNING* missing babl fast path(s): "R'G'B' double" to "CIE Lab double"
[New Thread 0xae2b3b40 (LWP 11503)]
[New Thread 0xadab2b40 (LWP 11504)]
[New Thread 0xad2b1b40 (LWP 11505)]
[New Thread 0xacab0b40 (LWP 11506)]
[New Thread 0xac2afb40 (LWP 11507)]
[New Thread 0xab8ffb40 (LWP 11508)]
[New Thread 0xab0feb40 (LWP 11509)]
[New Thread 0xaa8fdb40 (LWP 11510)]
(gimp:11497): Gtk-WARNING **: 09:52:06.483: Im Modulpfad »pixmap« konnte keine Themen-Engine gefunden werden,
...
(gimp:11497): Gtk-WARNING **: 09:52:06.487: Im Modulpfad »pixmap« konnte keine Themen-Engine gefunden werden,
[New Thread 0xa889ab40 (LWP 11512)]
[Thread 0xa889ab40 (LWP 11512) exited]
gimp_device_info_set_device: trying to set GdkDevice 'VirtualPS/2 VMware VMMouse' on GimpDeviceInfo which already has a device
*WARNING* missing babl fast path(s): "cairo-ARGB32" to "R'G'B'A u8"
[New Thread 0xa889ab40 (LWP 11521)]
[New Thread 0xa7c99b40 (LWP 11522)]
[Thread 0xa889ab40 (LWP 11521) exited]
[New Thread 0xa889ab40 (LWP 11523)]
Thread 1 "gimp" received signal SIGSEGV, Segmentation fault.
0xb7099247 in g_closure_ref () from /usr/lib/i386-linux-gnu/libgobject-2.0.so.0
(gdb) bt
...
#59849 0xb7099be7 in g_closure_invoke () from /usr/lib/i386-linux-gnu/libgobject-2.0.so.0
#59850 0xb70ad04d in ?? () from /usr/lib/i386-linux-gnu/libgobject-2.0.so.0
#59851 0xb70b59a3 in g_signal_emit_valist () from /usr/lib/i386-linux-gnu/libgobject-2.0.so.0
#59852 0xb70b6155 in g_signal_emit () from /usr/lib/i386-linux-gnu/libgobject-2.0.so.0
#59853 0x005b3579 in gimp_tool_widget_changed ()
#59854 0xb70a03c7 in g_object_notify () from /usr/lib/i386-linux-gnu/libgobject-2.0.so.0
#59855 0x0059a280 in ?? ()
#59856 0x0059afaf in ?? ()
#59857 0xb7099be7 in g_closure_invoke () from /usr/lib/i386-linux-gnu/libgobject-2.0.so.0
#59858 0xb70ad04d in ?? () from /usr/lib/i386-linux-gnu/libgobject-2.0.so.0
#59859 0xb70b59a3 in g_signal_emit_valist () from /usr/lib/i386-linux-gnu/libgobject-2.0.so.0
#59860 0xb70b6155 in g_signal_emit () from /usr/lib/i386-linux-gnu/libgobject-2.0.so.0
#59861 0x005b3579 in gimp_tool_widget_changed ()
#59862 0xb70a03c7 in g_object_notify () from /usr/lib/i386-linux-gnu/libgobject-2.0.so.0
#59863 0x0059a280 in ?? ()
#59864 0x0059afaf in ?? ()
#59865 0xb7099be7 in g_closure_invoke () from /usr/lib/i386-linux-gnu/libgobject-2.0.so.0
#59866 0xb70ad04d in ?? () from /usr/lib/i386-linux-gnu/libgobject-2.0.so.0
#59867 0xb70b59a3 in g_signal_emit_valist () from /usr/lib/i386-linux-gnu/libgobject-2.0.so.0
#59868 0xb70b6155 in g_signal_emit () from /usr/lib/i386-linux-gnu/libgobject-2.0.so.0
#59869 0x005b3579 in gimp_tool_widget_changed ()
#59870 0xb70a03c7 in g_object_notify () from /usr/lib/i386-linux-gnu/libgobject-2.0.so.0
#59871 0x0059a280 in ?? ()
#59872 0x0059afaf in ?? ()
#59873 0xb7099cc8 in g_closure_invoke () from /usr/lib/i386-linux-gnu/libgobject-2.0.so.0
#59874 0xb70ad04d in ?? () from /usr/lib/i386-linux-gnu/libgobject-2.0.so.0
#59875 0xb70b59a3 in g_signal_emit_valist () from /usr/lib/i386-linux-gnu/libgobject-2.0.so.0
#59876 0xb70b6155 in g_signal_emit () from /usr/lib/i386-linux-gnu/libgobject-2.0.so.0
#59877 0x005b3579 in gimp_tool_widget_changed ()
#59878 0xb709d79d in ?? () from /usr/lib/i386-linux-gnu/libgobject-2.0.so.0
#59879 0xb709f3fe in ?? () from /usr/lib/i386-linux-gnu/libgobject-2.0.so.0
#59880 0xb70a1010 in g_object_new_valist () from /usr/lib/i386-linux-gnu/libgobject-2.0.so.0
#59881 0xb70a10c9 in g_object_new () from /usr/lib/i386-linux-gnu/libgobject-2.0.so.0
#59882 0x0059b953 in gimp_tool_compass_new ()
#59883 0x0051e88a in ?? ()
#59884 0x0053f2f8 in gimp_tool_button_press ()
#59885 0x004f13a2 in tool_manager_button_press_active ()
#59886 0x0058915a in ?? ()
#59887 0x00589503 in gimp_display_shell_canvas_tool_events ()
#59888 0xb7b4c6e7 in ?? () from /usr/lib/i386-linux-gnu/libgtk-x11-2.0.so.0
#59889 0xb7099cc8 in g_closure_invoke () from /usr/lib/i386-linux-gnu/libgobject-2.0.so.0
#59890 0xb70acf62 in ?? () from /usr/lib/i386-linux-gnu/libgobject-2.0.so.0
#59891 0xb70b56c9 in g_signal_emit_valist () from /usr/lib/i386-linux-gnu/libgobject-2.0.so.0
#59892 0xb70b6155 in g_signal_emit () from /usr/lib/i386-linux-gnu/libgobject-2.0.so.0
#59893 0xb7c6e4d4 in ?? () from /usr/lib/i386-linux-gnu/libgtk-x11-2.0.so.0
#59894 0xb7b4a459 in gtk_propagate_event () from /usr/lib/i386-linux-gnu/libgtk-x11-2.0.so.0
#59895 0xb7b4a8ad in gtk_main_do_event () from /usr/lib/i386-linux-gnu/libgtk-x11-2.0.so.0
#59896 0xb79bb629 in ?? () from /usr/lib/i386-linux-gnu/libgdk-x11-2.0.so.0
#59897 0xb6fa4f30 in g_main_context_dispatch () from /usr/lib/i386-linux-gnu/libglib-2.0.so.0
#59898 0xb6fa51a9 in ?? () from /usr/lib/i386-linux-gnu/libglib-2.0.so.0
#59899 0xb6fa5559 in g_main_loop_run () from /usr/lib/i386-linux-gnu/libglib-2.0.so.0
#59900 0x0048fc3d in app_run ()
#59901 0x0048f429 in main ()
With debug symbols:
Thread 1 "gimp" received signal SIGSEGV, Segmentation fault.
0xb7099247 in g_closure_ref (closure=0x259ffe0) at ../../../../gobject/gclosure.c:547
547 ../../../../gobject/gclosure.c: Datei oder Verzeichnis nicht gefunden.
(gdb) bt
#0 0xb7099247 in g_closure_ref (closure=0x259ffe0) at ../../../../gobject/gclosure.c:547
#1 0xb7099b67 in g_closure_invoke (closure=0x259ffe0, return_value=0x0, n_param_values=1, param_values=0xbf800170, invocation_hint=0xbf800114) at ../../../../gobject/gclosure.c:782
#2 0xb70ad04d in signal_emit_unlocked_R (node=node at entry=0x2452f30, detail=detail at entry=0, instance=instance at entry=0x2cd11a8, emission_return=0x0, instance_and_params=0xbf800170) at ../../../../gobject/gsignal.c:3565
#3 0xb70b59a3 in g_signal_emit_valist (instance=<optimized out>, signal_id=<optimized out>, detail=<optimized out>, var_args=0xbf8002dc "M5[") at ../../../../gobject/gsignal.c:3391
#4 0xb70b6155 in g_signal_emit (instance=0x2cd11a8, signal_id=567, detail=0) at ../../../../gobject/gsignal.c:3447
#5 0x005b3579 in gimp_tool_widget_changed (widget=0x2cd11a8) at gimptoolwidget.c:372
#6 0xb70a03c7 in g_object_notify_by_spec_internal (pspec=0x2cc5a68, object=0x2cd11a8) at ../../../../gobject/gobject.c:1175
#7 g_object_notify (object=0x2cd11a8, property_name=0x8b565d "unit-angle") at ../../../../gobject/gobject.c:1223
#8 0x0059a280 in gimp_tool_compass_update_angle (compass=compass at entry=0x2cd11a8, orientation=GIMP_COMPASS_ORIENTATION_AUTO, flip=flip at entry=0) at gimptoolcompass.c:1172
#9 0x0059afaf in gimp_tool_compass_changed (widget=0x2cd11a8) at gimptoolcompass.c:460
#10 0xb7099be7 in g_closure_invoke (closure=0x259ffe0, return_value=0x0, n_param_values=1, param_values=0xbf8005d0, invocation_hint=0xbf800574) at ../../../../gobject/gclosure.c:804
#11 0xb70ad04d in signal_emit_unlocked_R (node=node at entry=0x2452f30, detail=detail at entry=0, instance=instance at entry=0x2cd11a8, emission_return=0x0, instance_and_params=0xbf8005d0) at ../../../../gobject/gsignal.c:3565
#12 0xb70b59a3 in g_signal_emit_valist (instance=<optimized out>, signal_id=<optimized out>, detail=<optimized out>, var_args=0xbf80073c "M5[") at ../../../../gobject/gsignal.c:3391
#13 0xb70b6155 in g_signal_emit (instance=0x2cd11a8, signal_id=567, detail=0) at ../../../../gobject/gsignal.c:3447
#14 0x005b3579 in gimp_tool_widget_changed (widget=0x2cd11a8) at gimptoolwidget.c:372
#15 0xb70a03c7 in g_object_notify_by_spec_internal (pspec=0x2cc5a68, object=0x2cd11a8) at ../../../../gobject/gobject.c:1175
#16 g_object_notify (object=0x2cd11a8, property_name=0x8b565d "unit-angle") at ../../../../gobject/gobject.c:1223
#17 0x0059a280 in gimp_tool_compass_update_angle (compass=compass at entry=0x2cd11a8, orientation=GIMP_COMPASS_ORIENTATION_AUTO, flip=flip at entry=0) at gimptoolcompass.c:1172
#18 0x0059afaf in gimp_tool_compass_changed (widget=0x2cd11a8) at gimptoolcompass.c:460
#19 0xb7099be7 in g_closure_invoke (closure=0x259ffe0, return_value=0x0, n_param_values=1, param_values=0xbf800a30, invocation_hint=0xbf8009d4) at ../../../../gobject/gclosure.c:804
...
#67339 0xb7099be7 in g_closure_invoke (closure=0x259ffe0, return_value=0x0, n_param_values=1, param_values=0xbfffdf30, invocation_hint=0xbfffded4) at ../../../../gobject/gclosure.c:804
#67340 0xb70ad04d in signal_emit_unlocked_R (node=node at entry=0x2452f30, detail=detail at entry=0, instance=instance at entry=0x2cd11a8, emission_return=0x0, instance_and_params=0xbfffdf30) at ../../../../gobject/gsignal.c:3565
#67341 0xb70b59a3 in g_signal_emit_valist (instance=<optimized out>, signal_id=<optimized out>, detail=<optimized out>, var_args=0xbfffe09c "M5[") at ../../../../gobject/gsignal.c:3391
#67342 0xb70b6155 in g_signal_emit (instance=0x2cd11a8, signal_id=567, detail=0) at ../../../../gobject/gsignal.c:3447
#67343 0x005b3579 in gimp_tool_widget_changed (widget=0x2cd11a8) at gimptoolwidget.c:372
#67344 0xb70a03c7 in g_object_notify_by_spec_internal (pspec=0x2cc5a68, object=0x2cd11a8) at ../../../../gobject/gobject.c:1175
#67345 g_object_notify (object=0x2cd11a8, property_name=0x8b565d "unit-angle") at ../../../../gobject/gobject.c:1223
#67346 0x0059a280 in gimp_tool_compass_update_angle (compass=compass at entry=0x2cd11a8, orientation=GIMP_COMPASS_ORIENTATION_AUTO, flip=flip at entry=0) at gimptoolcompass.c:1172
#67347 0x0059afaf in gimp_tool_compass_changed (widget=0x2cd11a8) at gimptoolcompass.c:460
#67348 0xb7099be7 in g_closure_invoke (closure=0x259ffe0, return_value=0x0, n_param_values=1, param_values=0xbfffe390, invocation_hint=0xbfffe334) at ../../../../gobject/gclosure.c:804
#67349 0xb70ad04d in signal_emit_unlocked_R (node=node at entry=0x2452f30, detail=detail at entry=0, instance=instance at entry=0x2cd11a8, emission_return=0x0, instance_and_params=0xbfffe390) at ../../../../gobject/gsignal.c:3565
#67350 0xb70b59a3 in g_signal_emit_valist (instance=<optimized out>, signal_id=<optimized out>, detail=<optimized out>, var_args=0xbfffe4fc "M5[") at ../../../../gobject/gsignal.c:3391
#67351 0xb70b6155 in g_signal_emit (instance=0x2cd11a8, signal_id=567, detail=0) at ../../../../gobject/gsignal.c:3447
#67352 0x005b3579 in gimp_tool_widget_changed (widget=0x2cd11a8) at gimptoolwidget.c:372
#67353 0xb70a03c7 in g_object_notify_by_spec_internal (pspec=0x2cc5a68, object=0x2cd11a8) at ../../../../gobject/gobject.c:1175
#67354 g_object_notify (object=0x2cd11a8, property_name=0x8b565d "unit-angle") at ../../../../gobject/gobject.c:1223
#67355 0x0059a280 in gimp_tool_compass_update_angle (compass=compass at entry=0x2cd11a8, orientation=GIMP_COMPASS_ORIENTATION_AUTO, flip=flip at entry=0) at gimptoolcompass.c:1172
#67356 0x0059afaf in gimp_tool_compass_changed (widget=0x2cd11a8) at gimptoolcompass.c:460
#67357 0xb7099cc8 in g_closure_invoke (closure=0x259ffe0, return_value=0x0, n_param_values=1, param_values=0xbfffe7f0, invocation_hint=0xbfffe794) at ../../../../gobject/gclosure.c:804
#67358 0xb70ad04d in signal_emit_unlocked_R (node=node at entry=0x2452f30, detail=detail at entry=0, instance=instance at entry=0x2cd11a8, emission_return=0x0, instance_and_params=0xbfffe7f0) at ../../../../gobject/gsignal.c:3565
#67359 0xb70b59a3 in g_signal_emit_valist (instance=<optimized out>, signal_id=<optimized out>, detail=<optimized out>, var_args=0xbfffe95c "M5[") at ../../../../gobject/gsignal.c:3391
#67360 0xb70b6155 in g_signal_emit (instance=0x2cd11a8, signal_id=567, detail=0) at ../../../../gobject/gsignal.c:3447
#67361 0x005b3579 in gimp_tool_widget_changed (widget=0x2cd11a8) at gimptoolwidget.c:372
#67362 0xb709d79d in g_object_notify_queue_thaw (object=object at entry=0x2cd11a8, nqueue=<optimized out>) at ../../../../gobject/gobject.c:296
#67363 0xb709f3fe in g_object_new_internal (class=class at entry=0x2286560, params=params at entry=0xbfffec5c, n_params=n_params at entry=7) at ../../../../gobject/gobject.c:1856
#67364 0xb70a1010 in g_object_new_valist (object_type=<optimized out>, first_property_name=<optimized out>, var_args=<optimized out>) at ../../../../gobject/gobject.c:2122
#67365 0xb70a10c9 in g_object_new (object_type=40330576, first_property_name=0x8c26e1 "shell") at ../../../../gobject/gobject.c:1642
#67366 0x0059b953 in gimp_tool_compass_new (shell=0x2824060, orientation=GIMP_COMPASS_ORIENTATION_AUTO, n_points=1, x1=896, y1=904, x2=0, y2=0, x3=0, y3=0) at gimptoolcompass.c:1192
#67367 0x0051e88a in gimp_measure_tool_start (coords=0xbfffef38, display=0x22dcf28, measure=0xd3ba60) at gimpmeasuretool.c:454
#67368 gimp_measure_tool_button_press (tool=0xd3ba60, coords=0xbfffef38, time=836017, state=GDK_BUTTON1_MASK, press_type=GIMP_BUTTON_PRESS_NORMAL, display=0x22dcf28) at gimpmeasuretool.c:250
#67369 0x0053f2f8 in gimp_tool_button_press (tool=0xd3ba60, coords=0xbfffef38, time=836017, state=GDK_BUTTON1_MASK, press_type=GIMP_BUTTON_PRESS_NORMAL, display=0x22dcf28) at gimptool.c:710
#67370 0x004f13a2 in tool_manager_button_press_active (gimp=0xd240a8, coords=0xbfffef38, time=836017, state=GDK_BUTTON1_MASK, press_type=GIMP_BUTTON_PRESS_NORMAL, display=0x22dcf28) at tool_manager.c:287
#67371 0x0058915a in gimp_display_shell_canvas_tool_events_internal (canvas=canvas at entry=0x280db90, event=event at entry=0x6b38b20, shell=shell at entry=0x2824060, next_event=0xbffff048) at gimpdisplayshell-tool-events.c:776
#67372 0x00589503 in gimp_display_shell_canvas_tool_events (canvas=0x280db90, event=0x6b38b20, shell=0x2824060) at gimpdisplayshell-tool-events.c:307
#67373 0xb7b4c6e7 in _gtk_marshal_BOOLEAN__BOXED (closure=0x282c1e0, return_value=0xbffff1d8, n_param_values=2, param_values=0xbffff220, invocation_hint=0xbffff1c4, marshal_data=0x0) at ./gtk/gtkmarshalers.c:84
#67374 0xb7099cc8 in g_closure_invoke (closure=0x282c1e0, return_value=0xbffff1d8, n_param_values=2, param_values=0xbffff220, invocation_hint=0xbffff1c4) at ../../../../gobject/gclosure.c:804
#67375 0xb70acf62 in signal_emit_unlocked_R (node=node at entry=0xeb03e0, detail=detail at entry=0, instance=instance at entry=0x280db90, emission_return=0xbffff2f8, instance_and_params=0xbffff220) at ../../../../gobject/gsignal.c:3635
#67376 0xb70b56c9 in g_signal_emit_valist (instance=<optimized out>, signal_id=<optimized out>, detail=<optimized out>, var_args=0xbffff3a0 "\310\363\377\277\220\264", <incomplete sequence \356>) at ../../../../gobject/gsignal.c:3401
#67377 0xb70b6155 in g_signal_emit (instance=0x280db90, signal_id=133, detail=0) at ../../../../gobject/gsignal.c:3447
#67378 0xb7c6e4d4 in gtk_widget_event_internal (widget=widget at entry=0x280db90, event=event at entry=0x6b38b20) at ./gtk/gtkwidget.c:5010
#67379 0xb7c6e779 in IA__gtk_widget_event (widget=0x280db90, event=0x6b38b20) at ./gtk/gtkwidget.c:4807
#67380 0xb7b4a459 in IA__gtk_propagate_event (widget=0x280db90, event=0x6b38b20) at ./gtk/gtkmain.c:2503
#67381 0xb7b4a8ad in IA__gtk_main_do_event (event=0x6b38b20) at ./gtk/gtkmain.c:1698
#67382 0xb79bb629 in gdk_event_dispatch (source=0xd02870, callback=0x0, user_data=0x0) at ./gdk/x11/gdkevents-x11.c:2425
#67383 0xb6fa4f30 in g_main_dispatch (context=0xd02950) at ../../../../glib/gmain.c:3177
#67384 g_main_context_dispatch (context=0xd02950) at ../../../../glib/gmain.c:3830
#67385 0xb6fa51a9 in g_main_context_iterate (context=0xd02950, block=block at entry=1, dispatch=dispatch at entry=1, self=<optimized out>) at ../../../../glib/gmain.c:3903
#67386 0xb6fa5559 in g_main_loop_run (loop=0x26b89f0) at ../../../../glib/gmain.c:4099
#67387 0x0048fc3d in app_run (full_prog_name=0xc74510 "/usr/bin/gimp", filenames=<optimized out>, alternate_system_gimprc=0x0, alternate_gimprc=0x0, session_name=0x0, batch_interpreter=0x0, batch_commands=0x0, as_new=0, no_interface=0, no_data=0, no_fonts=0, no_splash=0, be_verbose=0, use_shm=1, use_cpu_accel=1, console_messages=0, use_debug_handler=0, show_playground=0, show_debug_menu=0, stack_trace_mode=GIMP_STACK_TRACE_NEVER, pdb_compat_mode=GIMP_PDB_COMPAT_ON, backtrace_file=0xc73a70 "/home/benutzer/.config/GIMP/2.10/CrashLog/GIMP-crash-20565434526299610.txt") at app.c:433
#67388 0x0048f429 in main (argc=<optimized out>, argv=<optimized out>) at main.c:524
(gdb) list gimp_tool_widget_changed
367 void
368 gimp_tool_widget_changed (GimpToolWidget *widget)
369 {
370 g_return_if_fail (GIMP_IS_TOOL_WIDGET (widget));
371
372 g_signal_emit (widget, widget_signals[CHANGED], 0);
373 }
(gdb) list gimp_tool_compass_changed
447 static void
448 gimp_tool_compass_changed (GimpToolWidget *widget)
449 {
450 GimpToolCompass *compass = GIMP_TOOL_COMPASS (widget);
451 GimpToolCompassPrivate *private = compass->private;
452 GimpDisplayShell *shell = gimp_tool_widget_get_shell (widget);
453 gdouble angle1;
454 gdouble angle2;
455 gint draw_arc = 0;
456 gboolean draw_arc_line = FALSE;
457 gdouble arc_line_display_length;
458 gdouble arc_line_length;
459
460 gimp_tool_compass_update_angle (compass, private->orientation, FALSE); <<<<<<<<<<<<<<<
461
462 angle1 = -atan2 (private->radius1.y * shell->scale_y,
463 private->radius1.x * shell->scale_x);
464 angle2 = -private->display_angle;
465
466 gimp_canvas_line_set (private->line1,
467 private->x[0],
468 private->y[0],
469 private->x[1],
470 private->y[1]);
471 gimp_canvas_item_set_visible (private->line1, private->n_points > 1);
472 if (private->n_points > 1 &&
473 gimp_canvas_item_transform_distance (private->line1,
474 private->x[0],
475 private->y[0],
476 private->x[1],
477 private->y[1]) > ARC_RADIUS)
478 {
479 draw_arc++;
480 }
481
482
483 arc_line_display_length = ARC_RADIUS +
484 (GIMP_CANVAS_HANDLE_SIZE_CROSS >> 1) +
485 ARC_GAP;
486 arc_line_length = arc_line_display_length /
487 hypot (private->radius2.x * shell->scale_x,
488 private->radius2.y * shell->scale_y);
489
490 if (private->n_points > 2)
491 {
492 gdouble length = gimp_canvas_item_transform_distance (private->line2,
493 private->x[0],
494 private->y[0],
495 private->x[2],
496 private->y[2]);
497
498 if (length > ARC_RADIUS)
499 {
500 draw_arc++;
501 draw_arc_line = TRUE;
502
503 if (length > arc_line_display_length)
504 {
505 gimp_canvas_line_set (
506 private->line2,
507 private->x[0] + private->radius2.x * arc_line_length,
508 private->y[0] + private->radius2.y * arc_line_length,
509 private->x[2],
510 private->y[2]);
511 gimp_canvas_item_set_visible (private->line2, TRUE);
512 }
513 else
514 {
515 gimp_canvas_item_set_visible (private->line2, FALSE);
516 }
517 }
518 else
519 {
520 gimp_canvas_line_set (private->line2,
521 private->x[0],
522 private->y[0],
523 private->x[2],
524 private->y[2]);
525 gimp_canvas_item_set_visible (private->line2, TRUE);
526 }
527 }
528 else
529 {
530 gimp_canvas_item_set_visible (private->line2, FALSE);
531 }
532
533 gimp_canvas_handle_set_position (private->arc,
534 private->x[0], private->y[0]);
535 gimp_canvas_handle_set_angles (private->arc, angle1, angle2);
536 gimp_canvas_item_set_visible (private->arc,
537 private->n_points > 1 &&
538 draw_arc == private->n_points - 1 &&
539 fabs (angle2) > EPSILON);
540
541 arc_line_length = (ARC_RADIUS + (GIMP_CANVAS_HANDLE_SIZE_CROSS >> 1)) /
542 hypot (private->radius2.x * shell->scale_x,
543 private->radius2.y * shell->scale_y);
544
545 gimp_canvas_line_set (private->arc_line,
546 private->x[0],
547 private->y[0],
548 private->x[0] + private->radius2.x * arc_line_length,
549 private->y[0] + private->radius2.y * arc_line_length);
550 gimp_canvas_item_set_visible (private->arc_line,
551 (private->n_points == 2 || draw_arc_line) &&
552 fabs (angle2) > EPSILON);
553
554 gimp_canvas_handle_set_position (private->handles[0],
555 private->x[0], private->y[0]);
556 gimp_canvas_item_set_visible (private->handles[0],
557 private->n_points > 0);
558
559 gimp_canvas_handle_set_position (private->handles[1],
560 private->x[1], private->y[1]);
561 gimp_canvas_item_set_visible (private->handles[1],
562 private->n_points > 1);
563
564 gimp_canvas_handle_set_position (private->handles[2],
565 private->x[2], private->y[2]);
566 gimp_canvas_item_set_visible (private->handles[2],
567 private->n_points > 2);
568
569 gimp_tool_compass_update_hilight (compass);
570 }
(gdb) list gimp_tool_compass_update_angle
1069 static void
1070 gimp_tool_compass_update_angle (GimpToolCompass *compass,
1071 GimpCompassOrientation orientation,
1072 gboolean flip)
1073 {
1074 GimpToolWidget *widget = GIMP_TOOL_WIDGET (compass);
1075 GimpToolCompassPrivate *private = compass->private;
1076 GimpDisplayShell *shell = gimp_tool_widget_get_shell (widget);
1077 GimpImage *image = gimp_display_get_image (shell->display);
1078 GimpVector2 radius1;
1079 GimpVector2 radius2;
1080 gdouble pixel_angle;
1081 gdouble unit_angle;
1082 gdouble xres;
1083 gdouble yres;
1084
1085 gimp_image_get_resolution (image, &xres, &yres);
1086
1087 private->radius1.x = private->x[1] - private->x[0];
1088 private->radius1.y = private->y[1] - private->y[0];
1089
1090 if (private->n_points == 3)
1091 {
1092 private->radius2.x = private->x[2] - private->x[0];
1093 private->radius2.y = private->y[2] - private->y[0];
1094 }
1095 else
1096 {
1097 gdouble angle = -shell->rotate_angle * G_PI / 180.0;
1098
1099 if (orientation == GIMP_COMPASS_ORIENTATION_VERTICAL)
1100 angle -= G_PI / 2.0;
1101
1102 if (flip)
1103 angle += G_PI;
1104
1105 if (shell->flip_horizontally)
1106 angle = G_PI - angle;
1107 if (shell->flip_vertically)
1108 angle = -angle;
1109
1110 private->radius2.x = cos (angle);
1111 private->radius2.y = sin (angle);
1112
1113 if (! shell->dot_for_dot)
1114 {
1115 private->radius2.x *= xres;
1116 private->radius2.y *= yres;
1117
1118 gimp_vector2_normalize (&private->radius2);
1119 }
1120 }
1121
1122 radius1 = private->radius1;
1123 radius2 = private->radius2;
1124
1125 pixel_angle = atan2 (gimp_vector2_cross_product (&radius1, &radius2).x,
1126 gimp_vector2_inner_product (&radius1, &radius2));
1127
1128 radius1.x /= xres;
1129 radius1.y /= yres;
1130
1131 radius2.x /= xres;
1132 radius2.y /= yres;
1133
1134 unit_angle = atan2 (gimp_vector2_cross_product (&radius1, &radius2).x,
1135 gimp_vector2_inner_product (&radius1, &radius2));
1136
1137 if (shell->dot_for_dot)
1138 private->display_angle = pixel_angle;
1139 else
1140 private->display_angle = unit_angle;
1141
1142 if (private->n_points == 2)
1143 {
1144 if (! flip && fabs (private->display_angle) > G_PI / 2.0 + EPSILON)
1145 {
1146 gimp_tool_compass_update_angle (compass, orientation, TRUE);
1147
1148 return;
1149 }
1150 else if (orientation == GIMP_COMPASS_ORIENTATION_AUTO &&
1151 fabs (private->display_angle) > G_PI / 4.0 + EPSILON)
1152 {
1153 gimp_tool_compass_update_angle (compass,
1154 GIMP_COMPASS_ORIENTATION_VERTICAL,
1155 FALSE);
1156
1157 return;
1158 }
1159 }
1160
1161 if (pixel_angle != private->pixel_angle)
1162 {
1163 private->pixel_angle = pixel_angle;
1164
1165 g_object_notify (G_OBJECT (compass), "pixel-angle");
1166 }
1167
1168 if (unit_angle != private->unit_angle)
1169 {
1170 private->unit_angle = unit_angle;
1171
1172 g_object_notify (G_OBJECT (compass), "unit-angle"); <<<<<<<<<<<<<<<
1173 }
1174 }
(gdb) print unit_angle
$1 = <optimized out>
(gdb) print private->unit_angle
$2 = 2.3517500750113856
(gdb) print private
$3 = (GimpToolCompassPrivate *) 0x22838e0
(gdb) disassemble 0x59a0ff,0x59a0ff+0x60
Dump of assembler code from 0x59a0ff to 0x59a15f:
0x0059a0ff <gimp_tool_compass_update_angle+511>: pop %ecx
0x0059a100 <gimp_tool_compass_update_angle+512>: fldl 0x20(%esp)
0x0059a104 <gimp_tool_compass_update_angle+516>: fstpl (%esp)
0x0059a107 <gimp_tool_compass_update_angle+519>: pushl 0x94(%esp)
0x0059a10e <gimp_tool_compass_update_angle+526>: pushl 0x94(%esp)
=> 0x0059a115 <gimp_tool_compass_update_angle+533>: call 0x487650 <atan2 at plt>
0x0059a11a <gimp_tool_compass_update_angle+538>: add $0x10,%esp
0x0059a11d <gimp_tool_compass_update_angle+541>: mov 0xa8(%edi),%esi
0x0059a123 <gimp_tool_compass_update_angle+547>: fld %st(0)
0x0059a125 <gimp_tool_compass_update_angle+549>: fldl 0x20(%esp)
0x0059a129 <gimp_tool_compass_update_angle+553>: fxch %st(1)
0x0059a12b <gimp_tool_compass_update_angle+555>: test %esi,%esi
0x0059a12d <gimp_tool_compass_update_angle+557>: fcmovne %st(1),%st
0x0059a12f <gimp_tool_compass_update_angle+559>: cmpl $0x2,0x4(%ebp)
0x0059a133 <gimp_tool_compass_update_angle+563>: fstl 0x40(%ebp)
0x0059a136 <gimp_tool_compass_update_angle+566>: je 0x59a1d8 <gimp_tool_compass_update_angle+728>
0x0059a13c <gimp_tool_compass_update_angle+572>: fstp %st(0)
0x0059a13e <gimp_tool_compass_update_angle+574>: jmp 0x59a148 <gimp_tool_compass_update_angle+584>
0x0059a140 <gimp_tool_compass_update_angle+576>: fstp %st(0)
0x0059a142 <gimp_tool_compass_update_angle+578>: lea 0x0(%esi),%esi
0x0059a148 <gimp_tool_compass_update_angle+584>: fldl 0x48(%ebp)
0x0059a14b <gimp_tool_compass_update_angle+587>: fucomip %st(1),%st
0x0059a14d <gimp_tool_compass_update_angle+589>: jp 0x59a288 <gimp_tool_compass_update_angle+904>
0x0059a153 <gimp_tool_compass_update_angle+595>: jne 0x59a290 <gimp_tool_compass_update_angle+912>
0x0059a159 <gimp_tool_compass_update_angle+601>: fstp %st(0)
0x0059a15b <gimp_tool_compass_update_angle+603>: fldl 0x50(%ebp)
0x0059a15e <gimp_tool_compass_update_angle+606>: fucomip %st(1),%st
End of assembler dump.
(gdb) nexti
0x0059a14b 1161 if (pixel_angle != private->pixel_angle)
1: unit_angle = <optimized out>
2: x/i $pc
=> 0x59a14b <gimp_tool_compass_update_angle+587>: fucomip %st(1),%st
3: private->unit_angle = 2.188940552730084
(gdb) info float
R7: Valid 0x40008c179a1db749b5de +2.188940552730083914
R6: Valid 0x40008c179a1db749b800 +2.188940552730084033
=>R5: Valid 0x40008c179a1db749b800 +2.188940552730084033
R4: Empty 0x00000000000000000000
R3: Empty 0x4006b100000000000000
R2: Empty 0x00000000000000000000
R1: Empty 0x00000000000000000000
R0: Empty 0x00000000000000000000
Status Word: 0x2837 IE DE ZE UE PE
TOP: 5
Control Word: 0x037f IM DM ZM OM UM PM
PC: Extended Precision (64-bits)
RC: Round to nearest
Tag Word: 0x03ff
Instruction Pointer: 0x00:0x00000000
Operand Pointer: 0x00:0x00000000
Opcode: 0x0000
(gdb) nexti
0x0059a14d 1161 if (pixel_angle != private->pixel_angle)
1: unit_angle = <optimized out>
2: x/i $pc
=> 0x59a14d <gimp_tool_compass_update_angle+589>: jp 0x59a288 <gimp_tool_compass_update_angle+904>
3: private->unit_angle = 2.188940552730084
(gdb) info float
R7: Valid 0x40008c179a1db749b5de +2.188940552730083914
=>R6: Valid 0x40008c179a1db749b800 +2.188940552730084033
R5: Empty 0x40008c179a1db749b800
R4: Empty 0x00000000000000000000
R3: Empty 0x4006b100000000000000
R2: Empty 0x00000000000000000000
R1: Empty 0x00000000000000000000
R0: Empty 0x00000000000000000000
Status Word: 0x3037 IE DE ZE UE PE
TOP: 6
Control Word: 0x037f IM DM ZM OM UM PM
PC: Extended Precision (64-bits)
RC: Round to nearest
Tag Word: 0x0fff
Instruction Pointer: 0x00:0x00000000
Operand Pointer: 0x00:0x00000000
Opcode: 0x0000
(gdb) info reg
eax 0x0 0
ecx 0xb6f5a000 -1225416704
edx 0x0 0
ebx 0xc55ee0 12934880
esp 0xbfffdc70 0xbfffdc70
ebp 0x22838e0 0x22838e0
esi 0x1 1
edi 0x28380e0 42172640
eip 0x59a14d 0x59a14d <gimp_tool_compass_update_angle+589>
eflags 0x200242 [ ZF IF ID ]
cs 0x73 115
ss 0x7b 123
ds 0x7b 123
es 0x7b 123
fs 0x0 0
gs 0x33 51
(gdb) list 89
89 struct _GimpToolCompassPrivate
90 {
99 gdouble pixel_angle;
114 };
1080 gdouble pixel_angle;
https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html
-ffloat-store
Do not store floating-point variables in registers, and inhibit other options that might change whether a floating-point value is taken from a register or memory.
This option prevents undesirable excess precision on machines such as the 68000 where the floating registers (of the 68881) keep more precision than a double is supposed to have. Similarly for the x86 architecture. For most programs, the excess precision does only good, but a few programs rely on the precise definition of IEEE floating point. Use -ffloat-store for such programs, after modifying them to store all pertinent intermediate computations into variables.
gdb -q --args gimp
set height 0
set width 0
set pagination off
directory /home/benutzer/gimp/orig/gimp-2.10.6/app/display
run
More information about the pkg-gnome-maintainers
mailing list