Changes in build products in 1.4.0 and ABI/API considerations
We currently use the autotools buildsystem, and our CI detected two changes in the build products of 1.4.0
compared to 1.3.4
:
╔════════════════╗
║ Comparing ABIs ║
╚════════════════╝
┌───────────────────────────────┐
│ ABI Break: libGLdispatch.so.0 │
└───────────────────────────────┘
Functions changes summary: 0 Removed, 0 Changed, 0 Added function
Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
Function symbols changes summary: 0 Removed, 0 Added function symbol not referenced by debug info
Variable symbols changes summary: 0 Removed, 1 Added variable symbol not referenced by debug info
1 Added variable symbol not referenced by debug info:
[A] _glapi_tls_Current
┌────────────────────────┐
│ ABI Break: libEGL.so.1 │
└────────────────────────┘
Functions changes summary: 0 Removed, 1 Changed (3 filtered out), 0 Added functions
Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
1 function with some indirect sub-type change:
[C] 'function EGLDisplay eglGetDisplay(EGLNativeDisplayType)' at libegl.c:359:1 has some indirect sub-type changes:
parameter 1 of type 'typedef EGLNativeDisplayType' changed:
underlying type 'Display*' changed:
in pointed to type 'typedef Display':
entity changed from 'typedef Display' to 'void'
type size hasn't changed
Let's break it down:
- Addition of
_glapi_tls_Current
tolibGLdispatch.so.0
: it seems that this change only appears in ouraarch64
builds.- It seems that
aarch64
now uses TLS while in1.3.4
it didn't. I can seeu_current_tls.c
being used during build instead ofu_current_tsd.c
. - The removal of
gldispatch_use_tls=no
from thexaarch64)
case in e87d51f0 is the most likely reason. Was it intentional? - If it was indeed intentional, is this a safe change from an ABI perspective? Which external entities expect to access the exported
_glapi_tls_Current
symbol?
- It seems that
- The definition of
EGLNativeDisplayType
has changed inlibEGL.so.1
fromtypedef Display*
tovoid*
in the context of theeglGetDisplay
function.- This one seems to be an intentional change in 922b85a9. As mentioned in !258 (merged):
Setting USE_X11 changes the EGLNativeDisplayType typedef in eglplatform.h, which we don't want -- libglvnd should treat EGLNativeDisplayType as a simple void *.`
- It seems like this is a safe change from an ABI/API perspective. Can you please confirm?
- This one seems to be an intentional change in 922b85a9. As mentioned in !258 (merged):
The changes above were originally found here: https://gitlab.com/freedesktop-sdk/freedesktop-sdk/-/merge_requests/6931