Skip to content

Missing cache maintenance and context synchronization operations after JIT compilation is completed on AArch64 #3310

@akirilov-arm

Description

@akirilov-arm

Currently (as of commit 164835e), after code generation is finished and before execution from the newly generated code starts on AArch64, both cranelift-jit and wasmtime-jit do not perform any actions other than making the code buffers readable and executable instead of readable and writable. In particular, they skip all the actions prescribed by the Arm Architecture Reference Manual in sections B2.2.5 and B.2.4.4. On Linux from C code, for example, it is sufficient to perform a call to the __builtin___clear_cache() function on the code buffers and, if we are in a multi-threaded environment (which is the case for Wasmtime), another call to membarrier(MEMBARRIER_CMD_PRIVATE_EXPEDITED_SYNC_CORE, 0).

This issue has already been discussed on Zulip, and potentially would affect other architectures with weak memory models (and non-coherent data and instruction caches in particular).

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugIncorrect behavior in the current implementation that needs fixingwasmtimeIssues about wasmtime that don't fall into another label

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions