mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
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:
parent
c1b6e392f5
commit
c83c806535
6 changed files with 21 additions and 13 deletions
|
|
@ -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)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@ const (
|
|||
PCQuantum = 4
|
||||
Int64Align = 8
|
||||
HugePageSize = 0
|
||||
MinFrameSize = 8
|
||||
MinFrameSize = 32
|
||||
)
|
||||
|
||||
type Uintreg uint64
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@ const (
|
|||
PCQuantum = 4
|
||||
Int64Align = 8
|
||||
HugePageSize = 0
|
||||
MinFrameSize = 8
|
||||
MinFrameSize = 32
|
||||
)
|
||||
|
||||
type Uintreg uint64
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue