1
0
mirror of https://github.com/golang/go synced 2024-11-23 20:30:04 -07:00

runtime: use explicit NOFRAME on dragonfly/amd64

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>
This commit is contained in:
qmuntal 2023-02-08 10:27:20 +01:00 committed by Quim Muntal
parent c0ac33c006
commit 516753278d
3 changed files with 15 additions and 18 deletions

View 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
}

View 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()

View 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