Skip to content

Commit

Permalink
runtime: use explicit NOFRAME on dragonfly/amd64
Browse files Browse the repository at this point in the history
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 golang#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>
  • Loading branch information
qmuntal committed Feb 23, 2023
1 parent c0ac33c commit 5167532
Show file tree
Hide file tree
Showing 3 changed files with 15 additions and 18 deletions.
2 changes: 1 addition & 1 deletion src/cmd/internal/obj/x86/obj6.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
}
Expand Down
10 changes: 4 additions & 6 deletions src/runtime/sys_dragonfly_amd64.s
Original file line number Diff line number Diff line change
Expand Up @@ -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()

Expand Down
21 changes: 10 additions & 11 deletions src/syscall/asm9_unix2_amd64.s
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
Expand Down

0 comments on commit 5167532

Please sign in to comment.