Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions test/common.py
Original file line number Diff line number Diff line change
Expand Up @@ -614,7 +614,7 @@ def with_all_sjlj(f):
assert callable(f)

@wraps(f)
def metafunc(self, mode):
def metafunc(self, mode, *args, **kwargs):
if mode == 'wasm' or mode == 'wasm_exnref':
if self.is_wasm2js():
self.skipTest('wasm2js does not support wasm SjLj')
Expand All @@ -627,10 +627,10 @@ def metafunc(self, mode):
if mode == 'wasm_exnref':
self.require_wasm_exnref()
self.set_setting('WASM_EXNREF')
f(self)
f(self, *args, **kwargs)
else:
self.set_setting('SUPPORT_LONGJMP', 'emscripten')
f(self)
f(self, *args, **kwargs)

parameterize(metafunc, {'emscripten': ('emscripten',),
'wasm': ('wasm',),
Expand Down
3 changes: 3 additions & 0 deletions test/test_core.py
Original file line number Diff line number Diff line change
Expand Up @@ -863,6 +863,9 @@ def test_longjmp_standalone(self):
def test_longjmp(self):
self.do_core_test('test_longjmp.c')

def test_longjmp_wasm_workers(self):
self.do_core_test('test_longjmp.c', emcc_args=['-sWASM_WORKERS'])

@with_all_sjlj
def test_longjmp_zero(self):
if '-fsanitize=undefined' in self.emcc_args and self.get_setting('SUPPORT_LONGJMP') == 'emscripten':
Expand Down
9 changes: 6 additions & 3 deletions tools/system_libs.py
Original file line number Diff line number Diff line change
Expand Up @@ -2276,7 +2276,7 @@ def get_libs_to_link(args):
if force_include:
logger.debug(f'forcing stdlibs: {force_include}')

def add_library(libname):
def add_library(libname, whole_archive=False):
lib = system_libs_map[libname]
if lib.name in already_included:
return
Expand All @@ -2285,7 +2285,7 @@ def add_library(libname):
logger.debug('including %s (%s)' % (lib.name, lib.get_filename()))

need_whole_archive = lib.name in force_include and lib.get_ext() == '.a'
libs_to_link.append((lib.get_link_flag(), need_whole_archive))
libs_to_link.append((lib.get_link_flag(), whole_archive or need_whole_archive))

if '-nostartfiles' not in args:
if settings.SHARED_MEMORY:
Expand Down Expand Up @@ -2396,7 +2396,10 @@ def add_sanitizer_libs():
if settings.WASM_WORKERS and (not settings.SINGLE_FILE and
not settings.RELOCATABLE and
not settings.PROXY_TO_WORKER):
add_library('libwasm_workers')
# When we include libwasm_workers we use `--whole-archive` to ensure
# that the static constructor (`emscripten_wasm_worker_main_thread_initialize`)
# is run.
add_library('libwasm_workers', whole_archive=True)

if settings.WASMFS:
# Link in the no-fs version first, so that if it provides all the needed
Expand Down
Loading