Skip to content

Commit 89c2932

Browse files
authored
Add automatic dependency on setTempRet0 for i64-returning functions. NFC (#19377)
1 parent 0dd96b0 commit 89c2932

12 files changed

+24
-19
lines changed

emcc.py

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2589,15 +2589,8 @@ def check_memory_setting(setting):
25892589
elif options.memory_init_file:
25902590
diagnostics.warning('unsupported', '--memory-init-file is only supported with -sWASM=0')
25912591

2592-
if (
2593-
settings.MAYBE_WASM2JS or
2594-
settings.AUTODEBUG or
2595-
settings.LINKABLE or
2596-
settings.INCLUDE_FULL_LIBRARY or
2597-
not settings.DISABLE_EXCEPTION_CATCHING or
2598-
(settings.MAIN_MODULE == 1 and (settings.DYNCALLS or not settings.WASM_BIGINT))
2599-
):
2600-
settings.REQUIRED_EXPORTS += ["getTempRet0", "setTempRet0"]
2592+
if settings.AUTODEBUG:
2593+
settings.REQUIRED_EXPORTS += ['setTempRet0']
26012594

26022595
if settings.LEGALIZE_JS_FFI:
26032596
settings.REQUIRED_EXPORTS += ['__get_temp_ret', '__set_temp_ret']

src/jsifier.js

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -265,6 +265,13 @@ function ${name}(${args}) {
265265
}
266266

267267
const deps = LibraryManager.library[symbol + '__deps'] || [];
268+
let sig = LibraryManager.library[symbol + '__sig'];
269+
if (!WASM_BIGINT && sig && sig[0] == 'j') {
270+
// Without WASM_BIGINT functions that return i64 depend on setTempRet0
271+
// to return the upper 32-bits of the result.
272+
// See makeReturn64 in parseTools.py.
273+
deps.push('setTempRet0');
274+
}
268275

269276
let isAsyncFunction = false;
270277
if (ASYNCIFY) {
@@ -279,7 +286,7 @@ function ${name}(${args}) {
279286
}
280287

281288
if (symbolsOnly) {
282-
if (!isJsOnlySymbol(symbol) && LibraryManager.library.hasOwnProperty(symbol)) {
289+
if (LibraryManager.library.hasOwnProperty(symbol)) {
283290
var value = LibraryManager.library[symbol];
284291
var resolvedSymbol = symbol;
285292
// Resolve aliases before looking up deps
@@ -453,7 +460,6 @@ function ${name}(${args}) {
453460
}
454461
contentText = `var ${mangled} = ${snippet};`;
455462
}
456-
let sig = LibraryManager.library[symbol + '__sig'];
457463
// asm module exports are done in emscripten.py, after the asm module is ready. Here
458464
// we also export library methods as necessary.
459465
if ((EXPORT_ALL || EXPORTED_FUNCTIONS.has(mangled)) && !isStub) {

src/library_autodebug.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ mergeInto(LibraryManager.library, {
1717
out('get_i32 ' + [loc, index, value]);
1818
return value;
1919
},
20+
$get_i64__deps: ['setTempRet0'],
2021
$get_i64: function(loc, index, low, high) {
2122
out('get_i64 ' + [loc, index, low, high]);
2223
setTempRet0(high);
@@ -42,6 +43,7 @@ mergeInto(LibraryManager.library, {
4243
out('set_i32 ' + [loc, index, value]);
4344
return value;
4445
},
46+
$set_i64__deps: ['setTempRet0'],
4547
$set_i64: function(loc, index, low, high) {
4648
out('set_i64 ' + [loc, index, low, high]);
4749
setTempRet0(high);
@@ -71,6 +73,7 @@ mergeInto(LibraryManager.library, {
7173
out('load_val_i32 ' + [loc, value]);
7274
return value;
7375
},
76+
$load_val_i64__deps: ['setTempRet0'],
7477
$load_val_i64: function(loc, low, high) {
7578
out('load_val_i64 ' + [loc, low, high]);
7679
setTempRet0(high);
@@ -92,6 +95,7 @@ mergeInto(LibraryManager.library, {
9295
out('store_val_i32 ' + [loc, value]);
9396
return value;
9497
},
98+
$store_val_i64__deps: ['setTempRet0'],
9599
$store_val_i64: function(loc, low, high) {
96100
out('store_val_i64 ' + [loc, low, high]);
97101
setTempRet0(high);

src/library_makeDynCall.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
*/
66

77
mergeInto(LibraryManager.library, {
8-
$createDyncallWrapper__deps: ['$generateFuncType', '$uleb128Encode'],
8+
$createDyncallWrapper__deps: ['$generateFuncType', '$uleb128Encode', 'setTempRet0'],
99
$createDyncallWrapper: function(sig) {
1010
var sections = [];
1111
var prelude = [

test/core/js_library_i64_params.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
TestLibrary = {
22
jscall__deps: i53ConversionDeps,
3-
jscall__sig: 'ij',
3+
jscall__sig: 'jj',
44
jscall: function({{{ defineI64Param('foo') }}}) {
55
{{{ receiveI64ParamAsI53('foo', `(err('overflow'), ${makeReturn64('42')})`) }}}
66
err('js:got: ' + foo);

test/other/metadce/test_metadce_cxx_except.exports

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ dynCall_iiiiijj
1212
dynCall_jiiii
1313
dynCall_jiji
1414
dynCall_viijii
15-
getTempRet0
1615
main
1716
memory
1817
setTempRet0
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
166271
1+
166245

test/other/metadce/test_metadce_cxx_mangle.exports

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ dynCall_jiiii
1414
dynCall_jiji
1515
dynCall_viijii
1616
free
17-
getTempRet0
1817
main
1918
memory
2019
setTempRet0
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
221359
1+
221332

test/test_core.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9704,7 +9704,6 @@ def test_syscall_intercept(self):
97049704
def test_js_library_i64_params(self):
97059705
# Tests the defineI64Param and receiveI64ParamAsI53 helpers that are
97069706
# used to recieve i64 argument in syscalls.
9707-
self.set_setting('EXPORTED_RUNTIME_METHODS', ['setTempRet0'])
97089707
self.emcc_args += ['--js-library=' + test_file('core/js_library_i64_params.js')]
97099708
self.do_core_test('js_library_i64_params.c')
97109709

0 commit comments

Comments
 (0)