emscripten-core / emscripten-core/emscripten

Linking LibreOffice with WASM EH and SjLj fails since 3.1.6

Open
#16,572 38 comments 0 reactions 0 assignees View on GitHub
Dominant language
C++
Stars
27.6k
Forks
3.6k
Avg merge
1d 1h
Merged PRs (30d)
105

Description

** Version of emscripten/emsdk: **

emcc (Emscripten gcc/clang-like replacement + linker emulating GNU ld) 3.1.7 (48a16209b1a0de5efd8112ce6430415730008d18)
clang version 15.0.0 (https://github.com/llvm/llvm-project fbce4a78035c32792b0a13cf1f169048b822c06b)
Target: wasm32-unknown-emscripten
Thread model: posix
InstalledDir: /home/jmg/Development/libreoffice/git_emsdk/upstream/bin

** Linking EH command flags: **

Failed build: `-fwasm-exceptions -s SUPPORT_LONGJMP=wasm`. Buiding with `-s DISABLE_EXCEPTION_CATCHING=0` works fine.

** Failing command line in full: **

S=/home/jmg/Development/libreoffice/wasm && B=$S/build-dbg-neh && I=$B/instdir && W=$B/workdir && /usr/bin/ccache /home/jmg/Development/libreoffice/git_emsdk/upstream/emscripten/em++ -fno-stack-protector -pthread -s USE_PTHREADS=1 -s TOTAL_MEMORY=1GB -s PTHREAD_POOL_SIZE=4 --bind -s FORCE_FILESYSTEM=1 -s WASM_BIGINT=1 -s ERROR_ON_UNDEFINED_SYMBOLS=1 -s FETCH=1 -s ASSERTIONS=1 -s EXIT_RUNTIME=0 -s EXPORTED_RUNTIME_METHODS=["UTF16ToString","stringToUTF16","printErr"] -pthread -s USE_PTHREADS=1 -fwasm-exceptions -s SUPPORT_LONGJMP=wasm -L$W/LinkTarget/StaticLibrary -L$I/sdk/lib -L$I/program -L$I/program -O1 -fstrict-aliasing -fstrict-overflow -g -gseparate-dwarf --pre-js $S/static/emscripten/environment.js --pre-js $W/CustomTarget/static/emscripten_fs_image/soffice.data.js.link --pre-js $S/static/emscripten/soffice_args.js $W/CObject/desktop/source/app/main.o -Wl,--start-group -luno_sal -lsofficeapp -luno_sal -lsofficeapp -lcomphelper -luno_cppu -luno_cppuhelpergcc3 -ldeploymentmisclo -leditenglo -lfwklo -li18nlangtag -luno_salhelpergcc3 -lsblo -lsfxlo -lsvllo -lsvxlo -lsvxcorelo -lsvtlo -ltklo -ltllo -lucbhelper -lutllo -lvcllo -lreglo -lunoidllo -lxmlreaderlo -lstorelo -lxmlscriptlo -lbasegfxlo -ldrawinglayercorelo -li18nutil -lsotlo -lepoxy -lxolo -llnglo -lsaxlo -ldrawinglayerlo -lavmedialo -lcomponentslo -lsvgfilterlo -lgraphicfilterlo -lhyphenlo -llnthlo -lspelllo -lbiblo -lchartcorelo -lchartcontrollerlo -lcmdmaillo -lconfigmgrlo -lctllo -ldbtoolslo -ldesktopbe1lo -levtattlo -lexpwraplo -lfilterconfiglo -lfps_officelo -lforlo -lfsstoragelo -li18npoollo -li18nsearchlo -llocalebe1lo -lloglo -lmigrationoo2lo -lmigrationoo3lo -lmsfilterlo -lnumbertextlo -lodfflatxmllo -loffacclo -looxlo -lpasswordcontainerlo -lpdffilterlo -lstoragefdlo -lsvgiolo -lemfiolo -lswlo -lsysshlo -ltextconversiondlgslo -ltextfdlo -lucpexpand1lo -lucpextlo -lucpimagelo -lucptdoc1lo -lunordflo -lunoxmllo -luuilo -lxmlfalo -lxmlfdlo -lxoflo -lxsltdlglo -lxsltfilterlo -lcuilo -lhwplo -lmswordlo -lswdlo -lt602filterlo -lwpftwriterlo -lwriterfilterlo -lcached1 -ldeployment -ldeploymentgui -lembobj -lemboleobj -lpackage2 -lsrtrs1 -lucb1 -lucpfile1 -lucphier1 -lucppkg1 -lxmlsecurity -lxsec_xmlsec -lxstor -lbinaryurplo -lbootstraplo -lintrospectionlo -linvocadaptlo -linvocationlo -liolo -lnamingservicelo -lproxyfaclo -lreflectionlo -lstocserviceslo -luuresolverlo -lwriterperfectlo -lgcc3_uno -lvclplug_qt5lo -lcollator_data -ldict_ja -ldict_zh -lindex_data -llocaledata_en -llocaledata_es -llocaledata_euro -llocaledata_others -ltextconv_dict -lswuilo -lepoxy $W/LinkTarget/StaticLibrary/libdtoa.a $W/LinkTarget/StaticLibrary/libzlib.a $W/LinkTarget/StaticLibrary/libboost_locale.a $W/LinkTarget/StaticLibrary/libgraphite.a $W/LinkTarget/StaticLibrary/liblibjpeg-turbo.a $W/LinkTarget/StaticLibrary/liblibpng.a $W/LinkTarget/StaticLibrary/libzlib.a $W/LinkTarget/StaticLibrary/libexpat.a $W/LinkTarget/StaticLibrary/libdtoa.a $W/LinkTarget/StaticLibrary/libzlib.a $W/LinkTarget/StaticLibrary/libfindsofficepath.a $W/LinkTarget/StaticLibrary/libboost_locale.a $W/LinkTarget/StaticLibrary/libgraphite.a $W/LinkTarget/StaticLibrary/liblibjpeg-turbo.a $W/LinkTarget/StaticLibrary/liblibpng.a $W/LinkTarget/StaticLibrary/libulingu.a $W/LinkTarget/StaticLibrary/libexpat.a $W/LinkTarget/StaticLibrary/libshell_xmlparser.a $W/LinkTarget/StaticLibrary/libboost_filesystem.a -L$W/UnpackedTarball/icu/source/lib -licui18n -licuuc $W/UnpackedTarball/openssl/libssl.a $W/UnpackedTarball/openssl/libcrypto.a -L$W/UnpackedTarball/liblangtag/liblangtag/.libs -llangtag -L$W/UnpackedTarball/libxml2/.libs -lxml2 -lm -L$W/UnpackedTarball/harfbuzz/src/.libs -lharfbuzz -L$W/UnpackedTarball/lcms2/src/.libs -llcms2 -L$W/UnpackedTarball/libwebp/src/.libs -lwebp -L$W/UnpackedTarball/cairo/src/.libs -lcairo -L$W/UnpackedTarball/pixman/pixman/.libs -lpixman-1 -L$W/UnpackedTarball/fontconfig/src/.libs -lfontconfig -L$W/UnpackedTarball/freetype/instdir/lib -lfreetype -L$W/UnpackedTarball/liborcus/src/liborcus/.libs -lorcus-0.17 -L$W/UnpackedTarball/liborcus/src/parser/.libs -lorcus-parser-0.17 -L$W/UnpackedTarball/hunspell/src/hunspell/.libs -lhunspell-1.7 -L$W/UnpackedTarball/hyphen/.libs -lhyphen -L$W/UnpackedTarball/mythes/.libs -lmythes-1.2 $W/UnpackedTarball/libnumbertext/src/.libs/libnumbertext-1.0.a -L$W/UnpackedTarball/redland/src/.libs -lrdf -L$W/UnpackedTarball/raptor/src/.libs -lraptor2 -L$W/UnpackedTarball/rasqal/src/.libs -lrasqal -L$W/UnpackedTarball/libxslt/libxslt/.libs -lxslt -L$W/UnpackedTarball/libxslt/libexslt/.libs -lexslt $W/UnpackedTarball/libabw/src/lib/.libs/libabw-0.1.a $W/UnpackedTarball/libebook/src/lib/.libs/libe-book-0.1.a -L$W/UnpackedTarball/libmwaw/src/lib/.libs -lmwaw-0.3 -L$W/UnpackedTarball/libodfgen/src/.libs -lodfgen-0.1 -L$W/UnpackedTarball/librevenge/src/lib/.libs -lrevenge-0.0 -L$W/UnpackedTarball/libstaroffice/src/lib/.libs -lstaroffice-0.0 -L$W/UnpackedTarball/libwpd/src/lib/.libs -lwpd-0.10 -L$W/UnpackedTarball/libwpg/src/lib/.libs -lwpg-0.3 -L$W/UnpackedTarball/libwps/src/lib/.libs -lwps-0.4 $W/UnpackedTarball/xmlsec/src/.libs/libxmlsec1.a -ldl -L/home/jmg/Development/libreoffice/git_qt5/install-5.15.2/lib -lQt5Core -lQt5Gui -lQt5Widgets -lQt5Network -lqtpcre2 -lQt5EventDispatcherSupport -lQt5FontDatabaseSupport -L/home/jmg/Development/libreoffice/git_qt5/install-5.15.2/plugins/platforms -lqwasm -L$W/UnpackedTarball/icu/source/lib -licui18n -L$W/UnpackedTarball/icu/source/lib -licuuc $W/UnpackedTarball/openssl/libssl.a $W/UnpackedTarball/openssl/libcrypto.a -L$W/UnpackedTarball/liblangtag/liblangtag/.libs -llangtag -L$W/UnpackedTarball/libxml2/.libs -lxml2 -lm -L$W/UnpackedTarball/harfbuzz/src/.libs -lharfbuzz -L$W/UnpackedTarball/icu/source/lib -licuuc -L$W/UnpackedTarball/lcms2/src/.libs -llcms2 -L$W/UnpackedTarball/libwebp/src/.libs -lwebp -L$W/UnpackedTarball/cairo/src/.libs -lcairo -L$W/UnpackedTarball/pixman/pixman/.libs -lpixman-1 -L$W/UnpackedTarball/fontconfig/src/.libs -lfontconfig -L$W/UnpackedTarball/freetype/instdir/lib -lfreetype -L$W/UnpackedTarball/liborcus/src/liborcus/.libs -lorcus-0.17 -L$W/UnpackedTarball/liborcus/src/parser/.libs -lorcus-parser-0.17 -L$W/UnpackedTarball/hunspell/src/hunspell/.libs -lhunspell-1.7 -L$W/UnpackedTarball/hyphen/.libs -lhyphen -L$W/UnpackedTarball/mythes/.libs -lmythes-1.2 $W/UnpackedTarball/libnumbertext/src/.libs/libnumbertext-1.0.a -L$W/UnpackedTarball/redland/src/.libs -lrdf -L$W/UnpackedTarball/raptor/src/.libs -lraptor2 -L$W/UnpackedTarball/rasqal/src/.libs -lrasqal -L$W/UnpackedTarball/libxslt/libxslt/.libs -lxslt -L$W/UnpackedTarball/libxslt/libexslt/.libs -lexslt $W/UnpackedTarball/libabw/src/lib/.libs/libabw-0.1.a $W/UnpackedTarball/libebook/src/lib/.libs/libe-book-0.1.a -L$W/UnpackedTarball/libmwaw/src/lib/.libs -lmwaw-0.3 -L$W/UnpackedTarball/libodfgen/src/.libs -lodfgen-0.1 -L$W/UnpackedTarball/librevenge/src/lib/.libs -lrevenge-0.0 -L$W/UnpackedTarball/libstaroffice/src/lib/.libs -lstaroffice-0.0 -L$W/UnpackedTarball/libwpd/src/lib/.libs -lwpd-0.10 -L$W/UnpackedTarball/libwpg/src/lib/.libs -lwpg-0.3 -L$W/UnpackedTarball/libwps/src/lib/.libs -lwps-0.4 -L/home/jmg/Development/libreoffice/git_qt5/install-5.15.2/lib -lQt5Core -lQt5Gui -lQt5Widgets -lQt5Network -lqtpcre2 -lQt5EventDispatcherSupport -lQt5FontDatabaseSupport -L/home/jmg/Development/libreoffice/git_qt5/install-5.15.2/plugins/platforms -lqwasm -L$W/UnpackedTarball/icu/source/lib -licudata -Wl,--end-group -o $I/program/soffice.html ; RC=$? ; rm -f $W/LinkTarget/link.lock; if test $RC -ne 0; then exit $RC; fi

error: undefined symbol: emscripten_longjmp (referenced by top-level compiled C/C++ code)
warning: Link with `-s LLD_REPORT_UNDEFINED` to get more information on undefined symbols
warning: To disable errors for undefined symbols use `-s ERROR_ON_UNDEFINED_SYMBOLS=0`
warning: _emscripten_longjmp may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
Error: Aborting compilation due to previous errors
em++: error: '/home/jmg/Development/libreoffice/git_emsdk/node/14.15.5_64bit/bin/node /home/jmg/Development/libreoffice/git_emsdk/upstream/emscripten/src/compiler.js /tmp/tmpu_78bn8k.json' failed (returned 1)
make[1]: *** [/home/jmg/Development/libreoffice/wasm/desktop/Executable_soffice_bin.mk:10: /home/jmg/Development/libreoffice/wasm/build-dbg-neh/instdir/program/soffice.html] Fehler 1

** Full link command and output with `-v` appended: **

"/home/jmg/Development/libreoffice/git_emsdk/upstream/bin/wasm-ld" @/tmp/emscripten_9txe174p.rsp.utf-8
"/home/jmg/Development/libreoffice/git_emsdk/upstream/bin/wasm-emscripten-finalize" -g --bigint --no-dyncalls --no-legalize-javascript-ffi --dwarf /home/jmg/Development/libreoffice/wasm/build-dbg-neh/instdir/program/soffice.wasm --detect-features
"/home/jmg/Development/libreoffice/git_emsdk/node/14.15.5_64bit/bin/node" /home/jmg/Development/libreoffice/git_emsdk/upstream/emscripten/src/compiler.js /tmp/tmpijnjxqwv.json

Linking with EMCC_DEBUG=1 the `diff -u link-3.1.5.log link-3.1.6.log` has an interesting diff in the 'declares': array:

```
@@ -3040,6 +3040,7 @@
'exit',
'emscripten_asm_const_int',
'setTempRet0',
+ 'emscripten_longjmp',
'gethostbyname',
'emscripten_log',
'getentropy',
@@ -3337,7 +3338,6 @@
'__syscall_truncate64',
'__syscall_utimensat',
'emscripten_resize_heap',
- '_emscripten_throw_longjmp',
'strftime_l',
'__syscall_accept4',
'__syscall_bind',
```

The rest is just temporary files and time differences.

It looks like the origin of the problem is https://github.com/emscripten-core/emscripten/pull/15792, which added `#ifndef __USING_WASM_SJLJ__` for the missing symbol.

FWIW, the WASM EH LibreOffice just builds since some time but doesn't run yet, because of a function call mismatch, which interestingly doesn't happen with the Emscripten EH build with the same code...

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.