]> Cypherpunks repositories - gostls13.git/commitdiff
runtime: use explicit NOFRAME on dragonfly/amd64
authorqmuntal <quimmuntal@gmail.com>
Wed, 8 Feb 2023 09:27:20 +0000 (10:27 +0100)
committerQuim Muntal <quimmuntal@gmail.com>
Thu, 23 Feb 2023 16:32:43 +0000 (16:32 +0000)
This CL marks some dragonfly 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: I832a1a78d68a49f11df3b03fa9d50d4796bcac03
Reviewed-on: https://go-review.googlesource.com/c/go/+/466355
Run-TryBot: Quim Muntal <quimmuntal@gmail.com>
Reviewed-by: Than McIntosh <thanm@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: Cherry Mui <cherryyz@google.com>
src/cmd/internal/obj/x86/obj6.go
src/runtime/sys_dragonfly_amd64.s
src/syscall/asm9_unix2_amd64.s

index c6fe3279c4ede33cbc3d774cd86dbf9ab558b05f..d220751591f855fac1a185159df4f452a9001aa5 100644 (file)
@@ -613,7 +613,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:
+       case objabi.Hwindows, objabi.Hdarwin, objabi.Hlinux, objabi.Hdragonfly:
        default:
                usefpheuristic = true
        }
index 0cf98219fb013dffec961b9b72ba4f1a05ba097a..cae2039477e94fbb9c6ed061a1805d87a5413dec 100644 (file)
@@ -213,16 +213,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 5bf53a125116a20d583de4d70281edee331c39fb..6daa58d3868e5b2930ff372f1ff0fbd7dec192f4 100644 (file)
@@ -12,7 +12,8 @@
 //
 
 // func Syscall9(trap int64, a1, a2, a3, a4, a5, a6, a7, a8, a9 int64) (r1, r2, err int64);
-TEXT   ·Syscall9(SB),NOSPLIT,$0-104
+TEXT   ·Syscall9(SB),NOSPLIT,$32-104
+       NO_LOCAL_POINTERS
        CALL    runtime·entersyscall<ABIInternal>(SB)
        MOVQ    num+0(FP), AX   // syscall entry
        MOVQ    a1+8(FP), DI
@@ -21,17 +22,15 @@ TEXT        ·Syscall9(SB),NOSPLIT,$0-104
        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
 
-       // shift around the last three arguments so they're at the
-       // top of the stack when the syscall is called.
-       // note that we are scribbling over the Go arguments now.
-       MOVQ    SP, CX  // hide (SP) writes from vet
-       MOVQ    a7+56(FP), R11 // arg 7
-       MOVQ    R11, 8(CX)
-       MOVQ    a8+64(FP), R11 // arg 8
-       MOVQ    R11, 16(CX)
-       MOVQ    a9+72(FP), R11 // arg 9
-       MOVQ    R11, 24(CX)
+       // only the first 6 arguments can be passed in registers,
+       // the last three should be placed at the top of the stack.
+       MOVQ    R11, 8(SP)      // arg 7
+       MOVQ    R12, 16(SP)     // arg 8
+       MOVQ    R13, 24(SP)     // arg 9
 
        SYSCALL
        JCC     ok9