cmd/internal/obj, cmd/link, runtime: use a larger stack frame on ppc64

The larger stack frames causes the nosplit stack to overflow so the next change
increases the stackguard.

Change-Id: Ib2b4f24f0649eb1d13e3a58d265f13d1b6cc9bf9
Reviewed-on: https://go-review.googlesource.com/15964
Reviewed-by: Russ Cox <rsc@golang.org>
This commit is contained in:
Michael Hudson-Doyle 2015-10-30 12:36:08 +13:00
parent c1b6e392f5
commit c83c806535
6 changed files with 21 additions and 13 deletions

View file

@ -585,6 +585,10 @@ func (ctxt *Link) FixedFrameSize() int64 {
switch ctxt.Arch.Thechar {
case '6', '8':
return 0
case '9':
// PIC code on ppc64le requires 32 bytes of stack, and it's easier to
// just use that much stack always on ppc64x.
return int64(4 * ctxt.Arch.Ptrsize)
default:
return int64(ctxt.Arch.Ptrsize)
}

View file

@ -168,6 +168,10 @@ func (ctxt *Link) FixedFrameSize() int64 {
switch ctxt.Arch.Thechar {
case '6', '8':
return 0
case '9':
// PIC code on ppc64le requires 32 bytes of stack, and it's easier to
// just use that much stack always on ppc64x.
return int64(4 * ctxt.Arch.Ptrsize)
default:
return int64(ctxt.Arch.Ptrsize)
}

View file

@ -18,14 +18,8 @@
// with arguments (the arguments should be stored at FIXED_FRAME+0(R1),
// FIXED_FRAME+8(R1) etc) and some other low-level places.
//
// The reason for using a constant is when code is compiled as PIC on ppc64le
// the fixed part of the stack is 32 bytes large (although PIC is not actually
// supported yet).
// The reason for using a constant is to make supporting PIC easier (although
// we only support PIC on ppc64le which has a minimum 32 bytes of stack frame,
// and currently always use that much, PIC on ppc64 would need to use 48).
#ifdef GOARCH_ppc64
#define FIXED_FRAME 8
#endif
#ifdef GOARCH_ppc64le
#define FIXED_FRAME 8
#endif
#define FIXED_FRAME 32

View file

@ -74,8 +74,11 @@ nocgo:
MOVDU R3, -8(R1)
MOVDU R0, -8(R1)
MOVDU R0, -8(R1)
MOVDU R0, -8(R1)
MOVDU R0, -8(R1)
MOVDU R0, -8(R1)
BL runtime·newproc(SB)
ADD $24, R1
ADD $(16+FIXED_FRAME), R1
// start this M
BL runtime·mstart(SB)
@ -174,6 +177,9 @@ TEXT runtime·mcall(SB), NOSPLIT|NOFRAME, $0-8
MOVD (g_sched+gobuf_sp)(g), R1 // sp = m->g0->sched.sp
MOVDU R3, -8(R1)
MOVDU R0, -8(R1)
MOVDU R0, -8(R1)
MOVDU R0, -8(R1)
MOVDU R0, -8(R1)
BL (CTR)
BR runtime·badmcall2(SB)

View file

@ -12,7 +12,7 @@ const (
PCQuantum = 4
Int64Align = 8
HugePageSize = 0
MinFrameSize = 8
MinFrameSize = 32
)
type Uintreg uint64

View file

@ -12,7 +12,7 @@ const (
PCQuantum = 4
Int64Align = 8
HugePageSize = 0
MinFrameSize = 8
MinFrameSize = 32
)
type Uintreg uint64