From a0ab33ac522e970326131e82f1cd917bcdba9533 Mon Sep 17 00:00:00 2001 From: Ryan Macnak Date: Wed, 8 Apr 2026 20:29:40 -0700 Subject: [PATCH] [vm, ffi] Fix Fuchsia ARM64 build. TEST=ci Bug: https://github.com/dart-lang/sdk/issues/52579 Cq-Include-Trybots: luci.dart.try:vm-fuchsia-release-x64-try,vm-fuchsia-release-arm64-try Change-Id: I3e3377d0c973614b83664bfd704d5efe532d329f Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/493968 Commit-Queue: Liam Appelbe Auto-Submit: Ryan Macnak Reviewed-by: Liam Appelbe --- runtime/vm/ffi_trampolines_arm64.S | 9 +++++++-- runtime/vm/simulator_arm64.cc | 5 ++++- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/runtime/vm/ffi_trampolines_arm64.S b/runtime/vm/ffi_trampolines_arm64.S index 67aa7192860..db4d4a791b1 100644 --- a/runtime/vm/ffi_trampolines_arm64.S +++ b/runtime/vm/ffi_trampolines_arm64.S @@ -144,7 +144,9 @@ _SimulatorFfiCallbackTrampoline: SimulatorFfiCallbackTrampoline: #endif LOCAL_SYMBOL(start): -#if defined(__APPLE__) +#if defined(__Fuchsia__) + .rept 483 // FfiCallbackMetadata::NumCallbackTrampolinesPerPage() +#elif defined(__APPLE__) .rept 2019 // FfiCallbackMetadata::NumCallbackTrampolinesPerPage() #else .rept 8163 // FfiCallbackMetadata::NumCallbackTrampolinesPerPage() @@ -176,7 +178,10 @@ LOCAL_SYMBOL(body): mov x1, x9 // I.e., which callback. adr x2, LOCAL_SYMBOL(start) -#if defined(__APPLE__) +#if defined(__Fuchsia__) + and x2, x2, ~(0x1000-1) // FfiCallbackMetadata::kPageSize = 4k + add x2, x2, 0x2000 +#elif defined(__APPLE__) and x2, x2, ~(0x4000-1) // FfiCallbackMetadata::kPageSize = 16k add x2, x2, 0x8000 #else diff --git a/runtime/vm/simulator_arm64.cc b/runtime/vm/simulator_arm64.cc index fa24636e917..8107d174665 100644 --- a/runtime/vm/simulator_arm64.cc +++ b/runtime/vm/simulator_arm64.cc @@ -1834,7 +1834,10 @@ extern "C" void DoRedirectedFfiCallback(CallbackContext* ctxt, // Assumptions in ffi_trampolines_arm64.S COMPILE_ASSERT(sizeof(CallbackContext) == 144); COMPILE_ASSERT(FfiCallbackMetadata::kDoRedirectedFfiCallback == 1); -#if defined(DART_TARGET_OS_MACOS) +#if defined(DART_TARGET_OS_FUCHSIA) + COMPILE_ASSERT(FfiCallbackMetadata::kPageSize == 4 * KB); + COMPILE_ASSERT(FfiCallbackMetadata::NumCallbackTrampolinesPerPage() == 483); +#elif defined(DART_TARGET_OS_MACOS) COMPILE_ASSERT(FfiCallbackMetadata::kPageSize == 16 * KB); COMPILE_ASSERT(FfiCallbackMetadata::NumCallbackTrampolinesPerPage() == 2019); #else