Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[wasm] Suppress export name minification #95613

Merged
merged 1 commit into from
Dec 6, 2023
Merged

Conversation

kg
Copy link
Member

@kg kg commented Dec 4, 2023

@kg kg added the arch-wasm WebAssembly architecture label Dec 4, 2023
@ghost
Copy link

ghost commented Dec 4, 2023

Tagging subscribers to 'arch-wasm': @lewing
See info in area-owners.md if you want to be subscribed.

Issue Details

Possible fix for #94939.
See emscripten-core/emscripten#20762

Author: kg
Assignees: -
Labels:

arch-wasm

Milestone: -

@radical
Copy link
Member

radical commented Dec 5, 2023

/azp run runtime-wasm

Copy link

Azure Pipelines successfully started running 1 pipeline(s).

@pavelsavara
Copy link
Member

It seems to me that this could also fix #92664 (comment)

@kg could you please elaborate about the alternative solution "Rather than export those functions, could you add them to the table at compile time" mentioned in the emscripten discussion ?

We need the raw exports for the jiterp trace .wasm, right ? I don't understand how that would be possible without export from dotnet.wasm

@pavelsavara
Copy link
Member

pavelsavara commented Dec 5, 2023

Probably unrelated

Log

WasiApp.Native.targets(303,5): error : 
Failed to compile C:\helix\work\workitem\e\wasm_build\obj\wasm\for-build\aot-instances.dll.bc -> C:\helix\work\workitem\e\wasm_build\obj\wasm\for-build\aot-instances.dll.o [ProxyProjectForAOTOnHelix.proj]
C:\helix\work\workitem\e\publish>C:\Windows\System32\chcp.com 65001 1>nul  [ProxyProjectForAOTOnHelix.proj]
C:\helix\work\workitem\e\publish>setlocal [ProxyProjectForAOTOnHelix.proj]
C:\helix\work\workitem\e\publish>set errorlevel=dummy  [ProxyProjectForAOTOnHelix.proj]
C:\helix\work\workitem\e\publish>set errorlevel=  [ProxyProjectForAOTOnHelix.proj]
C:\helix\work\workitem\e\publish>C:\helix\work\correlation\build\\wasi-sdk\\bin\clang.exe "@C:\helix\work\correlation\build\microsoft.netcore.app.runtime.wasi-wasm\runtimes\wasi-wasm\native\src\wasi-default.rsp"  "@C:\helix\work\workitem\e\wasm_build\obj\wasm\for-build\wasi-compile-bc.rsp" -c -o "C:\Users\ContainerAdministrator\AppData\Local\Temp\tmpvcc01g.tmp" "C:\helix\work\workitem\e\wasm_build\obj\wasm\for-build\aot-instances.dll.bc"  [ProxyProjectForAOTOnHelix.proj]
clang version 16.0.0 [ProxyProjectForAOTOnHelix.proj]
Target: wasm32-unknown-wasi [ProxyProjectForAOTOnHelix.proj]
Thread model: posix [ProxyProjectForAOTOnHelix.proj]
InstalledDir: C:/helix/work/correlation/build//wasi-sdk//bin [ProxyProjectForAOTOnHelix.proj]
 (in-process) [ProxyProjectForAOTOnHelix.proj]
 "C:/helix/work/correlation/build/wasi-sdk/bin/clang.exe" -cc1 -triple wasm32-unknown-wasi -emit-obj -disable-free -clear-ast-before-backend -disable-llvm-verifier -discard-value-names -main-file-name aot-instances.dll.bc -mrelocation-model static -mframe-pointer=none -ffp-contract=on -fno-rounding-math -mconstructor-aliases -target-cpu generic -fvisibility=hidden -mllvm -treat-scalable-fixed-error-as-warning -debug-info-kind=constructor -dwarf-version=4 -debugger-tuning=gdb -v -fcoverage-compilation-dir=C:/helix/work/workitem/e/publish -resource-dir C:/helix/work/correlation/build/wasi-sdk/lib/clang/16 -Oz -fdebug-compilation-dir=C:/helix/work/workitem/e/publish -ferror-limit 19 -fgnuc-version=4.2.1 -vectorize-slp -o "C:\\Users\\ContainerAdministrator\\AppData\\Local\\Temp\\tmpvcc01g.tmp" -x ir "C:\\helix\\work\\workitem\\e\\wasm_build\\obj\\wasm\\for-build\\aot-instances.dll.bc" [ProxyProjectForAOTOnHelix.proj]
clang -cc1 version 16.0.0 based upon LLVM 16.0.0 default target wasm32-wasi [ProxyProjectForAOTOnHelix.proj]
LLVM ERROR: out of memory [ProxyProjectForAOTOnHelix.proj]
Allocation failed [ProxyProjectForAOTOnHelix.proj]
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace, preprocessed source, and associated run script. [ProxyProjectForAOTOnHelix.proj]
Stack dump: [ProxyProjectForAOTOnHelix.proj]
0.	Program arguments: C:\\helix\\work\\correlation\\build\\\\wasi-sdk\\\\bin\\clang.exe @C:\\helix\\work\\correlation\\build\\microsoft.netcore.app.runtime.wasi-wasm\\runtimes\\wasi-wasm\\native\\src\\wasi-default.rsp @C:\\helix\\work\\workitem\\e\\wasm_build\\obj\\wasm\\for-build\\wasi-compile-bc.rsp -c -o C:\\Users\\ContainerAdministrator\\AppData\\Local\\Temp\\tmpvcc01g.tmp C:\\helix\\work\\workitem\\e\\wasm_build\\obj\\wasm\\for-build\\aot-instances.dll.bc [ProxyProjectForAOTOnHelix.proj]
1.	Code generation [ProxyProjectForAOTOnHelix.proj]
Exception Code: 0xC000001D [ProxyProjectForAOTOnHelix.proj]
0x008DFB73 <unknown module> [ProxyProjectForAOTOnHelix.proj]
0x7292C902 <unknown module> [ProxyProjectForAOTOnHelix.proj]
0x008C23A1 <unknown module> [ProxyProjectForAOTOnHelix.proj]
0x00D3FD3C <unknown module> [ProxyProjectForAOTOnHelix.proj]
0x00D3FFBC <unknown module> [ProxyProjectForAOTOnHelix.proj]
0x00D40133 <unknown module> [ProxyProjectForAOTOnHelix.proj]
0x0079E5CF <unknown module> [ProxyProjectForAOTOnHelix.proj]
clang: error: clang frontend command failed due to signal (use -v to see invocation) [ProxyProjectForAOTOnHelix.proj]
clang version 16.0.0 [ProxyProjectForAOTOnHelix.proj]
Target: wasm32-unknown-wasi [ProxyProjectForAOTOnHelix.proj]
Thread model: posix [ProxyProjectForAOTOnHelix.proj]
InstalledDir: C:/helix/work/correlation/build//wasi-sdk//bin [ProxyProjectForAOTOnHelix.proj]
clang: note: diagnostic msg: Error generating preprocessed source(s) - no preprocessable inputs. [took 91.69s] [ProxyProjectForAOTOnHelix.proj]

@kg
Copy link
Member Author

kg commented Dec 5, 2023

It seems to me that this could also fix #92664 (comment)

@kg could you please elaborate about the alternative solution "Rather than export those functions, could you add them to the table at compile time" mentioned in the emscripten discussion ?

We need the raw exports for the jiterp trace .wasm, right ? I don't understand how that would be possible without export from dotnet.wasm

It would be a single exported function that contains a massive switch statement that returns references to all of the exports, so they end up having pre-reserved slots in the function pointer table. It's kind of a pain to build this

@pavelsavara
Copy link
Member

It would be a single exported function that contains a massive switch statement that returns references to all of the exports, so they end up having pre-reserved slots in the function pointer table. It's kind of a pain to build this

So you get back pointer, but in the trace import, you need the index into the export table, no ?

@kg
Copy link
Member Author

kg commented Dec 5, 2023

It would be a single exported function that contains a massive switch statement that returns references to all of the exports, so they end up having pre-reserved slots in the function pointer table. It's kind of a pain to build this

So you get back pointer, but in the trace import, you need the index into the export table, no ?

The function pointer is an index

@radical
Copy link
Member

radical commented Dec 5, 2023

Probably unrelated

Log

LLVM ERROR: out of memory

Copy link
Member

@lewing lewing left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think it would be worth capturing the potential alternate work in an issue here but this fixes known issues directly.

@kg
Copy link
Member Author

kg commented Dec 6, 2023

Red is #89409, and we have confirmation from a user that this fixes the issue for them, so merging

@kg kg merged commit 69d5d3f into dotnet:main Dec 6, 2023
45 of 47 checks passed
@pavelsavara
Copy link
Member

are we going to backport it to Net8 ?

@github-actions github-actions bot locked and limited conversation to collaborators Jan 6, 2024
@maraf
Copy link
Member

maraf commented May 13, 2024

/backport to release/8.0-staging

@github-actions github-actions bot unlocked this conversation May 13, 2024
Copy link
Contributor

Started backporting to release/8.0-staging: https://github.com/dotnet/runtime/actions/runs/9063189552

Copy link
Contributor

@maraf backporting to release/8.0-staging failed, the patch most likely resulted in conflicts:

$ git am --3way --ignore-whitespace --keep-non-patch changes.patch

Applying: Suppress export name minification
Using index info to reconstruct a base tree...
M	src/mono/wasm/build/WasmApp.Native.targets
M	src/mono/wasm/wasm.proj
Falling back to patching base and 3-way merge...
Auto-merging src/mono/wasm/wasm.proj
Auto-merging src/mono/wasm/build/WasmApp.Native.targets
CONFLICT (content): Merge conflict in src/mono/wasm/build/WasmApp.Native.targets
error: Failed to merge in the changes.
hint: Use 'git am --show-current-patch=diff' to see the failed patch
Patch failed at 0001 Suppress export name minification
When you have resolved this problem, run "git am --continue".
If you prefer to skip this patch, run "git am --skip" instead.
To restore the original branch and stop patching, run "git am --abort".
Error: The process '/usr/bin/git' failed with exit code 128

Please backport manually!

Copy link
Contributor

@maraf an error occurred while backporting to release/8.0-staging, please check the run log for details!

Error: git am failed, most likely due to a merge conflict.

@github-actions github-actions bot locked as resolved and limited conversation to collaborators May 13, 2024
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
arch-wasm WebAssembly architecture area-Build-mono
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants