Skip to content

Commit 04cef2f

Browse files
authored
Update wasm-tools dependencies (#1036)
* Update wasm-tools dependencies This notably updates to handle bytecodealliance/wasm-tools#1711 but this is done in a way that is not intended to replace #1035 but instead makes the update "as easy as possible" by just adding calls to `.{size,align}_wasm32()` where needed. Full support is expected to land in #1035. * More sizing updates
1 parent dd41e41 commit 04cef2f

File tree

8 files changed

+257
-188
lines changed

8 files changed

+257
-188
lines changed

Cargo.lock

Lines changed: 186 additions & 141 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -32,11 +32,11 @@ indexmap = "2.0.0"
3232
prettyplease = "0.2.20"
3333
syn = { version = "2.0", features = ["printing"] }
3434

35-
wasmparser = "0.215.0"
36-
wasm-encoder = "0.215.0"
37-
wasm-metadata = "0.215.0"
38-
wit-parser = "0.215.0"
39-
wit-component = "0.215.0"
35+
wasmparser = "0.216.0"
36+
wasm-encoder = "0.216.0"
37+
wasm-metadata = "0.216.0"
38+
wit-parser = "0.216.0"
39+
wit-component = "0.216.0"
4040

4141
wit-bindgen-core = { path = 'crates/core', version = '0.30.0' }
4242
wit-bindgen-c = { path = 'crates/c', version = '0.30.0' }

crates/c/src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3028,7 +3028,7 @@ impl Bindgen for FunctionBindgen<'_, '_> {
30283028
uwriteln!(self.src, "uint8_t *{ptr} = {};", operands[0]);
30293029
let i = self.locals.tmp("i");
30303030
uwriteln!(self.src, "for (size_t {i} = 0; {i} < {len}; {i}++) {{");
3031-
let size = self.gen.gen.sizes.size(element);
3031+
let size = self.gen.gen.sizes.size(element).size_wasm32();
30323032
uwriteln!(self.src, "uint8_t *base = {ptr} + {i} * {size};");
30333033
uwriteln!(self.src, "(void) base;");
30343034
uwrite!(self.src, "{body}");

crates/core/src/abi.rs

Lines changed: 46 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -800,31 +800,33 @@ impl<'a, B: Bindgen> Generator<'a, B> {
800800
// ... otherwise if parameters are indirect space is
801801
// allocated from them and each argument is lowered
802802
// individually into memory.
803-
let (size, align) = self
803+
let info = self
804804
.bindgen
805805
.sizes()
806806
.record(func.params.iter().map(|t| &t.1));
807807
let ptr = match self.variant {
808808
// When a wasm module calls an import it will provide
809809
// space that isn't explicitly deallocated.
810-
AbiVariant::GuestImport => self.bindgen.return_pointer(size, align),
810+
AbiVariant::GuestImport => self
811+
.bindgen
812+
.return_pointer(info.size.size_wasm32(), info.align.align_wasm32()),
811813
// When calling a wasm module from the outside, though,
812814
// malloc needs to be called.
813815
AbiVariant::GuestExport => {
814816
self.emit(&Instruction::Malloc {
815817
realloc: "cabi_realloc",
816-
size,
817-
align,
818+
size: info.size.size_wasm32(),
819+
align: info.align.align_wasm32(),
818820
});
819821
self.stack.pop().unwrap()
820822
}
821823
};
822824
let mut offset = 0usize;
823825
for (nth, (_, ty)) in func.params.iter().enumerate() {
824826
self.emit(&Instruction::GetArg { nth });
825-
offset = align_to(offset, self.bindgen.sizes().align(ty));
827+
offset = align_to(offset, self.bindgen.sizes().align(ty).align_wasm32());
826828
self.write_to_memory(ty, ptr.clone(), offset as i32);
827-
offset += self.bindgen.sizes().size(ty);
829+
offset += self.bindgen.sizes().size(ty).size_wasm32();
828830
}
829831

830832
self.stack.push(ptr);
@@ -833,8 +835,10 @@ impl<'a, B: Bindgen> Generator<'a, B> {
833835
// If necessary we may need to prepare a return pointer for
834836
// this ABI.
835837
if self.variant == AbiVariant::GuestImport && sig.retptr {
836-
let (size, align) = self.bindgen.sizes().params(func.results.iter_types());
837-
let ptr = self.bindgen.return_pointer(size, align);
838+
let info = self.bindgen.sizes().params(func.results.iter_types());
839+
let ptr = self
840+
.bindgen
841+
.return_pointer(info.size.size_wasm32(), info.align.align_wasm32());
838842
self.return_pointer = Some(ptr.clone());
839843
self.stack.push(ptr);
840844
}
@@ -904,9 +908,9 @@ impl<'a, B: Bindgen> Generator<'a, B> {
904908
self.emit(&Instruction::GetArg { nth: 0 });
905909
let ptr = self.stack.pop().unwrap();
906910
for (_, ty) in func.params.iter() {
907-
offset = align_to(offset, self.bindgen.sizes().align(ty));
911+
offset = align_to(offset, self.bindgen.sizes().align(ty).align_wasm32());
908912
self.read_from_memory(ty, ptr.clone(), offset as i32);
909-
offset += self.bindgen.sizes().size(ty);
913+
offset += self.bindgen.sizes().size(ty).size_wasm32();
910914
}
911915
}
912916

@@ -917,12 +921,15 @@ impl<'a, B: Bindgen> Generator<'a, B> {
917921
// it's been read by the guest we need to deallocate it.
918922
if let AbiVariant::GuestExport = self.variant {
919923
if sig.indirect_params {
920-
let (size, align) = self
924+
let info = self
921925
.bindgen
922926
.sizes()
923927
.record(func.params.iter().map(|t| &t.1));
924928
self.emit(&Instruction::GetArg { nth: 0 });
925-
self.emit(&Instruction::GuestDeallocate { size, align });
929+
self.emit(&Instruction::GuestDeallocate {
930+
size: info.size.size_wasm32(),
931+
align: info.align.align_wasm32(),
932+
});
926933
}
927934
}
928935

@@ -959,9 +966,10 @@ impl<'a, B: Bindgen> Generator<'a, B> {
959966
// (statically) and then write the result into that
960967
// memory, returning the pointer at the end.
961968
AbiVariant::GuestExport => {
962-
let (size, align) =
963-
self.bindgen.sizes().params(func.results.iter_types());
964-
let ptr = self.bindgen.return_pointer(size, align);
969+
let info = self.bindgen.sizes().params(func.results.iter_types());
970+
let ptr = self
971+
.bindgen
972+
.return_pointer(info.size.size_wasm32(), info.align.align_wasm32());
965973
self.write_params_to_memory(func.results.iter_types(), ptr.clone(), 0);
966974
self.stack.push(ptr);
967975
}
@@ -998,6 +1006,7 @@ impl<'a, B: Bindgen> Generator<'a, B> {
9981006
.sizes()
9991007
.field_offsets(func.results.iter_types())
10001008
{
1009+
let offset = offset.size_wasm32();
10011010
let offset = i32::try_from(offset).unwrap();
10021011
self.deallocate(ty, addr.clone(), offset);
10031012
}
@@ -1535,8 +1544,12 @@ impl<'a, B: Bindgen> Generator<'a, B> {
15351544
tag: Int,
15361545
cases: impl IntoIterator<Item = Option<&'b Type>> + Clone,
15371546
) {
1538-
let payload_offset =
1539-
offset + (self.bindgen.sizes().payload_offset(tag, cases.clone()) as i32);
1547+
let payload_offset = offset
1548+
+ (self
1549+
.bindgen
1550+
.sizes()
1551+
.payload_offset(tag, cases.clone())
1552+
.size_wasm32() as i32);
15401553
for (i, ty) in cases.into_iter().enumerate() {
15411554
self.push_block();
15421555
self.emit(&Instruction::VariantPayloadName);
@@ -1581,6 +1594,7 @@ impl<'a, B: Bindgen> Generator<'a, B> {
15811594
.zip(fields)
15821595
{
15831596
self.stack.push(op);
1597+
let field_offset = field_offset.size_wasm32();
15841598
self.write_to_memory(ty, addr.clone(), offset + (field_offset as i32));
15851599
}
15861600
}
@@ -1715,8 +1729,12 @@ impl<'a, B: Bindgen> Generator<'a, B> {
17151729
) {
17161730
self.stack.push(addr.clone());
17171731
self.load_intrepr(offset, tag);
1718-
let payload_offset =
1719-
offset + (self.bindgen.sizes().payload_offset(tag, cases.clone()) as i32);
1732+
let payload_offset = offset
1733+
+ (self
1734+
.bindgen
1735+
.sizes()
1736+
.payload_offset(tag, cases.clone())
1737+
.size_wasm32() as i32);
17201738
for ty in cases {
17211739
self.push_block();
17221740
if let Some(ty) = ty {
@@ -1743,7 +1761,8 @@ impl<'a, B: Bindgen> Generator<'a, B> {
17431761
offset: i32,
17441762
) {
17451763
for (field_offset, ty) in self.bindgen.sizes().field_offsets(tys).iter() {
1746-
self.read_from_memory(ty, addr.clone(), offset + (*field_offset as i32));
1764+
let field_offset = field_offset.size_wasm32();
1765+
self.read_from_memory(ty, addr.clone(), offset + (field_offset as i32));
17471766
}
17481767
}
17491768

@@ -1882,8 +1901,12 @@ impl<'a, B: Bindgen> Generator<'a, B> {
18821901
) {
18831902
self.stack.push(addr.clone());
18841903
self.load_intrepr(offset, tag);
1885-
let payload_offset =
1886-
offset + (self.bindgen.sizes().payload_offset(tag, cases.clone()) as i32);
1904+
let payload_offset = offset
1905+
+ (self
1906+
.bindgen
1907+
.sizes()
1908+
.payload_offset(tag, cases.clone())
1909+
.size_wasm32() as i32);
18871910
for ty in cases {
18881911
self.push_block();
18891912
if let Some(ty) = ty {
@@ -1895,6 +1918,7 @@ impl<'a, B: Bindgen> Generator<'a, B> {
18951918

18961919
fn deallocate_fields(&mut self, tys: &[Type], addr: B::Operand, offset: i32) {
18971920
for (field_offset, ty) in self.bindgen.sizes().field_offsets(tys) {
1921+
let field_offset = field_offset.size_wasm32();
18981922
self.deallocate(ty, addr.clone(), offset + (field_offset as i32));
18991923
}
19001924
}

crates/csharp/src/lib.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2522,7 +2522,7 @@ impl Bindgen for FunctionBindgen<'_, '_> {
25222522
let address = self.locals.tmp("address");
25232523
let buffer = self.locals.tmp("buffer");
25242524
let gc_handle = self.locals.tmp("gcHandle");
2525-
let size = self.gen.gen.sizes.size(element);
2525+
let size = self.gen.gen.sizes.size(element).size_wasm32();
25262526
uwrite!(
25272527
self.src,
25282528
"
@@ -2597,7 +2597,7 @@ impl Bindgen for FunctionBindgen<'_, '_> {
25972597
assert!(block_results.is_empty());
25982598

25992599
let list = &operands[0];
2600-
let size = self.gen.gen.sizes.size(element);
2600+
let size = self.gen.gen.sizes.size(element).size_wasm32();
26012601
let ty = self.gen.type_name_with_qualifier(element, true);
26022602
let index = self.locals.tmp("index");
26032603

@@ -2641,7 +2641,7 @@ impl Bindgen for FunctionBindgen<'_, '_> {
26412641
let length = &operands[1];
26422642
let array = self.locals.tmp("array");
26432643
let ty = self.gen.type_name_with_qualifier(element, true);
2644-
let size = self.gen.gen.sizes.size(element);
2644+
let size = self.gen.gen.sizes.size(element).size_wasm32();
26452645
let index = self.locals.tmp("index");
26462646

26472647
let result = match &block_results[..] {

crates/moonbit/src/lib.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2026,8 +2026,8 @@ impl Bindgen for FunctionBindgen<'_, '_> {
20262026
assert!(block_results.is_empty());
20272027

20282028
let op = &operands[0];
2029-
let size = self.gen.gen.sizes.size(element);
2030-
let align = self.gen.gen.sizes.align(element);
2029+
let size = self.gen.gen.sizes.size(element).size_wasm32();
2030+
let align = self.gen.gen.sizes.align(element).align_wasm32();
20312031
let address = self.locals.tmp("address");
20322032
let ty = self.gen.type_name(element, true);
20332033
let index = self.locals.tmp("index");
@@ -2067,7 +2067,7 @@ impl Bindgen for FunctionBindgen<'_, '_> {
20672067
let length = &operands[1];
20682068
let array = self.locals.tmp("array");
20692069
let ty = self.gen.type_name(element, true);
2070-
let size = self.gen.gen.sizes.size(element);
2070+
let size = self.gen.gen.sizes.size(element).size_wasm32();
20712071
// let align = self.gen.gen.sizes.align(element);
20722072
let index = self.locals.tmp("index");
20732073

@@ -2364,7 +2364,7 @@ impl Bindgen for FunctionBindgen<'_, '_> {
23642364
let address = &operands[0];
23652365
let length = &operands[1];
23662366

2367-
let size = self.gen.gen.sizes.size(element);
2367+
let size = self.gen.gen.sizes.size(element).size_wasm32();
23682368
// let align = self.gen.gen.sizes.align(element);
23692369

23702370
if !body.trim().is_empty() {

crates/rust/src/bindgen.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -715,8 +715,8 @@ impl Bindgen for FunctionBindgen<'_, '_> {
715715
operand0 = operands[0]
716716
));
717717
self.push_str(&format!("let {len} = {vec}.len();\n"));
718-
let size = self.gen.sizes.size(element);
719-
let align = self.gen.sizes.align(element);
718+
let size = self.gen.sizes.size(element).size_wasm32();
719+
let align = self.gen.sizes.align(element).align_wasm32();
720720
self.push_str(&format!(
721721
"let {layout} = {alloc}::Layout::from_size_align_unchecked({vec}.len() * {size}, {align});\n",
722722
));
@@ -746,8 +746,8 @@ impl Bindgen for FunctionBindgen<'_, '_> {
746746
Instruction::ListLift { element, .. } => {
747747
let body = self.blocks.pop().unwrap();
748748
let tmp = self.tmp();
749-
let size = self.gen.sizes.size(element);
750-
let align = self.gen.sizes.align(element);
749+
let size = self.gen.sizes.size(element).size_wasm32();
750+
let align = self.gen.sizes.align(element).align_wasm32();
751751
let len = format!("len{tmp}");
752752
let base = format!("base{tmp}");
753753
let result = format!("result{tmp}");
@@ -1038,8 +1038,8 @@ impl Bindgen for FunctionBindgen<'_, '_> {
10381038
Instruction::GuestDeallocateList { element } => {
10391039
let body = self.blocks.pop().unwrap();
10401040
let tmp = self.tmp();
1041-
let size = self.gen.sizes.size(element);
1042-
let align = self.gen.sizes.align(element);
1041+
let size = self.gen.sizes.size(element).size_wasm32();
1042+
let align = self.gen.sizes.align(element).align_wasm32();
10431043
let len = format!("len{tmp}");
10441044
let base = format!("base{tmp}");
10451045
self.push_str(&format!(

crates/teavm-java/src/lib.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1667,8 +1667,8 @@ impl Bindgen for FunctionBindgen<'_, '_> {
16671667
assert!(block_results.is_empty());
16681668

16691669
let op = &operands[0];
1670-
let size = self.gen.gen.sizes.size(element);
1671-
let align = self.gen.gen.sizes.align(element);
1670+
let size = self.gen.gen.sizes.size(element).size_wasm32();
1671+
let align = self.gen.gen.sizes.align(element).align_wasm32();
16721672
let address = self.locals.tmp("address");
16731673
let ty = self.gen.type_name(element);
16741674
let index = self.locals.tmp("index");
@@ -1708,8 +1708,8 @@ impl Bindgen for FunctionBindgen<'_, '_> {
17081708
let length = &operands[1];
17091709
let array = self.locals.tmp("array");
17101710
let ty = self.gen.type_name(element);
1711-
let size = self.gen.gen.sizes.size(element);
1712-
let align = self.gen.gen.sizes.align(element);
1711+
let size = self.gen.gen.sizes.size(element).size_wasm32();
1712+
let align = self.gen.gen.sizes.align(element).align_wasm32();
17131713
let index = self.locals.tmp("index");
17141714

17151715
let result = match &block_results[..] {
@@ -2006,8 +2006,8 @@ impl Bindgen for FunctionBindgen<'_, '_> {
20062006
let address = &operands[0];
20072007
let length = &operands[1];
20082008

2009-
let size = self.gen.gen.sizes.size(element);
2010-
let align = self.gen.gen.sizes.align(element);
2009+
let size = self.gen.gen.sizes.size(element).size_wasm32();
2010+
let align = self.gen.gen.sizes.align(element).align_wasm32();
20112011

20122012
if !body.trim().is_empty() {
20132013
let index = self.locals.tmp("index");

0 commit comments

Comments
 (0)