[Bug 263845] graphics/libglvnd: crashes on armv7 with SIGILL

From: <bugzilla-noreply_at_freebsd.org>
Date: Sat, 07 May 2022 15:42:52 UTC
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=263845

            Bug ID: 263845
           Summary: graphics/libglvnd: crashes on armv7 with SIGILL
           Product: Ports & Packages
           Version: Latest
          Hardware: Any
                OS: Any
            Status: New
          Severity: Affects Only Me
          Priority: ---
         Component: Individual Port(s)
          Assignee: x11@FreeBSD.org
          Reporter: fuz@fuz.su
          Assignee: x11@FreeBSD.org
             Flags: maintainer-feedback?(x11@FreeBSD.org)

The following simple program crashes with SIGILL when compiled on armv7 FreeBSD
13:

#include <GL/gl.h>
int main()
{
        glGetError();
}

I am compiling with "cc -I/usr/local/lib -L/usr/local/include test.c -lGL.  My
package version is libglvnd 1.4.0_1 and I've tested this both on native armv7
and in an armv7 jail running on arm64.

The behaviour is extremely strange.  I am aware that glvnd does some sort of
dispatch logic to get to the platform's native driver, but this does not match
what I see.

When I try to debug this code, it seems that it is somehow iterating through
the entirety of the the libGL API, only to then crash after having gone through
glWriteMaskEXT.  I do not understand what the purpose of this is and it does
not seem to match any code I found in the library.

Digging further into this, it seems that the library is compiled in ARM mode,
but executed in Thumb mode for some reason (wtf).  I suspect this might be
because the source file src/GLdispatch/vnd-glapi/entry_armv7_tsd.c uses
".thumb_func" to label the stub entry points, but then they don't get compiled
in thumb mode for some reason.

-- 
You are receiving this mail because:
You are the assignee for the bug.