Skip to content

Instantly share code, notes, and snippets.

View alexcrichton's full-sized avatar

Alex Crichton alexcrichton

  • 00:12 (UTC -05:00)
View GitHub Profile

This document describes the "Basic" C ABI for WebAssembly. As mentioned in README, it's not the only possible C ABI. It is the ABI that the clang/LLVM WebAssembly backend is currently using, and any other C or C++ compiler wishing to be ABI-compatible with it.

Versioning and Machine interface

The current version of this ABI is 1.

This ABI is designed to work with Release 1.0 of the WebAssembly Specification. It does not require any

This document describes the "Basic" C ABI for WebAssembly. As mentioned in README, it's not the only possible C ABI. It is the ABI that the clang/LLVM WebAssembly backend is currently using, and any other C or C++ compiler wishing to be ABI-compatible with it.

Versioning and Machine interface

The current version of this ABI is 1.

This ABI is designed to work with Release 1.0 of the WebAssembly Specification. It does not require any

use std::ptr::NonNull;
#[derive(Default)]
struct Heap {
data: Data,
}
#[derive(Default)]
struct Data {
a: u32,
}
name auditor
description Guide for performing code audits of Wasmtime when searching for bugs, vulnerabilities, and other issues. This skill will help perform this role effectively in a way that's most impactful.

Auditor Skill Guide

;; Run test case
test run
set opt_level=speed
target x86_64
function %my_fn(i128 sext, i16x8, f64, f32x4, i64x2, i128 sext, i32 sext, i64 sext, f32, i16 uext, i64x2, i16 sext, i32x4, i8 sext, i8x16, i8x16) -> i128 sext, i16x8, f64, f32x4, f32x4, i64x2, i8 uext, i8, f64x2, i32 uext, f32, i128 uext, i32 uext, i64 sext, f32, i16 uext fast {
ss0 = explicit_slot 65, align = 1024
ss1 = explicit_slot 62, align = 1024
ss2 = explicit_slot 16, align = 16
diff --git a/fuzz/src/roundtrip_wit.rs b/fuzz/src/roundtrip_wit.rs
index 480093bb6..9279296a7 100644
--- a/fuzz/src/roundtrip_wit.rs
+++ b/fuzz/src/roundtrip_wit.rs
@@ -79,8 +79,11 @@ pub fn run(u: &mut Unstructured<'_>) -> Result<()> {
// Decode what was just created and record it later for testing merging
// worlds together.
- let (_, decoded) = wit_component::metadata::decode(&dummy).unwrap();
- decoded_bindgens.push((decoded, dummy, world.name.clone()));
diff --git a/fuzz/src/roundtrip_wit.rs b/fuzz/src/roundtrip_wit.rs
index 480093bb6..9593a31e1 100644
--- a/fuzz/src/roundtrip_wit.rs
+++ b/fuzz/src/roundtrip_wit.rs
@@ -79,8 +79,11 @@ pub fn run(u: &mut Unstructured<'_>) -> Result<()> {
// Decode what was just created and record it later for testing merging
// worlds together.
- let (_, decoded) = wit_component::metadata::decode(&dummy).unwrap();
- decoded_bindgens.push((decoded, dummy, world.name.clone()));
#[allow(unused_variables, dead_code)]
mod my_fs {
use wasi::filesystem::preopens;
use wasi::filesystem::types;
use wasmtime::component::{HasData, Linker, Resource, ResourceTable};
wasmtime::component::bindgen!({
with: {
"wasi:clocks": wasmtime_wasi::p2::bindings::clocks,
"wasi:io": wasmtime_wasi::p2::bindings::io,
#[allow(unused_variables, dead_code)]
mod my_fs {
use wasi::filesystem::preopens;
use wasi::filesystem::types;
use wasmtime::component::{HasData, Linker, Resource};
wasmtime::component::bindgen!({
with: {
"wasi:clocks": wasmtime_wasi::p2::bindings::clocks,
"wasi:io": wasmtime_wasi::p2::bindings::io,
diff --git a/wasmtime/_bindings.py b/wasmtime/_bindings.py
index 9de3cb8..a9218a0 100644
--- a/wasmtime/_bindings.py
+++ b/wasmtime/_bindings.py
@@ -2148,6 +2148,18 @@ _wasmtime_config_wasm_wide_arithmetic_set.argtypes = [POINTER(wasm_config_t), c_
def wasmtime_config_wasm_wide_arithmetic_set(arg0: Any, arg1: Any) -> None:
return _wasmtime_config_wasm_wide_arithmetic_set(arg0, arg1) # type: ignore
+_wasmtime_config_wasm_exceptions_set = dll.wasmtime_config_wasm_exceptions_set
+_wasmtime_config_wasm_exceptions_set.restype = None