Skip to content

Invoke wave enhancements#1

Closed
tpmccallum wants to merge 28 commits intopchickey:mainfrom
tpmccallum:invoke_wave_enhancements
Closed

Invoke wave enhancements#1
tpmccallum wants to merge 28 commits intopchickey:mainfrom
tpmccallum:invoke_wave_enhancements

Conversation

@tpmccallum
Copy link
Copy Markdown

This PR builds on pch/invoke_wave (related to bytecodealliance#10054) with the following changes:

  • Improved error messages for --invoke (e.g., clearer parsing errors).
  • Added documentation

Link to conversation and work required, and work performed (with tests and examples)
bytecodealliance#10054 (comment)

@tpmccallum tpmccallum force-pushed the invoke_wave_enhancements branch from 4a93050 to a31c5d6 Compare April 2, 2025 06:08
@pchickey pchickey closed this Oct 21, 2025
pchickey pushed a commit that referenced this pull request Mar 24, 2026
* Debugging: add builtin gdbstub component.

This adds a debug component that makes use of the debug-main world
defined in bytecodealliance#12756 and serves the gdbstub protocol, with Wasm
extensions, compatible with LLDB.

This component is built and included inside the Wasmtime binary, and
is loaded using the lower-level `-D debugger=...` debug-main option;
the user doesn't need to specify the `.wasm` adapter
component. Instead, the user simply runs `wasmtime run -g <PORT>
program.wasm ...` and Wasmtime will load and prepare to run
`program.wasm` as the debuggee, waiting for a gdbstub connection on
the given TCP port before continuing.

The workflow is:

```
$ wasmtime run -g 1234 program.wasm
[ wasmtime starts and waits for connection ]

$ /opt/wasi-sdk/bin/lldb  # use LLDB from wasi-sdk release 32 or later
(lldb) process connect --plugin wasm connect://localhost:1234
Process 1 stopped
* thread #1, stop reason = signal SIGTRAP
    frame #0: 0x40000000000001cc
->  0x40000000000001cc: unreachable
    0x40000000000001cd: end
    0x40000000000001ce: local.get 0
    0x40000000000001d0: call   13
(lldb) si
Process 1 stopped
* thread #1, stop reason = instruction step into
    frame #0: 0x4000000000000184
->  0x4000000000000184: block
    0x4000000000000186: block
    0x4000000000000188: global.get 1
    0x400000000000018e: i32.const 3664
[ ... ]
```

This makes use of the `gdbstub` third-party crate, into which I've
upstreamed support for the Wasm extensions in daniel5151/gdbstub#188,
daniel5151/gdbstub#189, daniel5151/gdbstub#190, and
daniel5151/gdbstub#192. (I'll add vets as part of this PR.)

* cargo vets.

* Handle Trap events as well as breakpoints.

* Review feedback.

* Fix gdbstub artifact build to make it publishable (by disabling it when isolated crates are used).

* Review feedback.

* fix published-crates list

* For now, empty gdbstub data but no compile error when artifact crate is published.

* add some more Cargo metadata: version for artifact crate dep
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants