On 2019-01-13 2:52 p.m., John David Anglin wrote:
> Looks to me to be a NULL pointer check issue in mesa:
>
> static inline struct wl_drm_buffer *
> wayland_drm_buffer_get(struct wl_drm *drm, struct wl_resource *resource)
> {
>         if (resource == NULL)
>                 return NULL;
>
>         if (wl_resource_instance_of(resource, &wl_buffer_interface,
>                                     &drm->buffer_interface))
>                 return wl_resource_get_user_data(resource);
>         else
>                 return NULL;
> }
>
> (gdb) disass $pc-32-16,$pc+16
> Dump of assembler code from 0xec46dd14 to 0xec46dd54:
>    0xec46dd14 <dri2_query_wayland_buffer_wl+0>: stw rp,-14(sp)
>    0xec46dd18 <dri2_query_wayland_buffer_wl+4>: ldo 80(sp),sp
>    0xec46dd1c <dri2_query_wayland_buffer_wl+8>: ldw -b4(sp),ret0
>    0xec46dd20 <dri2_query_wayland_buffer_wl+12>:        stw r5,-74(sp)
>    0xec46dd24 <dri2_query_wayland_buffer_wl+16>:        copy r23,r5
>    0xec46dd28 <dri2_query_wayland_buffer_wl+20>:        stw r4,-70(sp)
>    0xec46dd2c <dri2_query_wayland_buffer_wl+24>:        stw r3,-6c(sp)
>    0xec46dd30 <dri2_query_wayland_buffer_wl+28>:        stw r19,-20(sp)
>    0xec46dd34 <dri2_query_wayland_buffer_wl+32>:        stw ret0,-78(sp)
>    0xec46dd38 <dri2_query_wayland_buffer_wl+36>:        ldw 58(r25),ret0
>    0xec46dd3c <dri2_query_wayland_buffer_wl+40>:        ldo c0(ret0),ret0
>    0xec46dd40 <dri2_query_wayland_buffer_wl+44>:        movb,=
> r24,r3,0xec46dd94 <dri2_query_wayland_buffer_wl+128>
> => 0xec46dd44 <dri2_query_wayland_buffer_wl+48>:        ldw 0(ret0),ret0
>    0xec46dd48 <dri2_query_wayland_buffer_wl+52>:        addil L%800,r19,r1 
>    0xec46dd4c <dri2_query_wayland_buffer_wl+56>:        copy r19,r4
>    0xec46dd50 <dri2_query_wayland_buffer_wl+60>:        ldw 200(r1),r25
>
> The NULL pointer check has bee4n optimized away.
Actually, it has only been partially optimized away.  It appears the
check is still there (movb instruction)
but register r3 contains an undefined value (it is not an argument
register).  So, this seems a wrong
code bug.

Why are we building with gcc-7?

-- 
John David Anglin  dave.ang...@bell.net

Reply via email to