Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 17 additions & 17 deletions .github/actions/docker-build-cached/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,15 +19,6 @@ runs:
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v4

# Disable things that docker has on-by-default from the above which we're
# not interested in.
- name: Disable some docker things that are on-by-default
shell: bash
run: |
echo DOCKER_BUILD_CHECKS_ANNOTATIONS=false >> $GITHUB_ENV
echo DOCKER_BUILD_SUMMARY=false >> $GITHUB_ENV
echo DOCKER_BUILD_RECORD_UPLOAD=false >> $GITHUB_ENV

# We'll be using this cache key and the "local" caching mode of docker. This
# allows pretty fine-grained views into what's being cache. Experimentation
# found that the default `gha` caching mode sprays quite a lot into the
Expand All @@ -41,15 +32,24 @@ runs:
path: ${{ runner.tool_cache }}/docker-buildx-cache
key: ${{ inputs.cache_key_prefix }}-${{ hashFiles(inputs.file) }}

# Note that this is a hand-rolled `docker buildx build` instead of
# `docker/build-push-action` to enable retrying the build. Fetching base
# images from Docker Hub is flaky enough that an unretried build fails
# CI from time to time, and the action itself has no retry option.
- name: Build docker image
uses: docker/build-push-action@v7
with:
context: ${{ inputs.context }}
file: ${{ inputs.file }}
tags: build-image
cache-from: type=local,src=${{ runner.tool_cache }}/docker-buildx-cache
cache-to: type=local,dest=${{ runner.tool_cache }}/docker-buildx-cache
outputs: type=docker
shell: bash
run: |
for attempt in 1 2 3 4 5; do
[ "$attempt" = "5" ] && exit 1
docker buildx build \
--file ${{ inputs.file }} \
--tag build-image \
--cache-from type=local,src=${{ runner.tool_cache }}/docker-buildx-cache \
--cache-to type=local,dest=${{ runner.tool_cache }}/docker-buildx-cache \
--load \
${{ inputs.context }} && break
sleep 5
done

# Only save caches on the `main` branch since these docker images are
# relatively large. This means that caches aren't filled through the merge
Expand Down
9 changes: 9 additions & 0 deletions .github/actions/install-rust/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -80,3 +80,12 @@ runs:
- name: Install the WASI target
shell: bash
run: rustup target add wasm32-wasip2 wasm32-wasip1 wasm32-unknown-unknown

- name: Fetch all Cargo dependencies
shell: bash
run: |
for attempt in 1 2 3 4 5; do
[ "$attempt" = "5" ] && exit 1
cargo fetch --locked && break
sleep 5
done
4 changes: 0 additions & 4 deletions .github/workflows/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -710,8 +710,6 @@ jobs:
- uses: ./.github/actions/apt-get-install
with:
packages: ocaml-nox ocamlbuild ocaml-findlib libzarith-ocaml-dev
- run: cargo fetch
working-directory: ./fuzz
- run: cargo fuzz check --dev
- run: cargo fuzz check --dev --fuzz-dir ./cranelift/isle/fuzz
- run: cargo fuzz check --dev --fuzz-dir ./crates/environ/fuzz --features component-model
Expand Down Expand Up @@ -843,8 +841,6 @@ jobs:
run: echo "C:\msys64\mingw64\bin" >> $Env:GITHUB_PATH
if: matrix.target == 'x86_64-pc-windows-gnu'

- run: cargo fetch --locked

- uses: ./.github/actions/apt-get-install
name: Install cross-compilation tools
if: matrix.gcc_package != ''
Expand Down
2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -388,7 +388,7 @@ arbitrary = "1.4.2"
backtrace = "0.3.76"
bumpalo = "3.20.2"
mutatis = {version = "0.4.0", features = ["alloc", "derive", "check"] }
cc = "1.2.41"
cc = "1.2.0" # intentionally smaller-than-latest to accommodate rust-lang/rust
object = { version = "0.39.0", default-features = false, features = ['read_core', 'elf'] }
gimli = { version = "0.33.0", default-features = false, features = ['read'] }
addr2line = { version = "0.26.0", default-features = false }
Expand Down
9 changes: 9 additions & 0 deletions RELEASES.md
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,11 @@ Unreleased.
which can be used to determine which root task performed an import call.
[#13510](https://github.com/bytecodealliance/wasmtime/pull/13510)

* Wasmtime now supports WASI 0.3.0 by default and the `component-model-async`
wasm feature is now enabled by default.
[#13612](https://github.com/bytecodealliance/wasmtime/pull/13612)


### Changed

* Performance of bulk-data-transfer instructions such as
Expand Down Expand Up @@ -213,6 +218,10 @@ Unreleased.
`concurrency_support` have been fixed.
[#13542](https://github.com/bytecodealliance/wasmtime/pull/13542)

* A panic in `substituted_component_type` has been fixed when guests have
exported resources.
[#13608](https://github.com/bytecodealliance/wasmtime/pull/13608)

--------------------------------------------------------------------------------

Release notes for previous releases of Wasmtime can be found on the respective
Expand Down
2 changes: 1 addition & 1 deletion ci/vendor-wit.sh
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ get_github() {
}

p2=0.2.12
p3=0.3.0-rc-2026-03-15
p3=0.3.0

rm -rf crates/wasi-io/wit/deps
mkdir -p crates/wasi-io/wit/deps
Expand Down
54 changes: 36 additions & 18 deletions cranelift/codegen/src/isa/pulley_shared/abi.rs
Original file line number Diff line number Diff line change
Expand Up @@ -713,29 +713,47 @@ impl FrameLayout {
&'a self,
style: &'a FrameStyle,
) -> impl Iterator<Item = (i32, Type, Reg)> + 'a {
let mut offset = self.stack_size();
// `push_frame_save` always saves the pulley-managed registers at the
// *top* of the allocated frame (the highest addresses, `amt - 8`
// downward). Therefore the manually-managed clobbers must be placed
// *below* that pulley-saved region. The pulley-saved registers are not
// necessarily first in `clobbered_callee_saves` (it is sorted by
// register, and the manually-managed integer registers x0..x15 sort
// before the pulley-managed x16..x31), so we cannot simply walk the
// list from the top assigning slots in order -- doing so would place a
// manually-managed register on top of a pulley-saved one and the two
// stores would collide.
//
// Instead reserve the top `num_saved_by_pulley` 8-byte slots for the
// pulley-managed registers (matching `push_frame_save`) and hand out
// the remaining, lower slots to the manually-managed registers.
let num_saved_by_pulley = match style {
FrameStyle::PulleySetupAndSaveClobbers {
saved_by_pulley, ..
} => u32::from(saved_by_pulley.len()),
_ => 0,
};
let mut offset = self.stack_size() - num_saved_by_pulley * 8;
self.clobbered_callee_saves.iter().filter_map(move |reg| {
// Allocate space for this clobber no matter what. If pulley is
// managing this then we're just accounting for the pulley-saved
// registers as well. Note that all pulley-managed registers come
// first in the list here.
offset -= 8;
let r_reg = reg.to_reg();
let ty = match r_reg.class() {
RegClass::Int => {
// If this register is saved by pulley, skip this clobber.
if let FrameStyle::PulleySetupAndSaveClobbers {
saved_by_pulley, ..
} = style
{
if let Some(reg) = r_reg.hw_enc().checked_sub(16) {
if saved_by_pulley.contains(reg) {
return None;
}
// If this register is saved by pulley, skip it: its slot is one of
// the reserved top slots accounted for above.
if let FrameStyle::PulleySetupAndSaveClobbers {
saved_by_pulley, ..
} = style
{
if r_reg.class() == RegClass::Int {
if let Some(reg) = r_reg.hw_enc().checked_sub(16) {
if saved_by_pulley.contains(reg) {
return None;
}
}
I64
}
}
// Allocate space for this manually-managed clobber.
offset -= 8;
let ty = match r_reg.class() {
RegClass::Int => I64,
RegClass::Float => F64,
RegClass::Vector => I8X16,
};
Expand Down
Loading
Loading