Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merge with upstream #265

Merged
merged 14 commits into from
Dec 3, 2024
Merged

Merge with upstream #265

merged 14 commits into from
Dec 3, 2024

Conversation

dhil
Copy link
Member

@dhil dhil commented Dec 3, 2024

No description provided.

alexcrichton and others added 14 commits November 30, 2024 16:49
* Update MSRV to 1.81.0

Coupled with today's release of Rust 1.83 this bumps our MSRV on
Wasmtime to 1.81. This also updates the nightly used for testing too.

prtest:full

* Propagate some necessary features through Winch

* Remove std feature from adapter configuration

Looks to be historical at this point and is no longer needed
Copyright (c) 2024, Arm Limited.

Signed-off-by: Karl Meakin <[email protected]>
* Start using `#[expect]` instead of `#[allow]`

In Rust 1.81, our new MSRV, a new feature was added to Rust to use
`#[expect]` to control lint levels. This new lint annotation will
silence a lint but will itself cause a lint if it doesn't actually
silence anything. This is quite useful to ensure that annotations don't
get stale over time.

Another feature is the ability to use a `reason` directive on the
attribute with a string explaining why the attribute is there. This
string is then rendered in compiler messages if a warning or error
happens.

This commit migrates applies a few changes across the workspace:

* Some `#[allow]` are changed to `#[expect]` with a `reason`.
* Some `#[allow]` have a `reason` added if the lint conditionally fires
  (mostly related to macros).
* Some `#[allow]` are removed since the lint doesn't actually fire.
* The workspace configures `clippy::allow_attributes_without_reason = 'warn'`
  as a "ratchet" to prevent future regressions.
* Many crates are annotated to allow `allow_attributes_without_reason`
  during this transitionary period.

The end-state is that all crates should use
`#[expect(..., reason = "...")]` for any lint that unconditionally fires
but is expected. The `#[allow(..., reason = "...")]` lint should be used
for conditionally firing lints, primarily in macro-related code.
The `allow_attributes_without_reason = 'warn'` level is intended to be
permanent but the transitionary
`#[expect(clippy::allow_attributes_without_reason)]` crate annotations
to go away over time.

* Fix adapter build

prtest:full

* Fix one-core build of icache coherence

* Use `allow` for missing_docs

Work around rust-lang/rust#130021 which was fixed in Rust 1.83 and isn't
fixed for our MSRV at this time.

* More MSRV compat
* Update to regalloc2 0.11.1.

Pulls in a fix for a performance regression related to Rust's new
standard library sort function.

(This is a semver-compatible upgrade to our existing 0.11.0 dep so
should be pulled in by non-locked builds automatically, but let's do it
explicitly to set the minimum version and get our vetting data updated
too.)

* Vetted hashbrown 0.14.15 -> 0.15.2.
* pulley: Implement a new `br_table` instruction

This is intended to match WebAssembly's `br_table` and Cranelift's
version as well. This is implemented as a new `br_table32` opcode where
a 32-bit number of branch targets are encoded after `br_table32` all as
a `PcRelOffset`, a 32-bit offset. This helps bake in a more "macro
opcode" into the interpreter rather than a handful of more primitive
opcodes that would achieve the same result with loads/indirect
jumps/comparisons/etc.

* Fix disassembling

* Update cranelift/codegen/src/isa/pulley_shared/inst.isle

Co-authored-by: Andrew Brown <[email protected]>

---------

Co-authored-by: Andrew Brown <[email protected]>
* Update some `Config` defaults documentation

Indicate that the defaults are based on compilation and target settings
and document a few interactions on wasm proposals.

Closes bytecodealliance#9694

* Apply suggestions from code review

Co-authored-by: Pat Hickey <[email protected]>

---------

Co-authored-by: Pat Hickey <[email protected]>
This allows the debugger to find them.

After much research, this has been chosen as the overall best solution.
The alternative here would be to create machine code thunks that call
these symbols when Jitting code, and describing those thunks in DWARF,
which would be significantly more complex.
…e#9693)

I'm doing some other refactoring which makes it a pain to maintain a
list in two locations of what all the host signatures are. Instead
remove the pulley `for_each_host_signature!` macro entirely. My thinking
is to instead implement a different system for host calls in pulley:

* The same relocation-style mechanism is used with some
  number-embedded-in-the-bytecode.
* The interpreter exits with "imma call the host" when it sees this
  special opcode.
* The interpreter embedder, aka Wasmtime, is responsible for then
  invoking the actual function pointer.
* Wasmtime already has static knowledge of all its function signatures,
  e.g. via various macros.

This will prevent the need to list all function signatures twice and
risk them getting out of sync. Most of the Pulley-level integration work
here is left to a future commit.
Mostly comes with a split in `wasmparser` of simd/other ops since it's
now possible to disable the `simd` feature at compile time (which we
don't use in Wasmtime right now).
@dhil dhil merged commit 7a10550 into wasmfx:main Dec 3, 2024
55 checks passed
@dhil dhil deleted the wasmfx-merge branch December 3, 2024 12:34
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.

5 participants