]> Cypherpunks repositories - gostls13.git/commitdiff
fix bug in stack limit calculation - was setting limit reg in wrong place.
authorRob Pike <r@golang.org>
Tue, 9 Sep 2008 02:30:14 +0000 (19:30 -0700)
committerRob Pike <r@golang.org>
Tue, 9 Sep 2008 02:30:14 +0000 (19:30 -0700)
R=ken
OCL=14981
CL=14981

src/runtime/proc.c
src/runtime/sys_amd64_linux.s

index 2652679b270cbaeb36bc41767437e4711c647b43..5b4bc84a223b7e53378ba7e5301bab2043e9b52f 100644 (file)
@@ -463,8 +463,6 @@ oldstack(void)
 
        top = (Stktop*)m->curg->stackbase;
 
-       m->curg->stackbase = top->oldbase;
-       m->curg->stackguard = top->oldguard;
        siz2 = (top->magic>>32) & 0xffffLL;
 
        sp = (byte*)top;
@@ -474,15 +472,12 @@ oldstack(void)
                mcpy(top->oldsp+16, sp, siz2);
        }
 
+       // call  no more functions after this point - limit register disagrees with R15
+       m->curg->stackbase = top->oldbase;
+       m->curg->stackguard = top->oldguard;
        m->morestack.SP = top->oldsp+8;
        m->morestack.PC = (byte*)(*(uint64*)(top->oldsp+8));
 
-// prints("oldstack sp=");
-// sys·printpointer(m->morestack.SP);
-// prints(" pc=");
-// sys·printpointer(m->morestack.PC);
-// prints("\n");
-
        gogoret(&m->morestack, m->cret);
 }
 
index 178971b718209f54467baceef343084677dd3b17..2cb62583200b89b65db814cf0fa4c98a4125304f 100644 (file)
@@ -81,6 +81,7 @@ TEXT  sigtramp(SB),7,$24-16
 
 TEXT   sys·mmap(SB),7,$0-32
        MOVQ    8(SP), DI
+       MOVQ    $0, SI
        MOVL    16(SP), SI
        MOVL    20(SP), DX
        MOVL    24(SP), R10
@@ -103,7 +104,7 @@ TEXT        sys·mmap(SB),7,$0-32
        RET
 
 TEXT   notok(SB),7,$0
-       MOVL    $0xf1, BP
+       MOVQ    $0xf1, BP
        MOVQ    BP, (BP)
        RET