]> Cypherpunks repositories - gostls13.git/commitdiff
runtime: use explicit NOFRAME on freebsd/amd64
authorqmuntal <quimmuntal@gmail.com>
Wed, 8 Feb 2023 13:08:20 +0000 (14:08 +0100)
committerQuim Muntal <quimmuntal@gmail.com>
Fri, 24 Feb 2023 07:13:54 +0000 (07:13 +0000)
This CL marks some freebsd assembly functions as NOFRAME to avoid
relying on the implicit amd64 NOFRAME heuristic, where NOSPLIT functions
without stack were also marked as NOFRAME.

Updates #58378

Change-Id: Ibd00748946f1137e165293df7da73278cb673bbd
Reviewed-on: https://go-review.googlesource.com/c/go/+/466395
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_freebsd_amd64.s

index d220751591f855fac1a185159df4f452a9001aa5..3c9e0ed3f5de3d2adf77b2c2db3fc6f7e5db1184 100644 (file)
@@ -613,7 +613,8 @@ 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:
+       case objabi.Hwindows, objabi.Hdarwin, objabi.Hlinux, objabi.Hdragonfly,
+               objabi.Hfreebsd:
        default:
                usefpheuristic = true
        }
index 374e0ab769ff30ed7e43bea767afe4812b8fa20e..eedab4e2a7fef763c0d3e20e7d1cab7f94812953 100644 (file)
@@ -251,16 +251,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()
 
@@ -285,7 +283,7 @@ TEXT runtime·sigtramp(SB),NOSPLIT|TOPFRAME,$0
        RET
 
 // Called using C ABI.
-TEXT runtime·sigprofNonGoWrapper<>(SB),NOSPLIT,$0
+TEXT runtime·sigprofNonGoWrapper<>(SB),NOSPLIT|NOFRAME,$0
        // Transition from C ABI to Go ABI.
        PUSH_REGS_HOST_TO_ABI0()