aboutsummaryrefslogtreecommitdiff
path: root/src/runtime/sys_linux_arm.s
diff options
context:
space:
mode:
authorShenghou Ma <minux@golang.org>2015-04-29 02:42:43 -0400
committerMinux Ma <minux@golang.org>2015-04-29 19:18:07 +0000
commit4d1ab2d8d10283925e486ad75237ae694f3b6cce (patch)
tree7eea7bc186636ddc14520411cb6db1f826dbeeb4 /src/runtime/sys_linux_arm.s
parent06946aad1973c42e26ddb0890c57ef37fecbb48a (diff)
downloadgo-4d1ab2d8d10283925e486ad75237ae694f3b6cce.tar.gz
go-4d1ab2d8d10283925e486ad75237ae694f3b6cce.zip
runtime: re-enable TestNewProc0 on android/arm and fix heap corruption
The problem is not actually specific to android/arm. Linux/ARM's runtime.clone set the stack pointer to child_stk-4 before calling the fn. And then when fn returns, it tries to write to 4(R13) to provide argument for runtime.exit, which is just beyond the allocated child stack, and thus it will corrupt the heap randomly or trigger segfault if that memory happens to be unmapped. While we're at here, shorten the test polling interval to 0.1s to speed up the test (it was only checking at 1s interval, which means the test takes at least 1s). Fixes #10548. Change-Id: I57cd63232022b113b6cd61e987b0684ebcce930a Reviewed-on: https://go-review.googlesource.com/9457 Reviewed-by: David Crawshaw <crawshaw@golang.org>
Diffstat (limited to 'src/runtime/sys_linux_arm.s')
-rw-r--r--src/runtime/sys_linux_arm.s1
1 files changed, 1 insertions, 0 deletions
diff --git a/src/runtime/sys_linux_arm.s b/src/runtime/sys_linux_arm.s
index 3936cd93a8..50f074a234 100644
--- a/src/runtime/sys_linux_arm.s
+++ b/src/runtime/sys_linux_arm.s
@@ -308,6 +308,7 @@ nog:
BL (R0)
// It shouldn't return. If it does, exit that thread.
+ SUB $16, R13 // restore the stack pointer to avoid memory corruption
MOVW $0, R0
MOVW R0, 4(R13)
BL runtime·exit1(SB)