]> Cypherpunks repositories - gostls13.git/commitdiff
runtime: darwin/amd64, don't depend on outarg slots being unmodified
authorKeith Randall <khr@golang.org>
Fri, 3 Feb 2017 02:50:45 +0000 (18:50 -0800)
committerKeith Randall <khr@golang.org>
Fri, 3 Feb 2017 05:08:54 +0000 (05:08 +0000)
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: Ian Lance Taylor <iant@golang.org>
src/runtime/sys_darwin_amd64.s

index e68dafe6a6cafb07fd31a17a9b24124d283de0ca..f94482856cf5a0f2c43d5e29f8f32b7941babe20 100644 (file)
@@ -252,14 +252,15 @@ TEXT runtime·sigfwd(SB),NOSPLIT,$0-32
        POPQ    BP
        RET
 
-TEXT runtime·sigtramp(SB),NOSPLIT,$32
+TEXT runtime·sigtramp(SB),NOSPLIT,$40
        MOVL SI, 24(SP) // save infostyle for sigreturn below
+       MOVQ R8, 32(SP) // save ctx
        MOVL DX, 0(SP)  // sig
        MOVQ CX, 8(SP)  // info
        MOVQ R8, 16(SP) // ctx
        MOVQ $runtime·sigtrampgo(SB), AX
        CALL AX
-       MOVQ 16(SP), DI // ctx
+       MOVQ 32(SP), DI // ctx
        MOVL 24(SP), SI // infostyle
        MOVL $(0x2000000+184), AX
        SYSCALL