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