From 9ca6f7258365ce8fcfa6c8f7a3db0aa8ac4cb226 Mon Sep 17 00:00:00 2001 From: Ayke van Laethem Date: Wed, 21 May 2025 19:30:14 +0200 Subject: [PATCH] wasm: refactor/modify stub signal handling This commit changes signal handling in a few ways: * It stubs signals for all wasm targets (not just wasi) and baremetal, since none of those have traditional POSIX signals. And moves the code for that into a single file, instead of duplicating it. * It removes the stub for signal_ignored since the value `false` might be wrong in some cases and it doesn't usually seem to be called (it is not called in tsgo). Should be trivial to re-add if it is shown to be needed. * It adds a stub for `os/signal.signalWaitUntilIdle` which _is_ called by tsgo. --- src/runtime/runtime_wasip1.go | 17 ----------------- src/runtime/runtime_wasip2.go | 17 ----------------- src/runtime/signalstub.go | 21 +++++++++++++++++++++ 3 files changed, 21 insertions(+), 34 deletions(-) create mode 100644 src/runtime/signalstub.go diff --git a/src/runtime/runtime_wasip1.go b/src/runtime/runtime_wasip1.go index 840888043..d680fad17 100644 --- a/src/runtime/runtime_wasip1.go +++ b/src/runtime/runtime_wasip1.go @@ -149,20 +149,3 @@ type ( } } ) - -// Need to stub these for `os/signal`, but wasi doesn't support signals. - -//go:linkname signal_disable os/signal.signal_disable -func signal_disable(uint32) {} - -//go:linkname signal_enable os/signal.signal_enable -func signal_enable(uint32) {} - -//go:linkname signal_ignore os/signal.signal_ignore -func signal_ignore(uint32) {} - -//go:linkname signal_ignored os/signal.signal_ignored -func signal_ignored(uint32) bool { return false } - -//go:linkname signal_recv os/signal.signal_recv -func signal_recv() uint32 { return ^uint32(0) } diff --git a/src/runtime/runtime_wasip2.go b/src/runtime/runtime_wasip2.go index 6d1bbc13f..46ce3d853 100644 --- a/src/runtime/runtime_wasip2.go +++ b/src/runtime/runtime_wasip2.go @@ -50,20 +50,3 @@ func sleepTicks(d timeUnit) { func ticks() timeUnit { return timeUnit(monotonicclock.Now()) } - -// Need to stub these for `os/signal`, but wasi doesn't support signals. - -//go:linkname signal_disable os/signal.signal_disable -func signal_disable(uint32) {} - -//go:linkname signal_enable os/signal.signal_enable -func signal_enable(uint32) {} - -//go:linkname signal_ignore os/signal.signal_ignore -func signal_ignore(uint32) {} - -//go:linkname signal_ignored os/signal.signal_ignored -func signal_ignored(uint32) bool { return false } - -//go:linkname signal_recv os/signal.signal_recv -func signal_recv() uint32 { return ^uint32(0) } diff --git a/src/runtime/signalstub.go b/src/runtime/signalstub.go new file mode 100644 index 000000000..fd7d2606a --- /dev/null +++ b/src/runtime/signalstub.go @@ -0,0 +1,21 @@ +//go:build tinygo.wasm || baremetal + +package runtime + +// Some platforms don't support Unix signals (and never will), so we need to +// stub the signal functions. + +//go:linkname signal_disable os/signal.signal_disable +func signal_disable(uint32) {} + +//go:linkname signal_enable os/signal.signal_enable +func signal_enable(uint32) {} + +//go:linkname signal_ignore os/signal.signal_ignore +func signal_ignore(uint32) {} + +//go:linkname signal_waitUntilIdle os/signal.signalWaitUntilIdle +func signal_waitUntilIdle() {} + +//go:linkname signal_recv os/signal.signal_recv +func signal_recv() uint32 { return ^uint32(0) }