Commit c2b91d48 authored by Russ Cox's avatar Russ Cox

6l: correct logic for morestack choice

The frame that gets allocated is for both
the args and the autos.  If together they
exceed the default frame size, we need to
tell morestack about both so that it allocates
a large enough frame.

Sanity check stack pointer in morestack
to catch similar bugs.

R=ken2
CC=golang-dev
https://golang.org/cl/2609041
parent 4ae93111
......@@ -469,7 +469,7 @@ dostkoff(void)
/* 160 comes from 3 calls (3*8) 4 safes (4*8) and 104 guard */
moreconst1 = 0;
if(autoffset+160 > 4096)
if(autoffset+160+textarg > 4096)
moreconst1 = (autoffset+160) & ~7LL;
moreconst2 = textarg;
......
......@@ -749,6 +749,8 @@ newstack(void)
args = m->moreargs;
g1 = m->curg;
if(m->morebuf.sp < g1->stackguard - StackGuard)
throw("split stack overflow");
if(frame == 1 && args > 0 && m->morebuf.sp - sizeof(Stktop) - args - 32 > g1->stackguard) {
// special case: called from reflect.call (frame == 1)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment