From f76fc28c6b31f28783b94596d6328450202c903a Mon Sep 17 00:00:00 2001 From: qmuntal Date: Wed, 8 Feb 2023 14:28:18 +0100 Subject: [PATCH] runtime: use explicit NOFRAME on netbsd/amd64 This CL marks some netbsd assembly functions as NOFRAME to avoid relying on the implicit amd64 NOFRAME heuristic, where NOSPLIT functions without stack were also marked as NOFRAME. While here, and thanks to CL 466355, `asm_netbsd_amd64.s` can be deleted in favor of `asm9_unix2_amd64.s`, which makes better use of the frame pointer. Updates #58378 Change-Id: Iff554b664ec25f2bb6ec198c0f684590b359c383 Reviewed-on: https://go-review.googlesource.com/c/go/+/466396 Reviewed-by: Than McIntosh TryBot-Result: Gopher Robot Reviewed-by: Cherry Mui Run-TryBot: Quim Muntal --- src/cmd/internal/obj/x86/obj6.go | 2 +- src/runtime/sys_netbsd_amd64.s | 10 +++----- src/syscall/asm9_unix2_amd64.s | 4 +-- src/syscall/asm_netbsd_amd64.s | 43 -------------------------------- 4 files changed, 7 insertions(+), 52 deletions(-) delete mode 100644 src/syscall/asm_netbsd_amd64.s diff --git a/src/cmd/internal/obj/x86/obj6.go b/src/cmd/internal/obj/x86/obj6.go index 3c9e0ed3f5..c81cbf12e9 100644 --- a/src/cmd/internal/obj/x86/obj6.go +++ b/src/cmd/internal/obj/x86/obj6.go @@ -614,7 +614,7 @@ func preprocess(ctxt *obj.Link, cursym *obj.LSym, newprog obj.ProgAlloc) { var usefpheuristic bool switch ctxt.Headtype { case objabi.Hwindows, objabi.Hdarwin, objabi.Hlinux, objabi.Hdragonfly, - objabi.Hfreebsd: + objabi.Hfreebsd, objabi.Hnetbsd: default: usefpheuristic = true } diff --git a/src/runtime/sys_netbsd_amd64.s b/src/runtime/sys_netbsd_amd64.s index 30f3f380b6..2c5dc01bb6 100644 --- a/src/runtime/sys_netbsd_amd64.s +++ b/src/runtime/sys_netbsd_amd64.s @@ -296,16 +296,14 @@ TEXT runtime·sigfwd(SB),NOSPLIT,$0-32 MOVL sig+8(FP), DI MOVQ info+16(FP), SI MOVQ ctx+24(FP), DX - PUSHQ BP - MOVQ SP, BP - ANDQ $~15, SP // alignment for x86_64 ABI + MOVQ SP, BX // callee-saved + ANDQ $~15, SP // alignment for x86_64 ABI CALL AX - MOVQ BP, SP - POPQ BP + MOVQ BX, SP RET // Called using C ABI. -TEXT runtime·sigtramp(SB),NOSPLIT|TOPFRAME,$0 +TEXT runtime·sigtramp(SB),NOSPLIT|TOPFRAME|NOFRAME,$0 // Transition from C ABI to Go ABI. PUSH_REGS_HOST_TO_ABI0() diff --git a/src/syscall/asm9_unix2_amd64.s b/src/syscall/asm9_unix2_amd64.s index 6daa58d386..bb4e9db15c 100644 --- a/src/syscall/asm9_unix2_amd64.s +++ b/src/syscall/asm9_unix2_amd64.s @@ -2,13 +2,13 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -//go:build dragonfly || freebsd +//go:build dragonfly || freebsd || netbsd #include "textflag.h" #include "funcdata.h" // -// Syscall9 support for AMD64, DragonFly and FreeBSD +// Syscall9 support for AMD64, DragonFly, FreeBSD and NetBSD // // func Syscall9(trap int64, a1, a2, a3, a4, a5, a6, a7, a8, a9 int64) (r1, r2, err int64); diff --git a/src/syscall/asm_netbsd_amd64.s b/src/syscall/asm_netbsd_amd64.s deleted file mode 100644 index 457e207296..0000000000 --- a/src/syscall/asm_netbsd_amd64.s +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright 2016 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -#include "textflag.h" -#include "funcdata.h" - -// -// Syscall9 support for AMD64, NetBSD -// - -// func Syscall9(trap int64, a1, a2, a3, a4, a5, a6, a7, a8, a9 int64) (r1, r2, err int64); -TEXT ·Syscall9(SB),NOSPLIT,$0-104 - CALL runtime·entersyscall(SB) - MOVQ num+0(FP), AX // syscall entry - MOVQ a1+8(FP), DI - MOVQ a2+16(FP), SI - MOVQ a3+24(FP), DX - MOVQ a4+32(FP), R10 - MOVQ a5+40(FP), R8 - MOVQ a6+48(FP), R9 - MOVQ a7+56(FP), R11 - MOVQ a8+64(FP), R12 - MOVQ a9+72(FP), R13 - SUBQ $32, SP - MOVQ R11, 8(SP) // arg 7 - MOVQ R12, 16(SP) // arg 8 - MOVQ R13, 24(SP) // arg 9 - SYSCALL - JCC ok9 - ADDQ $32, SP - MOVQ $-1, 88(SP) // r1 - MOVQ $0, 96(SP) // r2 - MOVQ AX, 104(SP) // errno - CALL runtime·exitsyscall(SB) - RET -ok9: - ADDQ $32, SP - MOVQ AX, 88(SP) // r1 - MOVQ DX, 96(SP) // r2 - MOVQ $0, 104(SP) // errno - CALL runtime·exitsyscall(SB) - RET -- 2.50.0