Skip to content

v0.1.0

Latest

Choose a tag to compare

@github-actions github-actions released this 26 Aug 10:34
· 7 commits to main since this release
21e9236

cross-libc dlopen v0.1.0

Load the host's GPU drivers into a process that carries its own libc.
See the README
for what the two gaps are and which one your symptom is.

Built on glibc 2.31, which is the floor every artefact here is held
to. An object needing a symbol version above it would fail to load inside
a bundle whose glibc is older, so the build refuses to produce one and
the packaging step refuses to publish one.

Changes

First release. Everything in the repository at v0.1.0:

  • Record that the branch merged, and that the release is unblocked and undone (#10)
  • Make aarch64 real, add the release, and rewrite the front-door documents (#8)
  • Initialize Project

What each artefact needs

Read from build-manifest.json, which is built from the objects
themselves and ships inside both archives.

aarch64

artefact max GLIBC_ SONAME entry points sha256
cross-libc-dlopen.so 2.17 n/a 2 4b6864a26bb89a57f572c73bf7b0454b68dbb67c99ea8f5f86655d0928a10f72
gl-fwd.so 2.17 libGL.so.1 3470 cc962c1012ae5a97914d814ec72abcda89dddf390f14c406c3e8853e444a4839
egl-fwd.so 2.17 libEGL.so.1 44 2d31c0502e2a96cc79aaa8970e09958455a1cbdc265717bee8db5aaf01c8aa8c
gles-fwd.so 2.17 libGLESv2.so.2 358 322697c29696c9af0021beb8c7114624d31cb696955b8756f3918092d2b5e287
runtime-select 2.17 n/a 0 f1e64f85adca673c7bfec0429b65f2fe0800931f98118f36c68f53fdeb0ec1dc

Compiler: aarch64-linux-gnu-gcc (Debian 10.2.1-6) 10.2.1 20210110

aarch64, portable variant

artefact max GLIBC_ SONAME entry points sha256
cross-libc-dlopen.so 2.17 n/a 2 423ca9a3a660130b9e12c7273867fa6f77bf23911056d0b394baf5fd45524cb4
gl-fwd.so 2.17 libGL.so.1 3470 40744a3151fc1467aef7684a97f8221ba50996312e03844a672873bce9fcf238
egl-fwd.so 2.17 libEGL.so.1 44 ddf401d53621dcf67f8ccaa65cf156767ca54a76e34388fb33e7daa1a7d4b6b7
gles-fwd.so 2.17 libGLESv2.so.2 358 a66cebc39513de7b6035ca812a7f778e1047d06b381c6992ca674fa92e4ca117
runtime-select 2.17 n/a 0 7996b44ee4ffd5dcc5f51fbf57fd891fea587e2b5164af4625aadaf7e277bf21

Compiler: aarch64-linux-gnu-gcc (Debian 10.2.1-6) 10.2.1 20210110

x86_64

artefact max GLIBC_ SONAME entry points sha256
cross-libc-dlopen.so 2.16 n/a 2 2761cbf0715e099429803dd04b236851fd2d71fade039949edf344a00e93c410
gl-fwd.so 2.14 libGL.so.1 3470 b4f3f3311833dc23149ce740fdd2b9c052b72d7711c0b1cec7514a64d4ddb01f
egl-fwd.so 2.14 libEGL.so.1 44 3b9bf82d04c98adbe36a96c9ecf8cb621384eb1ab5cf46fc20196623ce963e4f
gles-fwd.so 2.14 libGLESv2.so.2 358 c502d8d344edac7549e6c9afc1de16fd411db38bf69eb880db283de2d792e04c
runtime-select 2.14 n/a 0 31eb619d0a8c73e3e212157d5d3e355d8a94a13b694032c0b1a1f52c7965571f

Compiler: gcc (Debian 10.2.1-6) 10.2.1 20210110

x86_64, portable variant

artefact max GLIBC_ SONAME entry points sha256
cross-libc-dlopen.so 2.16 n/a 2 9df56656b5f064cf77d3e23ecefd1003d919fa75f356ce1781fd95d8121d72f7
gl-fwd.so 2.14 libGL.so.1 3470 d99dd0d9f768dc40b1dbe54e9aa0ee5ae651af39944867d4add47b9401713550
egl-fwd.so 2.14 libEGL.so.1 44 feff6e922f482411fbb2cf46b798b4e78c83bdeeacce5ddf0dfab209db303a6f
gles-fwd.so 2.14 libGLESv2.so.2 358 2f7bd2851a23b2371af878d5f0dbbe251ebb2cbc9f23a16b6a925a4e58ee0636
runtime-select 2.14 n/a 0 464e2892bef789b03aaa4b70b18ebeffbc5a7e695f0ce5360f48b430b0bf6430

Compiler: gcc (Debian 10.2.1-6) 10.2.1 20210110

Assets

Each artefact ships three ways: loose, in the .tar, and in the .zip.
⛔ No archive contains a directory, so an extract drops the files where
you are standing.

Two variants. The default reads CROSS_LIBC_DLOPEN_ROOT and also
APPDIR, which an AppImage runtime exports on its own, and is built
with -fcf-protection=full. The portable assets read
CROSS_LIBC_DLOPEN_ROOT and nothing else, and are built without that
flag. Take those if you want one spelling and no CET instrumentation.
⚠ The flag accounts for six of the shims 3478 endbr64; the rest are the trampolines, spelled as literal bytes, and no flag removes them.
All five objects differ between the two variants, so the variant ships
as archives rather than loose files.

asset sha256
aarch64-cross-libc-dlopen.so 4b6864a26bb89a57f572c73bf7b0454b68dbb67c99ea8f5f86655d0928a10f72
aarch64-egl-fwd.so 2d31c0502e2a96cc79aaa8970e09958455a1cbdc265717bee8db5aaf01c8aa8c
aarch64-gl-fwd.so cc962c1012ae5a97914d814ec72abcda89dddf390f14c406c3e8853e444a4839
aarch64-gles-fwd.so 322697c29696c9af0021beb8c7114624d31cb696955b8756f3918092d2b5e287
aarch64-runtime-select f1e64f85adca673c7bfec0429b65f2fe0800931f98118f36c68f53fdeb0ec1dc
cross-libc-dlopen-aarch64.tar 005bd03a4d6486afd69926632fc2510e8cb108d003b164961ac26af83be196f3
cross-libc-dlopen-aarch64.zip 7bfcbfe00c321c48181b8dbcc9196af4681ae9691e0673701eb60d1871819d67
cross-libc-dlopen-portable-aarch64.tar 70cff7fd2ae694eff0b3d1522cd7fa58e05f5cc5843b41748799ac25e053032c
cross-libc-dlopen-portable-aarch64.zip 4d4ed83beedf2abbbbb8ff217ca00c9e5dfc87208ee4846d81ef481f30020589
cross-libc-dlopen-portable-x86_64.tar 4026b72539df37ae1032779ea0b6955e726aa6f3b10269794e733de1f0b7289d
cross-libc-dlopen-portable-x86_64.zip 8559cd6a5afc582edc65631e3c34d0f275352903e4684d3fcf88f216b3aa454c
cross-libc-dlopen-x86_64.tar cfa6a263a43845ee022c26239a7e55abbe1f9e26f028de66a485b518fadbd603
cross-libc-dlopen-x86_64.zip 803053778b5319d15a4aa363d0f3dfc2ce89dd6c3054727bca3e8069c9bfcb44
x86_64-cross-libc-dlopen.so 2761cbf0715e099429803dd04b236851fd2d71fade039949edf344a00e93c410
x86_64-egl-fwd.so 3b9bf82d04c98adbe36a96c9ecf8cb621384eb1ab5cf46fc20196623ce963e4f
x86_64-gl-fwd.so b4f3f3311833dc23149ce740fdd2b9c052b72d7711c0b1cec7514a64d4ddb01f
x86_64-gles-fwd.so c502d8d344edac7549e6c9afc1de16fd411db38bf69eb880db283de2d792e04c
x86_64-runtime-select 31eb619d0a8c73e3e212157d5d3e355d8a94a13b694032c0b1a1f52c7965571f

⚠ The artefact rows above come from the manifest. The archive rows are
computed here, because the archives did not exist when it was written.

Using it

LD_PRELOAD=/path/to/cross-libc-dlopen.so CROSS_LIBC_DLOPEN=1 ./your-program

For a bundle, put the objects in its lib/ and name them in .preload.
The switches are in the README and
docs/integrating.md
has the detail per target.