]> Cypherpunks repositories - gostls13.git/commitdiff
runtime: fix stack corruption in race mode
authorDmitry Vyukov <dvyukov@google.com>
Fri, 13 Feb 2015 14:14:48 +0000 (17:14 +0300)
committerDmitry Vyukov <dvyukov@google.com>
Fri, 13 Feb 2015 16:29:54 +0000 (16:29 +0000)
MOVQ RARG0, 0(SP) smashes exactly what was saved by PUSHQ R15.
This code managed to work somehow with the current race runtime,
but corrupts caller arguments with new race runtime that I am testing.

Change-Id: I9ffe8b5eee86451db36e99dbf4d11f320192e576
Reviewed-on: https://go-review.googlesource.com/4810
Reviewed-by: Keith Randall <khr@golang.org>
src/runtime/race_amd64.s

index 972cbe3f8a3714411d0c7df9362a91764e829e51..267cd6cec4a79767f537662c9f0840bb1636c225 100644 (file)
@@ -383,8 +383,9 @@ TEXT        runtime·racesymbolizethunk(SB), NOSPLIT, $56-8
        MOVQ    g_m(R13), R13
        MOVQ    m_g0(R13), R14
        MOVQ    R14, g(R12)     // g = m->g0
-       MOVQ    RARG0, 0(SP)    // func arg
+       PUSHQ   RARG0   // func arg
        CALL    runtime·racesymbolize(SB)
+       POPQ    R12
        // All registers are smashed after Go code, reload.
        get_tls(R12)
        MOVQ    g(R12), R13