Initial work to build for Windows ARM64 (#4990)

* Make wasmtime build for windows-aarch64

* Add check for win arm64 build.

* Fix checks for winarm64 key in workflows.

* Add target in windows arm64 build.

* Add tracking issue for Windows ARM64 trap handling
This commit is contained in:
Yuyi Wang
2022-10-03 10:45:42 +08:00
committed by GitHub
parent 3fa545bd89
commit 6bcc430855
4 changed files with 21 additions and 1 deletions

View File

@@ -183,6 +183,20 @@ jobs:
- run: cargo check --target wasm32-unknown-emscripten -p wasi-common
- run: cargo check --target armv7-unknown-linux-gnueabihf -p wasi-common
# Check whether `wasmtime` cross-compiles to aarch64-pc-windows-msvc
# We don't build nor test it because it lacks trap handling.
# Tracking issue: https://github.com/bytecodealliance/wasmtime/issues/4992
checks_winarm64:
name: Check Windows ARM64
runs-on: windows-latest
steps:
- uses: actions/checkout@v2
with:
submodules: true
- uses: ./.github/actions/install-rust
- run: rustup target add aarch64-pc-windows-msvc
- run: cargo check -p wasmtime --target aarch64-pc-windows-msvc
fuzz_targets:
name: Fuzz Targets
runs-on: ubuntu-latest

View File

@@ -5,6 +5,9 @@ cfg_if::cfg_if! {
} else if #[cfg(all(windows, target_arch = "x86"))] {
mod winx32;
pub use self::winx32::*;
} else if #[cfg(all(windows, target_arch = "aarch64"))] {
mod winx64;
pub use self::winx64::*;
} else if #[cfg(unix)] {
mod systemv;
pub use self::systemv::*;

View File

@@ -21,7 +21,7 @@ impl UnwindRegistration {
if RtlAddFunctionTable(
unwind_info as *mut _,
(unwind_len / unit_len) as u32,
base_address as u64,
base_address as _,
) == 0
{
bail!("failed to register function table");

View File

@@ -58,6 +58,9 @@ unsafe extern "system" fn exception_handler(exception_info: *mut EXCEPTION_POINT
} else if #[cfg(target_arch = "x86")] {
let ip = (*(*exception_info).ContextRecord).Eip as *const u8;
let fp = (*(*exception_info).ContextRecord).Ebp as usize;
} else if #[cfg(target_arch = "aarch64")] {
let ip = (*(*exception_info).ContextRecord).Pc as *const u8;
let fp = (*(*exception_info).ContextRecord).Anonymous.Anonymous.Fp as usize;
} else {
compile_error!("unsupported platform");
}