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