[vm, arm64] Take advantage of Fuchsia's lack of signal handlers.
Change-Id: I5cac30574a697a91116658cab5289d80f316f4b1
Reviewed-on: https://dart-review.googlesource.com/c/77901
Reviewed-by: Zach Anderson <zra@google.com>
diff --git a/runtime/vm/compiler/assembler/assembler_arm64.cc b/runtime/vm/compiler/assembler/assembler_arm64.cc
index 42613ef3..19d6060 100644
--- a/runtime/vm/compiler/assembler/assembler_arm64.cc
+++ b/runtime/vm/compiler/assembler/assembler_arm64.cc
@@ -1189,6 +1189,11 @@
void Assembler::SetupDartSP() {
mov(SP, CSP);
+#if defined(TARGET_OS_FUCHSIA)
+ // Make any future signal handlers fail fast. Verifies our assumption in
+ // EnterFrame.
+ LoadImmediate(CSP, 0);
+#endif
}
void Assembler::RestoreCSP() {
@@ -1208,9 +1213,12 @@
// TODO(26472): It would be safer to use CSP as the Dart stack pointer, but
// this requires adjustments to stack handling to maintain the 16-byte
// alignment.
+ // Note Fuchsia does not have signal handlers; see also SetupDartSP.
+#if !defined(TARGET_OS_FUCHSIA)
const intptr_t kMaxDartFrameSize = 4096;
sub(TMP, SP, Operand(kMaxDartFrameSize));
andi(CSP, TMP, Immediate(~15));
+#endif
PushPair(FP, LR); // low: FP, high: LR.
mov(FP, SP);
diff --git a/runtime/vm/dart.cc b/runtime/vm/dart.cc
index b110635..7cc1f3b 100644
--- a/runtime/vm/dart.cc
+++ b/runtime/vm/dart.cc
@@ -738,7 +738,12 @@
buffer.AddString(TargetCPUFeatures::hardfp_supported() ? " hardfp"
: " softfp");
#elif defined(TARGET_ARCH_ARM64)
- buffer.AddString(" arm64");
+#if defined(TARGET_OS_FUCHSIA)
+ // See signal handler cheat in Assembler::EnterFrame.
+ buffer.AddString(" arm64-fuchsia");
+#else
+ buffer.AddString(" arm64-sysv");
+#endif
#elif defined(TARGET_ARCH_IA32)
buffer.AddString(" ia32");
#elif defined(TARGET_ARCH_X64)