Skip to content

pointer authentication failed on arm64 android #11295

@brian14708

Description

@brian14708

Test Case

use wasmtime::*;

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let mut tasks = tokio::task::JoinSet::<wasmtime::Result<()>>::new();
    let engine = Engine::new(Config::new().async_support(true))?;
    let wasm_bytes = &wat::parse_str(
        r#"
            (module
                (func $hello (import "host" "hello"))
                (func (export "run") (call $hello))
            )
        "#,
    )?;
    for i in 0..2 {
        let mut store = Store::new(&engine, ());
        let module = Module::new(&engine, wasm_bytes)?;
        let hello_func = Func::wrap_async(&mut store, move |_caller: Caller<'_, ()>, _args: ()| {
            Box::new(async move {
                println!("Instance {i}: Hello from async WASM!");
                tokio::time::sleep(tokio::time::Duration::from_millis(10)).await;
                println!("Instance {i}: After 1 ms sleep");
                Ok(())
            })
        });
        let instance = Instance::new_async(&mut store, &module, &[hello_func.into()]).await?;
        let run = instance.get_typed_func::<(), ()>(&mut store, "run")?;

        tasks.spawn(async move {
            for _i in 0..5 {
                run.call_async(&mut store, ()).await?;
            }
            Ok(())
        });
    }

    while let Some(result) = tasks.join_next().await {
        result??;
    }
    Ok(())
}

Steps to Reproduce

cargo build --target aarch64-linux-android
# run on android device

Expected Results

Instance 0: Hello from async WASM!
Instance 1: Hello from async WASM!
Instance 0: After 1 ms sleep
Instance 0: Hello from async WASM!
Instance 1: After 1 ms sleep
...

Actual Results

Instance 0: Hello from async WASM!
Instance 1: Hello from async WASM!
Illegal instruction

with lldb

Instance 0: Hello from async WASM!
Instance 1: Hello from async WASM!
Process 14726 stopped
* thread #2, name = 'tokio-runtime-w', stop reason = signal SIGILL: illegal operand
    frame #0: 0x00000055567db894 fiber-test`wasmtime_fiber_switch_34_0_2 + 100
fiber-test`wasmtime_fiber_switch_34_0_2:
->  0x55567db894 <+100>: autiasp 
    0x55567db898 <+104>: ret    

fiber-test`_$LT$core..result..Result$LT$T$C$F$GT$$u20$as$u20$core..ops..try_trait..FromResidual$LT$core..result..Result$LT$core..convert..Infallible$C$E$GT$$GT$$GT$::from_residual::h0eebfda855441d32:
    0x55567db89c <+0>:   sub    sp, sp, #0x20
    0x55567db8a0 <+4>:   mov    x9, x8

Versions and Environment

Wasmtime version or commit: 34.0.2

Operating system: Android 14

Architecture: aarch64

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugIncorrect behavior in the current implementation that needs fixingcranelift:area:aarch64Issues related to AArch64 backend.wasmtime:platform-supportRelated to supporting a new platform in Wasmtime

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions