]> Cypherpunks repositories - gostls13.git/commitdiff
runtime: use explicit NOFRAME on netbsd/amd64
authorqmuntal <quimmuntal@gmail.com>
Wed, 8 Feb 2023 13:28:18 +0000 (14:28 +0100)
committerQuim Muntal <quimmuntal@gmail.com>
Fri, 24 Feb 2023 16:59:50 +0000 (16:59 +0000)
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 <thanm@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: Cherry Mui <cherryyz@google.com>
Run-TryBot: Quim Muntal <quimmuntal@gmail.com>

src/cmd/internal/obj/x86/obj6.go
src/runtime/sys_netbsd_amd64.s
src/syscall/asm9_unix2_amd64.s
src/syscall/asm_netbsd_amd64.s [deleted file]

index 3c9e0ed3f5de3d2adf77b2c2db3fc6f7e5db1184..c81cbf12e9d3dbf7857a3fdcba48577cfc6d8dea 100644 (file)
@@ -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
        }
index 30f3f380b6fc98566a1c3a61130112a82b5dd238..2c5dc01bb69b61d0988950a715985e936c434909 100644 (file)
@@ -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()
 
index 6daa58d3868e5b2930ff372f1ff0fbd7dec192f4..bb4e9db15c3a221960e5e68484807c3a4c82c048 100644 (file)
@@ -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 (file)
index 457e207..0000000
+++ /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<ABIInternal>(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<ABIInternal>(SB)
-       RET
-ok9:
-       ADDQ    $32, SP
-       MOVQ    AX, 88(SP)      // r1
-       MOVQ    DX, 96(SP)      // r2
-       MOVQ    $0, 104(SP)     // errno
-       CALL    runtime·exitsyscall<ABIInternal>(SB)
-       RET