Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package libglvnd for openSUSE:Factory 
checked in at 2022-10-03 13:43:48
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/libglvnd (Old)
 and      /work/SRC/openSUSE:Factory/.libglvnd.new.2275 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "libglvnd"

Mon Oct  3 13:43:48 2022 rev:27 rq:1007524 version:1.5.0

Changes:
--------
--- /work/SRC/openSUSE:Factory/libglvnd/libglvnd.changes        2022-07-21 
11:32:55.818924155 +0200
+++ /work/SRC/openSUSE:Factory/.libglvnd.new.2275/libglvnd.changes      
2022-10-03 13:43:50.065226996 +0200
@@ -1,0 +2,11 @@
+Sat Oct  1 11:15:04 UTC 2022 - Dirk M??ller <dmuel...@suse.com>
+
+- update to 1.5.0:
+  * Add BTI landing pads for aarch64
+  * Set current thread state to NULL in teardown 
+  * Moving setspecific to before DestroyThreadState
+  * Fix a memory leak in libGLdispatch 
+  * Use assembly stubs on armv6
+- drop libglvnd-add-bti.patch (upstream)
+
+-------------------------------------------------------------------

Old:
----
  libglvnd-1.4.0.tar.gz
  libglvnd-add-bti.patch

New:
----
  libglvnd-1.5.0.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ libglvnd.spec ++++++
--- /var/tmp/diff_new_pack.uX5mV0/_old  2022-10-03 13:43:50.573228113 +0200
+++ /var/tmp/diff_new_pack.uX5mV0/_new  2022-10-03 13:43:50.577228122 +0200
@@ -19,7 +19,7 @@
 # Please submit bugfixes or comments via http://bugs.opensuse.org/
 #
 Name:           libglvnd
-Version:        1.4.0
+Version:        1.5.0
 Release:        0
 Summary:        The GL Vendor-Neutral Dispatch library
 License:        MIT
@@ -29,8 +29,6 @@
 Source1:        baselibs.conf
 Source2:        libglvnd.rpmlintrc
 Patch1:         disable-glx-tests.patch
-# PATCH-FIX-UPSTREAM - 
https://gitlab.freedesktop.org/glvnd/libglvnd/-/merge_requests/262
-Patch2:         libglvnd-add-bti.patch
 BuildRequires:  autoconf
 BuildRequires:  automake
 BuildRequires:  libtool
@@ -65,9 +63,7 @@
 development.
 
 %prep
-%setup -q
-%patch1 -p1
-%patch2 -p1
+%autosetup -p1
 # fix env shebang to call py3 directly
 sed -i -e "1s|#!.*|#!%{_bindir}/python3|" src/generate/*.py
 

++++++ libglvnd-1.4.0.tar.gz -> libglvnd-1.5.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libglvnd-1.4.0/configure.ac 
new/libglvnd-1.5.0/configure.ac
--- old/libglvnd-1.4.0/configure.ac     2021-12-17 16:49:38.000000000 +0100
+++ new/libglvnd-1.5.0/configure.ac     2022-08-22 15:02:53.000000000 +0200
@@ -2,7 +2,7 @@
 dnl Process this file with autoconf to produce a configure script.
 
 AC_PREREQ([2.63])
-AC_INIT([libglvnd], [1.4.0], [kbrenne...@nvidia.com])
+AC_INIT([libglvnd], [1.5.0], [kbrenne...@nvidia.com])
 AC_CONFIG_SRCDIR([config.h.in])
 AC_CONFIG_HEADERS([config.h])
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libglvnd-1.4.0/include/EGL/egl.h 
new/libglvnd-1.5.0/include/EGL/egl.h
--- old/libglvnd-1.4.0/include/EGL/egl.h        2021-12-17 16:49:38.000000000 
+0100
+++ new/libglvnd-1.5.0/include/EGL/egl.h        2022-08-22 15:02:53.000000000 
+0200
@@ -14,7 +14,7 @@
 ** used to make the header, and the header can be found at
 **   http://www.khronos.org/registry/egl
 **
-** Khronos $Git commit SHA1: 9581d004ff $ on $Git commit date: 2021-04-06 
15:53:59 +0200 $
+** Khronos $Git commit SHA1: 8c62b915dd $ on $Git commit date: 2021-11-05 
23:32:01 -0400 $
 */
 
 #include <EGL/eglplatform.h>
@@ -23,7 +23,7 @@
 #define EGL_EGL_PROTOTYPES 1
 #endif
 
-/* Generated on date 20210802 */
+/* Generated on date 20211116 */
 
 /* Generated C header for:
  * API: egl
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libglvnd-1.4.0/include/EGL/eglext.h 
new/libglvnd-1.5.0/include/EGL/eglext.h
--- old/libglvnd-1.4.0/include/EGL/eglext.h     2021-12-17 16:49:38.000000000 
+0100
+++ new/libglvnd-1.5.0/include/EGL/eglext.h     2022-08-22 15:02:53.000000000 
+0200
@@ -14,12 +14,12 @@
 ** used to make the header, and the header can be found at
 **   http://www.khronos.org/registry/egl
 **
-** Khronos $Git commit SHA1: dc0b58dca5 $ on $Git commit date: 2021-06-25 
01:58:50 +0200 $
+** Khronos $Git commit SHA1: 992aa3914f $ on $Git commit date: 2021-11-23 
18:20:45 +0100 $
 */
 
 #include <EGL/eglplatform.h>
 
-#define EGL_EGLEXT_VERSION 20210629
+#define EGL_EGLEXT_VERSION 20211210
 
 /* Generated C header for:
  * API: egl
@@ -700,6 +700,7 @@
 #ifndef EGL_EXT_device_openwf
 #define EGL_EXT_device_openwf 1
 #define EGL_OPENWF_DEVICE_ID_EXT          0x3237
+#define EGL_OPENWF_DEVICE_EXT             0x333D
 #endif /* EGL_EXT_device_openwf */
 
 #ifndef EGL_EXT_device_persistent_id
@@ -947,6 +948,31 @@
 #define EGL_METADATA_SCALING_EXT          50000
 #endif /* EGL_EXT_surface_SMPTE2086_metadata */
 
+#ifndef EGL_EXT_surface_compression
+#define EGL_EXT_surface_compression 1
+#define EGL_SURFACE_COMPRESSION_EXT       0x34B0
+#define EGL_SURFACE_COMPRESSION_PLANE1_EXT 0x328E
+#define EGL_SURFACE_COMPRESSION_PLANE2_EXT 0x328F
+#define EGL_SURFACE_COMPRESSION_FIXED_RATE_NONE_EXT 0x34B1
+#define EGL_SURFACE_COMPRESSION_FIXED_RATE_DEFAULT_EXT 0x34B2
+#define EGL_SURFACE_COMPRESSION_FIXED_RATE_1BPC_EXT 0x34B4
+#define EGL_SURFACE_COMPRESSION_FIXED_RATE_2BPC_EXT 0x34B5
+#define EGL_SURFACE_COMPRESSION_FIXED_RATE_3BPC_EXT 0x34B6
+#define EGL_SURFACE_COMPRESSION_FIXED_RATE_4BPC_EXT 0x34B7
+#define EGL_SURFACE_COMPRESSION_FIXED_RATE_5BPC_EXT 0x34B8
+#define EGL_SURFACE_COMPRESSION_FIXED_RATE_6BPC_EXT 0x34B9
+#define EGL_SURFACE_COMPRESSION_FIXED_RATE_7BPC_EXT 0x34BA
+#define EGL_SURFACE_COMPRESSION_FIXED_RATE_8BPC_EXT 0x34BB
+#define EGL_SURFACE_COMPRESSION_FIXED_RATE_9BPC_EXT 0x34BC
+#define EGL_SURFACE_COMPRESSION_FIXED_RATE_10BPC_EXT 0x34BD
+#define EGL_SURFACE_COMPRESSION_FIXED_RATE_11BPC_EXT 0x34BE
+#define EGL_SURFACE_COMPRESSION_FIXED_RATE_12BPC_EXT 0x34BF
+typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYSUPPORTEDCOMPRESSIONRATESEXTPROC) 
(EGLDisplay dpy, EGLConfig *configs, const EGLAttrib *attrib_list, EGLint 
*rates, EGLint rate_size, EGLint *num_rates);
+#ifdef EGL_EGLEXT_PROTOTYPES
+EGLAPI EGLBoolean EGLAPIENTRY eglQuerySupportedCompressionRatesEXT (EGLDisplay 
dpy, EGLConfig *configs, const EGLAttrib *attrib_list, EGLint *rates, EGLint 
rate_size, EGLint *num_rates);
+#endif
+#endif /* EGL_EXT_surface_compression */
+
 #ifndef EGL_EXT_swap_buffers_with_damage
 #define EGL_EXT_swap_buffers_with_damage 1
 typedef EGLBoolean (EGLAPIENTRYP PFNEGLSWAPBUFFERSWITHDAMAGEEXTPROC) 
(EGLDisplay dpy, EGLSurface surface, const EGLint *rects, EGLint n_rects);
@@ -1181,12 +1207,12 @@
 #define EGL_STREAM_IMAGE_ADD_NV           0x3374
 #define EGL_STREAM_IMAGE_REMOVE_NV        0x3375
 #define EGL_STREAM_IMAGE_AVAILABLE_NV     0x3376
-typedef EGLBoolean (EGLAPIENTRYP PFNEGLSTREAMIMAGECONSUMERCONNECTNVPROC) 
(EGLDisplay dpy, EGLStreamKHR stream, EGLint num_modifiers, EGLuint64KHR 
*modifiers, EGLAttrib *attrib_list);
+typedef EGLBoolean (EGLAPIENTRYP PFNEGLSTREAMIMAGECONSUMERCONNECTNVPROC) 
(EGLDisplay dpy, EGLStreamKHR stream, EGLint num_modifiers, const EGLuint64KHR 
*modifiers, const EGLAttrib *attrib_list);
 typedef EGLint (EGLAPIENTRYP PFNEGLQUERYSTREAMCONSUMEREVENTNVPROC) (EGLDisplay 
dpy, EGLStreamKHR stream, EGLTime timeout, EGLenum *event, EGLAttrib *aux);
 typedef EGLBoolean (EGLAPIENTRYP PFNEGLSTREAMACQUIREIMAGENVPROC) (EGLDisplay 
dpy, EGLStreamKHR stream, EGLImage *pImage, EGLSync sync);
 typedef EGLBoolean (EGLAPIENTRYP PFNEGLSTREAMRELEASEIMAGENVPROC) (EGLDisplay 
dpy, EGLStreamKHR stream, EGLImage image, EGLSync sync);
 #ifdef EGL_EGLEXT_PROTOTYPES
-EGLAPI EGLBoolean EGLAPIENTRY eglStreamImageConsumerConnectNV (EGLDisplay dpy, 
EGLStreamKHR stream, EGLint num_modifiers, EGLuint64KHR *modifiers, EGLAttrib 
*attrib_list);
+EGLAPI EGLBoolean EGLAPIENTRY eglStreamImageConsumerConnectNV (EGLDisplay dpy, 
EGLStreamKHR stream, EGLint num_modifiers, const EGLuint64KHR *modifiers, const 
EGLAttrib *attrib_list);
 EGLAPI EGLint EGLAPIENTRY eglQueryStreamConsumerEventNV (EGLDisplay dpy, 
EGLStreamKHR stream, EGLTime timeout, EGLenum *event, EGLAttrib *aux);
 EGLAPI EGLBoolean EGLAPIENTRY eglStreamAcquireImageNV (EGLDisplay dpy, 
EGLStreamKHR stream, EGLImage *pImage, EGLSync sync);
 EGLAPI EGLBoolean EGLAPIENTRY eglStreamReleaseImageNV (EGLDisplay dpy, 
EGLStreamKHR stream, EGLImage image, EGLSync sync);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libglvnd-1.4.0/include/KHR/khrplatform.h 
new/libglvnd-1.5.0/include/KHR/khrplatform.h
--- old/libglvnd-1.4.0/include/KHR/khrplatform.h        2021-12-17 
16:49:38.000000000 +0100
+++ new/libglvnd-1.5.0/include/KHR/khrplatform.h        2022-08-22 
15:02:53.000000000 +0200
@@ -153,6 +153,20 @@
 typedef uint64_t                khronos_uint64_t;
 #define KHRONOS_SUPPORT_INT64   1
 #define KHRONOS_SUPPORT_FLOAT   1
+/*
+ * To support platform where unsigned long cannot be used interchangeably with
+ * inptr_t (e.g. CHERI-extended ISAs), we can use the stdint.h intptr_t.
+ * Ideally, we could just use (u)intptr_t everywhere, but this could result in
+ * ABI breakage if khronos_uintptr_t is changed from unsigned long to
+ * unsigned long long or similar (this results in different C++ name mangling).
+ * To avoid changes for existing platforms, we restrict usage of intptr_t to
+ * platforms where the size of a pointer is larger than the size of long.
+ */
+#if defined(__SIZEOF_LONG__) && defined(__SIZEOF_POINTER__)
+#if __SIZEOF_POINTER__ > __SIZEOF_LONG__
+#define KHRONOS_USE_INTPTR_T
+#endif
+#endif
 
 #elif defined(__VMS ) || defined(__sgi)
 
@@ -235,14 +249,21 @@
  * pointers are 64 bits, but 'long' is still 32 bits. Win64 appears
  * to be the only LLP64 architecture in current use.
  */
-#ifdef _WIN64
+#ifdef KHRONOS_USE_INTPTR_T
+typedef intptr_t               khronos_intptr_t;
+typedef uintptr_t              khronos_uintptr_t;
+#elif defined(_WIN64)
 typedef signed   long long int khronos_intptr_t;
 typedef unsigned long long int khronos_uintptr_t;
-typedef signed   long long int khronos_ssize_t;
-typedef unsigned long long int khronos_usize_t;
 #else
 typedef signed   long  int     khronos_intptr_t;
 typedef unsigned long  int     khronos_uintptr_t;
+#endif
+
+#if defined(_WIN64)
+typedef signed   long long int khronos_ssize_t;
+typedef unsigned long long int khronos_usize_t;
+#else
 typedef signed   long  int     khronos_ssize_t;
 typedef unsigned long  int     khronos_usize_t;
 #endif
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libglvnd-1.4.0/meson.build 
new/libglvnd-1.5.0/meson.build
--- old/libglvnd-1.4.0/meson.build      2021-12-17 16:49:38.000000000 +0100
+++ new/libglvnd-1.5.0/meson.build      2022-08-22 15:02:53.000000000 +0200
@@ -24,7 +24,7 @@
 project(
   'glvnd',
   'c',
-  version : '1.4.0',
+  version : '1.5.0',
   meson_version : '>= 0.48',
   default_options : ['c_std=gnu99']
 )
@@ -61,7 +61,8 @@
         || defined(__ARM_ARCH_7R__) \
         || defined(__ARM_ARCH_7M__) \
         || defined(__ARM_ARCH_7S__) \
-        || (defined(__ARM_ARCH) && __ARM_ARCH >= 7))
+        || defined(__ARM_ARCH_6__) \
+        || (defined(__ARM_ARCH) && __ARM_ARCH >= 6))
 #error "Not ARM7"
 #endif
       ''', name : 'ARMv7 macros')
@@ -104,7 +105,6 @@
   dep_glproto = dependency('glproto', required : get_option('glx'))
   with_glx = true
 endif
-dep_glx = [dep_xext, dep_glproto]
 
 if cc.compiles('typeof(int *);', name : 'typeof')
   add_project_arguments('-DHAVE_TYPEOF', language : ['c'])
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libglvnd-1.4.0/src/EGL/libeglcurrent.c 
new/libglvnd-1.5.0/src/EGL/libeglcurrent.c
--- old/libglvnd-1.4.0/src/EGL/libeglcurrent.c  2021-12-17 16:49:38.000000000 
+0100
+++ new/libglvnd-1.5.0/src/EGL/libeglcurrent.c  2022-08-22 15:02:53.000000000 
+0200
@@ -91,6 +91,7 @@
         __eglDestroyAPIState(apiState);
     }
 
+    __glvndPthreadFuncs.setspecific(threadStateKey, NULL);
     while (!glvnd_list_is_empty(&currentThreadStateList)) {
         __EGLThreadAPIState *threadState = glvnd_list_first_entry(
                 &currentThreadStateList, __EGLThreadAPIState, entry);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libglvnd-1.4.0/src/EGL/meson.build 
new/libglvnd-1.5.0/src/EGL/meson.build
--- old/libglvnd-1.4.0/src/EGL/meson.build      2021-12-17 16:49:38.000000000 
+0100
+++ new/libglvnd-1.5.0/src/EGL/meson.build      2022-08-22 15:02:53.000000000 
+0200
@@ -62,6 +62,15 @@
   version : '1.5',
 )
 
+dep_egl = declare_dependency(
+  link_with : libEGL,
+  include_directories : inc_include,
+)
+
+if meson.version().version_compare('>= 0.54')
+  meson.override_dependency('egl', dep_egl)
+endif
+
 test(
   'EGL symbols check',
   prog_py,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libglvnd-1.4.0/src/GL/meson.build 
new/libglvnd-1.5.0/src/GL/meson.build
--- old/libglvnd-1.4.0/src/GL/meson.build       2021-12-17 16:49:38.000000000 
+0100
+++ new/libglvnd-1.5.0/src/GL/meson.build       2022-08-22 15:02:53.000000000 
+0200
@@ -28,7 +28,7 @@
   include_directories : [inc_include],
   link_args : '-Wl,-Bsymbolic',
   dependencies : [
-    dep_dl, idep_gldispatch, idep_glapi_gl, idep_glx, idep_utils_misc, 
dep_x11_headers
+    dep_dl, idep_gldispatch, idep_glapi_gl, dep_glx, idep_utils_misc, 
dep_x11_headers
   ],
   version : '1.7.0',
   gnu_symbol_visibility : 'hidden',
@@ -42,6 +42,15 @@
   version : '1.2',
 )
 
+dep_gl = declare_dependency(
+  link_with : libGL,
+  include_directories : inc_include,
+)
+
+if meson.version().version_compare('>= 0.54')
+  meson.override_dependency('gl', dep_gl)
+endif
+
 test(
   'GL symbols check',
   prog_py,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libglvnd-1.4.0/src/GLESv1/meson.build 
new/libglvnd-1.5.0/src/GLESv1/meson.build
--- old/libglvnd-1.4.0/src/GLESv1/meson.build   2021-12-17 16:49:38.000000000 
+0100
+++ new/libglvnd-1.5.0/src/GLESv1/meson.build   2022-08-22 15:02:53.000000000 
+0200
@@ -39,6 +39,15 @@
   version : '1.0',
 )
 
+dep_glesv1 = declare_dependency(
+  link_with : libGLESv1,
+  include_directories : inc_include,
+)
+
+if meson.version().version_compare('>= 0.54')
+  meson.override_dependency('glesv1_cm', dep_glesv1)
+endif
+
 test(
   'GLESv1 symbols check',
   prog_py,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libglvnd-1.4.0/src/GLESv2/meson.build 
new/libglvnd-1.5.0/src/GLESv2/meson.build
--- old/libglvnd-1.4.0/src/GLESv2/meson.build   2021-12-17 16:49:38.000000000 
+0100
+++ new/libglvnd-1.5.0/src/GLESv2/meson.build   2022-08-22 15:02:53.000000000 
+0200
@@ -40,6 +40,15 @@
   version : '3.2',
 )
 
+dep_glesv2 = declare_dependency(
+  link_with : libGLESv2,
+  include_directories : inc_include,
+)
+
+if meson.version().version_compare('>= 0.54')
+  meson.override_dependency('glesv2', dep_glesv2)
+endif
+
 test(
   'GLESv2 symbols check',
   prog_py,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libglvnd-1.4.0/src/GLX/glvnd_genentry.c 
new/libglvnd-1.5.0/src/GLX/glvnd_genentry.c
--- old/libglvnd-1.4.0/src/GLX/glvnd_genentry.c 2021-12-17 16:49:38.000000000 
+0100
+++ new/libglvnd-1.5.0/src/GLX/glvnd_genentry.c 2022-08-22 15:02:53.000000000 
+0200
@@ -90,6 +90,7 @@
 
 #define STUB_SIZE 16
 #define STUB_ASM_ARCH(slot) \
+    "hint #34\n" \
     "adrp x16, entrypointFunctions + " slot "*8\n" \
     "ldr x16, [x16, #:lo12:(entrypointFunctions + " slot "*8)]\n" \
     "br x16\n"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libglvnd-1.4.0/src/GLX/meson.build 
new/libglvnd-1.5.0/src/GLX/meson.build
--- old/libglvnd-1.4.0/src/GLX/meson.build      2021-12-17 16:49:38.000000000 
+0100
+++ new/libglvnd-1.5.0/src/GLX/meson.build      2022-08-22 15:02:53.000000000 
+0200
@@ -41,7 +41,8 @@
   include_directories : [inc_include],
   link_args : '-Wl,-Bsymbolic',
   dependencies : [
-    dep_dl, dep_x11, dep_glx, idep_gldispatch, idep_trace,
+    dep_dl, dep_x11, dep_xext, dep_glproto,
+    idep_gldispatch, idep_trace,
     idep_glvnd_pthread, idep_utils_misc,
     idep_app_error_check, idep_winsys_dispatch,
   ],
@@ -52,11 +53,15 @@
 
 inc_glx = include_directories('.')
 
-idep_glx = declare_dependency(
+dep_glx = declare_dependency(
   link_with : libGLX,
-  include_directories : inc_glx,
+  include_directories : [inc_include, inc_glx],
 )
 
+if meson.version().version_compare('>= 0.54')
+  meson.override_dependency('glx', dep_glx)
+endif
+
 pkg.generate(
   libGLX,
   filebase : 'glx',
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libglvnd-1.4.0/src/GLdispatch/GLdispatch.c 
new/libglvnd-1.5.0/src/GLdispatch/GLdispatch.c
--- old/libglvnd-1.4.0/src/GLdispatch/GLdispatch.c      2021-12-17 
16:49:38.000000000 +0100
+++ new/libglvnd-1.5.0/src/GLdispatch/GLdispatch.c      2022-08-22 
15:02:53.000000000 +0200
@@ -42,6 +42,13 @@
  */
 static struct glvnd_list currentDispatchList;
 
+/**
+ * A linked list of __GLdispatchThreadStatePrivate structs that we've
+ * allocated. This is used to make sure that we clean up if we get unloaded
+ * while a thread is still current.
+ */
+static struct glvnd_list threadStatePrivateList;
+
 /*
  * Number of clients using GLdispatch.
  */
@@ -64,6 +71,8 @@
 
     /// The current (high-level) __GLdispatch table
     __GLdispatchTable *dispatch;
+
+    struct glvnd_list entry;
 } __GLdispatchThreadStatePrivate;
 
 /*
@@ -178,6 +187,7 @@
         glvnd_list_init(&extProcList);
         glvnd_list_init(&currentDispatchList);
         glvnd_list_init(&dispatchStubList);
+        glvnd_list_init(&threadStatePrivateList);
 
         // Register GLdispatch's static entrypoints for rewriting
         localDispatchStubId = 
RegisterStubCallbacks(stub_get_patch_callbacks());
@@ -588,8 +598,7 @@
 
     DispatchCurrentRef(dispatch);
     numCurrentContexts++;
-
-    UnlockDispatch();
+    glvnd_list_add(&priv->entry, &threadStatePrivateList);
 
     /*
      * Update the API state with the new values.
@@ -599,6 +608,8 @@
     priv->threadState = threadState;
     threadState->priv = priv;
 
+    UnlockDispatch();
+
     /*
      * Set the current state in TLS.
      */
@@ -624,6 +635,7 @@
                 DispatchCurrentUnref(curThreadState->priv->dispatch);
             }
 
+            glvnd_list_del(&curThreadState->priv->entry);
             free(curThreadState->priv);
             curThreadState->priv = NULL;
         }
@@ -722,6 +734,14 @@
     clientRefcount--;
 
     if (clientRefcount == 0) {
+        while (!glvnd_list_is_empty(&threadStatePrivateList))
+        {
+            __GLdispatchThreadStatePrivate *priv = 
glvnd_list_first_entry(&threadStatePrivateList,
+                    __GLdispatchThreadStatePrivate, entry);
+            glvnd_list_del(&priv->entry);
+            free(priv);
+        }
+
         /* This frees the dispatchStubList */
         UnregisterAllStubCallbacks();
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/libglvnd-1.4.0/src/GLdispatch/vnd-glapi/entry_aarch64_tsd.c 
new/libglvnd-1.5.0/src/GLdispatch/vnd-glapi/entry_aarch64_tsd.c
--- old/libglvnd-1.4.0/src/GLdispatch/vnd-glapi/entry_aarch64_tsd.c     
2021-12-17 16:49:38.000000000 +0100
+++ new/libglvnd-1.5.0/src/GLdispatch/vnd-glapi/entry_aarch64_tsd.c     
2022-08-22 15:02:53.000000000 +0200
@@ -69,6 +69,7 @@
  * table then does a branch without link to the function address.
  */
 #define STUB_ASM_CODE(slot)                           \
+    "hint #34\n\t"                                    \
     "stp x1, x0, [sp, #-16]!\n\t"                     \
     "adrp x0, :got:_glapi_Current\n\t"                \
     "ldr x0, [x0, #:got_lo12:_glapi_Current]\n\t"     \
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/libglvnd-1.4.0/src/GLdispatch/vnd-glapi/entry_armv7_tsd.c 
new/libglvnd-1.5.0/src/GLdispatch/vnd-glapi/entry_armv7_tsd.c
--- old/libglvnd-1.4.0/src/GLdispatch/vnd-glapi/entry_armv7_tsd.c       
2021-12-17 16:49:38.000000000 +0100
+++ new/libglvnd-1.5.0/src/GLdispatch/vnd-glapi/entry_armv7_tsd.c       
2022-08-22 15:02:53.000000000 +0200
@@ -51,16 +51,16 @@
 #endif
 
 /*
- * This runs in Thumb mode.
+ * This runs in ARM mode.
  *
- * libglvnd on armv7 is built with -march=armv7-a, which uses the AAPCS ABI
- * that has ARM/Thumb interworking enabled by default.
+ * On ARMv7, we could use Thumb, with only minor modifications, but using ARM
+ * mode means that this code can compile on ARMv6 as well.
  *
  * See: https://gcc.gnu.org/onlinedocs/gcc/ARM-Options.html
  */
 #define STUB_ASM_ENTRY(func)                        \
     ".balign " U_STRINGIFY(ENTRY_STUB_ALIGN) "\n\t" \
-    ".thumb_func\n\t"                               \
+    ".arm\n\t"                                      \
     ".global " func "\n\t"                          \
     ".type " func ", %function\n\t"                 \
     func ":\n\t"
@@ -108,10 +108,10 @@
     "pop {lr}\n\t"                           \
     "b 11b\n\t"                              \
     "1:\n\t"                                 \
-    ".word _GLOBAL_OFFSET_TABLE_-(12b+4)\n\t"\
+    ".word _GLOBAL_OFFSET_TABLE_-(12b+8)\n\t"\
     ".word _glapi_Current(GOT)\n\t"          \
     "2:\n\t"                                 \
-    ".word _GLOBAL_OFFSET_TABLE_-(13b+4)\n\t"\
+    ".word _GLOBAL_OFFSET_TABLE_-(13b+8)\n\t"\
     ".word _glapi_get_current(GOT)\n\t"      \
     "3:\n\t"                                 \
     ".word " slot "\n\t"
@@ -133,13 +133,13 @@
         ".text\n\t");
 
 /*
- * If built with -marm, let the assembler know that we are done with Thumb
+ * If built with -mthumb, let the assembler know that we are done with ARM
  */
-#if !defined(__thumb__)
-__asm__(".arm\n\t");
+#if defined(__thumb__)
+__asm__(".thumb\n\t");
 #endif
 
-const int entry_type = __GLDISPATCH_STUB_ARMV7_THUMB;
+const int entry_type = __GLDISPATCH_STUB_ARMV7_ARM;
 const int entry_stub_size = ENTRY_STUB_ALIGN;
 
 // Note: The rest of these functions could also be used for ARMv7 TLS stubs,
@@ -148,7 +148,6 @@
 mapi_func
 entry_get_public(int index)
 {
-    // Add 1 to the base address to force Thumb mode when jumping to the stub
-    return (mapi_func)(public_entry_start + (index * entry_stub_size) + 1);
+    return (mapi_func)(public_entry_start + (index * entry_stub_size));
 }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libglvnd-1.4.0/src/OpenGL/meson.build 
new/libglvnd-1.5.0/src/OpenGL/meson.build
--- old/libglvnd-1.4.0/src/OpenGL/meson.build   2021-12-17 16:49:38.000000000 
+0100
+++ new/libglvnd-1.5.0/src/OpenGL/meson.build   2022-08-22 15:02:53.000000000 
+0200
@@ -44,6 +44,15 @@
   version : '4.5',
 )
 
+dep_opengl = declare_dependency(
+  link_with : libOpenGL,
+  include_directories : inc_include,
+)
+
+if meson.version().version_compare('>= 0.54')
+  meson.override_dependency('opengl', dep_opengl)
+endif
+
 test(
   'OpenGL symbols check',
   prog_py,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libglvnd-1.4.0/src/generate/xml/egl.xml 
new/libglvnd-1.5.0/src/generate/xml/egl.xml
--- old/libglvnd-1.4.0/src/generate/xml/egl.xml 2021-12-17 16:49:38.000000000 
+0100
+++ new/libglvnd-1.5.0/src/generate/xml/egl.xml 2022-08-22 15:02:53.000000000 
+0200
@@ -731,7 +731,9 @@
         <enum value="0x3288" name="EGL_COLOR_COMPONENT_TYPE_INTEGER_ARM"/>
             <unused start="0x3289" end="0x3289"/>
         <enum value="0x328A" 
name="EGL_SYNC_PRIOR_COMMANDS_IMPLICIT_EXTERNAL_ARM"/>
-            <unused start="0x328B" end="0x328F"/>
+            <unused start="0x328B" end="0x328D"/>
+        <enum value="0x328E" name="EGL_SURFACE_COMPRESSION_PLANE1_EXT"/>
+        <enum value="0x328F" name="EGL_SURFACE_COMPRESSION_PLANE2_EXT"/>
     </enums>
 
     <enums namespace="EGL" start="0x3290" end="0x329F" vendor="MESA" 
comment="Reserved for John K&#229;re Alsaker (Public bug 757)">
@@ -829,7 +831,8 @@
         <enum value="0x333A" name="EGL_COLOR_COMPONENT_TYPE_FIXED_EXT"/>
         <enum value="0x333B" name="EGL_COLOR_COMPONENT_TYPE_FLOAT_EXT"/>
         <enum value="0x333C" name="EGL_DRM_MASTER_FD_EXT"/>
-            <unused start="0x333D" end="0x333E"/>
+        <enum value="0x333D" name="EGL_OPENWF_DEVICE_EXT"/>
+            <unused start="0x333E"/>
         <enum value="0x333F" name="EGL_GL_COLORSPACE_BT2020_LINEAR_EXT"/>
         <enum value="0x3340" name="EGL_GL_COLORSPACE_BT2020_PQ_EXT"/>
         <enum value="0x3341" name="EGL_SMPTE2086_DISPLAY_PRIMARY_RX_EXT"/>
@@ -1026,7 +1029,22 @@
     </enums>
 
     <enums namespace="EGL" start="0x34B0" end="0x34BF" vendor="ARM" 
comment="Reserved for Jan-Harald Fredriksen (via github pull request)">
-        <unused start="0x34B0" end="0x34BF"/>
+        <enum value="0x34B0" name="EGL_SURFACE_COMPRESSION_EXT"/>
+        <enum value="0x34B1" 
name="EGL_SURFACE_COMPRESSION_FIXED_RATE_NONE_EXT"/>
+        <enum value="0x34B2" 
name="EGL_SURFACE_COMPRESSION_FIXED_RATE_DEFAULT_EXT"/>
+            <unused start="0x34B3" end="0x34B3"/>
+        <enum value="0x34B4" 
name="EGL_SURFACE_COMPRESSION_FIXED_RATE_1BPC_EXT"/>
+        <enum value="0x34B5" 
name="EGL_SURFACE_COMPRESSION_FIXED_RATE_2BPC_EXT"/>
+        <enum value="0x34B6" 
name="EGL_SURFACE_COMPRESSION_FIXED_RATE_3BPC_EXT"/>
+        <enum value="0x34B7" 
name="EGL_SURFACE_COMPRESSION_FIXED_RATE_4BPC_EXT"/>
+        <enum value="0x34B8" 
name="EGL_SURFACE_COMPRESSION_FIXED_RATE_5BPC_EXT"/>
+        <enum value="0x34B9" 
name="EGL_SURFACE_COMPRESSION_FIXED_RATE_6BPC_EXT"/>
+        <enum value="0x34BA" 
name="EGL_SURFACE_COMPRESSION_FIXED_RATE_7BPC_EXT"/>
+        <enum value="0x34BB" 
name="EGL_SURFACE_COMPRESSION_FIXED_RATE_8BPC_EXT"/>
+        <enum value="0x34BC" 
name="EGL_SURFACE_COMPRESSION_FIXED_RATE_9BPC_EXT"/>
+        <enum value="0x34BD" 
name="EGL_SURFACE_COMPRESSION_FIXED_RATE_10BPC_EXT"/>
+        <enum value="0x34BE" 
name="EGL_SURFACE_COMPRESSION_FIXED_RATE_11BPC_EXT"/>
+        <enum value="0x34BF" 
name="EGL_SURFACE_COMPRESSION_FIXED_RATE_12BPC_EXT"/>
     </enums>
 
     <enums namespace="EGL" start="0x34C0" end="0x34CF" vendor="EXT" 
comment="Reserved for Robert Mader (PR 124)">
@@ -1034,6 +1052,17 @@
             <unused start="0x34C1" end="0x34CF"/>
     </enums>
 
+    <enums namespace="EGL" start="0x34D0" end="0x34DF" vendor="ANGLE" 
comment="Reserved for Peng Huang - ANGLE (via github pull request)">
+            <unused start="0x34D0" end="0x34DF"/>
+    </enums>
+
+    <enums namespace="EGL" start="0x34E0" end="0x34EF" vendor="Huawei" 
comment="Reserved for Openharmony OS (via github pull request)">
+            <unused start="0x34E0" end="0x34EF"/>
+    </enums>
+
+    <enums namespace="EGL" start="0x34F0" end="0x34FF" vendor="ANGLE" 
comment="Reserved for Ken Russell - ANGLE (via github pull request)">
+            <unused start="0x34F0" end="0x34FF"/>
+    </enums>
 <!-- Please remember that new enumerant allocations must be obtained by
      request to the Khronos API registrar (see comments at the top of this
      file) File requests in the Khronos Bugzilla, EGL project, Registry
@@ -1043,8 +1072,8 @@
 
 <!-- Reservable for future use. To generate a new range, allocate multiples
      of 16 starting at the lowest available point in this block. -->
-    <enums namespace="EGL" start="0x34D0" end="0x3FFF" vendor="KHR" 
comment="Reserved for future use">
-            <unused start="0x34D0" end="0x3FFF"/>
+    <enums namespace="EGL" start="0x3500" end="0x3FFF" vendor="KHR" 
comment="Reserved for future use">
+            <unused start="0x3500" end="0x3FFF"/>
     </enums>
 
     <enums namespace="EGL" start="0x8F70" end="0x8F7F" vendor="HI" 
comment="For Mark Callow, Khronos bug 4055. Shared with GL.">
@@ -1693,6 +1722,15 @@
             <param><ptype>EGLint</ptype> <name>name</name></param>
         </command>
         <command>
+            <proto><ptype>EGLBoolean</ptype> 
<name>eglQuerySupportedCompressionRatesEXT</name></proto>
+            <param><ptype>EGLDisplay</ptype> <name>dpy</name></param>
+            <param><ptype>EGLConfig</ptype> *<name>configs</name></param>
+            <param>const <ptype>EGLAttrib</ptype> 
*<name>attrib_list</name></param>
+            <param><ptype>EGLint</ptype> *<name>rates</name></param>
+            <param><ptype>EGLint</ptype> <name>rate_size</name></param>
+            <param><ptype>EGLint</ptype> *<name>num_rates</name></param>
+        </command>
+        <command>
             <proto><ptype>EGLBoolean</ptype> 
<name>eglQuerySurface</name></proto>
             <param><ptype>EGLDisplay</ptype> <name>dpy</name></param>
             <param><ptype>EGLSurface</ptype> <name>surface</name></param>
@@ -1965,8 +2003,8 @@
              <param><ptype>EGLDisplay</ptype> <name>dpy</name></param>
              <param><ptype>EGLStreamKHR</ptype> <name>stream</name></param>
              <param><ptype>EGLint</ptype> <name>num_modifiers</name></param>
-             <param><ptype>EGLuint64KHR</ptype> *<name>modifiers</name></param>
-             <param><ptype>EGLAttrib</ptype> *<name>attrib_list</name></param>
+             <param>const <ptype>EGLuint64KHR</ptype> 
*<name>modifiers</name></param>
+             <param>const <ptype>EGLAttrib</ptype> 
*<name>attrib_list</name></param>
         </command>
         <command>
              <proto><ptype>EGLint</ptype> 
<name>eglQueryStreamConsumerEventNV</name></proto>
@@ -2435,6 +2473,7 @@
         <extension name="EGL_EXT_device_openwf" supported="egl">
             <require>
                 <enum name="EGL_OPENWF_DEVICE_ID_EXT"/>
+                <enum name="EGL_OPENWF_DEVICE_EXT"/>
             </require>
         </extension>
         <extension name="EGL_EXT_device_query" supported="egl">
@@ -3382,6 +3421,28 @@
                 <enum name="EGL_CTA861_3_MAX_FRAME_AVERAGE_LEVEL_EXT"/>
             </require>
         </extension>
+        <extension name="EGL_EXT_surface_compression" supported="egl">
+            <require>
+                <enum name="EGL_SURFACE_COMPRESSION_EXT"/>
+                <enum name="EGL_SURFACE_COMPRESSION_PLANE1_EXT"/>
+                <enum name="EGL_SURFACE_COMPRESSION_PLANE2_EXT"/>
+                <enum name="EGL_SURFACE_COMPRESSION_FIXED_RATE_NONE_EXT"/>
+                <enum name="EGL_SURFACE_COMPRESSION_FIXED_RATE_DEFAULT_EXT"/>
+                <enum name="EGL_SURFACE_COMPRESSION_FIXED_RATE_1BPC_EXT"/>
+                <enum name="EGL_SURFACE_COMPRESSION_FIXED_RATE_2BPC_EXT"/>
+                <enum name="EGL_SURFACE_COMPRESSION_FIXED_RATE_3BPC_EXT"/>
+                <enum name="EGL_SURFACE_COMPRESSION_FIXED_RATE_4BPC_EXT"/>
+                <enum name="EGL_SURFACE_COMPRESSION_FIXED_RATE_5BPC_EXT"/>
+                <enum name="EGL_SURFACE_COMPRESSION_FIXED_RATE_6BPC_EXT"/>
+                <enum name="EGL_SURFACE_COMPRESSION_FIXED_RATE_7BPC_EXT"/>
+                <enum name="EGL_SURFACE_COMPRESSION_FIXED_RATE_8BPC_EXT"/>
+                <enum name="EGL_SURFACE_COMPRESSION_FIXED_RATE_9BPC_EXT"/>
+                <enum name="EGL_SURFACE_COMPRESSION_FIXED_RATE_10BPC_EXT"/>
+                <enum name="EGL_SURFACE_COMPRESSION_FIXED_RATE_11BPC_EXT"/>
+                <enum name="EGL_SURFACE_COMPRESSION_FIXED_RATE_12BPC_EXT"/>
+                <command name="eglQuerySupportedCompressionRatesEXT"/>
+            </require>
+        </extension>
         <extension name="EGL_EXT_image_implicit_sync_control" supported="egl">
             <require>
                 <enum name="EGL_IMPORT_SYNC_TYPE_EXT"/>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libglvnd-1.4.0/tests/Makefile.am 
new/libglvnd-1.5.0/tests/Makefile.am
--- old/libglvnd-1.4.0/tests/Makefile.am        2021-12-17 16:49:38.000000000 
+0100
+++ new/libglvnd-1.5.0/tests/Makefile.am        2022-08-22 15:02:53.000000000 
+0200
@@ -179,6 +179,7 @@
 TESTS_EGL += testeglmakecurrent.sh
 TESTS_EGL += testeglerror.sh
 TESTS_EGL += testegldebug.sh
+TESTS_EGL += testeglcurrentcleanup.sh
 
 if ENABLE_EGL
 
@@ -229,6 +230,12 @@
        egl_test_utils.c
 testegldebug_LDADD = $(top_builddir)/src/EGL/libEGL.la @LIB_DL@
 
+check_PROGRAMS += testeglcurrentcleanup
+testeglcurrentcleanup_SOURCES = \
+       testeglcurrentcleanup.c
+testeglcurrentcleanup_LDADD = $(top_builddir)/src/EGL/libEGL.la
+testeglcurrentcleanup_LDADD += $(PTHREAD_LIBS)
+
 endif # ENABLE_EGL
 
 EXTRA_DIST += $(TESTS_GLX) $(TESTS_EGL)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libglvnd-1.4.0/tests/dummy/EGL_dummy.c 
new/libglvnd-1.5.0/tests/dummy/EGL_dummy.c
--- old/libglvnd-1.4.0/tests/dummy/EGL_dummy.c  2021-12-17 16:49:38.000000000 
+0100
+++ new/libglvnd-1.5.0/tests/dummy/EGL_dummy.c  2022-08-22 15:02:53.000000000 
+0200
@@ -85,6 +85,9 @@
 static glvnd_mutex_t displayListLock = GLVND_MUTEX_INITIALIZER;
 static EGLint failNextMakeCurrentError = EGL_NONE;
 
+static glvnd_mutex_t contextListLock = GLVND_MUTEX_INITIALIZER;
+static struct glvnd_list contextList = { &contextList, &contextList };
+
 static EGLDEBUGPROCKHR debugCallbackFunc = NULL;
 static EGLBoolean debugCallbackEnabled = EGL_TRUE;
 
@@ -112,9 +115,20 @@
     return thr;
 }
 
+void DestroyThreadState(DummyThreadState *thr)
+{
+    if (thr != NULL)
+    {
+        __glvndPthreadFuncs.mutex_lock(&threadStateLock);
+        glvnd_list_del(&thr->entry);
+        __glvndPthreadFuncs.mutex_unlock(&threadStateLock);
+        free(thr);
+    }
+}
+
 static void OnThreadTerminate(void *ptr)
 {
-    free(ptr);
+    DestroyThreadState((DummyThreadState *) ptr);
 }
 
 static void CommonEntrypoint(void)
@@ -326,6 +340,10 @@
     dctx = (DummyEGLContext *) calloc(1, sizeof(DummyEGLContext));
     dctx->vendorName = DUMMY_VENDOR_NAME;
 
+    __glvndPthreadFuncs.mutex_lock(&contextListLock);
+    glvnd_list_append(&dctx->entry, &contextList);
+    __glvndPthreadFuncs.mutex_unlock(&contextListLock);
+
     return (EGLContext) dctx;
 }
 
@@ -336,6 +354,9 @@
 
     if (ctx != EGL_NO_CONTEXT) {
         DummyEGLContext *dctx = (DummyEGLContext *) ctx;
+        __glvndPthreadFuncs.mutex_lock(&contextListLock);
+        glvnd_list_del(&dctx->entry);
+        __glvndPthreadFuncs.mutex_unlock(&contextListLock);
         free(dctx);
     }
     return EGL_TRUE;
@@ -504,7 +525,7 @@
         __glvndPthreadFuncs.getspecific(threadStateKey);
     if (thr != NULL) {
         __glvndPthreadFuncs.setspecific(threadStateKey, NULL);
-        free(thr);
+        DestroyThreadState(thr);
     }
     return EGL_TRUE;
 }
@@ -957,6 +978,14 @@
         return;
     }
 
+    __glvndPthreadFuncs.mutex_lock(&contextListLock);
+    while (!glvnd_list_is_empty(&contextList)) {
+        DummyEGLContext *ctx = glvnd_list_first_entry(&contextList, 
DummyEGLContext, entry);
+        glvnd_list_del(&ctx->entry);
+        free(ctx);
+    }
+    __glvndPthreadFuncs.mutex_unlock(&contextListLock);
+
     while (!glvnd_list_is_empty(&displayList)) {
         DummyEGLDisplay *disp = glvnd_list_first_entry(
                 &displayList, DummyEGLDisplay, entry);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libglvnd-1.4.0/tests/dummy/EGL_dummy.h 
new/libglvnd-1.5.0/tests/dummy/EGL_dummy.h
--- old/libglvnd-1.4.0/tests/dummy/EGL_dummy.h  2021-12-17 16:49:38.000000000 
+0100
+++ new/libglvnd-1.5.0/tests/dummy/EGL_dummy.h  2022-08-22 15:02:53.000000000 
+0200
@@ -52,6 +52,8 @@
 #include <EGL/egl.h>
 #include <EGL/eglext.h>
 
+#include "glvnd_list.h"
+
 #define DUMMY_VENDOR_NAME_0 "dummy0"
 #define DUMMY_VENDOR_NAME_1 "dummy1"
 
@@ -106,6 +108,9 @@
  */
 typedef struct DummyEGLContextRec {
     const char *vendorName;
+
+    // Everything after this is used internally by EGL_dummy.c.
+    struct glvnd_list entry;
 } DummyEGLContext;
 
 /**
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libglvnd-1.4.0/tests/dummy/patchentrypoints.c 
new/libglvnd-1.5.0/tests/dummy/patchentrypoints.c
--- old/libglvnd-1.4.0/tests/dummy/patchentrypoints.c   2021-12-17 
16:49:38.000000000 +0100
+++ new/libglvnd-1.5.0/tests/dummy/patchentrypoints.c   2022-08-22 
15:02:53.000000000 +0200
@@ -128,6 +128,35 @@
 #endif
 }
 
+static void patch_armv7_arm(char *writeEntry, const char *execEntry,
+        int stubSize, void *incrementPtr)
+{
+#if defined(__arm__)
+    // ARM bytecode
+    static const uint32_t tmpl[] = {
+        0xe59f000c, // ldr r0, 1f
+        0xe5901000, // ldr r1, [r0]
+        0xe2811001, // add r1, r1, #1
+        0xe5801000, // str r1, [r0]
+        0xe12fff1e, // bx lr
+        // 1:
+        0x00000000,
+    };
+
+    static int offsetAddr = sizeof(tmpl) - 4;
+    if (stubSize < sizeof(tmpl)) {
+        return;
+    }
+
+    memcpy(writeEntry, tmpl, sizeof(tmpl));
+    *((uint32_t *)(writeEntry + offsetAddr)) = (uint32_t)incrementPtr;
+
+    __builtin___clear_cache((char *) execEntry, (char *) (execEntry + 
sizeof(tmpl)));
+#else
+    assert(0); // Should not be calling this
+#endif
+}
+
 static void patch_aarch64(char *writeEntry, const char *execEntry,
         int stubSize, void *incrementPtr)
 {
@@ -216,6 +245,7 @@
         case __GLDISPATCH_STUB_X86_64:
         case __GLDISPATCH_STUB_X86:
         case __GLDISPATCH_STUB_ARMV7_THUMB:
+        case __GLDISPATCH_STUB_ARMV7_ARM:
         case __GLDISPATCH_STUB_AARCH64:
         case __GLDISPATCH_STUB_X32:
         case __GLDISPATCH_STUB_PPC64:
@@ -248,6 +278,9 @@
             case __GLDISPATCH_STUB_ARMV7_THUMB:
                 patch_armv7_thumb(writeAddr, execAddr, stubSize, incrementPtr);
                 break;
+            case __GLDISPATCH_STUB_ARMV7_ARM:
+                patch_armv7_arm(writeAddr, execAddr, stubSize, incrementPtr);
+                break;
             case __GLDISPATCH_STUB_AARCH64:
                 patch_aarch64(writeAddr, execAddr, stubSize, incrementPtr);
                 break;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libglvnd-1.4.0/tests/meson.build 
new/libglvnd-1.5.0/tests/meson.build
--- old/libglvnd-1.4.0/tests/meson.build        2021-12-17 16:49:38.000000000 
+0100
+++ new/libglvnd-1.5.0/tests/meson.build        2022-08-22 15:02:53.000000000 
+0200
@@ -75,7 +75,7 @@
       ['testglxcreatecontext.c', 'test_utils.c'],
       include_directories : [inc_include],
       link_with : libOpenGL,
-      dependencies : [idep_glx, dep_x11],
+      dependencies : [dep_glx, dep_x11],
     ),
     env : env_glx,
     suite : ['glx'],
@@ -89,7 +89,7 @@
     link_with : [libOpenGL],
     dependencies : [
       dep_dl, dep_x11, idep_glvnd_pthread, idep_trace, idep_utils_misc,
-      idep_glx,
+      dep_glx,
     ],
   )
 
@@ -128,7 +128,7 @@
     'glxgetprocaddress',
     ['testglxgetprocaddress.c'],
     include_directories : [inc_include],
-    dependencies : [dep_x11, idep_glx, idep_gldispatch],
+    dependencies : [dep_x11, dep_glx, idep_gldispatch],
   )
 
   test(
@@ -153,7 +153,7 @@
       'testglxgetprocaddress_genentry',
       ['testglxgetprocaddress_genentry.c'],
       include_directories : [inc_include],
-      dependencies : [dep_x11, idep_glx],
+      dependencies : [dep_x11, dep_glx],
     ),
     env : env_glx,
     suite : ['glx'],
@@ -167,7 +167,7 @@
       ['testglxgetclientstr.c'],
       include_directories : [inc_include],
       link_with : libOpenGL,
-      dependencies : [dep_x11, idep_glx, idep_trace, idep_utils_misc],
+      dependencies : [dep_x11, dep_glx, idep_trace, idep_utils_misc],
     ),
     env : env_glx,
     suite : ['glx'],
@@ -181,7 +181,7 @@
       ['testglxqueryversion.c'],
       include_directories : [inc_include],
       link_with : libOpenGL,
-      dependencies : [dep_x11, idep_glx],
+      dependencies : [dep_x11, dep_glx],
     ),
     env : env_glx,
     suite : ['glx'],
@@ -232,5 +232,19 @@
       suite : ['egl'],
     )
   endforeach
+
+  test(
+    'eglcurrentcleanup',
+    executable(
+      'eglcurrentcleanup',
+      ['testeglcurrentcleanup.c'],
+      include_directories : [inc_include],
+      link_with : [libEGL],
+      dependencies : [dep_threads],
+    ),
+    args : [ '-m', '-t', '-k', '-r' ],
+    env : env_egl,
+    suite : ['egl'],
+  )
 endif
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libglvnd-1.4.0/tests/testeglcurrentcleanup.c 
new/libglvnd-1.5.0/tests/testeglcurrentcleanup.c
--- old/libglvnd-1.4.0/tests/testeglcurrentcleanup.c    1970-01-01 
01:00:00.000000000 +0100
+++ new/libglvnd-1.5.0/tests/testeglcurrentcleanup.c    2022-08-22 
15:02:53.000000000 +0200
@@ -0,0 +1,188 @@
+/*
+ * Copyright (c) 2021, NVIDIA CORPORATION.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and/or associated documentation files (the
+ * "Materials"), to deal in the Materials without restriction, including
+ * without limitation the rights to use, copy, modify, merge, publish,
+ * distribute, sublicense, and/or sell copies of the Materials, and to
+ * permit persons to whom the Materials are furnished to do so, subject to
+ * the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * unaltered in all copies or substantial portions of the Materials.
+ * Any additions, deletions, or changes to the original source files
+ * must be clearly indicated in accompanying documentation.
+ *
+ * THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+ * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+ * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+ * MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <getopt.h>
+#include <unistd.h>
+#include <pthread.h>
+#include <semaphore.h>
+#include <assert.h>
+
+#include <EGL/egl.h>
+#include <EGL/eglext.h>
+
+#include "dummy/EGL_dummy.h"
+
+static EGLDisplay dpy = EGL_NO_DISPLAY;
+static sem_t worker_ready_semaphore;
+
+void init_context(void)
+{
+    EGLContext ctx = eglCreateContext(dpy, NULL, EGL_NO_CONTEXT, NULL);
+    if (ctx == EGL_NO_CONTEXT) {
+        printf("eglCreateContext failed\n");
+        fflush(stdout);
+        abort();
+    }
+
+    if (!eglMakeCurrent(dpy, EGL_NO_SURFACE, EGL_NO_SURFACE, ctx)) {
+        printf("eglMakeCurrent failed\n");
+        fflush(stdout);
+        abort();
+    }
+}
+
+void *worker_proc(void *param)
+{
+    init_context();
+
+    return NULL;
+}
+
+void *worker_release_thread_proc(void *param)
+{
+    init_context();
+
+    eglReleaseThread();
+
+    return NULL;
+}
+
+
+void *worker_keep_proc(void *param)
+{
+    init_context();
+
+    sem_post(&worker_ready_semaphore);
+
+    while (1)
+    {
+        sleep(1);
+    }
+
+    return NULL;
+}
+
+int main(int argc, char **argv)
+{
+    const struct option OPTIONS[] = {
+        { "main", no_argument, NULL, 'm' },
+        { "thread", no_argument, NULL, 't' },
+        { "release-thread", no_argument, NULL, 'r' },
+        { "thread-keep", no_argument, NULL, 'k' },
+        { NULL }
+    };
+
+    int option_main = 0;
+    int option_thread = 0;
+    int option_release_thread = 0;
+    int option_thread_keep = 0;
+
+    EGLint major, minor;
+
+    while (1)
+    {
+        int c = getopt_long(argc, argv, "hmtrk", OPTIONS, NULL);
+        if (c == -1)
+        {
+            break;
+        }
+        switch (c)
+        {
+            case 'm':
+                option_main = 1;
+                break;
+            case 't':
+                option_thread = 1;
+                break;
+            case 'r':
+                option_release_thread = 1;
+                break;
+            case 'k':
+                option_thread_keep = 1;
+                break;
+            default:
+                return 2;
+        }
+    }
+
+    sem_init(&worker_ready_semaphore, 0, 0);
+
+    dpy = eglGetDisplay(EGL_DEFAULT_DISPLAY);
+    if (dpy == EGL_NO_DISPLAY) {
+        printf("eglGetDisplay failed\n");
+        return 2;
+    }
+    if (!eglInitialize(dpy, &major, &minor)) {
+        printf("eglInitialize failed\n");
+        return 2;
+    }
+
+    if (option_main) {
+        printf("Setting current context on main thread\n");
+        init_context();
+    }
+
+    if (option_thread) {
+        pthread_t thread;
+
+        printf("Starting and terminating worker thread\n");
+        if (pthread_create(&thread, NULL, worker_proc, dpy) != 0) {
+            printf("pthread_create failed\n");
+            return 2;
+        }
+
+        pthread_join(thread, NULL);
+    }
+
+    if (option_release_thread) {
+        pthread_t thread;
+
+        printf("Starting and terminating worker thread\n");
+        if (pthread_create(&thread, NULL, worker_release_thread_proc, dpy) != 
0) {
+            printf("pthread_create failed\n");
+            return 2;
+        }
+
+        pthread_join(thread, NULL);
+    }
+
+
+    if (option_thread_keep) {
+        pthread_t thread;
+
+        printf("Starting and keeping worker thread\n");
+        if (pthread_create(&thread, NULL, worker_keep_proc, dpy) != 0) {
+            printf("pthread_create failed\n");
+            return 2;
+        }
+
+        sem_wait(&worker_ready_semaphore);
+    }
+
+    return 0;
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libglvnd-1.4.0/tests/testeglcurrentcleanup.sh 
new/libglvnd-1.5.0/tests/testeglcurrentcleanup.sh
--- old/libglvnd-1.4.0/tests/testeglcurrentcleanup.sh   1970-01-01 
01:00:00.000000000 +0100
+++ new/libglvnd-1.5.0/tests/testeglcurrentcleanup.sh   2022-08-22 
15:02:53.000000000 +0200
@@ -0,0 +1,5 @@
+#!/bin/sh
+
+. $TOP_SRCDIR/tests/eglenv.sh
+
+./testeglcurrentcleanup -m -t -k -r

Reply via email to