Stream: git-wasmtime

Topic: wasmtime / Issue #2053 wiggle: lifetime not applied to field


view this post on Zulip Wasmtime GitHub notifications bot (Jul 21 2020 at 17:21):

abrown opened Issue #2053:

While talking to @kubkon about an issue with #2050, we found that the lifetime of the Tensor struct was not being propagated downwards to the field correctly. On #2050's branch and using cd crates/wasi-common && cargo expand wasi:

9014   │         pub type TensorData<'a> = wiggle::GuestPtr<'a, [u8]>;
9015   │         pub struct Tensor<'a> {
9016   │             pub dimensions: TensorDimensions,
9017   │             pub type_: TensorType,
9018   │             pub data: TensorData,
9019   │         }

It looks like it should generate instead pub data: TensorData<'a> and pub data: TensorDimensions<'a>.

view this post on Zulip Wasmtime GitHub notifications bot (Jul 21 2020 at 17:21):

abrown labeled Issue #2053:

While talking to @kubkon about an issue with #2050, we found that the lifetime of the Tensor struct was not being propagated downwards to the field correctly. On #2050's branch and using cd crates/wasi-common && cargo expand wasi:

9014   │         pub type TensorData<'a> = wiggle::GuestPtr<'a, [u8]>;
9015   │         pub struct Tensor<'a> {
9016   │             pub dimensions: TensorDimensions,
9017   │             pub type_: TensorType,
9018   │             pub data: TensorData,
9019   │         }

It looks like it should generate instead pub data: TensorData<'a> and pub data: TensorDimensions<'a>.

view this post on Zulip Wasmtime GitHub notifications bot (Jul 21 2020 at 17:22):

abrown labeled Issue #2053:

While talking to @kubkon about an issue with #2050, we found that the lifetime of the Tensor struct was not being propagated downwards to the field correctly. On #2050's branch and using cd crates/wasi-common && cargo expand wasi:

9014   │         pub type TensorData<'a> = wiggle::GuestPtr<'a, [u8]>;
9015   │         pub struct Tensor<'a> {
9016   │             pub dimensions: TensorDimensions,
9017   │             pub type_: TensorType,
9018   │             pub data: TensorData,
9019   │         }

It looks like it should generate instead pub data: TensorData<'a> and pub data: TensorDimensions<'a>.

view this post on Zulip Wasmtime GitHub notifications bot (Jul 21 2020 at 17:22):

abrown labeled Issue #2053:

While talking to @kubkon about an issue with #2050, we found that the lifetime of the Tensor struct was not being propagated downwards to the field correctly. On #2050's branch and using cd crates/wasi-common && cargo expand wasi:

9014   │         pub type TensorData<'a> = wiggle::GuestPtr<'a, [u8]>;
9015   │         pub struct Tensor<'a> {
9016   │             pub dimensions: TensorDimensions,
9017   │             pub type_: TensorType,
9018   │             pub data: TensorData,
9019   │         }

It looks like it should generate instead pub data: TensorData<'a> and pub data: TensorDimensions<'a>.

view this post on Zulip Wasmtime GitHub notifications bot (Jul 21 2020 at 17:22):

github-actions[bot] commented on Issue #2053:

Subscribe to Label Action

cc @kubkon

<details>
This issue or pull request has been labeled: "wasi"

Thus the following users have been cc'd because of the following labels:

To subscribe or unsubscribe from this label, edit the <code>.github/subscribe-to-label.json</code> configuration file.

Learn more.
</details>

view this post on Zulip Wasmtime GitHub notifications bot (Jul 21 2020 at 17:22):

abrown commented on Issue #2053:

cc: @kubkon, @pchickey, @sunfishcode

view this post on Zulip Wasmtime GitHub notifications bot (Jul 21 2020 at 18:07):

abrown commented on Issue #2053:

@kubkon, the workaround we talked about doesn't work: I replaced (field $data $tensor_data) with (field $data (struct (field $data (@witx pointer u8)) (field $len u32))) (an anonymous struct) and get:

   3   │  --> crates/wasi-common/src/wasi.rs:6:1
   4   │   |
   5   │ 6 | / wiggle::from_witx!({
   6   │ 7 | |     witx: ["WASI/phases/snapshot/witx/wasi_snapshot_preview1.witx", "WASI/phases/ephemeral/witx/wasi_ephemeral_nn.witx"],
   7   │ 8 | |     ctx: WasiCtx,
   8   │ 9 | | });
   9   │   | |___^
  10   │   |
  11   │   = help: message: loading witx: Validation(AnonymousStructure { location: Location { path: ".../crates/wasi-common/WASI/phases/ephemeral/witx/wasi_ephemeral_nn.witx", line: 43, column: 12 } })

Looking at WASI/tools/witx/src/validate.rs:45, it would appear that I can't use an anonymous struct there, but if I use a named struct then the lifetime issue happens. I guess we actually need #2054 to make this work.

view this post on Zulip Wasmtime GitHub notifications bot (Jul 21 2020 at 18:34):

kubkon commented on Issue #2053:

An update here. I've fixed the lifetime issue, but the problem remains with marshalling the memory in and out. Take this bit of witx for example:

(typename $struct_of_array
    (struct
       (field $arr $some_bytes)))

(module $something
    (@interface func (export "summm")
        (param $a_struct $struct_of_array)
        (result $error $errno))

The shims we generate for the interface function will look like:

fn summm(ctx: &WasiCtx, memory: &dym wiggle::GuestMemory, a_struct_ptr: i32) -> i32 { // ... }

The trick here is being able to extract the pointer and length of the array from the struct pointer which we currently don't support in wiggle. I'm wondering if we should though. @pchickey thoughts?

view this post on Zulip Wasmtime GitHub notifications bot (Aug 05 2020 at 16:52):

pchickey closed Issue #2053:

While talking to @kubkon about an issue with #2050, we found that the lifetime of the Tensor struct was not being propagated downwards to the field correctly. On #2050's branch and using cd crates/wasi-common && cargo expand wasi:

9014            pub type TensorData<'a> = wiggle::GuestPtr<'a, [u8]>;
9015            pub struct Tensor<'a> {
9016                pub dimensions: TensorDimensions,
9017                pub type_: TensorType,
9018                pub data: TensorData,
9019            }

It looks like it should generate instead pub data: TensorData<'a> and pub data: TensorDimensions<'a>.


Last updated: Dec 23 2024 at 12:05 UTC