Commit 69e16349 authored by Keith Randall's avatar Keith Randall

runtime: darwin/amd64, don't depend on outarg slots being unmodified

sigtramp was calling sigtrampgo and depending on the fact that
the 3rd argument slot will not be modified on return.  Our calling
convention doesn't guarantee that.  Avoid that assumption.

There's no actual bug here, as sigtrampgo does not in fact modify its
argument slots.  But I found this while working on the dead stack slot
clobbering tool.  https://go-review.googlesource.com/c/23924/

Change-Id: Ia7e791a2b4c1c74fff24cba8169e7840b4b06ffc
Reviewed-on: https://go-review.googlesource.com/36216
Run-TryBot: Keith Randall <khr@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: default avatarIan Lance Taylor <iant@golang.org>
parent 64c52808
...@@ -252,14 +252,15 @@ TEXT runtime·sigfwd(SB),NOSPLIT,$0-32 ...@@ -252,14 +252,15 @@ TEXT runtime·sigfwd(SB),NOSPLIT,$0-32
POPQ BP POPQ BP
RET RET
TEXT runtime·sigtramp(SB),NOSPLIT,$32 TEXT runtime·sigtramp(SB),NOSPLIT,$40
MOVL SI, 24(SP) // save infostyle for sigreturn below MOVL SI, 24(SP) // save infostyle for sigreturn below
MOVQ R8, 32(SP) // save ctx
MOVL DX, 0(SP) // sig MOVL DX, 0(SP) // sig
MOVQ CX, 8(SP) // info MOVQ CX, 8(SP) // info
MOVQ R8, 16(SP) // ctx MOVQ R8, 16(SP) // ctx
MOVQ $runtime·sigtrampgo(SB), AX MOVQ $runtime·sigtrampgo(SB), AX
CALL AX CALL AX
MOVQ 16(SP), DI // ctx MOVQ 32(SP), DI // ctx
MOVL 24(SP), SI // infostyle MOVL 24(SP), SI // infostyle
MOVL $(0x2000000+184), AX MOVL $(0x2000000+184), AX
SYSCALL SYSCALL
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment