anholt/mesa

mesa 18.3.1 segfault while starting gnome-shell or weston

VestniK opened this issue · 4 comments

I can not start neither gnome-shell(wayland) nor weston (I have never tried to run X on this board don't know if it's broken too or not) after recent mesa package upgrade on my raspberry pi model 2B running ArchLinux Arm. Both compositors failing with segfault inside the vc4_dri.so

I have played with apitrace and gdb to gather information which I hope might be helpful for investigation.

System details:

[alarm@alarmpi ~]$ pacman -Qo /usr/lib/dri/vc4_dri.so 
/usr/lib/dri/vc4_dri.so is owned by mesa 18.3.1-1
[alarm@alarmpi ~]$ uname -a
Linux alarmpi 4.14.93-2-ARCH #1 SMP Wed Jan 16 15:44:12 UTC 2019 armv7l GNU/Linux

apitraces:
traces.zip

Weston segfault details:

(gdb) thread apply all bt              

Thread 1 (Thread 0x7688ce70 (LWP 254)):
#0  0x76087e7c in  () at /usr/lib/dri/vc4_dri.so
#1  0x00000010 in  ()
(gdb) disassemble 0x76087da0,0x76087eb4
Dump of assembler code from 0x76087da0 to 0x76087eb4:
   0x76087da0:  add     sp, sp, #12
   0x76087da4:  pop     {r4, r5, r6, r7, r8, r9, r10, r11, pc}
   0x76087da8:  push    {r4, r5, r6, r7, r8, r9, r10, r11, lr}
   0x76087dac:  sub     sp, sp, #12
   0x76087db0:  ldr     lr, [sp, #48]   ; 0x30
   0x76087db4:  ldr     r12, [sp, #52]  ; 0x34
   0x76087db8:  sub     lr, lr, #1
   0x76087dbc:  cmp     lr, #7
   0x76087dc0:  addls   pc, pc, lr, lsl #2
   0x76087dc4:  b       0x7608803c
   0x76087dc8:  b       0x76087f8c
   0x76087dcc:  b       0x76087ebc
   0x76087dd0:  b       0x7608803c
   0x76087dd4:  b       0x76087de8
   0x76087dd8:  b       0x7608803c
   0x76087ddc:  b       0x7608803c
   0x76087de0:  b       0x7608803c
   0x76087de4:  b       0x7608803c
   0x76087de8:  ldr     r5, [r12]
   0x76087dec:  ldrsh   r4, [r12, #4]
   0x76087df0:  tst     r5, #3
   0x76087df4:  ldrsh   lr, [r12, #12]
   0x76087df8:  bne     0x760881c8
   0x76087dfc:  tst     r4, #3
   0x76087e00:  bne     0x760881c8
   0x76087e04:  ldr     r8, [r12, #8]
   0x76087e08:  ands    r10, r8, #3
   0x76087e0c:  bne     0x760881c8
   0x76087e10:  tst     lr, #3
   0x76087e14:  bne     0x760881c8
   0x76087e18:  cmp     lr, #0
   0x76087e1c:  beq     0x76087eb4
   0x76087e20:  sub     r6, r8, #1
   0x76087e24:  lsl     r11, r3, #2
   0x76087e28:  mul     r12, r4, r1
   0x76087e2c:  lsr     r4, r6, #2
   0x76087e30:  add     r4, r4, #1
   0x76087e34:  lsl     r1, r1, #2
   0x76087e38:  lsl     r5, r5, #6
   0x76087e3c:  str     r5, [sp]
   0x76087e40:  lsl     r4, r4, #4
   0x76087e44:  str     r4, [sp, #4]
   0x76087e48:  cmp     r8, #0
   0x76087e4c:  beq     0x76087ea0
   0x76087e50:  ldr     r4, [sp, #4]
   0x76087e54:  ldr     r6, [sp]
   0x76087e58:  add     r9, r4, r2
   0x76087e5c:  mov     r4, r2
   0x76087e60:  add     r5, r12, r6, lsr #2
   0x76087e64:  add     r7, r4, #8
   0x76087e68:  add     r5, r0, r5
   0x76087e6c:  vld1.8  {d0}, [r4], r3
   0x76087e70:  vld1.8  {d1}, [r7], r3
   0x76087e74:  vld1.8  {d2}, [r4], r3
   0x76087e78:  vld1.8  {d3}, [r7], r3
=> 0x76087e7c:  vld1.8  {d4}, [r4], r3
   0x76087e80:  vld1.8  {d5}, [r7], r3
   0x76087e84:  vld1.8  {d6}, [r4]
   0x76087e88:  vld1.8  {d7}, [r7]
   0x76087e8c:  vstmia  r5, {d0-d7}
   0x76087e90:  add     r4, r4, #16
   0x76087e94:  add     r6, r6, #256    ; 0x100
   0x76087e98:  cmp     r9, r4
   0x76087e9c:  bne     0x76087e60
   0x76087ea0:  add     r10, r10, #4
   0x76087ea4:  add     r2, r2, r11
   0x76087ea8:  cmp     r10, lr
   0x76087eac:  add     r12, r12, r1
   0x76087eb0:  bcc     0x76087e48
End of assembler dump.
(gdb) p/x $r4
$1 = 0x70138520
(gdb) p/x $r3
$2 = 0x1e00

Gnome shell crash details:

(gdb) thread apply all bt

Thread 9 (Thread 0x69f33040 (LWP 1533)):
#0  0x75ff9138 in pthread_cond_wait@@GLIBC_2.4 () at /usr/lib/libpthread.so.0
#1  0x741f6c50 in mozilla::detail::ConditionVariableImpl::wait(mozilla::detail::MutexImpl&) () at /usr/lib/libmozjs-60.so.0
#2  0x741f6e54 in mozilla::detail::ConditionVariableImpl::wait_for(mozilla::detail::MutexImpl&, mozilla::BaseTimeDuration<mozilla::TimeDurationValueCalculator> const&) () at /usr/lib/libmozjs-60.so.0
#3  0x73f79528 in  () at /usr/lib/libmozjs-60.so.0

Thread 8 (Thread 0x69b31040 (LWP 1535)):
#0  0x75ff9138 in pthread_cond_wait@@GLIBC_2.4 () at /usr/lib/libpthread.so.0
#1  0x741f6c50 in mozilla::detail::ConditionVariableImpl::wait(mozilla::detail::MutexImpl&) () at /usr/lib/libmozjs-60.so.0
#2  0x741f6e54 in mozilla::detail::ConditionVariableImpl::wait_for(mozilla::detail::MutexImpl&, mozilla::BaseTimeDuration<mozilla::TimeDurationValueCalculator> const&) () at /usr/lib/libmozjs-60.so.0
#3  0x73f79528 in  () at /usr/lib/libmozjs-60.so.0

Thread 7 (Thread 0x6efff040 (LWP 1514)):
#0  0x75f6c688 in poll () at /usr/lib/libc.so.6
#1  0x76ac7624 in  () at /usr/lib/libglib-2.0.so.0

Thread 6 (Thread 0x6a134040 (LWP 1532)):
#0  0x75ff9138 in pthread_cond_wait@@GLIBC_2.4 () at /usr/lib/libpthread.so.0
#1  0x741f6c50 in mozilla::detail::ConditionVariableImpl::wait(mozilla::detail::MutexImpl&) () at /usr/lib/libmozjs-60.so.0
#2  0x741f6e54 in mozilla::detail::ConditionVariableImpl::wait_for(mozilla::detail::MutexImpl&, mozilla::BaseTimeDuration<mozilla::TimeDurationValueCalculator> const&) () at /usr/lib/libmozjs-60.so.0
#3  0x73f79528 in  () at /usr/lib/libmozjs-60.so.0

Thread 5 (Thread 0x703ff040 (LWP 1512)):
#0  0x75f6c688 in poll () at /usr/lib/libc.so.6
#1  0x76ac7624 in  () at /usr/lib/libglib-2.0.so.0

--Type <RET> for more, q to quit, c to continue without paging--
Thread 4 (Thread 0x69d32040 (LWP 1534)):
#0  0x75ff9138 in pthread_cond_wait@@GLIBC_2.4 () at /usr/lib/libpthread.so.0
#1  0x741f6c50 in mozilla::detail::ConditionVariableImpl::wait(mozilla::detail::MutexImpl&) () at /usr/lib/libmozjs-60.so.0
#2  0x741f6e54 in mozilla::detail::ConditionVariableImpl::wait_for(mozilla::detail::MutexImpl&, mozilla::BaseTimeDuration<mozilla::TimeDurationValueCalculator> const&) () at /usr/lib/libmozjs-60.so.0
#3  0x73f79528 in  () at /usr/lib/libmozjs-60.so.0

Thread 3 (Thread 0x6f9ff040 (LWP 1513)):
#0  0x75f730fc in syscall () at /usr/lib/libc.so.6
#1  0x76b16b94 in g_cond_wait_until () at /usr/lib/libglib-2.0.so.0
#2  0x76a95d64 in  () at /usr/lib/libglib-2.0.so.0

Thread 2 (Thread 0x70d0c040 (LWP 1511)):
#0  0x75f6c688 in poll () at /usr/lib/libc.so.6
#1  0x76ac7624 in  () at /usr/lib/libglib-2.0.so.0

Thread 1 (Thread 0x70d0f280 (LWP 1509)):
#0  0x6e2a7e8c in  () at /usr/lib/dri/vc4_dri.so
#1  0x00000010 in  ()
(gdb) disassemble 0x6e2a7da0,0x6e2a7e8cb4 
Dump of assembler code from 0x6e2a7da0 to 0x2a7e8cb4:
End of assembler dump.
(gdb) disassemble 0x6e2a7da0,0x6e2a7eb4  
Dump of assembler code from 0x6e2a7da0 to 0x6e2a7eb4:
   0x6e2a7da0:  add     sp, sp, #12
   0x6e2a7da4:  pop     {r4, r5, r6, r7, r8, r9, r10, r11, pc}
   0x6e2a7da8:  push    {r4, r5, r6, r7, r8, r9, r10, r11, lr}
   0x6e2a7dac:  sub     sp, sp, #12
   0x6e2a7db0:  ldr     lr, [sp, #48]   ; 0x30
   0x6e2a7db4:  ldr     r12, [sp, #52]  ; 0x34
   0x6e2a7db8:  sub     lr, lr, #1
   0x6e2a7dbc:  cmp     lr, #7
   0x6e2a7dc0:  addls   pc, pc, lr, lsl #2
   0x6e2a7dc4:  b       0x6e2a803c
   0x6e2a7dc8:  b       0x6e2a7f8c
   0x6e2a7dcc:  b       0x6e2a7ebc
   0x6e2a7dd0:  b       0x6e2a803c
   0x6e2a7dd4:  b       0x6e2a7de8
   0x6e2a7dd8:  b       0x6e2a803c
   0x6e2a7ddc:  b       0x6e2a803c
   0x6e2a7de0:  b       0x6e2a803c
   0x6e2a7de4:  b       0x6e2a803c
   0x6e2a7de8:  ldr     r5, [r12]
   0x6e2a7dec:  ldrsh   r4, [r12, #4]
   0x6e2a7df0:  tst     r5, #3
   0x6e2a7df4:  ldrsh   lr, [r12, #12]
   0x6e2a7df8:  bne     0x6e2a81c8
   0x6e2a7dfc:  tst     r4, #3
   0x6e2a7e00:  bne     0x6e2a81c8
   0x6e2a7e04:  ldr     r8, [r12, #8]
   0x6e2a7e08:  ands    r10, r8, #3
   0x6e2a7e0c:  bne     0x6e2a81c8
   0x6e2a7e10:  tst     lr, #3
   0x6e2a7e14:  bne     0x6e2a81c8
   0x6e2a7e18:  cmp     lr, #0
   0x6e2a7e1c:  beq     0x6e2a7eb4
   0x6e2a7e20:  sub     r6, r8, #1
   0x6e2a7e24:  lsl     r11, r3, #2
   0x6e2a7e28:  mul     r12, r4, r1
   0x6e2a7e2c:  lsr     r4, r6, #2
   0x6e2a7e30:  add     r4, r4, #1
   0x6e2a7e34:  lsl     r1, r1, #2
   0x6e2a7e38:  lsl     r5, r5, #6
   0x6e2a7e3c:  str     r5, [sp]
   0x6e2a7e40:  lsl     r4, r4, #4
   0x6e2a7e44:  str     r4, [sp, #4]
   0x6e2a7e48:  cmp     r8, #0
   0x6e2a7e4c:  beq     0x6e2a7ea0
   0x6e2a7e50:  ldr     r4, [sp, #4]
   0x6e2a7e54:  ldr     r6, [sp]
   0x6e2a7e58:  add     r9, r4, r2
   0x6e2a7e5c:  mov     r4, r2
   0x6e2a7e60:  add     r5, r12, r6, lsr #2
   0x6e2a7e64:  add     r7, r4, #8
   0x6e2a7e68:  add     r5, r0, r5
   0x6e2a7e6c:  vld1.8  {d0}, [r4], r3
   0x6e2a7e70:  vld1.8  {d1}, [r7], r3
   0x6e2a7e74:  vld1.8  {d2}, [r4], r3
   0x6e2a7e78:  vld1.8  {d3}, [r7], r3
   0x6e2a7e7c:  vld1.8  {d4}, [r4], r3
   0x6e2a7e80:  vld1.8  {d5}, [r7], r3
   0x6e2a7e84:  vld1.8  {d6}, [r4]
   0x6e2a7e88:  vld1.8  {d7}, [r7]
=> 0x6e2a7e8c:  vstmia  r5, {d0-d7}
   0x6e2a7e90:  add     r4, r4, #16
   0x6e2a7e94:  add     r6, r6, #256    ; 0x100
   0x6e2a7e98:  cmp     r9, r4
   0x6e2a7e9c:  bne     0x6e2a7e60
   0x6e2a7ea0:  add     r10, r10, #4
   0x6e2a7ea4:  add     r2, r2, r11
   0x6e2a7ea8:  cmp     r10, lr
   0x6e2a7eac:  add     r12, r12, r1
   0x6e2a7eb0:  bcc     0x6e2a7e48
End of assembler dump.
(gdb) p/x $r5
$1 = 0x7050c000

Same problem with rpi 3 here, could be related to this.

Can you update to 18.3.3 and check again ? Did fix it for me.

I don't have spare time to play with my raspberry pi this week. I'll try to update mesa next week and write the results here. Looks like my issue is the one described in the article from the link.

I've tried to update mesa and run gnom-shell --wayland. Mesa 18.3.3 works fine.