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 {
|
switch ctxt.Arch.Thechar {
|
||||||
case '6', '8':
|
case '6', '8':
|
||||||
return 0
|
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:
|
default:
|
||||||
return int64(ctxt.Arch.Ptrsize)
|
return int64(ctxt.Arch.Ptrsize)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -168,6 +168,10 @@ func (ctxt *Link) FixedFrameSize() int64 {
|
||||||
switch ctxt.Arch.Thechar {
|
switch ctxt.Arch.Thechar {
|
||||||
case '6', '8':
|
case '6', '8':
|
||||||
return 0
|
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:
|
default:
|
||||||
return int64(ctxt.Arch.Ptrsize)
|
return int64(ctxt.Arch.Ptrsize)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -18,14 +18,8 @@
|
||||||
// with arguments (the arguments should be stored at FIXED_FRAME+0(R1),
|
// with arguments (the arguments should be stored at FIXED_FRAME+0(R1),
|
||||||
// FIXED_FRAME+8(R1) etc) and some other low-level places.
|
// 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 reason for using a constant is to make supporting PIC easier (although
|
||||||
// the fixed part of the stack is 32 bytes large (although PIC is not actually
|
// we only support PIC on ppc64le which has a minimum 32 bytes of stack frame,
|
||||||
// supported yet).
|
// and currently always use that much, PIC on ppc64 would need to use 48).
|
||||||
|
|
||||||
#ifdef GOARCH_ppc64
|
#define FIXED_FRAME 32
|
||||||
#define FIXED_FRAME 8
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef GOARCH_ppc64le
|
|
||||||
#define FIXED_FRAME 8
|
|
||||||
#endif
|
|
||||||
|
|
|
||||||
|
|
@ -74,8 +74,11 @@ nocgo:
|
||||||
MOVDU R3, -8(R1)
|
MOVDU R3, -8(R1)
|
||||||
MOVDU R0, -8(R1)
|
MOVDU R0, -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)
|
BL runtime·newproc(SB)
|
||||||
ADD $24, R1
|
ADD $(16+FIXED_FRAME), R1
|
||||||
|
|
||||||
// start this M
|
// start this M
|
||||||
BL runtime·mstart(SB)
|
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
|
MOVD (g_sched+gobuf_sp)(g), R1 // sp = m->g0->sched.sp
|
||||||
MOVDU R3, -8(R1)
|
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 (CTR)
|
BL (CTR)
|
||||||
BR runtime·badmcall2(SB)
|
BR runtime·badmcall2(SB)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -12,7 +12,7 @@ const (
|
||||||
PCQuantum = 4
|
PCQuantum = 4
|
||||||
Int64Align = 8
|
Int64Align = 8
|
||||||
HugePageSize = 0
|
HugePageSize = 0
|
||||||
MinFrameSize = 8
|
MinFrameSize = 32
|
||||||
)
|
)
|
||||||
|
|
||||||
type Uintreg uint64
|
type Uintreg uint64
|
||||||
|
|
|
||||||
|
|
@ -12,7 +12,7 @@ const (
|
||||||
PCQuantum = 4
|
PCQuantum = 4
|
||||||
Int64Align = 8
|
Int64Align = 8
|
||||||
HugePageSize = 0
|
HugePageSize = 0
|
||||||
MinFrameSize = 8
|
MinFrameSize = 32
|
||||||
)
|
)
|
||||||
|
|
||||||
type Uintreg uint64
|
type Uintreg uint64
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue