1
0
mirror of https://github.com/golang/go synced 2024-09-30 14:38:33 -06:00

runtime: use a 64kb system stack on arm

I went looking for an arm system whose stacks are by default smaller
than 64KB. In fact the smallest common linux target I could find was
Android, which like iOS uses 1MB stacks.

Fixes #11873

Change-Id: Ieeb66ad095b3da18d47ba21360ea75152a4107c6
Reviewed-on: https://go-review.googlesource.com/14602
Reviewed-by: Michael Hudson-Doyle <michael.hudson@canonical.com>
Reviewed-by: Minux Ma <minux@golang.org>
This commit is contained in:
David Crawshaw 2015-09-15 12:22:46 -04:00
parent afe9837b23
commit 21f35b33c2
2 changed files with 4 additions and 4 deletions

View File

@ -31,7 +31,8 @@ TEXT runtime·rt0_go(SB),NOSPLIT,$-4
MOVW R8, g_m(g)
// create istack out of the OS stack
MOVW $(-8192+104)(R13), R0
// (1MB of system stack is available on iOS and Android)
MOVW $(-64*1024+104)(R13), R0
MOVW R0, g_stackguard0(g)
MOVW R0, g_stackguard1(g)
MOVW R0, (g_stack+stack_lo)(g)

View File

@ -76,14 +76,13 @@ func futexwakeup(addr *uint32, cnt uint32) {
func getproccount() int32 {
// This buffer is huge (8 kB) but we are on the system stack
// and there should be plenty of space (64 kB) -- except on ARM where
// the system stack itself is only 8kb (see golang.org/issue/11873).
// and there should be plenty of space (64 kB).
// Also this is a leaf, so we're not holding up the memory for long.
// See golang.org/issue/11823.
// The suggested behavior here is to keep trying with ever-larger
// buffers, but we don't have a dynamic memory allocator at the
// moment, so that's a bit tricky and seems like overkill.
const maxCPUs = 64*1024*(1-goarch_arm) + 1024*goarch_arm
const maxCPUs = 64 * 1024
var buf [maxCPUs / (ptrSize * 8)]uintptr
r := sched_getaffinity(0, unsafe.Sizeof(buf), &buf[0])
n := int32(0)