|
Revision tags: dev, v36.0.9, v44.0.1, v43.0.2, v36.0.8, v24.0.8, v44.0.0, v43.0.1, v42.0.2, v36.0.7, v24.0.7 |
|
| #
2f7dbd61 |
| 31-Mar-2026 |
Chris Fallin <[email protected]> |
PCC: remove proof-carrying code (for now?). (#12800)
In late 2023, we built out an experimental feature called Proof-Carrying Code (PCC), where we attached "facts" to values in the CLIF IR and built
PCC: remove proof-carrying code (for now?). (#12800)
In late 2023, we built out an experimental feature called Proof-Carrying Code (PCC), where we attached "facts" to values in the CLIF IR and built verification of these facts after lowering to machine instructions. We also added "memory types" describing layout of memory and a "checked" flag on memory operations such that we could verify that any checked memory operation accessed valid memory (as defined by memory types attached to pointer values via facts). Wasmtime's Cranelift backend then put appropriate memory types and facts in its IR such that all accesses to memory (aspirationally) could be checked, taking the whole mid-end and lowering backend of Cranelift out of the trusted core that enforces SFI.
This basically worked, at the time, for static memories; but never for dynamic memories, and then work on the feature lost prioritization (aka I had to work on other things) and I wasn't able to complete it and put it in fuzzing/enable it as a production option.
Unfortunately since then it has bit-rotted significantly -- as we add new backend optimizations and instruction lowerings we haven't kept the PCC framework up to date.
Inspired by the discussion in #12497 I think it's time to delete it (hopefully just "for now"?) unless/until we can build it again. And when we do that, we should probably get it to the point of validating robust operation on all combinations of memory configurations before merging. (That implies a big experiment branch rather than a bunch of eager PRs in-tree, but so it goes.) I still believe it is possible to build this (and I have ideas on how to do it!) but not right now.
show more ...
|
|
Revision tags: v43.0.0, v42.0.1, v41.0.4, v42.0.0, v40.0.4, v36.0.6, v24.0.6 |
|
| #
7357e7c9 |
| 17-Feb-2026 |
Nick Fitzgerald <[email protected]> |
Use `try_new::<Arc<_>>` in `Engine::load_code` (#12607)
|
|
Revision tags: v41.0.3, v41.0.2 |
|
| #
f248b5c0 |
| 02-Feb-2026 |
Arjun Ramesh <[email protected]> |
Config knobs and validation for record-replay (#12375)
|
|
Revision tags: v41.0.1, v36.0.5, v40.0.3 |
|
| #
17899c88 |
| 23-Jan-2026 |
Nick Fitzgerald <[email protected]> |
Share empty `ModuleRuntimeInfo`s across all stores in an engine (#12409)
* Share empty `ModuleRuntimeInfo`s across all stores in an engine
This avoids an `Arc`- and `Box`-allocation during `Store`
Share empty `ModuleRuntimeInfo`s across all stores in an engine (#12409)
* Share empty `ModuleRuntimeInfo`s across all stores in an engine
This avoids an `Arc`- and `Box`-allocation during `Store` creation.
* Fix no-runtime build
* Pin x86-64_macos build to nightly to avoid a rustc bug
show more ...
|
| #
cc8d04f4 |
| 23-Jan-2026 |
Alex Crichton <[email protected]> |
Remove need for explicit `Config::async_support` knob (#12371)
* Refactor component model host function definitions
Push the `async`-ness down one layer.
* Remove need for explicit `Config::async
Remove need for explicit `Config::async_support` knob (#12371)
* Refactor component model host function definitions
Push the `async`-ness down one layer.
* Remove need for explicit `Config::async_support` knob
This commit is an attempt to step towards reconciling "old async" and "new async" in Wasmtime. The old async style is the original async support in Wasmtime with `call_async`, `func_wrap_async`, etc, where the main property is that the store is "locked" during an async operation. Put another way, a store can only execute at most one async operation at a time. This is in contrast to "new async" support in Wasmtime with the component-model-async (WASIp3) support, where stores can have more than one async operation in flight at once.
This commit does not fully reconcile these differences, but it does remove one hurdle along the way: `Config::async_support`. Since the beginning of Wasmtime this configuration knob has existed to explicitly demarcate a config/engine/store as "this thing requires `async` stuff internally." This has started to make less and less sense over time where the line between sync and async has become more murky with WASIp3 where the two worlds comingle. The goal of this commit is to deprecate `Config::async_support` and make the function not actually do anything.
In isolation this can't simply be done, however, because there are many load-bearing aspects of Wasmtime that rely on this `async_support` knob. For example once epochs + yielding are enabled it's required that all Wasm is executed on a fiber lest it hit an epoch and not know how to yield. That means that this commit is not a simple removal of `async_support` but instead a refactoring/rearchitecting of how async is used internally within Wasmtime. The high-level ideas within Wasmtime now are:
* A `Store` has a "requires async" boolean stored within it. * All configuration options which end up requiring async, such as yielding with epochs, turn this boolean on. * Creation of host functions which use async (e.g. `func_wrap_{async,concurrent}`) will also turn this option on. * Synchronous API entrypoints into Wasmtime ensure that this boolean is disabled. * Asynchronous APIs are usable at any time.
This means that the concept of an async store vs a sync store is now gone. All stores are equally capable of executing sync/async, and the change now is that dynamically some stores will require that async is used with certain configuration. Additionally all panicking conditions around `async_support` have been converted to errors instead. All relevant APIs already returned an error and things are murky enough now that it's not necessarily trivial to get this right at the embedder level. In the interest of avoiding panics all detected async mismatches are now first-class `wasmtime::Error` values.
The end result of this commit is that `Config::async_support` is a deprecated `#[doc(hidden)]` function that does nothing. While many internal changes happened as well as having new tests for all this sort of behavior this is not expected to have a great impact on external consumers. In general a deletion of `async_support(true)` is in theory all that's required. This is intended to make it easier to think about async/sync/etc in the future with WASIp3 and eventually reconcile `func_wrap_async` and `func_wrap_concurrent` for example. That's left for future refactorings however.
prtest:full
* Review comments
* Fix CI failures
show more ...
|
| #
a0525691 |
| 21-Jan-2026 |
Nick Fitzgerald <[email protected]> |
Handle OOM in `Engine::new` (#12362)
Part of https://github.com/bytecodealliance/wasmtime/issues/12069
|
|
Revision tags: v41.0.0, v36.0.4, v39.0.2, v40.0.2 |
|
| #
ff33e949 |
| 09-Jan-2026 |
Nick Fitzgerald <[email protected]> |
Do not re-export `anyhow!` in the `wasmtime::prelude` (#12298)
We are trying to move to `format_err!` instead.
|
|
Revision tags: v40.0.1 |
|
| #
96e19700 |
| 07-Jan-2026 |
Nick Fitzgerald <[email protected]> |
Migrate the `wasmtime` crate to `wasmtime_environ::error::*` (#12231)
* Migrate the `wasmtime` crate to `wasmtime_environ::error::*`
Instead of `anyhow::Error`.
This commit re-exports the `wasmtim
Migrate the `wasmtime` crate to `wasmtime_environ::error::*` (#12231)
* Migrate the `wasmtime` crate to `wasmtime_environ::error::*`
Instead of `anyhow::Error`.
This commit re-exports the `wasmtime_environ::error` as the `wasmtime::error` module, updates the prelude to include these new error-handling types, redirects our top-level `wasmtime::{Error, Result}` re-exports to re-export `wasmtime::error::{Error, Result}`, and updates various use sites that were directly using `anyhow` to use the new `wasmtime` versions.
This process also required updating the component macro and wit-bindgen macro to use the new error types instead of `anyhow`.
Part of https://github.com/bytecodealliance/wasmtime/issues/12069
* Replace wasmtime::error::Thing with wasmtime::Thing where it makes sense
* cargo fmt
* Move `crate::error::Thing` to `crate::Thing` where it makes sense
show more ...
|
|
Revision tags: v40.0.0 |
|
| #
9bb96d51 |
| 02-Dec-2025 |
Nick Fitzgerald <[email protected]> |
Add `Config::without_compiler` (#12089)
* Add `Config::without_compiler`
This provides us an allocation-free path for constructing a `Config`.
Why not rely on builds when `cfg(not(any(feature = "c
Add `Config::without_compiler` (#12089)
* Add `Config::without_compiler`
This provides us an allocation-free path for constructing a `Config`.
Why not rely on builds when `cfg(not(any(feature = "cranelift", feature = "winch")))`? Because we need to test our various OOM-handling and allocation-free code paths in this workspace, and without some way to create a config without a compiler otherwise, cargo's feature resolver will enable those features in the workspace, enabling the compiler in the config, but we don't intend to make compiler configurations handle OOM.
* Quiet unused mut warnings
* Move default compiler flags into builder
show more ...
|
|
Revision tags: v39.0.1, v39.0.0, v38.0.4, v37.0.3, v36.0.3, v24.0.5, v38.0.3, v38.0.2, v38.0.1, v37.0.2 |
|
| #
c9bf1442 |
| 06-Oct-2025 |
Nick Fitzgerald <[email protected]> |
Fix compiler inlining tunables (#11797)
* Fix compiler inlining tunables
Fixes https://github.com/bytecodealliance/wasmtime/issues/11784
* fix no-compiler warning
|
| #
2a2e8f62 |
| 01-Oct-2025 |
bjorn3 <[email protected]> |
Couple cleanups to the flags/settings handling in Cranelift (#11744)
* Remove unused shared flags
* Get rid of predicate settings
They were important in the old backend framework, but with the new
Couple cleanups to the flags/settings handling in Cranelift (#11744)
* Remove unused shared flags
* Get rid of predicate settings
They were important in the old backend framework, but with the new backend framework if we need a combination of multiple settings, that can just be done as a regular extractor doing &&. This simplifies the settings implementation.
show more ...
|
|
Revision tags: v37.0.1, v37.0.0 |
|
| #
9f47be2e |
| 05-Sep-2025 |
Alex Crichton <[email protected]> |
Support store-access in `bindgen!` generated imports (#11628)
* Support store-access in `bindgen!` generated imports
This commit adds support to accessing the store in `bindgen!`-generated import
Support store-access in `bindgen!` generated imports (#11628)
* Support store-access in `bindgen!` generated imports
This commit adds support to accessing the store in `bindgen!`-generated import functions in traits. Since the inception of `bindgen!` this has never been possible and access to the store requires manually working with `Linker`, for example. This is not easy to do because it requires surgically editing code or working around what bindings generation parts you do want.
The implementation here is a small step away from what component-model-async has already implemented for async functions. Effectively it's a small extension of the `*WithStore` traits to also have synchronous functions with `Access` parameters instead of `async` functions with an `Accessor` parameter.
This is something we're going to want for the WASIp3 implementation where I've noticed some resource destructors are going to want access to the store to close out streams and such and this'll provide the bindings necessary for that.
Closes #11590
* Update test expectations
show more ...
|
| #
c7dc2d52 |
| 28-Aug-2025 |
Alex Crichton <[email protected]> |
Disallow loading code on `x86_64-unknown-none` (#11553)
* Disallow loading code on `x86_64-unknown-none`
... And then also add an escape hatch to allow loading code. This commit is the culmination
Disallow loading code on `x86_64-unknown-none` (#11553)
* Disallow loading code on `x86_64-unknown-none`
... And then also add an escape hatch to allow loading code. This commit is the culmination of discussion on #11506 with a proposed resolution for Wasmtime. The resolution being:
* Wasmtime will reject loading code on `x86_64-unknown-none` platforms by default. * A new `Config::x86_float_abi_ok` escape hatch is added to bypass this check. * Documentation/errors are updated around `x86_float_abi_ok` to document the situation. * The `min-platform` example is updated to showcase how this is valid to run in that particular embedding (aka enable more features and sufficiently detect said features).
The basic tl;dr; is that we can't detect in stable Rust what float ABI is being used so therefore we pessimistically assume that `x86_64-unknown-none` is using a soft-float ABI. This is incompatible with libcalls unless they aren't actually called which is only possible when sufficiently many target features are enabled.
The goal of this commit is to be a relatively low-effort way to place a roadblock in the way of "ok ABIs are weird" but at the same time enable getting around the roadblock easily. Additionally the roadblock points to documentation about itself to learn more about what's going on here.
Closes #11506
* Add audit of raw-cpuid
* Add back in check
Turns out it doesn't go through the same path as other bits
* Review comments
* Fix running floats without without custom support
show more ...
|
|
Revision tags: v36.0.2 |
|
| #
becdee57 |
| 22-Aug-2025 |
Lann <[email protected]> |
Add PoolingAllocatorMetrics (#11490)
This exposes some basic runtime metrics derived from the internal state of a `PoolingInstanceAllocator`.
Two new atomics were added to PoolingInstanceAllocator:
Add PoolingAllocatorMetrics (#11490)
This exposes some basic runtime metrics derived from the internal state of a `PoolingInstanceAllocator`.
Two new atomics were added to PoolingInstanceAllocator: `live_memories` and `live_tables`. While these counts could be derived from existing state it would require acquiring mutexes on some inner state.
show more ...
|
|
Revision tags: v36.0.1, v36.0.0 |
|
| #
8d4e9234 |
| 14-Aug-2025 |
Alex Crichton <[email protected]> |
Resolve `unsafe_op_in_unsafe_fn` in `wasmtime` crate (#11432)
Just a few unsafe blocks remain
Closes #11180
|
| #
3ecb338e |
| 29-Jul-2025 |
Nick Fitzgerald <[email protected]> |
Wasmtime: Add (optional) bottom-up function inlining to Wasm compilation (#11283)
* Wasmtime: Add (optional) bottom-up function inlining to Wasm compilation
This commit plumbs together two pieces o
Wasmtime: Add (optional) bottom-up function inlining to Wasm compilation (#11283)
* Wasmtime: Add (optional) bottom-up function inlining to Wasm compilation
This commit plumbs together two pieces of recently-added infrastructure:
1. function inlining in Cranelift, and 2. the parallel bottom-up inlining scheduler in Wasmtime.
Sprinkle some very simple inlining heuristics on top, and this gives us function inlining in Wasm compilation.
The default Wasmtime configuration does not enable inlining, and when we do enable it, we only enable it for cross-component calls by default (since presumably the toolchain that produced a particular core Wasm module, like LLVM, already performed any inlining that was beneficial within that module, but that toolchain couldn't know how that Wasm module would be getting linked together with other modules via component composition, and so it could not have done any cross-component inlining). For what it is worth, there is a config knob to enable intra-module function inlining, but this is primarily for use by our fuzzers, so that they can easily excercise and explore this new inlining functionality.
All this plumbing required some changes to the `wasmtime_environ::Compiler` trait, since Winch cannot do inlining but Cranelift can. This is mostly encapsulated in the new `wasmtime_environ::InliningCompiler` trait, for the most part. Additionally, we take care not to construct the call graph, or any other data structures required only by the inliner and not regular compilation, both when using Winch and when using Cranelift with inlining disabled.
Finally, we add a `disas` test to verify that we successfully inline a series of calls from a function in one component, to a cross-component adapter function, to a function in another component. Most test coverage is expected to come from our fuzzing, however.
* Fix dead code warning when not `cfg(feature = "component-model")`
* fix winch trampoline compilation
* Move CLI options to codegen
* Move parameters into struct
* Use an index set for call-graph construction
* Smuggle inlining heuristic options through cranelift flags
* Remove old CLI flags
* set tunables before settings
* Only configure inlining options for cranelift in fuzzing
show more ...
|
|
Revision tags: v35.0.0, v24.0.4, v33.0.2, v34.0.2 |
|
| #
037a6eda |
| 11-Jul-2025 |
Ulrich Weigand <[email protected]> |
s390x: Refactor hardware facility detection (#11220)
This patch implements a number of changes relating to s390x HW facilities and facility detection:
- Fix a mis-named facility: the z15 (arch13) C
s390x: Refactor hardware facility detection (#11220)
This patch implements a number of changes relating to s390x HW facilities and facility detection:
- Fix a mis-named facility: the z15 (arch13) CPU introduced the Miscellaneous-Instruction-Extensions Facility *3* (not 2). Rename "mie2" to "mie3" throughout the code base.
- Now that we can use inline asm, use the STORE FACILITY LIST EXTENDED instruction rather than HWCAP to detect facilities at run time. This eliminates the libc crate dependency, and allows for more fine-grained feature detection.
- Add support for the z16 (arch14) CPU names (these do not provide any facilities that would be relevant to cranelift, but it should be possible to use these names as synonyms to z15 at least).
- Add support for the z17 (arch15) CPU names, and two new facilities provided at this level: the Miscellaneous-Instruction-Extensions Facility 4 and the Vector-Enhancements Facility 3. (Note that no code to exploit these facilities is present in this patch; that will be provided later.)
show more ...
|
| #
838ed2d0 |
| 07-Jul-2025 |
Alex Crichton <[email protected]> |
Enable `allow_attributes_without_reason` (#11195)
* Enable `allow_attributes_without_reason`
This commit enables the `clippy::allow_attributes_without_reason` for the `wasmtime` crate which previou
Enable `allow_attributes_without_reason` (#11195)
* Enable `allow_attributes_without_reason`
This commit enables the `clippy::allow_attributes_without_reason` for the `wasmtime` crate which previously forcibly allowed it. The reason this was allowed was that when the workspace was first migrated the Wasmtime crate had too many instances that I was willing to fix. I've now come back around and tried to fix everything.
In short: ideally delete `#[allow]`, otherwise use `#[expect]`, otherwise use `#[allow]`.
prtest:full
* Adjust some directives
* Fix some warnings
* Fix stack switching size tests on unix
* Don't have a conditional `Drop` impl
* Force `testing_freelist` method to be used
Too lazy to write `#[cfg]`, but not too lazy to write a test.
show more ...
|
|
Revision tags: v34.0.1, v33.0.1, v24.0.3, v32.0.1, v34.0.0 |
|
| #
ab44e321 |
| 18-Jun-2025 |
Roman Volosatovs <[email protected]> |
fix: do not collect backtrace on each `gc_runtime` access (#11068)
Signed-off-by: Roman Volosatovs <[email protected]>
|
| #
63d482c8 |
| 04-Jun-2025 |
Frank Emrich <[email protected]> |
Stack switching: Infrastructure and runtime support (#10388)
* [pr1] base
* prtest:full
* make sure to use ControlFlow result in trace_suspended_continuation
* stack-switching: cleanup: remove st
Stack switching: Infrastructure and runtime support (#10388)
* [pr1] base
* prtest:full
* make sure to use ControlFlow result in trace_suspended_continuation
* stack-switching: cleanup: remove stray c-api changes
These are remnants of unrelated wasmfx wasmtime experiments, possibly suitable for later submission against upstream.
* stack-switching: reuse async_stack_size
* stack-switching: delete delete_me debugging
* stack-switching: address feedback in environ::types
* stack-switching: remove unused code from vmoffsets
* stack-switching: drop dependency on std
* stack-switching: add compilation checks to ci matrix
* stack-switching: remove debug_println cruft
* stack-switching: export environ consts consistently
* stack-switching: export vm pub items consistently
* table_pool: reduced capacity for large elements
VMContRef elements which takes up two words and we don't want to double the size of all tables in order to support storing these. This change changes the table to target storing the requested max number of elements if they are "nominally" sized with (potentially) reduced capacity for non-nominally sized types when encountered.
Continuations are the only type of element which may result in fewer table slots being available than requested.
* stack-switching: extend conditional compilation
A fair bit of the definitions for stack switching are still enabled, but this patch takes things a bit further to avoid compilation problems; notably, cont_new is now not compiled in unless the feature is enabled.
* stack-switching: formatting fixes
* stack-switching: address new clippy checks
In addition, to get clippy to fully pass, plumbed in additional config to make winch paths happy; there's no impl for winch yet but plumbing through the feature is required to make paths incorporating macros at various layers satisfied (and it is expected we'll use the features in the future).
* stack-switching: more conditional compilation fixes
* stack-switching: additional conditional compile on table builtins for continuations
* stack-switching: additional conditional compile fixes
* stack-switching: additional conditional compile in store
* stack-switching: remove overly strict assertion
* stack-switching: remove errantly dropped no_mangle in config c-api
* stack-switching: VMContObj::from_raw_parts
* stack-switching: remove duplicate async_stack_size feature check
* stack-switching: VMArray -> VMHostArray
* stack-switching: remove unnecessary clippy exception
* stack-switching: fix docs referenced VMRuntimeLimits
* stack-switching: fix doc typo
* stack-switching: follow recommendations for type casts
* stack-switching: use usize::next_multiple_of
* stack-switching: update outdated comment
* stack-switching: use feature gate instead of allow(dead_code)
* stack-switching: rework backtrace using chunks/zip
* stack-switching: move tests to footer module
This is a bit more consistent with the prevailing style in tree and (subjectively) makes finding the tests as a reader more straightforward.
Tests left unchanged sans some import cleanup.
* stack-swictchding: verify stack_chain offsets at runtime
* fixup! stack-switching: use feature gate instead of allow(dead_code)
* stack-switching: document continuation roots tracing using match arms
---------
Co-authored-by: Paul Osborne <[email protected]>
show more ...
|
| #
703871a2 |
| 27-May-2025 |
Alex Crichton <[email protected]> |
Enable the `useless_conversion` Clippy lint (#10838)
* Enable the `useless_conversion` Clippy lint
We've got lots of types in Wasmtime and convert between them quite a lot, but often over time conv
Enable the `useless_conversion` Clippy lint (#10838)
* Enable the `useless_conversion` Clippy lint
We've got lots of types in Wasmtime and convert between them quite a lot, but often over time conversions become unnecessary through refactorings or similar. This will hopefully enable us to clean up some conversions as they come up to try to have as few as possible ideally.
* Review comments
show more ...
|
|
Revision tags: v33.0.0 |
|
| #
90ac295e |
| 19-May-2025 |
Alex Crichton <[email protected]> |
Update Wasmtime to the 2024 Rust Edition (#10806)
* Update Wasmtime to the 2024 Rust Edition
Now that our MSRV supports the 2024 edition it's possible to make this switch. This commit moves Wasmtim
Update Wasmtime to the 2024 Rust Edition (#10806)
* Update Wasmtime to the 2024 Rust Edition
Now that our MSRV supports the 2024 edition it's possible to make this switch. This commit moves Wasmtime to the 2024 Edition to keep up-to-date with Rust idioms and access many of the edition features exclusive to the 2024 edition.
prtest:full
* Reformat with the 2024 edition
show more ...
|
| #
2cd52b76 |
| 29-Apr-2025 |
Ben Brandt <[email protected]> |
Allow creation of a CacheConfig without loading from a file (#10665)
* cache: Add builder pattern for CacheConfig
* wasmtime: Add cache_config method to wasmtime::Config
* Refactor test_builder_de
Allow creation of a CacheConfig without loading from a file (#10665)
* cache: Add builder pattern for CacheConfig
* wasmtime: Add cache_config method to wasmtime::Config
* Refactor test_builder_default to use test_prolog helper
* Remove enabled option from CacheConfigBuilder and always set to true
* Change builder methods to take &mut self and return &mut Self
* Simplify cache configuration API
A new `cache_config(Option<CacheConfig>)` method replaces multiple methods for controlling module caching. Now `None` disables caching, and users can directly provide a cache config or load one from a file.
* Make cache configuration optional
* Add Cache struct to separate configuration from runtime (wip)
* Ensure default values earlier
* Consolidate CacheConfig and CacheConfigBuilder
* Set Cache directly on wastime::Config and make it easier to create one from a file
* Validate after loading file again
* Move cache to top-level module
* Fix tests
show more ...
|
|
Revision tags: v32.0.0 |
|
| #
c22b3cb9 |
| 11-Apr-2025 |
Nick Fitzgerald <[email protected]> |
Reuse Wasm linear memories code for GC heaps (#10503)
* Reuse code for Wasm linear memories for GC heaps
Instead of bespoke code paths and structures for Wasm GC, this commit makes it so that we no
Reuse Wasm linear memories code for GC heaps (#10503)
* Reuse code for Wasm linear memories for GC heaps
Instead of bespoke code paths and structures for Wasm GC, this commit makes it so that we now reuse VM structures like `VMMemoryDefinition` and bounds-checking logic. Notably, we also reuse all the associated bounds-checking optimizations and, when possible, virtual-memory techniques to completely elide them.
Furthermore, this commit adds support for growing GC heaps, reusing the machinery for growing memories, and makes it so that GC heaps always start out empty. This allows us to properly delay allocating the GC heap's storage until a GC object is actually allocated.
Fixes #9350
* fix c api compilation
* use assert_contains
* remove no-longer-necessary extra memory config from limiter tests
* Helper for retry-after-maybe-async-gc in libcalls
* Clean up some comments
* fix wasmtime-fuzzing and no-gc compilation
* fix examples
* fix no-gc+compiler build
* fix build without pooling allocator
* fix +cranelift +gc-drc -gc-null builds
* fix table hash key stability test
* fix oracle usage of `ExternRef::new`
* fix +gc -gc-null -gc-drc build
* fix wasmtime-fuzzing
* make `StorePtr` wrap a `NonNull`
* Fix some doc tests
* Remove some unnecessary retry helpers now that `FooRef::new` will auto-gc
* fix things after rebase
* Reorganize collection/growth methods for GC heap
* rename BoundsCheck variants
* fix cfg'ing of gc only code
* Fix doc tests
* fix one more gc cfg
* disable GC heap OOM test on non-64-bit targets
show more ...
|
| #
3e406d2e |
| 20-Mar-2025 |
Alex Crichton <[email protected]> |
Add a `wasmtime objdump` subcommand (#10405)
This commit adds an `objdump` subcommand to the `wasmtime` CLI. Like all other subcommands this can be disabled for a more minimal build of the CLI as we
Add a `wasmtime objdump` subcommand (#10405)
This commit adds an `objdump` subcommand to the `wasmtime` CLI. Like all other subcommands this can be disabled for a more minimal build of the CLI as well. The purpose of this subcommand is to provide a Wasmtime-specific spin on the venerable native `objdump` itself. Notably this brings Wasmtime-specific knowledge for filtering functions, showing Wasmtime metadata, etc.
This command is intended to look like `objdump` roughly but also has configurable output with various flags and things that can be printed. For now the main Wasmtime additions are showing the address map section, stack map section, and trap section of a `*.cwasm` file.
This new subcommand replaces the infrastructure of the `disas` test suite, and now that test suite uses `wasmtime objdump` to generate test expectations. Additionally the subcommand replaces the Pulley `objdump` example as a more full-featured objdump that also works natively with Pulley.
The hope is that if we add more binary metadata in the future (such as unwinding tables) that can be relatively easily added here for exploration as well. Otherwise this is mostly just a developer convenience for Wasmtime developers as well and hopefully doesn't cost too much in maintenance burden.
Closes #10336
show more ...
|