[vm, compiler] Kick CSP ahead of SP in FFI callback stub.

TEST=profiler
Bug: https://github.com/dart-lang/sdk/issues/53303
Change-Id: Id73046f91c52e39e675c89797e8896ba09d4baa6
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/322200
Commit-Queue: Ryan Macnak <rmacnak@google.com>
Reviewed-by: Liam Appelbe <liama@google.com>
This commit is contained in:
Ryan Macnak
2023-08-23 00:17:02 +00:00
committed by Commit Queue
parent 1f61b1d521
commit 7d23f32389
3 changed files with 8 additions and 7 deletions
@@ -510,7 +510,7 @@ void StubCodeCompiler::GenerateFfiCallbackTrampolineStub() {
// We exit the safepoint inside DLRT_GetFfiCallbackMetadata in order to save
// code size on this shared stub.
{
__ mov(SP, CSP);
__ SetupDartSP();
__ EnterFrame(0);
__ PushRegisters(all_registers);
@@ -531,8 +531,6 @@ void StubCodeCompiler::GenerateFfiCallbackTrampolineStub() {
__ EnterFrame(0);
__ ReserveAlignedFrameSpace(0);
__ mov(CSP, SP);
#if defined(DART_TARGET_OS_FUCHSIA)
// TODO(https://dartbug.com/52579): Remove.
if (FLAG_precompiled_mode) {
@@ -549,7 +547,9 @@ void StubCodeCompiler::GenerateFfiCallbackTrampolineStub() {
FfiCallbackMetadata::kGetFfiCallbackMetadata, R4);
#endif // defined(DART_TARGET_OS_FUCHSIA)
__ mov(CSP, SP);
__ blr(R4);
__ mov(SP, CSP);
__ mov(THR, R0);
__ LeaveFrame();
@@ -564,7 +564,7 @@ void StubCodeCompiler::GenerateFfiCallbackTrampolineStub() {
__ PopRegisters(all_registers);
__ LeaveFrame();
__ mov(CSP, SP);
__ RestoreCSP();
}
Label async_callback;
@@ -605,7 +605,7 @@ void StubCodeCompiler::GenerateFfiCallbackTrampolineStub() {
// Exit the temporary isolate.
{
__ mov(SP, CSP);
__ SetupDartSP();
__ EnterFrame(0);
__ ReserveAlignedFrameSpace(0);
@@ -631,7 +631,7 @@ void StubCodeCompiler::GenerateFfiCallbackTrampolineStub() {
__ mov(THR, R0);
__ LeaveFrame();
__ mov(CSP, SP);
__ RestoreCSP();
}
__ Bind(&done);
+1 -1
View File
@@ -242,7 +242,7 @@ class FfiCallbackMetadata {
static constexpr intptr_t kNativeCallbackTrampolineStackDelta = 4;
#elif defined(TARGET_ARCH_ARM64)
static constexpr intptr_t kNativeCallbackTrampolineSize = 8;
static constexpr intptr_t kNativeCallbackSharedStubSize = 320;
static constexpr intptr_t kNativeCallbackSharedStubSize = 332;
static constexpr intptr_t kNativeCallbackTrampolineStackDelta = 2;
#elif defined(TARGET_ARCH_RISCV32)
static constexpr intptr_t kNativeCallbackTrampolineSize = 8;
+1
View File
@@ -13,6 +13,7 @@
// VMOptions=--use-slow-path --write-protect-code --no-dual-map-code --stacktrace-every=100
// VMOptions=--dwarf_stack_traces --no-retain_function_objects --no-retain_code_objects
// VMOptions=--test_il_serialization
// VMOptions=--profiler
// SharedObjects=ffi_test_functions
import 'dart:ffi';