From 4a3956693056b3ad4f6541589c5ab44df7a7fc39 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Morten=20Johan=20S=C3=B8rvig?= Date: Wed, 12 Jun 2024 20:10:35 +0200 Subject: [PATCH 6/6] Make RTLD_LOCAL work correctly for preloaded DSOs (#21985) Copied from: https://github.com/emscripten-core/emscripten/pull/21985 This patch can be removed when updating Emscripten version to >= 3.1.62 Follow-up to commit c9a5e63c, for the FS.createPreloadedFile() case. Make sure loadWebAssemblyModule() and loadDynamicLibrary() are called with a valid 'localScope' object when invoked from the .so file type preload handler. --- src/library_dylink.js | 4 ++-- test/test_core.py | 46 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 48 insertions(+), 2 deletions(-) diff --git a/src/library_dylink.js b/src/library_dylink.js index 965b119a4..211f4030c 100644 --- a/src/library_dylink.js +++ b/src/library_dylink.js @@ -26,7 +26,7 @@ var LibraryDylink = { // than just running the promises in parallel, this makes a chain of // promises to run in series. wasmPlugin['promiseChainEnd'] = wasmPlugin['promiseChainEnd'].then( - () => loadWebAssemblyModule(byteArray, {loadAsync: true, nodelete: true}, name)).then( + () => loadWebAssemblyModule(byteArray, {loadAsync: true, nodelete: true}, name, {})).then( (exports) => { #if DYLINK_DEBUG dbg(`registering preloadedWasm: ${name}`); @@ -877,7 +877,7 @@ var LibraryDylink = { if (flags.loadAsync) { return metadata.neededDynlibs .reduce((chain, dynNeeded) => chain.then(() => - loadDynamicLibrary(dynNeeded, flags) + loadDynamicLibrary(dynNeeded, flags, localScope) ), Promise.resolve()) .then(loadModule); } -- 2.29.2.windows.2