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:
parent
c0ac33c006
commit
516753278d
@ -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
|
||||
}
|
||||
|
@ -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()
|
||||
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user