Commit 5b78cee3 authored by Shenghou Ma's avatar Shenghou Ma

runtime: fix stack pointer corruption in runtime.cgocallback_gofunc()

runtime.setmg() calls another function (cgo_save_gm), so it must save
LR onto stack.
Re-enabled TestCthread test in misc/cgo/test.

Fixes #4863.

R=golang-dev, r
CC=golang-dev
https://golang.org/cl/9019043
parent 806dea82
...@@ -8,7 +8,6 @@ package cgotest ...@@ -8,7 +8,6 @@ package cgotest
import "C" import "C"
import ( import (
"runtime"
"sync" "sync"
"testing" "testing"
) )
...@@ -31,10 +30,6 @@ func Add(x int) { ...@@ -31,10 +30,6 @@ func Add(x int) {
} }
func testCthread(t *testing.T) { func testCthread(t *testing.T) {
if runtime.GOARCH == "arm" {
t.Skip("testCthread disabled on arm")
}
sum.i = 0 sum.i = 0
C.doAdd(10, 6) C.doAdd(10, 6)
......
...@@ -417,7 +417,7 @@ havem: ...@@ -417,7 +417,7 @@ havem:
RET RET
// void setmg(M*, G*); set m and g. for use by needm. // void setmg(M*, G*); set m and g. for use by needm.
TEXT runtime·setmg(SB), 7, $-4 TEXT runtime·setmg(SB), 7, $0
MOVW mm+0(FP), m MOVW mm+0(FP), m
MOVW gg+4(FP), g MOVW gg+4(FP), g
......
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