From 26a5ae0280373e12e477c28ada19c97723893b5b Mon Sep 17 00:00:00 2001 From: Sy Brand Date: Thu, 29 Jan 2026 15:44:05 +0000 Subject: [PATCH 1/2] Intrinsics updates --- crates/.DS_Store | Bin 0 -> 14340 bytes crates/c-api/.DS_Store | Bin 0 -> 6148 bytes crates/cache/.DS_Store | Bin 0 -> 6148 bytes crates/component-macro/.DS_Store | Bin 0 -> 6148 bytes crates/core/.DS_Store | Bin 0 -> 6148 bytes crates/cranelift/.DS_Store | Bin 0 -> 6148 bytes crates/cranelift/src/compiler/component.rs | 30 ++- crates/environ/.DS_Store | Bin 0 -> 6148 bytes crates/environ/src/component.rs | 8 +- crates/environ/src/component/dfg.rs | 27 ++- crates/environ/src/component/info.rs | 28 ++- crates/environ/src/component/translate.rs | 27 ++- .../environ/src/component/translate/inline.rs | 22 +- crates/environ/src/component/types_builder.rs | 2 +- crates/fuzzing/.DS_Store | Bin 0 -> 6148 bytes crates/jit-icache-coherence/.DS_Store | Bin 0 -> 6148 bytes crates/misc/.DS_Store | Bin 0 -> 6148 bytes crates/test-macros/.DS_Store | Bin 0 -> 6148 bytes crates/test-programs/.DS_Store | Bin 0 -> 6148 bytes crates/wasi-common/.DS_Store | Bin 0 -> 6148 bytes crates/wasi-config/.DS_Store | Bin 0 -> 6148 bytes crates/wasi-http/.DS_Store | Bin 0 -> 6148 bytes crates/wasi-io/.DS_Store | Bin 0 -> 6148 bytes crates/wasi-keyvalue/.DS_Store | Bin 0 -> 6148 bytes crates/wasi-nn/.DS_Store | Bin 0 -> 6148 bytes .../wasi-preview1-component-adapter/.DS_Store | Bin 0 -> 6148 bytes crates/wasi-tls-nativetls/.DS_Store | Bin 0 -> 6148 bytes crates/wasi-tls-openssl/.DS_Store | Bin 0 -> 6148 bytes crates/wasi-tls/.DS_Store | Bin 0 -> 6148 bytes crates/wasi/.DS_Store | Bin 0 -> 6148 bytes crates/wasmtime/.DS_Store | Bin 0 -> 6148 bytes crates/wasmtime/src/config.rs | 4 +- .../src/runtime/component/concurrent.rs | 209 ++++++++++++++---- .../src/runtime/vm/component/libcalls.rs | 38 +++- crates/wiggle/.DS_Store | Bin 0 -> 6148 bytes crates/wit-bindgen/src/lib.rs | 13 +- crates/wit-bindgen/src/rust.rs | 4 +- crates/wit-bindgen/src/types.rs | 2 +- crates/wizer/.DS_Store | Bin 0 -> 6148 bytes 39 files changed, 304 insertions(+), 110 deletions(-) create mode 100644 crates/.DS_Store create mode 100644 crates/c-api/.DS_Store create mode 100644 crates/cache/.DS_Store create mode 100644 crates/component-macro/.DS_Store create mode 100644 crates/core/.DS_Store create mode 100644 crates/cranelift/.DS_Store create mode 100644 crates/environ/.DS_Store create mode 100644 crates/fuzzing/.DS_Store create mode 100644 crates/jit-icache-coherence/.DS_Store create mode 100644 crates/misc/.DS_Store create mode 100644 crates/test-macros/.DS_Store create mode 100644 crates/test-programs/.DS_Store create mode 100644 crates/wasi-common/.DS_Store create mode 100644 crates/wasi-config/.DS_Store create mode 100644 crates/wasi-http/.DS_Store create mode 100644 crates/wasi-io/.DS_Store create mode 100644 crates/wasi-keyvalue/.DS_Store create mode 100644 crates/wasi-nn/.DS_Store create mode 100644 crates/wasi-preview1-component-adapter/.DS_Store create mode 100644 crates/wasi-tls-nativetls/.DS_Store create mode 100644 crates/wasi-tls-openssl/.DS_Store create mode 100644 crates/wasi-tls/.DS_Store create mode 100644 crates/wasi/.DS_Store create mode 100644 crates/wasmtime/.DS_Store create mode 100644 crates/wiggle/.DS_Store create mode 100644 crates/wizer/.DS_Store diff --git a/crates/.DS_Store b/crates/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..3287308d20675d2df8049c201b0170322500485a GIT binary patch literal 14340 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 literal 0 HcmV?d00001 diff --git a/crates/cranelift/.DS_Store b/crates/cranelift/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..93ad332fe0dcf0a160276fd96e445903e0f328e3 GIT binary patch literal 6148 zcmeHKJ5Iwu5S<|@EKwwMlzRkn0~47Oq@Y4VNhBx|IRa5ea>ofc1SdhNpwXxR6`%rCfC~I; z1<s KG%D~L3cLgU%_u_v literal 0 HcmV?d00001 diff --git a/crates/cranelift/src/compiler/component.rs b/crates/cranelift/src/compiler/component.rs index 93795cd6da89..1790e336948a 100644 --- a/crates/cranelift/src/compiler/component.rs +++ b/crates/cranelift/src/compiler/component.rs @@ -784,12 +784,30 @@ impl<'a> TrampolineCompiler<'a> { }, ); } - Trampoline::ThreadSwitchTo { + Trampoline::ThreadSuspendToSuspended { instance, cancellable, } => { self.translate_libcall( - host::thread_switch_to, + host::thread_suspend_to_suspended, + TrapSentinel::NegativeOne, + WasmArgs::InRegisters, + |me, params| { + params.push(me.index_value(*instance)); + params.push( + me.builder + .ins() + .iconst(ir::types::I8, i64::from(*cancellable)), + ); + }, + ); + } + Trampoline::ThreadSuspendTo { + instance, + cancellable, + } => { + self.translate_libcall( + host::thread_suspend_to, TrapSentinel::NegativeOne, WasmArgs::InRegisters, |me, params| { @@ -820,9 +838,9 @@ impl<'a> TrampolineCompiler<'a> { }, ); } - Trampoline::ThreadResumeLater { instance } => { + Trampoline::ThreadUnsuspend { instance } => { self.translate_libcall( - host::thread_resume_later, + host::thread_unsuspend, TrapSentinel::Falsy, WasmArgs::InRegisters, |me, params| { @@ -830,12 +848,12 @@ impl<'a> TrampolineCompiler<'a> { }, ); } - Trampoline::ThreadYieldTo { + Trampoline::ThreadYieldToSuspended { instance, cancellable, } => { self.translate_libcall( - host::thread_yield_to, + host::thread_yield_to_suspended, TrapSentinel::NegativeOne, WasmArgs::InRegisters, |me, params| { diff --git a/crates/environ/.DS_Store b/crates/environ/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..934d9b54cadc492dc97bbbd8317d595c8a5f6fff GIT binary patch literal 6148 zcmeHKO-jQ+6n@ioQL$phjqY*;Be;(xo}d?~ZT(p^rdTSaAZG8{l^elRcmnYN;src_ zNAP>^4NXEKxGEy=!OS;#Klvu#giMBrTyH)OiMmA8Mq_MjpsO*CbE{axdpbZT_n6Xz z&S*Bd2>X?6bNodGcGf#&SU@X`Q`Ia=CP_x(wx68UgkYu-X_iHnnoqo zoyRnf6gfZM2e)qz!s+XZjMZp~Z#QE;GgH76Fa_4F0QPLQ_NJosrhqA63ak|1??Zsb z7|WtaE=lb_H31x$f|rGRV2{kVrm@_TFL;drkN s&<1F1oR=xCN-&VE7`eO^@1cpoAMgMedCU~yf!U9M$Y7l*uvP`W0ipG1-2eap literal 0 HcmV?d00001 diff --git a/crates/environ/src/component.rs b/crates/environ/src/component.rs index edc02acac524..4b18a3737ebd 100644 --- a/crates/environ/src/component.rs +++ b/crates/environ/src/component.rs @@ -198,13 +198,15 @@ macro_rules! foreach_builtin_component_function { #[cfg(feature = "component-model-async")] thread_new_indirect(vmctx: vmctx, caller_instance: u32, func_ty_id: u32, func_table_idx: u32, func_idx: u32, context: u32) -> u64; #[cfg(feature = "component-model-async")] - thread_switch_to(vmctx: vmctx, caller_instance: u32, cancellable: u8, thread_idx: u32) -> u32; + thread_suspend_to_suspended(vmctx: vmctx, caller_instance: u32, cancellable: u8, thread_idx: u32) -> u32; + #[cfg(feature = "component-model-async")] + thread_suspend_to(vmctx: vmctx, caller_instance: u32, cancellable: u8, thread_idx: u32) -> u32; #[cfg(feature = "component-model-async")] thread_suspend(vmctx: vmctx, caller_instance: u32, cancellable: u8) -> u32; #[cfg(feature = "component-model-async")] - thread_resume_later(vmctx: vmctx, caller_instance: u32, thread_idx: u32) -> bool; + thread_unsuspend(vmctx: vmctx, caller_instance: u32, thread_idx: u32) -> bool; #[cfg(feature = "component-model-async")] - thread_yield_to(vmctx: vmctx, caller_instance: u32, cancellable: u8, thread_idx: u32) -> u32; + thread_yield_to_suspended(vmctx: vmctx, caller_instance: u32, cancellable: u8, thread_idx: u32) -> u32; trap(vmctx: vmctx, code: u32) -> bool; diff --git a/crates/environ/src/component/dfg.rs b/crates/environ/src/component/dfg.rs index f1c4cef3f40f..2a4735e5d4cd 100644 --- a/crates/environ/src/component/dfg.rs +++ b/crates/environ/src/component/dfg.rs @@ -492,7 +492,7 @@ pub enum Trampoline { start_func_ty_idx: ComponentTypeIndex, start_func_table_id: TableId, }, - ThreadSwitchTo { + ThreadSuspendToSuspended { instance: RuntimeComponentInstanceIndex, cancellable: bool, }, @@ -500,10 +500,14 @@ pub enum Trampoline { instance: RuntimeComponentInstanceIndex, cancellable: bool, }, - ThreadResumeLater { + ThreadSuspendTo { + instance: RuntimeComponentInstanceIndex, + cancellable: bool, + }, + ThreadUnsuspend { instance: RuntimeComponentInstanceIndex, }, - ThreadYieldTo { + ThreadYieldToSuspended { instance: RuntimeComponentInstanceIndex, cancellable: bool, }, @@ -1185,10 +1189,17 @@ impl LinearizeDfg<'_> { start_func_ty_idx: *start_func_ty_idx, start_func_table_idx: self.runtime_table(*start_func_table_id), }, - Trampoline::ThreadSwitchTo { + Trampoline::ThreadSuspendToSuspended { + instance, + cancellable, + } => info::Trampoline::ThreadSuspendToSuspended { + instance: *instance, + cancellable: *cancellable, + }, + Trampoline::ThreadSuspendTo { instance, cancellable, - } => info::Trampoline::ThreadSwitchTo { + } => info::Trampoline::ThreadSuspendTo { instance: *instance, cancellable: *cancellable, }, @@ -1199,13 +1210,13 @@ impl LinearizeDfg<'_> { instance: *instance, cancellable: *cancellable, }, - Trampoline::ThreadResumeLater { instance } => info::Trampoline::ThreadResumeLater { + Trampoline::ThreadUnsuspend { instance } => info::Trampoline::ThreadUnsuspend { instance: *instance, }, - Trampoline::ThreadYieldTo { + Trampoline::ThreadYieldToSuspended { instance, cancellable, - } => info::Trampoline::ThreadYieldTo { + } => info::Trampoline::ThreadYieldToSuspended { instance: *instance, cancellable: *cancellable, }, diff --git a/crates/environ/src/component/info.rs b/crates/environ/src/component/info.rs index 2aff54ae68d3..50ec25b56544 100644 --- a/crates/environ/src/component/info.rs +++ b/crates/environ/src/component/info.rs @@ -1154,8 +1154,17 @@ pub enum Trampoline { start_func_table_idx: RuntimeTableIndex, }, - /// Intrinsic used to implement the `thread.switch-to` component model builtin. - ThreadSwitchTo { + /// Intrinsic used to implement the `thread.suspend-to-suspended` component model builtin. + ThreadSuspendToSuspended { + /// The specific component instance which is calling the intrinsic. + instance: RuntimeComponentInstanceIndex, + /// If `true`, indicates the caller instance may receive notification + /// of task cancellation. + cancellable: bool, + }, + + /// Intrinsic used to implement the `thread.suspend-to` component model builtin. + ThreadSuspendTo { /// The specific component instance which is calling the intrinsic. instance: RuntimeComponentInstanceIndex, /// If `true`, indicates the caller instance may receive notification @@ -1172,14 +1181,14 @@ pub enum Trampoline { cancellable: bool, }, - /// Intrinsic used to implement the `thread.resume-later` component model builtin. - ThreadResumeLater { + /// Intrinsic used to implement the `thread.unsuspend` component model builtin. + ThreadUnsuspend { /// The specific component instance which is calling the intrinsic. instance: RuntimeComponentInstanceIndex, }, - /// Intrinsic used to implement the `thread.yield-to` component model builtin. - ThreadYieldTo { + /// Intrinsic used to implement the `thread.yield-to-suspended` component model builtin. + ThreadYieldToSuspended { /// The specific component instance which is calling the intrinsic. instance: RuntimeComponentInstanceIndex, /// If `true`, indicates the caller instance may receive notification @@ -1254,10 +1263,11 @@ impl Trampoline { ContextSet { .. } => format!("context-set"), ThreadIndex => format!("thread-index"), ThreadNewIndirect { .. } => format!("thread-new-indirect"), - ThreadSwitchTo { .. } => format!("thread-switch-to"), + ThreadSuspendToSuspended { .. } => format!("thread-suspend-to-suspended"), + ThreadSuspendTo { .. } => format!("thread-suspend-to"), ThreadSuspend { .. } => format!("thread-suspend"), - ThreadResumeLater { .. } => format!("thread-resume-later"), - ThreadYieldTo { .. } => format!("thread-yield-to"), + ThreadUnsuspend { .. } => format!("thread-unsuspend"), + ThreadYieldToSuspended { .. } => format!("thread-yield-to-suspended"), } } } diff --git a/crates/environ/src/component/translate.rs b/crates/environ/src/component/translate.rs index 78bdb0307ed6..8855a848a660 100644 --- a/crates/environ/src/component/translate.rs +++ b/crates/environ/src/component/translate.rs @@ -319,7 +319,7 @@ enum LocalInitializer<'data> { start_func_ty: ComponentTypeIndex, start_func_table_index: TableIndex, }, - ThreadSwitchTo { + ThreadSuspendToSuspended { func: ModuleInternedTypeIndex, cancellable: bool, }, @@ -327,10 +327,14 @@ enum LocalInitializer<'data> { func: ModuleInternedTypeIndex, cancellable: bool, }, - ThreadResumeLater { + ThreadSuspendTo { + func: ModuleInternedTypeIndex, + cancellable: bool, + }, + ThreadUnsuspend { func: ModuleInternedTypeIndex, }, - ThreadYieldTo { + ThreadYieldToSuspended { func: ModuleInternedTypeIndex, cancellable: bool, }, @@ -1150,25 +1154,30 @@ impl<'a, 'data> Translator<'a, 'data> { start_func_table_index: TableIndex::from_u32(table_index), } } - wasmparser::CanonicalFunction::ThreadSwitchTo { cancellable } => { + wasmparser::CanonicalFunction::ThreadSuspendToSuspended { cancellable } => { let func = self.core_func_signature(core_func_index)?; core_func_index += 1; - LocalInitializer::ThreadSwitchTo { func, cancellable } + LocalInitializer::ThreadSuspendToSuspended { func, cancellable } } wasmparser::CanonicalFunction::ThreadSuspend { cancellable } => { let func = self.core_func_signature(core_func_index)?; core_func_index += 1; LocalInitializer::ThreadSuspend { func, cancellable } } - wasmparser::CanonicalFunction::ThreadResumeLater => { + wasmparser::CanonicalFunction::ThreadSuspendTo { cancellable } => { + let func = self.core_func_signature(core_func_index)?; + core_func_index += 1; + LocalInitializer::ThreadSuspendTo { func, cancellable } + } + wasmparser::CanonicalFunction::ThreadUnsuspend => { let func = self.core_func_signature(core_func_index)?; core_func_index += 1; - LocalInitializer::ThreadResumeLater { func } + LocalInitializer::ThreadUnsuspend { func } } - wasmparser::CanonicalFunction::ThreadYieldTo { cancellable } => { + wasmparser::CanonicalFunction::ThreadYieldToSuspended { cancellable } => { let func = self.core_func_signature(core_func_index)?; core_func_index += 1; - LocalInitializer::ThreadYieldTo { func, cancellable } + LocalInitializer::ThreadYieldToSuspended { func, cancellable } } }; self.result.initializers.push(init); diff --git a/crates/environ/src/component/translate/inline.rs b/crates/environ/src/component/translate/inline.rs index 8492b9e04ae3..94ba5b1723fa 100644 --- a/crates/environ/src/component/translate/inline.rs +++ b/crates/environ/src/component/translate/inline.rs @@ -1123,10 +1123,20 @@ impl<'a> Inliner<'a> { )); frame.funcs.push((*func, dfg::CoreDef::Trampoline(index))); } - ThreadSwitchTo { func, cancellable } => { + ThreadSuspendToSuspended { func, cancellable } => { let index = self.result.trampolines.push(( *func, - dfg::Trampoline::ThreadSwitchTo { + dfg::Trampoline::ThreadSuspendToSuspended { + instance: frame.instance, + cancellable: *cancellable, + }, + )); + frame.funcs.push((*func, dfg::CoreDef::Trampoline(index))); + } + ThreadSuspendTo { func, cancellable } => { + let index = self.result.trampolines.push(( + *func, + dfg::Trampoline::ThreadSuspendTo { instance: frame.instance, cancellable: *cancellable, }, @@ -1143,19 +1153,19 @@ impl<'a> Inliner<'a> { )); frame.funcs.push((*func, dfg::CoreDef::Trampoline(index))); } - ThreadResumeLater { func } => { + ThreadUnsuspend { func } => { let index = self.result.trampolines.push(( *func, - dfg::Trampoline::ThreadResumeLater { + dfg::Trampoline::ThreadUnsuspend { instance: frame.instance, }, )); frame.funcs.push((*func, dfg::CoreDef::Trampoline(index))); } - ThreadYieldTo { func, cancellable } => { + ThreadYieldToSuspended { func, cancellable } => { let index = self.result.trampolines.push(( *func, - dfg::Trampoline::ThreadYieldTo { + dfg::Trampoline::ThreadYieldToSuspended { instance: frame.instance, cancellable: *cancellable, }, diff --git a/crates/environ/src/component/types_builder.rs b/crates/environ/src/component/types_builder.rs index ddfe291b0826..ef082cae4eda 100644 --- a/crates/environ/src/component/types_builder.rs +++ b/crates/environ/src/component/types_builder.rs @@ -458,7 +458,7 @@ impl ComponentTypesBuilder { ComponentDefinedType::Stream(ty) => { InterfaceType::Stream(self.stream_table_type(types, ty)?) } - ComponentDefinedType::FixedSizeList(ty, size) => { + ComponentDefinedType::FixedLengthList(ty, size) => { InterfaceType::FixedLengthList(self.fixed_length_list_type(types, ty, *size)?) } ComponentDefinedType::Map(..) => { diff --git a/crates/fuzzing/.DS_Store b/crates/fuzzing/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..0223ed4eafb0f3a084f5c05d3b5fe7ffa6b1bf37 GIT binary patch literal 6148 zcmeHKy-EW?5S}%O2DL~d2sZZu0b^k&oZ<8Z@&e{ZG?4Q`5-}FSHCA?lk6~gV)g$9{{-EVJZXJ_U+ZugdmRQ0%3Au1735sfjwh;D+gom)oc ztcINxuTiNrlenw3^O@PA5C(*SSz~~|-5m9)N6pTG`~6t|0_ zkK3-bHL~7pZ7zRaxYq8Wv+BYF+^9eU+DFU*^}U$1h8@YZx^bWHMsXegI2p&DJj07m z0momV6RIPAOl9<4D$K z*17&1>TlD)udTE@wzzq}4o}}c&g~o3er`@#s~6Ak%`ru0j{#*;DlW}lYLbyKAPoF5 z1H3;3XpEu7)S%uv(CI4xFb}mBjQN*>eFBT2#nd1y5M^9}##PxXhBEHZ2Xj!!|snDSG!hkT~GmtZnB|iUmzQ6zbPVyuS2m}9$0hNzxQ57ZG zvo%v3pS1zn9vTbJOATrlboMyb13rpZ(X_x8@BkQEObtQZ47Ev$m1t5@&K1&84$*RgTp(;Bks{GXpcE8H+n^{1fGZ(R!37X!;Q2$C zXayw&*plb%*nTtGSFG1W#FOn}Of({*3NA=HS^6e<@t&P{WC&zAV?3R=>rJojr+{z= zbW1lhUtO2{^QW)Ox~=PG)i#J!@5|=?U+e4Y%EXz}8poN73p+G1Q z3WNgxS^@NIvFg+?)=(f62n7xb$oC<^1+!yksGkljIsyRYH(m|TI!geP1c2GGGeiW& zMgY#3`O5DFYCFtF`N`u`>ToB98k z6uVF$6!=pL@UWiN6TFi5*51oWuTAh7{L@gY81GN=nBdz$Xs7vyUe0J;%m5#X5 Pf$<|Cx`c%SzoEbf_mU|8 literal 0 HcmV?d00001 diff --git a/crates/misc/.DS_Store b/crates/misc/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..939c48a83eadb850428df5bd589aa1e2787950f1 GIT binary patch literal 6148 zcmeHKu}%Xq47INvu7aTp5@UXVp$l`U4vD=#0KFm@dgP=l1KaKV5kJ6R@C|$d&#_gg z4u%Q|A+RO;B|bY*UZnU;L_EJ=&4{K%R6+%d3Ct%V-$e&fm}d;+yhfrsx`uA(WDxC+ z-^hU6-4WH4sG%12{r;|~qX*1u+~o$h+QD|~o7tjHO`DHWOkVcOZc{5u9vvqj1SMYqm?GvEwt8IboOKn0^=ub7_> znA`#Y&lamr4Py-jLV-}=pn!ZI5?nAl_J;cDz@j4nP=4dp@T{{0Fi8NI9eYDW zU~E*NQQ1cfHag#}2SXmnz|8Rz)T>=O#>?T9BWC(eekh616$u>vF8PNe_O;or>v z$E4VW0-?a4Qh>+xqMqTEytfWsPI_&EFX5ktS}n(-tr)1S7#nHDXGL9-XXLYEZ>V&{ Rl@5#_0nsHa6!;AVJ^++cDKP*5 literal 0 HcmV?d00001 diff --git a/crates/test-programs/.DS_Store b/crates/test-programs/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..ba1c603e7928801f92a497d3ac0386c787d64ea7 GIT binary patch literal 6148 zcmeHKF;2r!4E1k2q+;p7z?dua2B8WQV=qvWh=PhUmU+-Uz`#iJS z^Xc*C7%&Em zfqiEHHJc?k5VX-4Fb0f)ngRYkgiyvvu@dy34h+5p0FJQi1#|8tI3`q#6e~ekAWlMo z66&IYdY4hPUv(pa6`Rv#~^zP&$K^u($W1!8zP#z~-|4;h+|8|f) z83V?^UNPWC@jRa4m9(~YUXE*R2wgx~*sl_-Loo5B7`|MJkDy+#9`XbjDOQ45f!L3L Mr@;ne;7=L&1=LznOaK4? literal 0 HcmV?d00001 diff --git a/crates/wasi-common/.DS_Store b/crates/wasi-common/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..b72b2930bf599c5623beb316f30ba93ab8b08945 GIT binary patch literal 6148 zcmeHKy-EW?5S~p=I59;^%Y6fhjqMpOkj5%65RwxWa$YbIZG;0G(b~orP&-?}UVIN9 zz~07hc9+X8ceWB_24=s_{Orel2e%m_QvLI+N7N;v7|z(*#L{4#XRleyMLIymXY@wX zBA=URyH+iMbyR@gU7HqkM$_4m|Nd?tSDCy>)5)xuAQC?xWLF>e@B4l>tFkvcd!4U4 zKRZA6PK{pBMjN!GLvSu>5pdG*EzJ77-=|NnpS$K{uRkwV+|3mMKaH6`q6<0!`(?nc zh7W$u=N?>F+*Pm7+>{S^mEmP>F;PGi5Czsj0o>Va@s>qdMFCMj6sQ#7?}LUjCJsxB z=F@@2i~zt0VPn|yEWth6VdAi~hzv~GR-kQFZp2Ww9dYgI5{IQl+fK?b;~dAV+=QYG zJL1}ulS(YgDhh}Kp#pA3@ACaW__!wmKG6#$sYkDgDj%JpDOSJyj5jt literal 0 HcmV?d00001 diff --git a/crates/wasi-config/.DS_Store b/crates/wasi-config/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..7f3092cbfedfef14a7ee17d540e49846ecec5554 GIT binary patch literal 6148 zcmeHKy-EW?5S~q?~qqCrQK~5-yk%5fQGku@ig(A4UXg8yg=% z@CE#4XSv(uw3Q$;F#Fxj&wlK8$L%c?m&`MeLa zv(s=^i#A%KoQ}bn(>&%}$>MCt`*Bn92L02l;y&0fxr2(BpWkz=_lnLakGYp$t4zqd zb@%r5e(qP~`a;fnHs;%8J~dT96;K5hO#$rLZ0$8c9aRBUKouwz;O~QlGbSDjLHFsv z;En*m7Q)VO?f$WVmIJ`VVh``ntqpAt>!+95d$e%*LNkjAKXK zx^gm!ppL45DiABsl-n-v|GU4R|KldTQw3Ckf2DwFrGvDOCHcLzwm9BvE&K@1#&v~Y k*@6qV6{D87;tjYn#4TR{6OV-;A~5|Ca5Cti3jC=8-&T)cp8x;= literal 0 HcmV?d00001 diff --git a/crates/wasi-http/.DS_Store b/crates/wasi-http/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..9f54cf7d9dbd79b92090f2ac7de9c760337794e6 GIT binary patch literal 6148 zcmeHKO-jQ+6n>Mo5Vec0#AU9~ZrsKaPtXfU8_{AzijBAuvUjWC6+D6`5a}gccz_V%E5;;pBXn2j`WL6eS zYwfk7)v%8Y@Vo2Kif(DPxboj$r)WGynPt;OIfW&@dCDI?p5M=WZ~lvSdF`*dK^pa_ zqD$1QXcg3?^*Z$Wbyvr)Z(k!@*UK-;ruOcLpuXYn9Q(beIaNXJ=y23{{JJlnr~S>N z+po>@Yqq^Xy(q<^D$0N|pbYFC1L)Z-@sXg8%78MU3~U+T|3d<0OdZyO_Sb>IUIBnz zn5|%L&se~O4Zzf4EeH$5NGecLjk{tPNrydgajC;vP}0fR%2>x$HtvQZCp_2_8%`z_ z)KM8w20{ip@;KoBfBy6RKTOgmWk4DDR}7eLHp#}=lIyLl&2g_ypchaUj;jT?DVW$+ fj96~PCr~S}Cp-bB4r@VJAbJq6H0YoV{3!$9ItgKm literal 0 HcmV?d00001 diff --git a/crates/wasi-io/.DS_Store b/crates/wasi-io/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..634eff0eb5554dd747bb216d725f9169addffb3a GIT binary patch literal 6148 zcmeHKOG?B*5Up}%5m8~5f}388o7oMn;u!bBTtMc73KKH;K~RM3U3(92As)jUcm!W{ zm6J4+wTM(f_v^0L)s;L*cZ!I3d_Nx&4Tva16J!~5n7BKsEn6%k%O1nYtSVO>Tl`&@ zJbRCB>4s*@%l7j>?KMnU6~%N}P2tH74j0cKukR;qcD`nZN2iY|ySi%c`i3y%d!TE& zOY+6vRz=Ny>|s%0aswH zfSeBjO)xjC730x?E|vhmKHSkTmRdq$f?;l0D}sTsh5|K|t;Aprhd?f{v!|t@y-?a1qHqV;ub&> literal 0 HcmV?d00001 diff --git a/crates/wasi-keyvalue/.DS_Store b/crates/wasi-keyvalue/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..ea946049a6776989ff8d7c4666aafef192c44cdb GIT binary patch literal 6148 zcmeHKJ5Iwu5S>keFoGf_13@cA8lwV9&K^U0!|Ad)Fs?D?ZgLA+v|LR zdjKE7nccnIE{R|zhs?mvm+Z{!mwb?&ECAKK>o$NofRF}butKiFIL@PFOLk_HQ0X-W z=%a^W|FV&kvSmUP5Cs-Z0seMF`ew(tKnmyk?PTeIA6D&7-m7xbtkr7wvo^=}-=1El z2Ome(dEH;-4XzqV!MR5(0W}P9iw^H5vj|joI*+)|@OW~#_Vu8j!PceOoVgrz`Jg7u zw~P_*UgY%-R&cJry!ug>w|7(UI`uAhb%w{k5ix%a_qfK$dtYqj^N7oPnmo@mw{gf@?lWQwq5$=5ws6&;cu_zU5CsYacz=j! zFvb>hgL>;Ar;h-H0ZnV8YrV%4Mm#|nTg(m844E>egr-#4BZe~NG#}Z#*kW$bltXD| zTE{XgdqPpR!>CB7L&XNgivps6uRzV**17*5|9t-Ui{wre5C#5~0xD=FttP#a?X9Jk w<6axlIH$qJdAUJdLe92heZj4Gn}#-uMSMXRTg(m844M20Xc@$b0)MK&H`33dV*mgE literal 0 HcmV?d00001 diff --git a/crates/wasi-preview1-component-adapter/.DS_Store b/crates/wasi-preview1-component-adapter/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..57fdcd35d3aa235374021a73c8624f8a12e129a9 GIT binary patch literal 6148 zcmeHKOG*Pl5Un;r1{Ddo(2X!2AYeSf7{(I>_xbsQ2@?_(;%YXY!HtJ-D~Mb16mDGR z3Zk#Nnq=BZL=l2WRp@>*-Bn#xFLc*55t;f$w?E?`i)h*4Id}bcy`B$a>&sw*5X!C!fPkHp!u| zRxh1K`<0#_SCiu^(GYQUylBk$VLFqK;c)ZnWqfUUbar{q#aYjvoZQP`0NI0uV;Xs0 zY3&wXz4^TF=bK6XpLC|V&(rbZAp3uC?kbCC05zK>SQXS>8Bhk4fe8bAK7?qDk;6>T z9v$dxApw>#Yz5E!Nx?Ru!^mMKh#80xQ=pg{cf~Mbj`7gxMGiATF()G>jEwVa+zrK8 z?^r*y>SQ88?Uey#z-OQ&uNAKU2lMa$zLCBu1Ioa^V!)K+MqEcquC^AE<60Y{HPKjD nFB7yT=v+Cr4_u13(5zrC-Q{ocpAU6C!eht4W`zM??i0qhqB-*xc&cN|V{?c#ZyWTvzj!C4R4o z_uioeUD9}Vp6`F>cm$DzVk2X~82DohxNbQt2l%K| zTfclB*IJKuhQ`A4A}bK+Qi_36iZS4GWM7=>_pHMo5=KQ{h3yg!w2OccVx2MY0}Q+a D`vOI? literal 0 HcmV?d00001 diff --git a/crates/wasi-tls-openssl/.DS_Store b/crates/wasi-tls-openssl/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..4972ba8fe533f9a5d76180c83ec263e9bba6a133 GIT binary patch literal 6148 zcmeHKy-ou$40h-tom7U7jClZ-Zj7Nio}ddOYRk{i(^a$`D`h}pVD1a>GKi5k;Su<3 zhc+ipjHm)zN1*oDh*4t!G1`0TGpGjE7%F%&No&dlCW)bLe#|3&e07Js42n)n%C{ROPdSW;Yhux=nAz@V1aB`9v z>!i$Ij~6G|VfQkfTu`*$7%&Ff4D@t3;QD`wU#9bs-wv^nF<=b*F$P>wjjItpD%I9+ zpU1VCMF^?x}K&)Ln2DxjJ+)kD~$8(9qakX4$$yD(($C6 zFFNZqu)YfLv+L86u4pnl51(K0*=FWto)@#SKqUFvJ-dCmdp-)Y(_gZSi}0@ZD5DLk z=oFk4Eo08jw>TT}?xziJP(LqQ?$s+|e*T?fzc+MARm^?(&}Ks3kJrbi_XEFQR~K@2 zvoW9k8CY;NRX`P3I|b0Q*^+HR9aRBUKow{d;P-=tGiDxZLHFvw;En*m0m9BOci&h* z%K>2Ku@*!GW~3A-rN$pIjFcm8{kqI!Ehyz=95e3YnTS5T0o(L=^1N%3$Vohk;Kh^A;LRrx@#NX7 z;A{BJ?vn1(=uwKy!0eaI?CeLrKqf;(+&vq0h}uMyzy%wtSZYl2;tSUBk#!);8J*s+ z$R{=`F}3AaK;Bc6rgTcf@nQJ>zAopPyvVY_xELUk+-#j(z23jc%6= zXoY5U0L~drBTjmIkFz1~$Mw_m=Z@tK>hogGUB4sZ=WXF{(K#K1{UT!L{f96Ya^K!n z+*NJJT$hh|`@*ZH3aA3Az_KWSo-LNFIn-4ZPz6+hN&)#k7`R~Sv2vTO6{MDwwy+^ZFf#K3Y%l>EPk>?;l>*9yjO9Z~rKNu%DhgzwcDU%7)a+tZL)#W;&9d^ZU-p>C>gm+2{4+ z>5THDnR?qVTyJ5*?-wS|uCk-)x<}{hmA4D2o61kuo*j{?Pq$p(#27FJjDb%E(6d>} zONwTV0b{@zm@vTKhXBeLdQ24M(*Yw#0ALAj5nRi^6)<22F!Y!x!UJ)d3e;5Rj~GtV z;SYRV=rK{$baGM|&+(O=KcP6O4u2rw=-=F`pNp@!p7z6)` z0auC|Q5{S2y*0Nu?zI7Q56Z%EiQ*&$7t)Fm%dL0?DguAN7r@YCq6iPfeguRDGseKL GGVlSq&48Bx literal 0 HcmV?d00001 diff --git a/crates/wasmtime/src/config.rs b/crates/wasmtime/src/config.rs index 45d01e007e51..6f691e93187a 100644 --- a/crates/wasmtime/src/config.rs +++ b/crates/wasmtime/src/config.rs @@ -1210,7 +1210,7 @@ impl Config { /// incomplete. #[cfg(feature = "component-model")] pub fn wasm_component_model_fixed_length_lists(&mut self, enable: bool) -> &mut Self { - self.wasm_features(WasmFeatures::CM_FIXED_SIZE_LIST, enable); + self.wasm_features(WasmFeatures::CM_FIXED_LENGTH_LISTS, enable); self } @@ -2183,7 +2183,7 @@ impl Config { | WasmFeatures::CM_THREADING | WasmFeatures::CM_ERROR_CONTEXT | WasmFeatures::CM_GC - | WasmFeatures::CM_FIXED_SIZE_LIST; + | WasmFeatures::CM_FIXED_LENGTH_LISTS; #[allow(unused_mut, reason = "easier to avoid #[cfg]")] let mut unsupported = !features_known_to_wasmtime; diff --git a/crates/wasmtime/src/runtime/component/concurrent.rs b/crates/wasmtime/src/runtime/component/concurrent.rs index 113bdda0637d..e0d129b4615a 100644 --- a/crates/wasmtime/src/runtime/component/concurrent.rs +++ b/crates/wasmtime/src/runtime/component/concurrent.rs @@ -634,6 +634,23 @@ impl fmt::Debug for GuestCallKind { } } +/// The target of a suspension intrinsic. +#[derive(Copy, Clone, Debug)] +pub enum SuspensionTarget { + SomeSuspended(u32), + Some(u32), + None, +} + +impl SuspensionTarget { + fn is_none(&self) -> bool { + matches!(self, SuspensionTarget::None) + } + fn is_some(&self) -> bool { + !self.is_none() + } +} + /// Represents a pending call into guest code for a given guest thread. #[derive(Debug)] struct GuestCall { @@ -685,8 +702,10 @@ enum WorkItem { PushFuture(AlwaysMut), /// A fiber to resume. ResumeFiber(StoreFiber<'static>), + /// A thread to resume. + ResumeThread(RuntimeComponentInstanceIndex, QualifiedThreadId), /// A pending call into guest code for a given guest task. - GuestCall(GuestCall), + GuestCall(RuntimeComponentInstanceIndex, GuestCall), /// A job to run on a worker fiber. WorkerFunction(AlwaysMut Result<()> + Send>>), } @@ -696,7 +715,16 @@ impl fmt::Debug for WorkItem { match self { Self::PushFuture(_) => f.debug_tuple("PushFuture").finish(), Self::ResumeFiber(_) => f.debug_tuple("ResumeFiber").finish(), - Self::GuestCall(call) => f.debug_tuple("GuestCall").field(call).finish(), + Self::ResumeThread(instance, thread) => f + .debug_tuple("ResumeThread") + .field(instance) + .field(thread) + .finish(), + Self::GuestCall(instance, call) => f + .debug_tuple("GuestCall") + .field(instance) + .field(call) + .finish(), Self::WorkerFunction(_) => f.debug_tuple("WorkerFunction").finish(), } } @@ -1307,7 +1335,17 @@ impl StoreContextMut<'_, T> { WorkItem::ResumeFiber(fiber) => { self.0.resume_fiber(fiber).await?; } - WorkItem::GuestCall(call) => { + WorkItem::ResumeThread(_, thread) => { + if let GuestThreadState::Ready(fiber) = mem::replace( + &mut self.0.concurrent_state_mut().get_mut(thread.thread)?.state, + GuestThreadState::Running, + ) { + self.0.resume_fiber(fiber).await?; + } else { + bail!("cannot resume non-pending thread {thread:?}"); + } + } + WorkItem::GuestCall(_, call) => { if call.is_ready(self.0)? { self.run_on_worker(WorkerItem::GuestCall(call)).await?; } else { @@ -1673,7 +1711,7 @@ impl StoreOpaque { let call = GuestCall { thread, kind }; if call.is_ready(self)? { self.concurrent_state_mut() - .push_high_priority(WorkItem::GuestCall(call)); + .push_high_priority(WorkItem::GuestCall(instance.index, call)); } else { self.instance_state(instance) .pending @@ -1733,8 +1771,9 @@ impl StoreOpaque { } } SuspendReason::Yielding { thread, .. } => { - state.get_mut(thread.thread)?.state = GuestThreadState::Pending; - state.push_low_priority(WorkItem::ResumeFiber(fiber)); + state.get_mut(thread.thread)?.state = GuestThreadState::Ready(fiber); + let instance = state.get_mut(thread.task)?.instance.index; + state.push_low_priority(WorkItem::ResumeThread(instance, thread)); } SuspendReason::ExplicitlySuspending { thread, .. } => { state.get_mut(thread.thread)?.state = GuestThreadState::Suspended(fiber); @@ -2000,7 +2039,7 @@ impl Instance { if state.may_block(guest_thread.task) { // Push this thread onto the "low priority" queue so it runs // after any other threads have had a chance to run. - state.push_low_priority(WorkItem::GuestCall(call)); + state.push_low_priority(WorkItem::GuestCall(runtime_instance, call)); None } else { // Yielding in a non-blocking context is defined as a no-op @@ -2021,13 +2060,16 @@ impl Instance { || !state.get_mut(set)?.ready.is_empty() { // An event is immediately available; deliver it ASAP. - state.push_high_priority(WorkItem::GuestCall(GuestCall { - thread: guest_thread, - kind: GuestCallKind::DeliverEvent { - instance: self, - set: Some(set), + state.push_high_priority(WorkItem::GuestCall( + runtime_instance, + GuestCall { + thread: guest_thread, + kind: GuestCallKind::DeliverEvent { + instance: self, + set: Some(set), + }, }, - })); + )); } else { // No event is immediately available. // @@ -2353,10 +2395,13 @@ impl Instance { store .0 .concurrent_state_mut() - .push_high_priority(WorkItem::GuestCall(GuestCall { - thread: guest_thread, - kind: GuestCallKind::StartImplicit(fun), - })); + .push_high_priority(WorkItem::GuestCall( + callee_instance.index, + GuestCall { + thread: guest_thread, + kind: GuestCallKind::StartImplicit(fun), + }, + )); Ok(()) } @@ -3383,12 +3428,13 @@ impl Instance { self.add_guest_thread_to_instance_table(thread_id, store.0, runtime_instance) } - pub(crate) fn resume_suspended_thread( + pub(crate) fn resume_thread( self, store: &mut StoreOpaque, runtime_instance: RuntimeComponentInstanceIndex, thread_idx: u32, high_priority: bool, + allow_ready: bool, ) -> Result<()> { let thread_id = GuestThread::from_instance(self.id().get_mut(store), runtime_instance, thread_idx)?; @@ -3399,12 +3445,15 @@ impl Instance { match mem::replace(&mut thread.state, GuestThreadState::Running) { GuestThreadState::NotStartedExplicit(start_func) => { log::trace!("starting thread {guest_thread:?}"); - let guest_call = WorkItem::GuestCall(GuestCall { - thread: guest_thread, - kind: GuestCallKind::StartExplicit(Box::new(move |store| { - start_func(store, guest_thread) - })), - }); + let guest_call = WorkItem::GuestCall( + runtime_instance, + GuestCall { + thread: guest_thread, + kind: GuestCallKind::StartExplicit(Box::new(move |store| { + start_func(store, guest_thread) + })), + }, + ); store .concurrent_state_mut() .push_work_item(guest_call, high_priority); @@ -3415,6 +3464,13 @@ impl Instance { .concurrent_state_mut() .push_work_item(WorkItem::ResumeFiber(fiber), high_priority); } + GuestThreadState::Ready(fiber) if allow_ready => { + log::trace!("resuming thread {thread_id:?} that was ready"); + thread.state = GuestThreadState::Ready(fiber); + store + .concurrent_state_mut() + .promote_thread_work_item(guest_thread); + } _ => { bail!("cannot resume thread which is not suspended"); } @@ -3441,15 +3497,15 @@ impl Instance { Ok(guest_id) } - /// Helper function for the `thread.yield`, `thread.yield-to`, `thread.suspend`, - /// and `thread.switch-to` intrinsics. + /// Helper function for the `thread.yield`, `thread.yield-to-suspended`, `thread.suspend`, + /// `thread.suspend-to`, and `thread.suspend-to-suspended` intrinsics. pub(crate) fn suspension_intrinsic( self, store: &mut StoreOpaque, caller: RuntimeComponentInstanceIndex, cancellable: bool, yielding: bool, - to_thread: Option, + to_thread: SuspensionTarget, ) -> Result { self.check_may_leave(store, caller)?; @@ -3458,10 +3514,12 @@ impl Instance { if yielding { // This is a `thread.yield` call if !state.may_block(state.guest_thread.unwrap().task) { - // The spec defines `thread.yield` to be a no-op in a - // non-blocking context, so we return immediately without giving - // any other thread a chance to run. - return Ok(WaitResult::Completed); + // In a non-blocking context, a `thread.yield` may trigger + // other threads in the same component instance to run. + if !state.promote_instance_local_thread_work_item(caller) { + // No other threads are runnable, so just return + return Ok(WaitResult::Completed); + } } } else { // The caller may only call `thread.suspend` from an async task @@ -3476,8 +3534,14 @@ impl Instance { return Ok(WaitResult::Cancelled); } - if let Some(thread) = to_thread { - self.resume_suspended_thread(store, caller, thread, true)?; + match to_thread { + SuspensionTarget::SomeSuspended(thread) => { + self.resume_thread(store, caller, thread, true, false)? + } + SuspensionTarget::Some(thread) => { + self.resume_thread(store, caller, thread, true, true)? + } + SuspensionTarget::None => { /* nothing to do */ } } let state = store.concurrent_state_mut(); @@ -3486,7 +3550,7 @@ impl Instance { SuspendReason::Yielding { thread: guest_thread, // Tell `StoreOpaque::suspend` it's okay to suspend here since - // we're handling a `thread.yield-to` call; otherwise it would + // we're handling a `thread.yield-to-suspended` call; otherwise it would // panic if we called it in a non-blocking context. skip_may_block_check: to_thread.is_some(), } @@ -3494,7 +3558,7 @@ impl Instance { SuspendReason::ExplicitlySuspending { thread: guest_thread, // Tell `StoreOpaque::suspend` it's okay to suspend here since - // we're handling a `thread.switch-to` call; otherwise it would + // we're handling a `thread.suspend-to(-suspended)` call; otherwise it would // panic if we called it in a non-blocking context. skip_may_block_check: to_thread.is_some(), } @@ -3691,6 +3755,7 @@ impl Instance { // `Event::Cancelled` if it was already cancelled), but that's // okay -- this should supersede the previous state. task.event = Some(Event::Cancelled); + let runtime_instance = task.instance.index; for thread in task.threads.clone() { let thread = QualifiedThreadId { task: guest_task, @@ -3709,13 +3774,16 @@ impl Instance { .unwrap() { WaitMode::Fiber(fiber) => WorkItem::ResumeFiber(fiber), - WaitMode::Callback(instance) => WorkItem::GuestCall(GuestCall { - thread, - kind: GuestCallKind::DeliverEvent { - instance, - set: None, + WaitMode::Callback(instance) => WorkItem::GuestCall( + runtime_instance, + GuestCall { + thread, + kind: GuestCallKind::DeliverEvent { + instance, + set: None, + }, }, - }), + ), }; concurrent_state.push_high_priority(item); @@ -4383,7 +4451,7 @@ enum GuestThreadState { ), Running, Suspended(StoreFiber<'static>), - Pending, + Ready(StoreFiber<'static>), Completed, } pub struct GuestThread { @@ -4817,13 +4885,16 @@ impl Waitable { let item = match mode { WaitMode::Fiber(fiber) => WorkItem::ResumeFiber(fiber), - WaitMode::Callback(instance) => WorkItem::GuestCall(GuestCall { - thread, - kind: GuestCallKind::DeliverEvent { - instance, - set: Some(set), + WaitMode::Callback(instance) => WorkItem::GuestCall( + state.get_mut(thread.task)?.instance.index, + GuestCall { + thread, + kind: GuestCallKind::DeliverEvent { + instance, + set: Some(set), + }, }, - }), + ), }; state.push_high_priority(item); } @@ -5115,6 +5186,48 @@ impl ConcurrentState { } } + fn promote_instance_local_thread_work_item( + &mut self, + current_instance: RuntimeComponentInstanceIndex, + ) -> bool { + self.promote_work_items_matching(|item: &WorkItem| match item { + WorkItem::ResumeThread(instance, _) | WorkItem::GuestCall(instance, _) => { + *instance == current_instance + } + _ => false, + }) + } + + fn promote_thread_work_item(&mut self, thread: QualifiedThreadId) -> bool { + self.promote_work_items_matching(|item: &WorkItem| match item { + WorkItem::ResumeThread(_, t) | WorkItem::GuestCall(_, GuestCall { thread: t, .. }) => { + *t == thread + } + _ => false, + }) + } + + fn promote_work_items_matching(&mut self, mut predicate: F) -> bool + where + F: FnMut(&WorkItem) -> bool, + { + // If there's a high-priority work item to resume the current guest thread, + // we don't need to promote anything, but we return true to indicate that + // work is pending for the current instance. + if self.high_priority.iter().any(&mut predicate) { + true + } + // Otherwise, look for a low-priority work item that matches the current + // instance and promote it to high-priority. + else if let Some(idx) = self.low_priority.iter().position(&mut predicate) { + let item = self.low_priority.remove(idx).unwrap(); + self.push_high_priority(item); + true + } else { + false + } + } + /// Implements the `context.get` intrinsic. pub(crate) fn context_get(&mut self, slot: u32) -> Result { let thread = self.guest_thread.unwrap(); diff --git a/crates/wasmtime/src/runtime/vm/component/libcalls.rs b/crates/wasmtime/src/runtime/vm/component/libcalls.rs index e8ee548e192a..7c61af164609 100644 --- a/crates/wasmtime/src/runtime/vm/component/libcalls.rs +++ b/crates/wasmtime/src/runtime/vm/component/libcalls.rs @@ -7,7 +7,7 @@ use crate::prelude::*; #[cfg(feature = "component-model-async")] use crate::runtime::component::RuntimeInstance; #[cfg(feature = "component-model-async")] -use crate::runtime::component::concurrent::ResourcePair; +use crate::runtime::component::concurrent::{ResourcePair, SuspensionTarget}; use crate::runtime::vm::component::{ComponentInstance, VMComponentContext}; use crate::runtime::vm::{HostResultHasUnwindSentinel, VMStore, VmSafe}; use core::cell::Cell; @@ -839,7 +839,7 @@ fn thread_yield( RuntimeComponentInstanceIndex::from_u32(caller_instance), cancellable != 0, true, - None, + SuspensionTarget::None, ) .map(|r| r == WaitResult::Cancelled) } @@ -1422,7 +1422,7 @@ fn thread_new_indirect( } #[cfg(feature = "component-model-async")] -fn thread_switch_to( +fn thread_suspend_to_suspended( store: &mut dyn VMStore, instance: Instance, caller: u32, @@ -1435,7 +1435,26 @@ fn thread_switch_to( RuntimeComponentInstanceIndex::from_u32(caller), cancellable != 0, false, - Some(thread_idx), + SuspensionTarget::SomeSuspended(thread_idx), + ) + .map(|r| r == WaitResult::Cancelled) +} + +#[cfg(feature = "component-model-async")] +fn thread_suspend_to( + store: &mut dyn VMStore, + instance: Instance, + caller: u32, + cancellable: u8, + thread_idx: u32, +) -> Result { + instance + .suspension_intrinsic( + store, + RuntimeComponentInstanceIndex::from_u32(caller), + cancellable != 0, + false, + SuspensionTarget::Some(thread_idx), ) .map(|r| r == WaitResult::Cancelled) } @@ -1453,28 +1472,29 @@ fn thread_suspend( RuntimeComponentInstanceIndex::from_u32(caller), cancellable != 0, false, - None, + SuspensionTarget::None, ) .map(|r| r == WaitResult::Cancelled) } #[cfg(feature = "component-model-async")] -fn thread_resume_later( +fn thread_unsuspend( store: &mut dyn VMStore, instance: Instance, caller_instance: u32, thread_idx: u32, ) -> Result<()> { - instance.resume_suspended_thread( + instance.resume_thread( store, RuntimeComponentInstanceIndex::from_u32(caller_instance), thread_idx, false, + false, ) } #[cfg(feature = "component-model-async")] -fn thread_yield_to( +fn thread_yield_to_suspended( store: &mut dyn VMStore, instance: Instance, caller_instance: u32, @@ -1487,7 +1507,7 @@ fn thread_yield_to( RuntimeComponentInstanceIndex::from_u32(caller_instance), cancellable != 0, true, - Some(thread_idx), + SuspensionTarget::SomeSuspended(thread_idx), ) .map(|r| r == WaitResult::Cancelled) } diff --git a/crates/wiggle/.DS_Store b/crates/wiggle/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..f3365793c44c98c188f4974af7347d91b793044c GIT binary patch literal 6148 zcmeHKy-EW?5T4Bs1Wl2`La@0Pu!ybAC7gwIv{#dmfH^OiSlJv{SlIXow)y~qg@Pa` zmOg_IU}@<$yUS&lyGU$AWCnJ>y`7nx@4n-9Z;42?PkK$F1`*ZJ7%NNY3XJ{Sa#pf4 zD?p|1aZLL(rT%Ep?Bt?lLKF}M{+a^(?bc{OeL6yOzTa*Vk2P6!c3u<{CsA}TN)Fg} zeY08rxOi?A$MqJ98xNbEtfpC6suW{A>4H_lD@x|2okvu1ye^lu*6rQl3wYz@p)7P2Dt^4qlX<+l>WL7ip_3K@6y*jU*s5zx|8e%k}v3@5LpTXhe zyI7ag=S#+E?!8@>i^Ti9FPV2Wl|5o8 zlaBeo#)TGBgC?Dn`9&aQD=T|KQMx+rALwvWp+V_I0a3tLplmK1y#H^_KmYqlawQ6g z0{=<@Rf#%L8;@l7*4)GKUK^n8p|NpXYEY-3v)i#A@K(HvrVYM;2f)x`Y7jFp`4P}E KNGA&Xssdjn{j=Ku literal 0 HcmV?d00001 diff --git a/crates/wit-bindgen/src/lib.rs b/crates/wit-bindgen/src/lib.rs index 88a614eff236..d9d3417f364a 100644 --- a/crates/wit-bindgen/src/lib.rs +++ b/crates/wit-bindgen/src/lib.rs @@ -12,6 +12,7 @@ use heck::*; use indexmap::{IndexMap, IndexSet}; use std::collections::{BTreeMap, BTreeSet, HashMap, HashSet}; use std::fmt::Write as _; +use std::hash::RandomState; use std::io::{Read, Write}; use std::mem; use std::process::{Command, Stdio}; @@ -75,7 +76,7 @@ struct Wasmtime { sizes: SizeAlign, interface_names: HashMap, interface_last_seen_as_import: HashMap, - trappable_errors: IndexMap, + trappable_errors: IndexMap, // Track the with options that were used. Remapped interfaces provided via `with` // are required to be used. used_with_opts: HashSet, @@ -637,7 +638,7 @@ pub fn new<_T>( uwriteln!(generator.src, "}}"); // end `impl {struct_name}Indices` uwriteln!(generator.src, "impl {struct_name} {{"); - let mut resource_methods = IndexMap::new(); + let mut resource_methods = IndexMap::with_hasher(RandomState::new()); for (_, func) in iface.functions.iter() { match func.kind.resource() { @@ -1628,7 +1629,7 @@ impl<'a> InterfaceGenerator<'a> { TypeDefKind::Handle(handle) => self.type_handle(id, name, handle, &ty.docs), TypeDefKind::Resource => self.type_resource(id, name, ty, &ty.docs), TypeDefKind::Unknown => unreachable!(), - TypeDefKind::FixedSizeList(..) => todo!(), + TypeDefKind::FixedLengthList(..) => todo!(), TypeDefKind::Map(..) => todo!(), } } @@ -2259,10 +2260,10 @@ impl<'a> InterfaceGenerator<'a> { let owner = TypeOwner::Interface(id); let wt = self.generator.wasmtime_path(); - let mut required_conversion_traits = IndexSet::new(); + let mut required_conversion_traits = IndexSet::with_hasher(RandomState::new()); let extra_functions = { let mut functions = Vec::new(); - let mut errors_converted = IndexMap::new(); + let mut errors_converted = IndexMap::with_hasher(RandomState::new()); let mut my_error_types = iface .types .iter() @@ -3449,7 +3450,7 @@ fn type_contains_lists(ty: Type, resolve: &Resolve) -> bool { .any(|case| option_type_contains_lists(case.ty, resolve)), TypeDefKind::Type(ty) => type_contains_lists(*ty, resolve), TypeDefKind::List(_) => true, - TypeDefKind::FixedSizeList(..) => todo!(), + TypeDefKind::FixedLengthList(..) => todo!(), TypeDefKind::Map(..) => todo!(), }, diff --git a/crates/wit-bindgen/src/rust.rs b/crates/wit-bindgen/src/rust.rs index bc9e39fc6770..7b0c8af468ea 100644 --- a/crates/wit-bindgen/src/rust.rs +++ b/crates/wit-bindgen/src/rust.rs @@ -132,7 +132,7 @@ pub trait RustGenerator<'a> { TypeDefKind::Type(Type::String) => true, TypeDefKind::Type(_) => false, TypeDefKind::Unknown => unreachable!(), - TypeDefKind::FixedSizeList(..) => todo!(), + TypeDefKind::FixedLengthList(..) => todo!(), TypeDefKind::Map(..) => todo!(), } } @@ -189,7 +189,7 @@ pub trait RustGenerator<'a> { TypeDefKind::Type(t) => self.ty(t, mode), TypeDefKind::Unknown => unreachable!(), - TypeDefKind::FixedSizeList(..) => todo!(), + TypeDefKind::FixedLengthList(..) => todo!(), TypeDefKind::Map(..) => todo!(), } } diff --git a/crates/wit-bindgen/src/types.rs b/crates/wit-bindgen/src/types.rs index 484c525a7592..bb3395fa02a6 100644 --- a/crates/wit-bindgen/src/types.rs +++ b/crates/wit-bindgen/src/types.rs @@ -157,7 +157,7 @@ impl Types { TypeDefKind::Handle(_) => info.has_handle = true, TypeDefKind::Resource => {} TypeDefKind::Unknown => unreachable!(), - TypeDefKind::FixedSizeList(..) => todo!(), + TypeDefKind::FixedLengthList(..) => todo!(), TypeDefKind::Map(..) => todo!(), } self.type_info.insert(ty, info); diff --git a/crates/wizer/.DS_Store b/crates/wizer/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..f96c35cb0c0d113ff05a5cf18e460139edad6e42 GIT binary patch literal 6148 zcmeHKJxc>I7=B|2A8mIa`Y zb2O<()z)dLQtLQu-{2ka4*WF-_}$IYDxK09U6Jwrw!2E|%A?C@cgp2zt5Zc!Er-q$xJt6DK&?Q|^&C(&B&PP3F z{{HgD?E9@;uX>!B*X_0PP04)IcvG-0QID<7!5eZKy=LCKL2};~WAyaX8CHH#K!P6& zoY@??yh2}l2fPE`fy4pcA3_wyNMo!}ZXKxPCjc-&vkY9zJqj3d12EDUD?|%IsG&eL zROn9(p@yS9)VxSztWXUnAv0qhomuEFl;I93LP;kPDfG2>z&l_&kWoJieEx4w{{FWI z`Cr}v@4&xuKm_GVc?-9s&sOK=_^b_4j!-z57b}!QQ0e1XUhq*|M3I5MkS~Cd##kX* Q5dM#Vw82;2fnRmt6My>OkN^Mx literal 0 HcmV?d00001 From 911c90019ecec37d73dd92c7d1d319f7c3897032 Mon Sep 17 00:00:00 2001 From: Sy Brand Date: Thu, 29 Jan 2026 15:47:33 +0000 Subject: [PATCH 2/2] Remove ds_store --- crates/.DS_Store | Bin 14340 -> 0 bytes crates/c-api/.DS_Store | Bin 6148 -> 0 bytes crates/cache/.DS_Store | Bin 6148 -> 0 bytes crates/component-macro/.DS_Store | Bin 6148 -> 0 bytes crates/core/.DS_Store | Bin 6148 -> 0 bytes crates/cranelift/.DS_Store | Bin 6148 -> 0 bytes crates/environ/.DS_Store | Bin 6148 -> 0 bytes crates/fuzzing/.DS_Store | Bin 6148 -> 0 bytes crates/jit-icache-coherence/.DS_Store | Bin 6148 -> 0 bytes crates/misc/.DS_Store | Bin 6148 -> 0 bytes crates/test-macros/.DS_Store | Bin 6148 -> 0 bytes crates/test-programs/.DS_Store | Bin 6148 -> 0 bytes crates/wasi-common/.DS_Store | Bin 6148 -> 0 bytes crates/wasi-config/.DS_Store | Bin 6148 -> 0 bytes crates/wasi-http/.DS_Store | Bin 6148 -> 0 bytes crates/wasi-io/.DS_Store | Bin 6148 -> 0 bytes crates/wasi-keyvalue/.DS_Store | Bin 6148 -> 0 bytes crates/wasi-nn/.DS_Store | Bin 6148 -> 0 bytes .../wasi-preview1-component-adapter/.DS_Store | Bin 6148 -> 0 bytes crates/wasi-tls-nativetls/.DS_Store | Bin 6148 -> 0 bytes crates/wasi-tls-openssl/.DS_Store | Bin 6148 -> 0 bytes crates/wasi-tls/.DS_Store | Bin 6148 -> 0 bytes crates/wasi/.DS_Store | Bin 6148 -> 0 bytes crates/wasmtime/.DS_Store | Bin 6148 -> 0 bytes crates/wiggle/.DS_Store | Bin 6148 -> 0 bytes crates/wizer/.DS_Store | Bin 6148 -> 0 bytes 26 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 crates/.DS_Store delete mode 100644 crates/c-api/.DS_Store delete mode 100644 crates/cache/.DS_Store delete mode 100644 crates/component-macro/.DS_Store delete mode 100644 crates/core/.DS_Store delete mode 100644 crates/cranelift/.DS_Store delete mode 100644 crates/environ/.DS_Store delete mode 100644 crates/fuzzing/.DS_Store delete mode 100644 crates/jit-icache-coherence/.DS_Store delete mode 100644 crates/misc/.DS_Store delete mode 100644 crates/test-macros/.DS_Store delete mode 100644 crates/test-programs/.DS_Store delete mode 100644 crates/wasi-common/.DS_Store delete mode 100644 crates/wasi-config/.DS_Store delete mode 100644 crates/wasi-http/.DS_Store delete mode 100644 crates/wasi-io/.DS_Store delete mode 100644 crates/wasi-keyvalue/.DS_Store delete mode 100644 crates/wasi-nn/.DS_Store delete mode 100644 crates/wasi-preview1-component-adapter/.DS_Store delete mode 100644 crates/wasi-tls-nativetls/.DS_Store delete mode 100644 crates/wasi-tls-openssl/.DS_Store delete mode 100644 crates/wasi-tls/.DS_Store delete mode 100644 crates/wasi/.DS_Store delete mode 100644 crates/wasmtime/.DS_Store delete mode 100644 crates/wiggle/.DS_Store delete mode 100644 crates/wizer/.DS_Store diff --git a/crates/.DS_Store b/crates/.DS_Store deleted file mode 100644 index 3287308d20675d2df8049c201b0170322500485a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14340 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 diff --git a/crates/cranelift/.DS_Store b/crates/cranelift/.DS_Store deleted file mode 100644 index 93ad332fe0dcf0a160276fd96e445903e0f328e3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHKJ5Iwu5S<|@EKwwMlzRkn0~47Oq@Y4VNhBx|IRa5ea>ofc1SdhNpwXxR6`%rCfC~I; z1<s KG%D~L3cLgU%_u_v diff --git a/crates/environ/.DS_Store b/crates/environ/.DS_Store deleted file mode 100644 index 934d9b54cadc492dc97bbbd8317d595c8a5f6fff..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHKO-jQ+6n@ioQL$phjqY*;Be;(xo}d?~ZT(p^rdTSaAZG8{l^elRcmnYN;src_ zNAP>^4NXEKxGEy=!OS;#Klvu#giMBrTyH)OiMmA8Mq_MjpsO*CbE{axdpbZT_n6Xz z&S*Bd2>X?6bNodGcGf#&SU@X`Q`Ia=CP_x(wx68UgkYu-X_iHnnoqo zoyRnf6gfZM2e)qz!s+XZjMZp~Z#QE;GgH76Fa_4F0QPLQ_NJosrhqA63ak|1??Zsb z7|WtaE=lb_H31x$f|rGRV2{kVrm@_TFL;drkN s&<1F1oR=xCN-&VE7`eO^@1cpoAMgMedCU~yf!U9M$Y7l*uvP`W0ipG1-2eap diff --git a/crates/fuzzing/.DS_Store b/crates/fuzzing/.DS_Store deleted file mode 100644 index 0223ed4eafb0f3a084f5c05d3b5fe7ffa6b1bf37..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHKy-EW?5S}%O2DL~d2sZZu0b^k&oZ<8Z@&e{ZG?4Q`5-}FSHCA?lk6~gV)g$9{{-EVJZXJ_U+ZugdmRQ0%3Au1735sfjwh;D+gom)oc ztcINxuTiNrlenw3^O@PA5C(*SSz~~|-5m9)N6pTG`~6t|0_ zkK3-bHL~7pZ7zRaxYq8Wv+BYF+^9eU+DFU*^}U$1h8@YZx^bWHMsXegI2p&DJj07m z0momV6RIPAOl9<4D$K z*17&1>TlD)udTE@wzzq}4o}}c&g~o3er`@#s~6Ak%`ru0j{#*;DlW}lYLbyKAPoF5 z1H3;3XpEu7)S%uv(CI4xFb}mBjQN*>eFBT2#nd1y5M^9}##PxXhBEHZ2Xj!!|snDSG!hkT~GmtZnB|iUmzQ6zbPVyuS2m}9$0hNzxQ57ZG zvo%v3pS1zn9vTbJOATrlboMyb13rpZ(X_x8@BkQEObtQZ47Ev$m1t5@&K1&84$*RgTp(;Bks{GXpcE8H+n^{1fGZ(R!37X!;Q2$C zXayw&*plb%*nTtGSFG1W#FOn}Of({*3NA=HS^6e<@t&P{WC&zAV?3R=>rJojr+{z= zbW1lhUtO2{^QW)Ox~=PG)i#J!@5|=?U+e4Y%EXz}8poN73p+G1Q z3WNgxS^@NIvFg+?)=(f62n7xb$oC<^1+!yksGkljIsyRYH(m|TI!geP1c2GGGeiW& zMgY#3`O5DFYCFtF`N`u`>ToB98k z6uVF$6!=pL@UWiN6TFi5*51oWuTAh7{L@gY81GN=nBdz$Xs7vyUe0J;%m5#X5 Pf$<|Cx`c%SzoEbf_mU|8 diff --git a/crates/misc/.DS_Store b/crates/misc/.DS_Store deleted file mode 100644 index 939c48a83eadb850428df5bd589aa1e2787950f1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHKu}%Xq47INvu7aTp5@UXVp$l`U4vD=#0KFm@dgP=l1KaKV5kJ6R@C|$d&#_gg z4u%Q|A+RO;B|bY*UZnU;L_EJ=&4{K%R6+%d3Ct%V-$e&fm}d;+yhfrsx`uA(WDxC+ z-^hU6-4WH4sG%12{r;|~qX*1u+~o$h+QD|~o7tjHO`DHWOkVcOZc{5u9vvqj1SMYqm?GvEwt8IboOKn0^=ub7_> znA`#Y&lamr4Py-jLV-}=pn!ZI5?nAl_J;cDz@j4nP=4dp@T{{0Fi8NI9eYDW zU~E*NQQ1cfHag#}2SXmnz|8Rz)T>=O#>?T9BWC(eekh616$u>vF8PNe_O;or>v z$E4VW0-?a4Qh>+xqMqTEytfWsPI_&EFX5ktS}n(-tr)1S7#nHDXGL9-XXLYEZ>V&{ Rl@5#_0nsHa6!;AVJ^++cDKP*5 diff --git a/crates/test-programs/.DS_Store b/crates/test-programs/.DS_Store deleted file mode 100644 index ba1c603e7928801f92a497d3ac0386c787d64ea7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHKF;2r!4E1k2q+;p7z?dua2B8WQV=qvWh=PhUmU+-Uz`#iJS z^Xc*C7%&Em zfqiEHHJc?k5VX-4Fb0f)ngRYkgiyvvu@dy34h+5p0FJQi1#|8tI3`q#6e~ekAWlMo z66&IYdY4hPUv(pa6`Rv#~^zP&$K^u($W1!8zP#z~-|4;h+|8|f) z83V?^UNPWC@jRa4m9(~YUXE*R2wgx~*sl_-Loo5B7`|MJkDy+#9`XbjDOQ45f!L3L Mr@;ne;7=L&1=LznOaK4? diff --git a/crates/wasi-common/.DS_Store b/crates/wasi-common/.DS_Store deleted file mode 100644 index b72b2930bf599c5623beb316f30ba93ab8b08945..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHKy-EW?5S~p=I59;^%Y6fhjqMpOkj5%65RwxWa$YbIZG;0G(b~orP&-?}UVIN9 zz~07hc9+X8ceWB_24=s_{Orel2e%m_QvLI+N7N;v7|z(*#L{4#XRleyMLIymXY@wX zBA=URyH+iMbyR@gU7HqkM$_4m|Nd?tSDCy>)5)xuAQC?xWLF>e@B4l>tFkvcd!4U4 zKRZA6PK{pBMjN!GLvSu>5pdG*EzJ77-=|NnpS$K{uRkwV+|3mMKaH6`q6<0!`(?nc zh7W$u=N?>F+*Pm7+>{S^mEmP>F;PGi5Czsj0o>Va@s>qdMFCMj6sQ#7?}LUjCJsxB z=F@@2i~zt0VPn|yEWth6VdAi~hzv~GR-kQFZp2Ww9dYgI5{IQl+fK?b;~dAV+=QYG zJL1}ulS(YgDhh}Kp#pA3@ACaW__!wmKG6#$sYkDgDj%JpDOSJyj5jt diff --git a/crates/wasi-config/.DS_Store b/crates/wasi-config/.DS_Store deleted file mode 100644 index 7f3092cbfedfef14a7ee17d540e49846ecec5554..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHKy-EW?5S~q?~qqCrQK~5-yk%5fQGku@ig(A4UXg8yg=% z@CE#4XSv(uw3Q$;F#Fxj&wlK8$L%c?m&`MeLa zv(s=^i#A%KoQ}bn(>&%}$>MCt`*Bn92L02l;y&0fxr2(BpWkz=_lnLakGYp$t4zqd zb@%r5e(qP~`a;fnHs;%8J~dT96;K5hO#$rLZ0$8c9aRBUKouwz;O~QlGbSDjLHFsv z;En*m7Q)VO?f$WVmIJ`VVh``ntqpAt>!+95d$e%*LNkjAKXK zx^gm!ppL45DiABsl-n-v|GU4R|KldTQw3Ckf2DwFrGvDOCHcLzwm9BvE&K@1#&v~Y k*@6qV6{D87;tjYn#4TR{6OV-;A~5|Ca5Cti3jC=8-&T)cp8x;= diff --git a/crates/wasi-http/.DS_Store b/crates/wasi-http/.DS_Store deleted file mode 100644 index 9f54cf7d9dbd79b92090f2ac7de9c760337794e6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHKO-jQ+6n>Mo5Vec0#AU9~ZrsKaPtXfU8_{AzijBAuvUjWC6+D6`5a}gccz_V%E5;;pBXn2j`WL6eS zYwfk7)v%8Y@Vo2Kif(DPxboj$r)WGynPt;OIfW&@dCDI?p5M=WZ~lvSdF`*dK^pa_ zqD$1QXcg3?^*Z$Wbyvr)Z(k!@*UK-;ruOcLpuXYn9Q(beIaNXJ=y23{{JJlnr~S>N z+po>@Yqq^Xy(q<^D$0N|pbYFC1L)Z-@sXg8%78MU3~U+T|3d<0OdZyO_Sb>IUIBnz zn5|%L&se~O4Zzf4EeH$5NGecLjk{tPNrydgajC;vP}0fR%2>x$HtvQZCp_2_8%`z_ z)KM8w20{ip@;KoBfBy6RKTOgmWk4DDR}7eLHp#}=lIyLl&2g_ypchaUj;jT?DVW$+ fj96~PCr~S}Cp-bB4r@VJAbJq6H0YoV{3!$9ItgKm diff --git a/crates/wasi-io/.DS_Store b/crates/wasi-io/.DS_Store deleted file mode 100644 index 634eff0eb5554dd747bb216d725f9169addffb3a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHKOG?B*5Up}%5m8~5f}388o7oMn;u!bBTtMc73KKH;K~RM3U3(92As)jUcm!W{ zm6J4+wTM(f_v^0L)s;L*cZ!I3d_Nx&4Tva16J!~5n7BKsEn6%k%O1nYtSVO>Tl`&@ zJbRCB>4s*@%l7j>?KMnU6~%N}P2tH74j0cKukR;qcD`nZN2iY|ySi%c`i3y%d!TE& zOY+6vRz=Ny>|s%0aswH zfSeBjO)xjC730x?E|vhmKHSkTmRdq$f?;l0D}sTsh5|K|t;Aprhd?f{v!|t@y-?a1qHqV;ub&> diff --git a/crates/wasi-keyvalue/.DS_Store b/crates/wasi-keyvalue/.DS_Store deleted file mode 100644 index ea946049a6776989ff8d7c4666aafef192c44cdb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHKJ5Iwu5S>keFoGf_13@cA8lwV9&K^U0!|Ad)Fs?D?ZgLA+v|LR zdjKE7nccnIE{R|zhs?mvm+Z{!mwb?&ECAKK>o$NofRF}butKiFIL@PFOLk_HQ0X-W z=%a^W|FV&kvSmUP5Cs-Z0seMF`ew(tKnmyk?PTeIA6D&7-m7xbtkr7wvo^=}-=1El z2Ome(dEH;-4XzqV!MR5(0W}P9iw^H5vj|joI*+)|@OW~#_Vu8j!PceOoVgrz`Jg7u zw~P_*UgY%-R&cJry!ug>w|7(UI`uAhb%w{k5ix%a_qfK$dtYqj^N7oPnmo@mw{gf@?lWQwq5$=5ws6&;cu_zU5CsYacz=j! zFvb>hgL>;Ar;h-H0ZnV8YrV%4Mm#|nTg(m844E>egr-#4BZe~NG#}Z#*kW$bltXD| zTE{XgdqPpR!>CB7L&XNgivps6uRzV**17*5|9t-Ui{wre5C#5~0xD=FttP#a?X9Jk w<6axlIH$qJdAUJdLe92heZj4Gn}#-uMSMXRTg(m844M20Xc@$b0)MK&H`33dV*mgE diff --git a/crates/wasi-preview1-component-adapter/.DS_Store b/crates/wasi-preview1-component-adapter/.DS_Store deleted file mode 100644 index 57fdcd35d3aa235374021a73c8624f8a12e129a9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHKOG*Pl5Un;r1{Ddo(2X!2AYeSf7{(I>_xbsQ2@?_(;%YXY!HtJ-D~Mb16mDGR z3Zk#Nnq=BZL=l2WRp@>*-Bn#xFLc*55t;f$w?E?`i)h*4Id}bcy`B$a>&sw*5X!C!fPkHp!u| zRxh1K`<0#_SCiu^(GYQUylBk$VLFqK;c)ZnWqfUUbar{q#aYjvoZQP`0NI0uV;Xs0 zY3&wXz4^TF=bK6XpLC|V&(rbZAp3uC?kbCC05zK>SQXS>8Bhk4fe8bAK7?qDk;6>T z9v$dxApw>#Yz5E!Nx?Ru!^mMKh#80xQ=pg{cf~Mbj`7gxMGiATF()G>jEwVa+zrK8 z?^r*y>SQ88?Uey#z-OQ&uNAKU2lMa$zLCBu1Ioa^V!)K+MqEcquC^AE<60Y{HPKjD nFB7yT=v+Cr4_u13(5zrC-Q{ocpAU6C!eht4W`zM??i0qhqB-*xc&cN|V{?c#ZyWTvzj!C4R4o z_uioeUD9}Vp6`F>cm$DzVk2X~82DohxNbQt2l%K| zTfclB*IJKuhQ`A4A}bK+Qi_36iZS4GWM7=>_pHMo5=KQ{h3yg!w2OccVx2MY0}Q+a D`vOI? diff --git a/crates/wasi-tls-openssl/.DS_Store b/crates/wasi-tls-openssl/.DS_Store deleted file mode 100644 index 4972ba8fe533f9a5d76180c83ec263e9bba6a133..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHKy-ou$40h-tom7U7jClZ-Zj7Nio}ddOYRk{i(^a$`D`h}pVD1a>GKi5k;Su<3 zhc+ipjHm)zN1*oDh*4t!G1`0TGpGjE7%F%&No&dlCW)bLe#|3&e07Js42n)n%C{ROPdSW;Yhux=nAz@V1aB`9v z>!i$Ij~6G|VfQkfTu`*$7%&Ff4D@t3;QD`wU#9bs-wv^nF<=b*F$P>wjjItpD%I9+ zpU1VCMF^?x}K&)Ln2DxjJ+)kD~$8(9qakX4$$yD(($C6 zFFNZqu)YfLv+L86u4pnl51(K0*=FWto)@#SKqUFvJ-dCmdp-)Y(_gZSi}0@ZD5DLk z=oFk4Eo08jw>TT}?xziJP(LqQ?$s+|e*T?fzc+MARm^?(&}Ks3kJrbi_XEFQR~K@2 zvoW9k8CY;NRX`P3I|b0Q*^+HR9aRBUKow{d;P-=tGiDxZLHFvw;En*m0m9BOci&h* z%K>2Ku@*!GW~3A-rN$pIjFcm8{kqI!Ehyz=95e3YnTS5T0o(L=^1N%3$Vohk;Kh^A;LRrx@#NX7 z;A{BJ?vn1(=uwKy!0eaI?CeLrKqf;(+&vq0h}uMyzy%wtSZYl2;tSUBk#!);8J*s+ z$R{=`F}3AaK;Bc6rgTcf@nQJ>zAopPyvVY_xELUk+-#j(z23jc%6= zXoY5U0L~drBTjmIkFz1~$Mw_m=Z@tK>hogGUB4sZ=WXF{(K#K1{UT!L{f96Ya^K!n z+*NJJT$hh|`@*ZH3aA3Az_KWSo-LNFIn-4ZPz6+hN&)#k7`R~Sv2vTO6{MDwwy+^ZFf#K3Y%l>EPk>?;l>*9yjO9Z~rKNu%DhgzwcDU%7)a+tZL)#W;&9d^ZU-p>C>gm+2{4+ z>5THDnR?qVTyJ5*?-wS|uCk-)x<}{hmA4D2o61kuo*j{?Pq$p(#27FJjDb%E(6d>} zONwTV0b{@zm@vTKhXBeLdQ24M(*Yw#0ALAj5nRi^6)<22F!Y!x!UJ)d3e;5Rj~GtV z;SYRV=rK{$baGM|&+(O=KcP6O4u2rw=-=F`pNp@!p7z6)` z0auC|Q5{S2y*0Nu?zI7Q56Z%EiQ*&$7t)Fm%dL0?DguAN7r@YCq6iPfeguRDGseKL GGVlSq&48Bx diff --git a/crates/wiggle/.DS_Store b/crates/wiggle/.DS_Store deleted file mode 100644 index f3365793c44c98c188f4974af7347d91b793044c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHKy-EW?5T4Bs1Wl2`La@0Pu!ybAC7gwIv{#dmfH^OiSlJv{SlIXow)y~qg@Pa` zmOg_IU}@<$yUS&lyGU$AWCnJ>y`7nx@4n-9Z;42?PkK$F1`*ZJ7%NNY3XJ{Sa#pf4 zD?p|1aZLL(rT%Ep?Bt?lLKF}M{+a^(?bc{OeL6yOzTa*Vk2P6!c3u<{CsA}TN)Fg} zeY08rxOi?A$MqJ98xNbEtfpC6suW{A>4H_lD@x|2okvu1ye^lu*6rQl3wYz@p)7P2Dt^4qlX<+l>WL7ip_3K@6y*jU*s5zx|8e%k}v3@5LpTXhe zyI7ag=S#+E?!8@>i^Ti9FPV2Wl|5o8 zlaBeo#)TGBgC?Dn`9&aQD=T|KQMx+rALwvWp+V_I0a3tLplmK1y#H^_KmYqlawQ6g z0{=<@Rf#%L8;@l7*4)GKUK^n8p|NpXYEY-3v)i#A@K(HvrVYM;2f)x`Y7jFp`4P}E KNGA&Xssdjn{j=Ku diff --git a/crates/wizer/.DS_Store b/crates/wizer/.DS_Store deleted file mode 100644 index f96c35cb0c0d113ff05a5cf18e460139edad6e42..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHKJxc>I7=B|2A8mIa`Y zb2O<()z)dLQtLQu-{2ka4*WF-_}$IYDxK09U6Jwrw!2E|%A?C@cgp2zt5Zc!Er-q$xJt6DK&?Q|^&C(&B&PP3F z{{HgD?E9@;uX>!B*X_0PP04)IcvG-0QID<7!5eZKy=LCKL2};~WAyaX8CHH#K!P6& zoY@??yh2}l2fPE`fy4pcA3_wyNMo!}ZXKxPCjc-&vkY9zJqj3d12EDUD?|%IsG&eL zROn9(p@yS9)VxSztWXUnAv0qhomuEFl;I93LP;kPDfG2>z&l_&kWoJieEx4w{{FWI z`Cr}v@4&xuKm_GVc?-9s&sOK=_^b_4j!-z57b}!QQ0e1XUhq*|M3I5MkS~Cd##kX* Q5dM#Vw82;2fnRmt6My>OkN^Mx