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:
14
.github/workflows/main.yml
vendored
14
.github/workflows/main.yml
vendored
@@ -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
|
||||
|
||||
@@ -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::*;
|
||||
|
||||
@@ -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");
|
||||
|
||||
@@ -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");
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user