Bug#929113: gimp crashed while editing

Bernhard Übelacker bernhardu at mailbox.org
Thu May 30 01:54:25 BST 2019


Dear Maintainer,
I just tried to have a look at this
backtrace by the submitter:

    Thread 1 (Thread 0x7f81021b1e00 (LWP 3464)):
    ...
    #6  0x7f810411f 730 in <signal handler called> () at libpthread.so.0
    #7  0x56302b0c9 97f in  ()
    #8  0x56302b0c9 c28 in  ()
    #9  0x7f8104303 dd8 in g_main_context_dispatch () at libglib-2.0.so.0
    #10 0x7f8104304 1c8 in  () at libglib-2.0.so.0
    #11 0x7f8104304 4c2 in g_main_loop_run () at libglib-2.0.so.0
    #12 0x56302ad56 cb7 in app_run ()
    #13 0x56302ad56 5b5 in main ()

I think that translates to these symbols:

    #0  0x555555997 97f in gimp_projection_chunk_render_iteration () at gimpprojection.c:1416
    #1  0x555555997 c28 in gimp_projection_chunk_render_callback () at gimpprojection.c:857
    #2  0x7ffff6eb1 dd8 in g_main_dispatch () at ../../../glib/gmain.c:3182
    #3  0x7ffff6eb1 dd8 in g_main_context_dispatch () at ../../../glib/gmain.c:3847
    #4  0x7ffff6eb2 1c8 in g_main_context_iterate () at ../../../glib/gmain.c:3920
    #5  0x7ffff6eb2 4c2 in g_main_loop_run () at ../../../glib/gmain.c:4116
    #6  0x555555624 cb7 in app_run () at app.c:440
    #7  0x555555624 5b5 in main () at main.c:524

Unfortuantely at this offset 97f is just a idiv instruction.
Without having the registers values I could
not make a clue out of it.

    (gdb) disassemble 0x55555599797f-0x10,0x55555599797f+0x8
    Dump of assembler code from 0x55555599796f to 0x555555997987:
       0x555555997 96f <gimp_projection_chunk_render_iteration+367>:     cmp    %r13d,%eax
       0x555555997 972 <gimp_projection_chunk_render_iteration+370>:     mov    %eax,%r12d
       0x555555997 975 <gimp_projection_chunk_render_iteration+373>:     mov    0x4c(%rbx),%eax
       0x555555997 978 <gimp_projection_chunk_render_iteration+376>:     cmovg  %r13d,%r12d
       0x555555997 97c <gimp_projection_chunk_render_iteration+380>:     xor    %edi,%edi
       0x555555997 97e <gimp_projection_chunk_render_iteration+382>:     cltd   
    => 0x555555997 97f <gimp_projection_chunk_render_iteration+383>:     idiv   %r12d
       0x555555997 982 <gimp_projection_chunk_render_iteration+386>:     cvtsi2sd %eax,%xmm0
       0x555555997 986 <gimp_projection_chunk_render_iteration+390>:     callq  0x555555997500 <gimp_projection_round_chunk_size>
    End of assembler dump.


Unfortunately gimp seems to call gdb but does just
retrieve backtraces but not registers.

Maybe in libgimpbase/gimputils.c a line
like following could do that:

       gchar *args[9] = { "gdb", "-batch",
+                         "-ex", "info reg",
                          "-ex", "info threads",
                          "-ex", "thread apply all backtrace full",


Register $r12d might have been 0, in that case
gimp would throw a similar exception.

Also I could not find a matching upstream bug report.

Kind regards,
Bernhard
-------------- next part --------------

# Debian Buster amd64 qemu VM


apt update
apt dist-upgrade


apt install systemd-coredump xserver-xorg dbus-x11 lightdm openbox gdb mc gimp gimp-dbgsym libglib2.0-0-dbgsym
apt build-dep gimp



mkdir /home/benutzer/source/gimp/orig -p
cd    /home/benutzer/source/gimp/orig
apt source gimp
cd



export DISPLAY=:0

gdb -q --args gimp

set width 0
set pagination off
run

ctrl+c

generate-core-file ~/gimp.core



gdb -q /usr/bin/gimp --core  gimp.core

set width 0
set pagination off
directory /home/benutzer/source/gimp/orig/gimp-2.10.8/app/core
b *0x00005555556245b0
b *0x0000555555624cb2
b *0x00007ffff6eb64bd
b *0x00007ffff6eb61c3
b *0x00007ffff6eb5dd5
b *0x0000555555997c23
b *0x000055555599797f

###########

# From submitter:
Thread 1 (Thread 0x7f81021b1e00 (LWP 3464)):
#0  0x7f810411e 544 in __libc_read (nbytes=256, buf=0x7ffe67e0a850, fd=14) at ../sysdeps/unix/sysv/linux/read.c:26
#1  0x7f810411e 544 in __libc_read (fd=14, buf=0x7ffe67e0a850, nbytes=256) at ../sysdeps/unix/sysv/linux/read.c:24
#2  0x7f8104e17 d34 in gimp_stack_trace_print () at libgimpbase-2.0.so.0
#3  0x56302ad57 4a0 in  ()
#4  0x56302ad57 8d8 in  ()
#5  0x56302ad58 037 in  ()
#6  0x7f810411f 730 in <signal handler called> () at libpthread.so.0
#7  0x56302b0c9 97f in  ()
#8  0x56302b0c9 c28 in  ()
#9  0x7f8104303 dd8 in g_main_context_dispatch () at libglib-2.0.so.0
#10 0x7f8104304 1c8 in  () at libglib-2.0.so.0
#11 0x7f8104304 4c2 in g_main_loop_run () at libglib-2.0.so.0
#12 0x56302ad56 cb7 in app_run ()
#13 0x56302ad56 5b5 in main ()


   0x000055555599797f <+383>:   idiv   %r12d
Breakpoint 7 at 0x55555599797f: file gimpprojection.c, line 1416.

   0x0000555555997 c23 <gimp_projection_chunk_render_callback+83>:       callq  0x555555997800 <gimp_projection_chunk_render_iteration>
   0x0000555555997 c28 <gimp_projection_chunk_render_callback+88>:       test   %eax,%eax
Breakpoint 6 at 0x555555997c23: file gimpprojection.c, line 857.


   0x00007ffff6eb5 dd5 <+341>:   callq  *%r15
   0x00007ffff6eb5 dd8 <+344>:   mov    0x10(%rsp),%rcx
Breakpoint 5 at 0x7ffff6eb5dd5: file ../../../glib/gmain.c, line 3182.


   0x00007ffff6eb6 1c3 <+515>:   callq  0x7ffff6eb5c80 <g_main_context_dispatch>
   0x00007ffff6eb6 1c8 <+520>:   jmpq   0x7ffff6eb60ee <g_main_context_iterate+302>
Breakpoint 4 at 0x7ffff6eb61c3: file ../../../glib/gmain.c, line 3920.


   0x00007ffff6eb6 4bd <+173>:   callq  0x7ffff6eb5fc0 <g_main_context_iterate>
   0x00007ffff6eb6 4c2 <+178>:   mov    0x8(%rbx),%eax
Breakpoint 3 at 0x7ffff6eb64bd: file ../../../glib/gmain.c, line 4116.


   0x0000555555624 cb2 <+850>:   callq  0x5555556207e0 <g_main_loop_run at plt>
   0x0000555555624 cb7 <+855>:   mov    %rbx,%rdi
Breakpoint 2 at 0x555555624cb2: file app.c, line 440.


   0x0000555555624 5b0 <+912>:   callq  0x555555624960 <app_run>
   0x0000555555624 5b5 <+917>:   mov    0xa0(%rsp),%rdi
Breakpoint 1 at 0x5555556245b0: file main.c, line 524.

------

  0x56302b0c9c28 in ???
- 0x56302ad565b5 in main
= 0x373673 offset

-> 0x00005555556245b5 + 0x373673 = 0x555555997C28      ->      disassemble 0x555555997C28-0x20,0x555555997C28+0x20   -->  gimp_projection_chunk_render_callback+88


------

(gdb) list gimpprojection.c:1416
1412
1413    static gint
1414    gimp_projection_round_chunk_width (gdouble width)
1415    {
1416      gint w = gimp_projection_round_chunk_size (width, FALSE);
1417
1418      return CLAMP (w, GIMP_PROJECTION_CHUNK_MIN_WIDTH,
1419                       GIMP_PROJECTION_CHUNK_MAX_WIDTH);
1420    }

(gdb) list gimpprojection.c:1379,1412
1379
1380    static gint
1381    gimp_projection_round_chunk_size (gdouble  size,
1382                                      gboolean toward_zero)
1383    {
1384      /* round 'size' (up or down, depending on 'toward_zero') to the closest power
1385       * of 2
1386       */
1387
1388      if (size < 0.0)
1389        {
1390          return -gimp_projection_round_chunk_size (-size, toward_zero);
1391        }
1392      else if (size == 0.0)
1393        {
1394          return 0;
1395        }
1396      else if (size < 1.0)
1397        {
1398          return toward_zero ? 0 : 1;
1399        }
1400      else
1401        {
1402          gdouble log2_size = log (size) / G_LN2;
1403
1404          if (toward_zero)
1405            log2_size = floor (log2_size);
1406          else
1407            log2_size = ceil  (log2_size);
1408
1409          return 1 << (gint) log2_size;
1410        }
1411    }


-------


#0  0x555555997 97f in gimp_projection_chunk_render_iteration () at gimpprojection.c:1416
#1  0x555555997 c28 in gimp_projection_chunk_render_callback () at gimpprojection.c:857
#2  0x7ffff6eb1 dd8 in g_main_dispatch () at ../../../glib/gmain.c:3182
#3  0x7ffff6eb1 dd8 in g_main_context_dispatch () at ../../../glib/gmain.c:3847
#4  0x7ffff6eb2 1c8 in g_main_context_iterate () at ../../../glib/gmain.c:3920
#5  0x7ffff6eb2 4c2 in g_main_loop_run () at ../../../glib/gmain.c:4116
#6  0x555555624 cb7 in app_run () at app.c:440
#7  0x555555624 5b5 in main () at main.c:524



(gdb) disassemble 0x55555599797f-0x10,0x55555599797f+0x8
Dump of assembler code from 0x55555599796f to 0x555555997987:
   0x000055555599796f <gimp_projection_chunk_render_iteration+367>:     cmp    %r13d,%eax
   0x0000555555997972 <gimp_projection_chunk_render_iteration+370>:     mov    %eax,%r12d
   0x0000555555997975 <gimp_projection_chunk_render_iteration+373>:     mov    0x4c(%rbx),%eax
   0x0000555555997978 <gimp_projection_chunk_render_iteration+376>:     cmovg  %r13d,%r12d
   0x000055555599797c <gimp_projection_chunk_render_iteration+380>:     xor    %edi,%edi
   0x000055555599797e <gimp_projection_chunk_render_iteration+382>:     cltd   
=> 0x000055555599797f <gimp_projection_chunk_render_iteration+383>:     idiv   %r12d
   0x0000555555997982 <gimp_projection_chunk_render_iteration+386>:     cvtsi2sd %eax,%xmm0
   0x0000555555997986 <gimp_projection_chunk_render_iteration+390>:     callq  0x555555997500 <gimp_projection_round_chunk_size>
End of assembler dump.


More information about the pkg-gnome-maintainers mailing list