mirror of
https://github.com/golang/go.git
synced 2025-05-29 03:11:26 +00:00
fix bug in stack overflow check.
if stack is in low memory and frame size is huge, test could wrap around! fix by omitting test altogether if we know frame is big. R=gri OCL=14782 CL=14782
This commit is contained in:
parent
f5cb258195
commit
6c72bfa55b
@ -669,34 +669,36 @@ dostkoff(void)
|
||||
q = P;
|
||||
if(pmorestack != P)
|
||||
if(!(p->from.scale & NOSPLIT)) {
|
||||
if(autoffset <= 75) {
|
||||
// small stack
|
||||
p = appendp(p);
|
||||
p->as = ACMPQ;
|
||||
p->from.type = D_SP;
|
||||
p->to.type = D_INDIR+D_R15;
|
||||
if(autoffset < 4096) { // do we need to call morestack
|
||||
if(autoffset <= 75) {
|
||||
// small stack
|
||||
p = appendp(p);
|
||||
p->as = ACMPQ;
|
||||
p->from.type = D_SP;
|
||||
p->to.type = D_INDIR+D_R15;
|
||||
|
||||
} else {
|
||||
// large stack
|
||||
p = appendp(p);
|
||||
p->as = ALEAQ;
|
||||
p->from.type = D_INDIR+D_SP;
|
||||
p->from.offset = -(autoffset-75);
|
||||
p->to.type = D_AX;
|
||||
} else {
|
||||
// large stack
|
||||
p = appendp(p);
|
||||
p->as = ALEAQ;
|
||||
p->from.type = D_INDIR+D_SP;
|
||||
p->from.offset = -(autoffset-75);
|
||||
p->to.type = D_AX;
|
||||
|
||||
p = appendp(p);
|
||||
p->as = ACMPQ;
|
||||
p->from.type = D_AX;
|
||||
p->to.type = D_INDIR+D_R15;
|
||||
}
|
||||
|
||||
// common
|
||||
p = appendp(p);
|
||||
p->as = ACMPQ;
|
||||
p->from.type = D_AX;
|
||||
p->to.type = D_INDIR+D_R15;
|
||||
p->as = AJHI;
|
||||
p->to.type = D_BRANCH;
|
||||
p->to.offset = 4;
|
||||
q = p;
|
||||
}
|
||||
|
||||
// common
|
||||
p = appendp(p);
|
||||
p->as = AJHI;
|
||||
p->to.type = D_BRANCH;
|
||||
p->to.offset = 4;
|
||||
q = p;
|
||||
|
||||
p = appendp(p);
|
||||
p->as = AMOVQ;
|
||||
p->from.type = D_CONST;
|
||||
|
@ -145,10 +145,6 @@ BUG: fails incorrectly
|
||||
=========== bugs/bug090.go
|
||||
BUG: compilation succeeds incorrectly
|
||||
|
||||
=========== bugs/bug092.go
|
||||
BUG should not crash
|
||||
$RUNFILE: line 1: PID Illegal instruction ./$A.out
|
||||
|
||||
=========== fixedbugs/bug015.go
|
||||
fixedbugs/bug015.go:7: overflow converting constant to <int64>INT64
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user