[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:
committed by
Commit Queue
parent
1f61b1d521
commit
7d23f32389
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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';
|
||||
|
||||
Reference in New Issue
Block a user