aboutsummaryrefslogtreecommitdiff
path: root/src/runtime/sys_freebsd_arm64.s
diff options
context:
space:
mode:
authorMichael Pratt <mpratt@google.com>2022-03-07 17:52:53 -0500
committerMichael Pratt <mpratt@google.com>2022-04-26 18:48:16 +0000
commitba7f3d98d41f01291dd831e618736b02a79ef27a (patch)
treea076ba6e615b05f8556fe33d5c133166ef1da038 /src/runtime/sys_freebsd_arm64.s
parent06b0a655a1f46abab2e3c173259ad184b557dd89 (diff)
downloadgo-ba7f3d98d41f01291dd831e618736b02a79ef27a.tar.gz
go-ba7f3d98d41f01291dd831e618736b02a79ef27a.zip
runtime: use ABIInternal for most calls to sigtrampgo
sigtramp on openbsd-arm64 is teetering on the edge of the nosplit stack limit. Add more headroom by calling sigtrampgo using ABIInternal, which eliminates a 48-byte ABI wrapper frame. openbsd-amd64 has slightly more space, but is also close to the limit, so convert it as well. Other operating systems don't have it as bad, but many have nearly identical implementations of sigtramp, so I have converted them as well. I've omitted darwin-arm64 and solaris, as those are quite different and would benefit from not needing ifdef for both cases. For #51485. Change-Id: I70512645d4208b346a59d5e5d03836a45833b1d7 Reviewed-on: https://go-review.googlesource.com/c/go/+/390814 Run-TryBot: Michael Pratt <mpratt@google.com> TryBot-Result: Gopher Robot <gobot@golang.org> Reviewed-by: Cherry Mui <cherryyz@google.com>
Diffstat (limited to 'src/runtime/sys_freebsd_arm64.s')
-rw-r--r--src/runtime/sys_freebsd_arm64.s10
1 files changed, 8 insertions, 2 deletions
diff --git a/src/runtime/sys_freebsd_arm64.s b/src/runtime/sys_freebsd_arm64.s
index 7b05fb09004..a4f12eb3b92 100644
--- a/src/runtime/sys_freebsd_arm64.s
+++ b/src/runtime/sys_freebsd_arm64.s
@@ -295,10 +295,16 @@ TEXT runtime·sigtramp(SB),NOSPLIT,$176
BEQ 2(PC)
BL runtime·load_g(SB)
+#ifdef GOEXPERIMENT_regabiargs
+ // Restore signum to R0.
+ MOVW 8(RSP), R0
+ // R1 and R2 already contain info and ctx, respectively.
+#else
MOVD R1, 16(RSP)
MOVD R2, 24(RSP)
- MOVD $runtime·sigtrampgo(SB), R0
- BL (R0)
+#endif
+ MOVD $runtime·sigtrampgo<ABIInternal>(SB), R3
+ BL (R3)
// Restore callee-save registers.
RESTORE_R19_TO_R28(8*4)