Skip to content

v0.2.6

Choose a tag to compare

@github-actions github-actions released this 13 Sep 10:01
· 1 commit to main since this release
e783cd9

cross-libc dlopen v0.2.6

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.

Every artefact is held to its own build's glibc floor, read out of
build-manifest.json rather than stated here. An object needing a symbol
version above its floor 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.

architecture floor glibc
aarch64 2.31
loongarch64 2.36
ppc64le 2.31
riscv64 2.31
x86_64 2.31

Changes

Since v0.2.5:

  • Stop the shim defining __stack_chk_guard where the loader owns it (#39)

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 df3c762a4d46063b773e173e6ec02e193602cd39f9411a08a505a49ac13ca7e2
gl-fwd.so 2.17 libGL.so.1 3470 1bfda51b9c417c00e702b905decf053fcb28159fa958b17ddc158606ccf0c884
egl-fwd.so 2.17 libEGL.so.1 44 839b65103b75da456ef0d2bd5c8f95c1f61bbfb5524b2d10f070b1648114fda2
gles-fwd.so 2.17 libGLESv2.so.2 358 79248f2db688432490e3ae0971ab94821d8aff5498ad752295d0b5a63daa64e9
runtime-select 2.17 n/a 0 2998e21dfcf1f98791ecb679eb76dfc439bed4ef473a75abe8ea8293211e0d17

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

loongarch64

artefact max GLIBC_ SONAME entry points sha256
cross-libc-dlopen.so 2.36 n/a 2 97eb00e0b144ba822e154acf0033cef2297d9503cdabdcee5deba117ba995b99
gl-fwd.so 2.36 libGL.so.1 3470 453320ebe523e9c95d4d62bafc89e11b440b3a92a7692bc6e801f643695c97b8
egl-fwd.so 2.36 libEGL.so.1 44 f772d3d0cb5d3878ede9f28a43523531b42e47e6e583dcf12a95dca599e6e6c5
gles-fwd.so 2.36 libGLESv2.so.2 358 d1634741cd323fdfc349d7dd6dae93aee0a4936d9ba770cade0ed8e9995ee830
runtime-select 2.36 n/a 0 ec9223cae6872322a865f4b360b5e300f23dbc8b16f59429ed5fd774d97bf0fc

Compiler: loongarch64-linux-gnu-gcc (Debian 14.2.0-19) 14.2.0

ppc64le

artefact max GLIBC_ SONAME entry points sha256
cross-libc-dlopen.so 2.22 n/a 0 dc200bb29e734e09233a7fb6113fc80933aa7936b3ef3bfe99dd323c57bdda78
gl-fwd.so 2.22 libGL.so.1 3470 7ddbbe306b667063043bb007b729c696e000c7c3f1dee86e3662953661fe4167
egl-fwd.so 2.22 libEGL.so.1 44 1333a78ab77caf55323ac05150cde1df09f0e54a37208abbf7290543feb82d2a
gles-fwd.so 2.22 libGLESv2.so.2 358 ac7b049eb5b95e93c3016c5694386e8ca0ce7501a07094a16be8246e3fc93b54
runtime-select 2.17 n/a 0 898fba9baa9a6f026358264a422ee8c0985e491aa845fc3e949a9531818efc43

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

riscv64

artefact max GLIBC_ SONAME entry points sha256
cross-libc-dlopen.so 2.27 n/a 2 6d9299b56a729a82d264c12dedbc69df0f57a92f2b476a3e37fcdb1637c1f153
gl-fwd.so 2.27 libGL.so.1 3470 c6d1fee9e969ff736a410955bc0b9e9b7ffde90a283b8bc434ca08f9b70b5a7d
egl-fwd.so 2.27 libEGL.so.1 44 cf1f79ca2c526b58359c5b874b3011baf4aa666cf6d52d58a04cdf6017a6bf19
gles-fwd.so 2.27 libGLESv2.so.2 358 b131f76e8829b6142a569239155626716aa3bbaffe06626b668891e4b5052b14
runtime-select 2.27 n/a 0 1ae8cec1042df5469974ccfcfa19b9915ae9ed074a002ea8f42bedd02a7223a3

Compiler: riscv64-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 63129854b553a8af6f19a3b54a97e19059f90ae67bc4342d0e2d03fc80c92478
gl-fwd.so 2.14 libGL.so.1 3470 86911484c93882bd4b58a319b4d6e0e4a85177eaf14e5550841cd44413badd95
egl-fwd.so 2.14 libEGL.so.1 44 706544c2fd64c006adf13f4cc65e073e335d84f05d6dc90cbaef9baaa0fec4c1
gles-fwd.so 2.14 libGLESv2.so.2 358 fcf4f5ee6306c1ad44a3a473ff3f7efddb8c1d1eba2e34213f68ed388e8af78c
runtime-select 2.14 n/a 0 7c32cd98f7aece42a55fa9d3b58f9ae88e6f6f60dfcfbec76d05f1a9f682575d

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.

⭐ One variant. The objects read CROSS_LIBC_DLOPEN_ROOT, with
APPDIR as the fallback, because an AppImage runtime exports APPDIR
into every process it starts and CROSS_LIBC_DLOPEN_ROOT wins when both
are set. The build asks for no CET flag: measured, the flag adds six
endbr64 to the shims and cannot produce the IBT property note, so it does
no protective work here. A consumer who wants a build reading only this
project's name makes it at build time: cd src && make portable.

asset sha256
aarch64-cross-libc-dlopen.so df3c762a4d46063b773e173e6ec02e193602cd39f9411a08a505a49ac13ca7e2
aarch64-egl-fwd.so 839b65103b75da456ef0d2bd5c8f95c1f61bbfb5524b2d10f070b1648114fda2
aarch64-gl-fwd.so 1bfda51b9c417c00e702b905decf053fcb28159fa958b17ddc158606ccf0c884
aarch64-gles-fwd.so 79248f2db688432490e3ae0971ab94821d8aff5498ad752295d0b5a63daa64e9
aarch64-runtime-select 2998e21dfcf1f98791ecb679eb76dfc439bed4ef473a75abe8ea8293211e0d17
cross-libc-dlopen-aarch64.tar a25ad081d1d7d0181ecce0cf4af70ddaa8d6dca9999401bc5cf7a71469ea24b2
cross-libc-dlopen-aarch64.zip 624269500e3e8685ec2cfe8f3eaa2ef60650b9d50203d74ba151703afcfa9407
cross-libc-dlopen-loongarch64.tar 31ab481a27d4c87e811b409be28b9e3bf2f5c871f8534b35b81d0917e6936991
cross-libc-dlopen-loongarch64.zip 4347021246fa65981cb7b9c55e6ceaa424b0f2163b5c927db0362095cfcfa276
cross-libc-dlopen-ppc64le.tar 7a186c988c1825e2422aa7a4d31cb63763256c5c734e66f854cacf14196f8458
cross-libc-dlopen-ppc64le.zip 28d04411fa712ad2f39afc9fdf3ae28da1d71f72e90903c025eed0bdc949db78
cross-libc-dlopen-riscv64.tar 05a8c47f32e36185120e57666c92f8cff651f1e93dc4f9d0d4e2f5fded460899
cross-libc-dlopen-riscv64.zip 2cc273a34873958744ef90bee3e345df3497418503c7bf42a13356dc4e76c1d4
cross-libc-dlopen-x86_64.tar ba3a017077596634c09563dd89b5a7a5c2e215a00d5f266a976f536f32a3903d
cross-libc-dlopen-x86_64.zip 9b16a83486f7b7a3f566ef846cdb74ca8fd2ac4d3a4465f9f026e09286a3cd69
loongarch64-cross-libc-dlopen.so 97eb00e0b144ba822e154acf0033cef2297d9503cdabdcee5deba117ba995b99
loongarch64-egl-fwd.so f772d3d0cb5d3878ede9f28a43523531b42e47e6e583dcf12a95dca599e6e6c5
loongarch64-gl-fwd.so 453320ebe523e9c95d4d62bafc89e11b440b3a92a7692bc6e801f643695c97b8
loongarch64-gles-fwd.so d1634741cd323fdfc349d7dd6dae93aee0a4936d9ba770cade0ed8e9995ee830
loongarch64-runtime-select ec9223cae6872322a865f4b360b5e300f23dbc8b16f59429ed5fd774d97bf0fc
ppc64le-cross-libc-dlopen.so dc200bb29e734e09233a7fb6113fc80933aa7936b3ef3bfe99dd323c57bdda78
ppc64le-egl-fwd.so 1333a78ab77caf55323ac05150cde1df09f0e54a37208abbf7290543feb82d2a
ppc64le-gl-fwd.so 7ddbbe306b667063043bb007b729c696e000c7c3f1dee86e3662953661fe4167
ppc64le-gles-fwd.so ac7b049eb5b95e93c3016c5694386e8ca0ce7501a07094a16be8246e3fc93b54
ppc64le-runtime-select 898fba9baa9a6f026358264a422ee8c0985e491aa845fc3e949a9531818efc43
riscv64-cross-libc-dlopen.so 6d9299b56a729a82d264c12dedbc69df0f57a92f2b476a3e37fcdb1637c1f153
riscv64-egl-fwd.so cf1f79ca2c526b58359c5b874b3011baf4aa666cf6d52d58a04cdf6017a6bf19
riscv64-gl-fwd.so c6d1fee9e969ff736a410955bc0b9e9b7ffde90a283b8bc434ca08f9b70b5a7d
riscv64-gles-fwd.so b131f76e8829b6142a569239155626716aa3bbaffe06626b668891e4b5052b14
riscv64-runtime-select 1ae8cec1042df5469974ccfcfa19b9915ae9ed074a002ea8f42bedd02a7223a3
x86_64-cross-libc-dlopen.so 63129854b553a8af6f19a3b54a97e19059f90ae67bc4342d0e2d03fc80c92478
x86_64-egl-fwd.so 706544c2fd64c006adf13f4cc65e073e335d84f05d6dc90cbaef9baaa0fec4c1
x86_64-gl-fwd.so 86911484c93882bd4b58a319b4d6e0e4a85177eaf14e5550841cd44413badd95
x86_64-gles-fwd.so fcf4f5ee6306c1ad44a3a473ff3f7efddb8c1d1eba2e34213f68ed388e8af78c
x86_64-runtime-select 7c32cd98f7aece42a55fa9d3b58f9ae88e6f6f60dfcfbec76d05f1a9f682575d

⚠ 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.