[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#979276: xserver-xorg-video-intel: Server fails to start: "Illegal instruction"



On Thu, Mar 18, 2021 at 09:39:36AM -0400, Stefan Monnier wrote:
> > I tried to reconstruct the given backtrace in [1].
> 
> Thanks,
> 
> > So the actual issue seems to be a "movq" instruction which
> > seems to be due to [3] a SSE2 instruction, which might
> > the "Pentium III M" is lacking, like Stefan already noted.
> > I am not sure where the current Debian baseline could be
> > consulted regarding this, maybe [4] could give a hint.
> 
> AFAIK Debian's i386 architecture does not (yet) require SSE2 (as
> witnessed by the existence of the package `sse2-support`).
> 
> Where does this instruction come from?
> Is it generated by GCC (and if so, why does GCC generate it)?
> 

I'm guessing because of this:
https://gitlab.freedesktop.org/xorg/driver/xf86-video-intel/-/blob/master/src/sna/blt.c#L37

Does the below help?

diff --git a/src/sna/blt.c b/src/sna/blt.c
index afc719f6..803c5142 100644
--- a/src/sna/blt.c
+++ b/src/sna/blt.c
@@ -626,17 +626,17 @@ memcpy_between_tiled_x__swizzle_0__sse2(const void *src, void *dst, int bpp,
                        assert(((uintptr_t)src_row & (tile_width - 1)) == 0);
                        to_memcpy(assume_aligned(dst_row, tile_width),
                                  assume_aligned(src_row, tile_width),
                                  w);
                }
        }
 }
 
-#pragma GCC push_options
+#pragma GCC pop_options
 #endif
 
 fast void
 memcpy_blt(const void *src, void *dst, int bpp,
           int32_t src_stride, int32_t dst_stride,
           int16_t src_x, int16_t src_y,
           int16_t dst_x, int16_t dst_y,
           uint16_t width, uint16_t height)


Cheers,
Julien


Reply to: