about summary refs log tree commit diff
path: root/compiler
diff options
context:
space:
mode:
authorMatthias Krüger <matthias.krueger@famsik.de>2022-12-09 22:31:57 +0100
committerGitHub <noreply@github.com>2022-12-09 22:31:57 +0100
commit320d018268113dc688e40680ede5430d75999f0a (patch)
treed6abc7b232e50d62282f4051e39592b45c622b77 /compiler
parent5156fbdc74cbf9902a96bafd27775f4764d5bfde (diff)
parent98ae83daae67e9e7663b8345eced1de8c667271f (diff)
downloadrust-320d018268113dc688e40680ede5430d75999f0a.tar.gz
rust-320d018268113dc688e40680ede5430d75999f0a.zip
Rollup merge of #105468 - sunfishcode:sunfishcode/main-void-wasi, r=estebank
Mangle "main" as "__main_void" on wasm32-wasi

On wasm, the age-old C trick of having a main function which can either have no arguments or argc+argv doesn't work, because wasm requires caller and callee signatures to match. WASI's current strategy is to have compilers mangle main's name to indicate which signature they're using. Rust uses the no-argument form, which should be mangled as `__main_void`.

This is needed on wasm32-wasi as of #105395.
Diffstat (limited to 'compiler')
-rw-r--r--compiler/rustc_target/src/spec/wasm32_wasi.rs4
1 files changed, 4 insertions, 0 deletions
diff --git a/compiler/rustc_target/src/spec/wasm32_wasi.rs b/compiler/rustc_target/src/spec/wasm32_wasi.rs
index 6f0bbf0672d..a0476d542e6 100644
--- a/compiler/rustc_target/src/spec/wasm32_wasi.rs
+++ b/compiler/rustc_target/src/spec/wasm32_wasi.rs
@@ -104,6 +104,10 @@ pub fn target() -> Target {
     // `args::args()` makes the WASI API calls itself.
     options.main_needs_argc_argv = false;
 
+    // And, WASI mangles the name of "main" to distinguish between different
+    // signatures.
+    options.entry_name = "__main_void".into();
+
     Target {
         llvm_target: "wasm32-wasi".into(),
         pointer_width: 32,