Skip to content

Commit

Permalink
runtime: fix stack corruption in race mode
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
dvyukov committed Feb 13, 2015
1 parent 6731063 commit f59f9b8
Showing 1 changed file with 2 additions and 1 deletion.
3 changes: 2 additions & 1 deletion src/runtime/race_amd64.s
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down

0 comments on commit f59f9b8

Please sign in to comment.