| 133a0ef4 | 13-Mar-2026 |
Chris Fallin <[email protected]> |
Debugging: add the debug-main world. (#12756)
* Debugging: add the debug-main world.
This PR "draws the rest of the owl" for the debug-main world (bytecodealliance/rfcs#45). This includes a WIT wor
Debugging: add the debug-main world. (#12756)
* Debugging: add the debug-main world.
This PR "draws the rest of the owl" for the debug-main world (bytecodealliance/rfcs#45). This includes a WIT world that hosts debug components that have access to "host debug powers" via a debugging API, and the ability to load such a debug-component and give it control of the main program as a debuggee when using `wasmtime run`.
The WIT is namespaced to `bytecodealliance:wasmtime` and is slightly aspirational in places: for example, the host does not yet implement injection of early return values or exception-throws. I intend to fill out a series of TODO issues once this all lands to track followup ("post-MVP") work.
This PR does not include any debug components. I separately have a gdbstub component, with which I tested and co-developed this host-side implementation. My plan is to land it in a followup PR as a component that will be embedded in/shipped with the Wasmtime CLI and available under an easy-to-use CLI option. Once we have that gdbstub component, we can also implement end-to-end integration tests that boot up LLDB and run through an expected interaction. (Separately, those integration tests will require a release of wasi-sdk to ship an LLDB binary that we can use.) As such, there are no real tests in this PR: interesting behaviors only really occur with a full end-to-end flow.
The integration with the CLI is a little awkward (we internally build another `wasmtime run` command that invokes the debug component, and tie it together with the debuggee via a special `invoke_debugger` API; this seemed less bad than reworking all of the WASI setup to be more reusable). Happy to take more ideas here.
* Review feedback.
* Review feedback.
* Review feedback: update vendor-wit.sh.
* Review feedback: -Ddebugger-arg= -> -Darg=.
* Review feedback.
* Review feedback.
* Review feedback: factor host.rs into several submodules.
* Review feedback: rename Debugger to Debuggee on host side.
* Review feedback: split inherit_stdin_stdout, and add corresponding options for the debug component.
* Review feedback.
* Review feedback.
* Add simple debug-component tests.
* Add wasm32-wasip2 target in a few places in CI
* Cargo vets for wstd dependency.
* Add wasm32-wasip2 in more places
* fix debug-component test dependence on componentization byte offsets
* Review feedback.
* Fix cancel-safety of EventFuture.
* Fix: Interrupted events should only occur after interrupt(), not on every epoch yield.
* Review feedback.
* Review feedback: strip down WASI imports in debugger world.
* fold debugger test component back into wasip1 + adapter test artifact compilation flow
show more ...
|
| d54924aa | 20-Feb-2026 |
Joel Dice <[email protected]> |
fix `Pollable` impl for `OutgoingDatagramStream` (#12629)
* fix `Pollable` impl for `OutgoingDatagramStream`
Previously, `OutgoingDatagramStream` used its `send_state` field to determine whether th
fix `Pollable` impl for `OutgoingDatagramStream` (#12629)
* fix `Pollable` impl for `OutgoingDatagramStream`
Previously, `OutgoingDatagramStream` used its `send_state` field to determine whether the socket was ready for writing without necessarily polling the `tokio::net::UdpSocket`. The underlying assumption was that a freshly-bound socket would be immediately ready for writing, but that's not true for `tokio`. `tokio` assumes a socket is not ready for _anything_ by default and relies on e.g. `epoll` to tell it otherwise.
In practice, this meant the `Pollable::ready` impl for `OutgoingDatagramStream` would resolve immediately for a fresh socket, leaving the guest to race with `tokio`'s use of `epoll`. Usually, `tokio` won and all was well, but occasionally it lost and the `OutgoingDatagramStream::send` call would return `Ok(0)` (meaning "would block") leaving the guest confused since it was just told that the socket was ready for writing.
This commit removes `SendState` entirely, relying exclusively on `tokio::net::UdpSocket::ready` for the `Pollable` and `check_send` implementations. As a side effect, we no longer attempt to prevent the guest from sending more datagrams than `check_send` indicated since the number returned by `check_send` is only a guess anyway, and `tokio` will push back if it needs to. For `p3`, the whole `check_send`/`send` pattern is gone, so we won't need to concern ourselves with it going forward.
Fixes #12612
* address review feedback
show more ...
|
| fcc888ac | 11-Feb-2026 |
Alex Crichton <[email protected]> |
Fix the hello-stdout-post-return-test (#12569)
This fixes a mistake in the test added in #12185 where the test passes both with and without the changes in that commit due to the way it was structure
Fix the hello-stdout-post-return-test (#12569)
This fixes a mistake in the test added in #12185 where the test passes both with and without the changes in that commit due to the way it was structured. Restructuring the test, notably not waiting for `write_via_stream` to return, means that it's now accurately testing that the `TaskExit` value is used.
show more ...
|