mirror of
https://github.com/golang/go
synced 2024-09-30 14:28: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:
parent
afe9837b23
commit
21f35b33c2
@ -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)
|
||||
|
@ -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)
|
||||
|
Loading…
Reference in New Issue
Block a user