From cdb7dc81f81c74ee62582cf37d577d1aa12ec3e8 Mon Sep 17 00:00:00 2001 From: Amanieu d'Antras Date: Thu, 24 Feb 2022 18:33:08 +0000 Subject: [PATCH 1/3] Enable `experimental-io-devices` by default Fixes #2695 --- lib/cli/Cargo.toml | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/cli/Cargo.toml b/lib/cli/Cargo.toml index 8c8a195fa93..33dfe19a398 100644 --- a/lib/cli/Cargo.toml +++ b/lib/cli/Cargo.toml @@ -70,6 +70,7 @@ default = [ "cache", "wasi", "emscripten", + "experimental-io-devices", ] engine = [] universal = [ From feaf483ac91b6d9fa9ceca127c0ffc43eb0626bb Mon Sep 17 00:00:00 2001 From: Amanieu d'Antras Date: Thu, 24 Feb 2022 22:10:45 +0000 Subject: [PATCH 2/3] Fix drop order for Module fields The field ordering here is actually significant because of the drop order: we want to drop the artifact before dropping the engine. The reason for this is that dropping the Artifact will de-register the trap handling metadata from the global registry. This must be done before the code memory for the artifact is freed (which happens when the store is dropped) since there is a chance that this memory could be reused by another module which will try to register its own trap information. Note that in Rust, the drop order for struct fields is from top to bottom: the opposite of C++. In the future, this code should be refactored to properly describe the ownership of the code and its metadata. Fixes #2434 --- lib/api/src/sys/module.rs | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/lib/api/src/sys/module.rs b/lib/api/src/sys/module.rs index 27df4fd6f31..5f387f1cb39 100644 --- a/lib/api/src/sys/module.rs +++ b/lib/api/src/sys/module.rs @@ -34,8 +34,22 @@ pub enum IoCompileError { /// contents rather than a deep copy. #[derive(Clone, MemoryUsage)] pub struct Module { - store: Store, + // The field ordering here is actually significant because of the drop + // order: we want to drop the artifact before dropping the engine. + // + // The reason for this is that dropping the Artifact will de-register the + // trap handling metadata from the global registry. This must be done before + // the code memory for the artifact is freed (which happens when the store + // is dropped) since there is a chance that this memory could be reused by + // another module which will try to register its own trap information. + // + // Note that in Rust, the drop order for struct fields is from top to + // bottom: the opposite of C++. + // + // In the future, this code should be refactored to properly describe the + // ownership of the code and its metadata. artifact: Arc, + store: Store, } impl Module { From a0a0b1abbcb810086fe8e0500a8806d67e645972 Mon Sep 17 00:00:00 2001 From: Amanieu d'Antras Date: Thu, 24 Feb 2022 20:23:18 +0000 Subject: [PATCH 3/3] Install dependencies in CI --- .github/workflows/lint.yaml | 4 ++++ .github/workflows/test-sys.yaml | 7 ++++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/.github/workflows/lint.yaml b/.github/workflows/lint.yaml index a0a66703b67..07c32a7e599 100644 --- a/.github/workflows/lint.yaml +++ b/.github/workflows/lint.yaml @@ -28,6 +28,10 @@ jobs: tar xf /opt/llvm.tar.xz --strip-components=1 -C /opt/llvm-12 echo '/opt/llvm-12/bin' >> $GITHUB_PATH echo 'LLVM_SYS_120_PREFIX=/opt/llvm-12' >> $GITHUB_ENV + - name: Install dependencies on Linux + run: | + sudo apt-get update -y + sudo apt-get install -y libwayland-cursor0 libxkbcommon-dev libwayland-dev - run: make lint env: ENABLE_CRANELIFT: "1" diff --git a/.github/workflows/test-sys.yaml b/.github/workflows/test-sys.yaml index 7f3aef17b43..5bf6c867877 100644 --- a/.github/workflows/test-sys.yaml +++ b/.github/workflows/test-sys.yaml @@ -104,10 +104,15 @@ jobs: sudo apt-get update -y sudo apt-get install -y --allow-downgrades libstdc++6=8.4.0-1ubuntu1~18.04 sudo apt-get install --reinstall g++-8 + - name: Install dependencies on Linux + if: matrix.build == 'linux-x64' + run: | + sudo apt-get update -y + sudo apt-get install -y libwayland-cursor0 libxkbcommon-dev libwayland-dev - name: Set up base deps on musl if: matrix.build == 'linux-musl-x64' run: | - apk add build-base musl-dev curl make libtool libffi-dev gcc automake autoconf git openssl-dev g++ + apk add build-base musl-dev curl make libtool libffi-dev gcc automake autoconf git openssl-dev g++ libxkbcommon-dev wayland-dev - name: Install Rust uses: actions-rs/toolchain@v1 with: