]> Cypherpunks repositories - gostls13.git/commitdiff
runtime: use a 64kb system stack on arm
authorDavid Crawshaw <crawshaw@golang.org>
Tue, 15 Sep 2015 16:22:46 +0000 (12:22 -0400)
committerDavid Crawshaw <crawshaw@golang.org>
Mon, 26 Oct 2015 15:10:34 +0000 (15:10 +0000)
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>
src/runtime/asm_arm.s
src/runtime/os1_linux.go

index 917cce81c314c3125a8e5a97d695796e95c12846..8472090d8be110a8378b3b079453cd631eeb6e45 100644 (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)
index c23dc30bc163b11630823b80a82f4a7dbd8f98e9..6410801d8ed096a6f854b4c52a22275ef9600c49 100644 (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)