Skip to content

Commit 194e399

Browse files
committed
Remove deps_info system and and the running of llvm-nm on input file. NFC
This uses a new "stub object" construct to tell the linker (wasm-ld) not only about the existence of the JS library symbols but the native symbols on which they depend (a.k.a reverse dependencies). This allows us to completely remove deps_info.py in favor of just using normal `__deps` entries in the library files. It also means we no longer need to run `llvm-nm` on the linker inputs to discover the symbols they use. Depends on: https://reviews.llvm.org/D145308 Fixes: #18875
1 parent a90c5ab commit 194e399

19 files changed

+102
-532
lines changed

emcc.py

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,6 @@
5050
from tools.minimal_runtime_shell import generate_minimal_runtime_html
5151
import tools.line_endings
5252
from tools import feature_matrix
53-
from tools import deps_info
5453
from tools import js_manipulation
5554
from tools import wasm2c
5655
from tools import webassembly
@@ -1322,11 +1321,19 @@ def run(args):
13221321
js_info = get_js_sym_info()
13231322
if not settings.SIDE_MODULE:
13241323
js_syms = js_info['deps']
1325-
deps_info.append_deps_info(js_syms)
1324+
if not settings.USES_DYNAMIC_ALLOC:
1325+
# When USES_DYNAMIC_ALLOC=0 is set we don't export malloc/free, even
1326+
# if the JS library symbols depend on them. In this mode we instead
1327+
# fail at runtime if they are actaully called.
1328+
for value in js_syms.values():
1329+
if 'malloc' in value:
1330+
value.remove('malloc')
1331+
if 'free' in value:
1332+
value.remove('free')
13261333
if settings.ASYNCIFY:
13271334
settings.ASYNCIFY_IMPORTS += ['env.' + x for x in js_info['asyncFuncs']]
13281335

1329-
phase_calculate_system_libraries(state, linker_arguments, linker_inputs, newargs)
1336+
phase_calculate_system_libraries(state, linker_arguments, newargs)
13301337

13311338
phase_link(linker_arguments, wasm_target, js_syms)
13321339

@@ -2085,11 +2092,6 @@ def phase_linker_setup(options, state, newargs):
20852092
settings.INCLUDE_FULL_LIBRARY = 1
20862093
settings.DEFAULT_LIBRARY_FUNCS_TO_INCLUDE += ['$loadDylibs']
20872094

2088-
# If we are including the entire JS library then we know for sure we will, by definition,
2089-
# require all the reverse dependencies.
2090-
if settings.INCLUDE_FULL_LIBRARY:
2091-
default_setting('REVERSE_DEPS', 'all')
2092-
20932095
if settings.MAIN_MODULE == 1 or settings.SIDE_MODULE == 1:
20942096
settings.LINKABLE = 1
20952097

@@ -3079,14 +3081,13 @@ def compile_source_file(i, input_file):
30793081

30803082

30813083
@ToolchainProfiler.profile_block('calculate system libraries')
3082-
def phase_calculate_system_libraries(state, linker_arguments, linker_inputs, newargs):
3084+
def phase_calculate_system_libraries(state, linker_arguments, newargs):
30833085
extra_files_to_link = []
30843086
# Link in ports and system libraries, if necessary
30853087
if not settings.SIDE_MODULE:
30863088
# Ports are always linked into the main module, never the side module.
30873089
extra_files_to_link += ports.get_libs(settings)
3088-
all_linker_inputs = [f for _, f in sorted(linker_inputs)] + extra_files_to_link
3089-
extra_files_to_link += system_libs.calculate(all_linker_inputs, newargs, forced=state.forced_stdlibs)
3090+
extra_files_to_link += system_libs.calculate(newargs, forced=state.forced_stdlibs)
30903091
linker_arguments.extend(extra_files_to_link)
30913092

30923093

site/source/docs/porting/connecting_cpp_and_javascript/Interacting-with-code.rst

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -596,9 +596,6 @@ See the `library_*.js`_ files for other examples.
596596
This is useful when all the implemented methods use a JavaScript
597597
singleton containing helper methods. See ``library_webgl.js`` for
598598
an example.
599-
- If a JavaScript library depends on a compiled C library (like most
600-
of *libc*), you must edit `src/deps_info.json`_. Search for
601-
"deps_info" in `tools/system_libs.py`_.
602599
- The keys passed into `mergeInto` generate functions that are prefixed
603600
by ``_``. In other words ``my_func: function() {},`` becomes
604601
``function _my_func() {}``, as all C methods in emscripten have a ``_`` prefix. Keys starting with ``$`` have the ``$``
@@ -810,7 +807,6 @@ you can give it a try. See `Emnapi documentation`_ for more details.
810807

811808
.. _library.js: https://github.com/emscripten-core/emscripten/blob/main/src/library.js
812809
.. _test_js_libraries: https://github.com/emscripten-core/emscripten/blob/1.29.12/tests/test_core.py#L5043
813-
.. _src/deps_info.json: https://github.com/emscripten-core/emscripten/blob/main/src/deps_info.json
814810
.. _tools/system_libs.py: https://github.com/emscripten-core/emscripten/blob/main/tools/system_libs.py
815811
.. _library_\*.js: https://github.com/emscripten-core/emscripten/tree/main/src
816812
.. _test_add_function in test/test_core.py: https://github.com/emscripten-core/emscripten/blob/1.29.12/tests/test_core.py#L6237

src/jsifier.js

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,25 @@ function isDefined(symName) {
6666
return false;
6767
}
6868

69+
function getTransitiveDeps(symbol) {
70+
const transitiveDeps = new Set();
71+
const seen = new Set();
72+
const toVisit = [symbol];
73+
while (toVisit.length) {
74+
const sym = toVisit.pop();
75+
if (!seen.has(sym)) {
76+
let directDeps = LibraryManager.library[sym + '__deps'] || [];
77+
directDeps = directDeps.filter((d) => typeof d === 'string');
78+
if (directDeps.length) {
79+
directDeps.forEach(transitiveDeps.add, transitiveDeps);
80+
toVisit.push(...directDeps);
81+
}
82+
seen.add(sym);
83+
}
84+
}
85+
return Array.from(transitiveDeps);
86+
}
87+
6988
function runJSify() {
7089
const libraryItems = [];
7190
const symbolDeps = {};
@@ -260,8 +279,8 @@ function ${name}(${args}) {
260279

261280
if (symbolsOnly) {
262281
if (!isJsOnlySymbol(symbol) && LibraryManager.library.hasOwnProperty(symbol)) {
263-
externalDeps = deps.filter((d) => !isJsOnlySymbol(d) && !(d in LibraryManager.library) && typeof d === 'string');
264-
symbolDeps[symbol] = externalDeps;
282+
var transtiveDeps = getTransitiveDeps(symbol);
283+
symbolDeps[symbol] = transtiveDeps.filter((d) => !isJsOnlySymbol(d) && !(d in LibraryManager.library));
265284
}
266285
return;
267286
}

src/library.js

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -567,7 +567,7 @@ mergeInto(LibraryManager.library, {
567567

568568
// TODO: Initialize these to defaults on startup from system settings.
569569
// Note: glibc has one fewer underscore for all of these. Also used in other related functions (timegm)
570-
_tzset_js__deps: ['$stringToNewUTF8'],
570+
_tzset_js__deps: ['$stringToNewUTF8', 'malloc'],
571571
_tzset_js__internal: true,
572572
_tzset_js: function(timezone, daylight, tzname) {
573573
// TODO: Use (malleable) environment variables instead of system settings.
@@ -1210,6 +1210,7 @@ mergeInto(LibraryManager.library, {
12101210
// ==========================================================================
12111211

12121212
#if SUPPORT_LONGJMP == 'emscripten'
1213+
_emscripten_throw_longjmp__deps: ['setThrew'],
12131214
_emscripten_throw_longjmp: function() {
12141215
#if EXCEPTION_STACK_TRACES
12151216
throw new EmscriptenSjLj;
@@ -1719,7 +1720,7 @@ mergeInto(LibraryManager.library, {
17191720
return { family: family, addr: addr, port: port };
17201721
},
17211722
$writeSockaddr__docs: '/** @param {number=} addrlen */',
1722-
$writeSockaddr__deps: ['$Sockets', '$inetPton4', '$inetPton6', '$zeroMemory'],
1723+
$writeSockaddr__deps: ['$Sockets', '$inetPton4', '$inetPton6', '$zeroMemory', 'htons'],
17231724
$writeSockaddr: function (sa, family, addr, port, addrlen) {
17241725
switch (family) {
17251726
case {{{ cDefs.AF_INET }}}:
@@ -1856,7 +1857,7 @@ mergeInto(LibraryManager.library, {
18561857
return 0;
18571858
},
18581859

1859-
getaddrinfo__deps: ['$Sockets', '$DNS', '$inetPton4', '$inetNtop4', '$inetPton6', '$inetNtop6', '$writeSockaddr'],
1860+
getaddrinfo__deps: ['$Sockets', '$DNS', '$inetPton4', '$inetNtop4', '$inetPton6', '$inetNtop6', '$writeSockaddr', 'malloc', 'htonl'],
18601861
getaddrinfo__proxy: 'sync',
18611862
getaddrinfo: function(node, service, hint, out) {
18621863
// Note getaddrinfo currently only returns a single addrinfo with ai_next defaulting to NULL. When NULL
@@ -2621,7 +2622,7 @@ mergeInto(LibraryManager.library, {
26212622
// using builtin_malloc to avoid LSan reporting these as leaks.
26222623
emscripten_get_compiler_setting__noleakcheck: true,
26232624
#if RETAIN_COMPILER_SETTINGS
2624-
emscripten_get_compiler_setting__deps: ['$stringToNewUTF8'],
2625+
emscripten_get_compiler_setting__deps: ['$stringToNewUTF8', 'malloc'],
26252626
#endif
26262627
emscripten_get_compiler_setting: function(name) {
26272628
#if RETAIN_COMPILER_SETTINGS
@@ -2803,7 +2804,7 @@ mergeInto(LibraryManager.library, {
28032804

28042805
// Look up the function name from our stack frame cache with our PC representation.
28052806
#if USE_OFFSET_CONVERTER
2806-
emscripten_pc_get_function__deps: ['$UNWIND_CACHE', 'free', '$stringToNewUTF8'],
2807+
emscripten_pc_get_function__deps: ['$UNWIND_CACHE', '$stringToNewUTF8', 'malloc', 'free'],
28072808
// Don't treat allocation of _emscripten_pc_get_function.ret as a leak
28082809
emscripten_pc_get_function__noleakcheck: true,
28092810
#endif

src/library_async.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -488,7 +488,7 @@ mergeInto(LibraryManager.library, {
488488
});
489489
},
490490

491-
emscripten_wget_data__deps: ['$asyncLoad', 'malloc'],
491+
emscripten_wget_data__deps: ['$asyncLoad', 'malloc', 'free'],
492492
emscripten_wget_data: function(url, pbuffer, pnum, perror) {
493493
return Asyncify.handleSleep((wakeUp) => {
494494
asyncLoad(UTF8ToString(url), (byteArray) => {

src/library_exceptions.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -224,7 +224,7 @@ var LibraryExceptions = {
224224
return type;
225225
},
226226

227-
__cxa_begin_catch__deps: ['$exceptionCaught', '$exception_addRef', '$uncaughtExceptionCount'],
227+
__cxa_begin_catch__deps: ['$exceptionCaught', '$exception_addRef', '$uncaughtExceptionCount', '__cxa_can_catch', 'setTempRet0'],
228228
__cxa_begin_catch__sig: 'pp',
229229
__cxa_begin_catch: function(ptr) {
230230
var info = new ExceptionInfo(ptr);

src/library_glew.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,7 @@ var LibraryGLEW = {
112112
},
113113
},
114114

115+
glewInit__deps: ['malloc'],
115116
glewInit: function() { return 0; },
116117

117118
glewIsSupported: function(name) {

src/library_glfw.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1121,7 +1121,7 @@ var LibraryGLFW = {
11211121
/*******************************************************************************
11221122
* GLFW FUNCTIONS
11231123
******************************************************************************/
1124-
glfwInit__deps: ['emscripten_get_device_pixel_ratio'],
1124+
glfwInit__deps: ['emscripten_get_device_pixel_ratio', 'malloc', 'free'],
11251125
glfwInit__sig: 'i',
11261126
glfwInit: function() {
11271127
if (GLFW.windows) return 1; // GL_TRUE
@@ -1269,6 +1269,7 @@ var LibraryGLFW = {
12691269
glfwPostEmptyEvent__sig: 'v',
12701270
glfwPostEmptyEvent: function() {},
12711271

1272+
glfwGetMonitors__deps: ['malloc'],
12721273
glfwGetMonitors__sig: 'ii',
12731274
glfwGetMonitors: function(count) {
12741275
{{{ makeSetValue('count', '0', '1', 'i32') }}};

src/library_html5.js

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -235,7 +235,7 @@ var LibraryHTML5 = {
235235
},
236236
},
237237

238-
$registerKeyEventCallback__deps: ['$JSEvents', '$findEventTarget', '$stringToUTF8'],
238+
$registerKeyEventCallback__deps: ['$JSEvents', '$findEventTarget', 'malloc', '$stringToUTF8'],
239239
$registerKeyEventCallback: function(target, userData, useCapture, callbackfunc, eventTypeId, eventTypeString, targetThread) {
240240
#if PTHREADS
241241
targetThread = JSEvents.getTargetThreadForEventCallback(targetThread);
@@ -503,7 +503,7 @@ var LibraryHTML5 = {
503503
#endif
504504
},
505505

506-
$registerMouseEventCallback__deps: ['$JSEvents', '$fillMouseEventData', '$findEventTarget'],
506+
$registerMouseEventCallback__deps: ['$JSEvents', '$fillMouseEventData', '$findEventTarget', 'malloc'],
507507
$registerMouseEventCallback: function(target, userData, useCapture, callbackfunc, eventTypeId, eventTypeString, targetThread) {
508508
#if PTHREADS
509509
targetThread = JSEvents.getTargetThreadForEventCallback(targetThread);
@@ -616,7 +616,7 @@ var LibraryHTML5 = {
616616
return {{{ cDefs.EMSCRIPTEN_RESULT_SUCCESS }}};
617617
},
618618

619-
$registerWheelEventCallback__deps: ['$JSEvents', '$fillMouseEventData', '$findEventTarget'],
619+
$registerWheelEventCallback__deps: ['$JSEvents', '$fillMouseEventData', '$findEventTarget', 'malloc'],
620620
$registerWheelEventCallback: function(target, userData, useCapture, callbackfunc, eventTypeId, eventTypeString, targetThread) {
621621
#if PTHREADS
622622
targetThread = JSEvents.getTargetThreadForEventCallback(targetThread);
@@ -692,7 +692,7 @@ var LibraryHTML5 = {
692692
}
693693
},
694694

695-
$registerUiEventCallback__deps: ['$JSEvents', '$findEventTarget'],
695+
$registerUiEventCallback__deps: ['$JSEvents', '$findEventTarget', 'malloc'],
696696
$registerUiEventCallback: function(target, userData, useCapture, callbackfunc, eventTypeId, eventTypeString, targetThread) {
697697
#if PTHREADS
698698
targetThread = JSEvents.getTargetThreadForEventCallback(targetThread);
@@ -768,7 +768,7 @@ var LibraryHTML5 = {
768768
return {{{ cDefs.EMSCRIPTEN_RESULT_SUCCESS }}};
769769
},
770770

771-
$registerFocusEventCallback__deps: ['$JSEvents', '$findEventTarget', '$stringToUTF8'],
771+
$registerFocusEventCallback__deps: ['$JSEvents', '$findEventTarget', 'malloc', '$stringToUTF8'],
772772
$registerFocusEventCallback: function(target, userData, useCapture, callbackfunc, eventTypeId, eventTypeString, targetThread) {
773773
#if PTHREADS
774774
targetThread = JSEvents.getTargetThreadForEventCallback(targetThread);
@@ -911,7 +911,7 @@ var LibraryHTML5 = {
911911
{{{ makeSetValue('eventStruct', C_STRUCTS.EmscriptenDeviceMotionEvent.rotationRateGamma, 'rr["gamma"]', 'double') }}};
912912
},
913913

914-
$registerDeviceMotionEventCallback__deps: ['$JSEvents', '$fillDeviceMotionEventData', '$findEventTarget'],
914+
$registerDeviceMotionEventCallback__deps: ['$JSEvents', '$fillDeviceMotionEventData', '$findEventTarget', 'malloc'],
915915
$registerDeviceMotionEventCallback: function(target, userData, useCapture, callbackfunc, eventTypeId, eventTypeString, targetThread) {
916916
#if PTHREADS
917917
targetThread = JSEvents.getTargetThreadForEventCallback(targetThread);
@@ -979,7 +979,7 @@ var LibraryHTML5 = {
979979
{{{ makeSetValue('eventStruct', C_STRUCTS.EmscriptenOrientationChangeEvent.orientationAngle, 'orientation', 'i32') }}};
980980
},
981981

982-
$registerOrientationChangeEventCallback__deps: ['$JSEvents', '$fillOrientationChangeEventData', '$findEventTarget'],
982+
$registerOrientationChangeEventCallback__deps: ['$JSEvents', '$fillOrientationChangeEventData', '$findEventTarget', 'malloc'],
983983
$registerOrientationChangeEventCallback: function(target, userData, useCapture, callbackfunc, eventTypeId, eventTypeString, targetThread) {
984984
#if PTHREADS
985985
targetThread = JSEvents.getTargetThreadForEventCallback(targetThread);
@@ -1099,7 +1099,7 @@ var LibraryHTML5 = {
10991099
}
11001100
},
11011101

1102-
$registerFullscreenChangeEventCallback__deps: ['$JSEvents', '$fillFullscreenChangeEventData', '$findEventTarget'],
1102+
$registerFullscreenChangeEventCallback__deps: ['$JSEvents', '$fillFullscreenChangeEventData', '$findEventTarget', 'malloc'],
11031103
$registerFullscreenChangeEventCallback: function(target, userData, useCapture, callbackfunc, eventTypeId, eventTypeString, targetThread) {
11041104
#if PTHREADS
11051105
targetThread = JSEvents.getTargetThreadForEventCallback(targetThread);
@@ -1677,7 +1677,7 @@ var LibraryHTML5 = {
16771677
stringToUTF8(id, eventStruct + {{{ C_STRUCTS.EmscriptenPointerlockChangeEvent.id }}}, {{{ cDefs.EM_HTML5_LONG_STRING_LEN_BYTES }}});
16781678
},
16791679

1680-
$registerPointerlockChangeEventCallback__deps: ['$JSEvents', '$fillPointerlockChangeEventData', '$findEventTarget'],
1680+
$registerPointerlockChangeEventCallback__deps: ['$JSEvents', '$fillPointerlockChangeEventData', '$findEventTarget', 'malloc'],
16811681
$registerPointerlockChangeEventCallback: function(target, userData, useCapture, callbackfunc, eventTypeId, eventTypeString, targetThread) {
16821682
#if PTHREADS
16831683
targetThread = JSEvents.getTargetThreadForEventCallback(targetThread);
@@ -1923,7 +1923,7 @@ var LibraryHTML5 = {
19231923
{{{ makeSetValue('eventStruct', C_STRUCTS.EmscriptenVisibilityChangeEvent.visibilityState, 'visibilityState', 'i32') }}};
19241924
},
19251925

1926-
$registerVisibilityChangeEventCallback__deps: ['$JSEvents', '$fillVisibilityChangeEventData', '$findEventTarget'],
1926+
$registerVisibilityChangeEventCallback__deps: ['$JSEvents', '$fillVisibilityChangeEventData', '$findEventTarget', 'malloc'],
19271927
$registerVisibilityChangeEventCallback: function(target, userData, useCapture, callbackfunc, eventTypeId, eventTypeString, targetThread) {
19281928
#if PTHREADS
19291929
targetThread = JSEvents.getTargetThreadForEventCallback(targetThread);
@@ -1978,7 +1978,7 @@ var LibraryHTML5 = {
19781978
return {{{ cDefs.EMSCRIPTEN_RESULT_SUCCESS }}};
19791979
},
19801980

1981-
$registerTouchEventCallback__deps: ['$JSEvents', '$findEventTarget', '$getBoundingClientRect'],
1981+
$registerTouchEventCallback__deps: ['$JSEvents', '$findEventTarget', '$getBoundingClientRect', 'malloc'],
19821982
$registerTouchEventCallback: function(target, userData, useCapture, callbackfunc, eventTypeId, eventTypeString, targetThread) {
19831983
#if PTHREADS
19841984
targetThread = JSEvents.getTargetThreadForEventCallback(targetThread);
@@ -2137,7 +2137,7 @@ var LibraryHTML5 = {
21372137
stringToUTF8(e.mapping, eventStruct + {{{ C_STRUCTS.EmscriptenGamepadEvent.mapping }}}, {{{ cDefs.EM_HTML5_MEDIUM_STRING_LEN_BYTES }}});
21382138
},
21392139

2140-
$registerGamepadEventCallback__deps: ['$JSEvents', '$fillGamepadEventData', '$findEventTarget'],
2140+
$registerGamepadEventCallback__deps: ['$JSEvents', '$fillGamepadEventData', '$findEventTarget', 'malloc'],
21412141
$registerGamepadEventCallback: function(target, userData, useCapture, callbackfunc, eventTypeId, eventTypeString, targetThread) {
21422142
#if PTHREADS
21432143
targetThread = JSEvents.getTargetThreadForEventCallback(targetThread);
@@ -2305,15 +2305,15 @@ var LibraryHTML5 = {
23052305
},
23062306

23072307
emscripten_set_batterychargingchange_callback_on_thread__proxy: 'sync',
2308-
emscripten_set_batterychargingchange_callback_on_thread__deps: ['$registerBatteryEventCallback', '$battery', 'malloc'],
2308+
emscripten_set_batterychargingchange_callback_on_thread__deps: ['$registerBatteryEventCallback', '$battery'],
23092309
emscripten_set_batterychargingchange_callback_on_thread: function(userData, callbackfunc, targetThread) {
23102310
if (!battery()) return {{{ cDefs.EMSCRIPTEN_RESULT_NOT_SUPPORTED }}};
23112311
registerBatteryEventCallback(battery(), userData, true, callbackfunc, {{{ cDefs.EMSCRIPTEN_EVENT_BATTERYCHARGINGCHANGE }}}, "chargingchange", targetThread);
23122312
return {{{ cDefs.EMSCRIPTEN_RESULT_SUCCESS }}};
23132313
},
23142314

23152315
emscripten_set_batterylevelchange_callback_on_thread__proxy: 'sync',
2316-
emscripten_set_batterylevelchange_callback_on_thread__deps: ['$registerBatteryEventCallback', '$battery', 'malloc'],
2316+
emscripten_set_batterylevelchange_callback_on_thread__deps: ['$registerBatteryEventCallback', '$battery'],
23172317
emscripten_set_batterylevelchange_callback_on_thread: function(userData, callbackfunc, targetThread) {
23182318
if (!battery()) return {{{ cDefs.EMSCRIPTEN_RESULT_NOT_SUPPORTED }}};
23192319
registerBatteryEventCallback(battery(), userData, true, callbackfunc, {{{ cDefs.EMSCRIPTEN_EVENT_BATTERYLEVELCHANGE }}}, "levelchange", targetThread);

src/library_openal.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3018,7 +3018,7 @@ var LibraryOpenAL = {
30183018
},
30193019

30203020
alGetString__proxy: 'sync',
3021-
alGetString__deps: ['$stringToNewUTF8'],
3021+
alGetString__deps: ['$stringToNewUTF8', 'malloc'],
30223022
alGetString: function(param) {
30233023
if (AL.stringCache[param]) {
30243024
return AL.stringCache[param];

src/library_syscall.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@ var SyscallsLibrary = {
126126

127127
_mmap_js__deps: ['$SYSCALLS',
128128
#if FILESYSTEM && SYSCALLS_REQUIRE_FILESYSTEM
129-
'$FS',
129+
'$FS', 'emscripten_builtin_memalign',
130130
#endif
131131
],
132132
_mmap_js: function(len, prot, flags, fd, off, allocated, addr) {

src/parseTools.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -922,7 +922,7 @@ function makeMalloc(source, param) {
922922
return `_malloc(${param})`;
923923
}
924924
// It should be impossible to call some functions without malloc being
925-
// included, unless we have a deps_info.json bug. To let closure not error
925+
// included, unless we have a missing __deps entry. To let closure not error
926926
// on `_malloc` not being present, they don't call malloc and instead abort
927927
// with an error at runtime.
928928
// TODO: A more comprehensive deps system could catch this at compile time.

src/settings.js

Lines changed: 1 addition & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -2028,22 +2028,6 @@ var IMPORTED_MEMORY = false;
20282028
// [link]
20292029
var SPLIT_MODULE = false;
20302030

2031-
// How to calculate reverse dependencies (dependencies from JS functions to
2032-
// native functions) prior to linking native code with wasm-ld. This option
2033-
// has three possible values:
2034-
// 'auto': (default) Inspect the object code passed to the linker (by running
2035-
// llvm-nm on all input) and use the map in deps_info.py to determine
2036-
// the set of additional dependencies.
2037-
// 'all' : Include the full set of possible reverse dependencies.
2038-
// 'none': No reverse dependences will be added by emscriopten. Any reverse
2039-
// dependencies will be assumed to be explicitly added to
2040-
// EXPORTED_FUNCTIONS and deps_info.py will be completely ignored.
2041-
// While 'auto' will produce a minimal set (so is good for code size), 'all'
2042-
// and 'none' will give faster link times, especially for very large projects
2043-
// (since they both avoid the running of llvm-nm on all linker inputs).
2044-
// [link]
2045-
var REVERSE_DEPS = 'auto';
2046-
20472031
// For MAIN_MODULE builds, automatically load any dynamic library dependencies
20482032
// on startup, before loading the main module.
20492033
var AUTOLOAD_DYLIBS = true;
@@ -2175,4 +2159,5 @@ var LEGACY_SETTINGS = [
21752159
['LLD_REPORT_UNDEFINED', [1], 'Disabling is no longer supported'],
21762160
['MEM_INIT_METHOD', [0], 'No longer supported'],
21772161
['USE_PTHREADS', [0, 1], 'No longer needed. Use -pthread instead'],
2162+
['REVERSE_DEPS', ['auto', 'all', 'none'], 'No longer needed'],
21782163
];

0 commit comments

Comments
 (0)