diff options
| author | Rob Pike <r@golang.org> | 2008-09-08 19:30:14 -0700 |
|---|---|---|
| committer | Rob Pike <r@golang.org> | 2008-09-08 19:30:14 -0700 |
| commit | 24838a2df659513371dd0d488d71b594e38f71ea (patch) | |
| tree | 16c32d7817b7a657f2cddedf375f8c9f9a1750dd /src | |
| parent | ffbccb66c2f79ed0f23ad90250c811b3cac9fcee (diff) | |
| download | go-24838a2df659513371dd0d488d71b594e38f71ea.tar.xz | |
fix bug in stack limit calculation - was setting limit reg in wrong place.
R=ken
OCL=14981
CL=14981
Diffstat (limited to 'src')
| -rw-r--r-- | src/runtime/proc.c | 11 | ||||
| -rw-r--r-- | src/runtime/sys_amd64_linux.s | 3 |
2 files changed, 5 insertions, 9 deletions
diff --git a/src/runtime/proc.c b/src/runtime/proc.c index 2652679b27..5b4bc84a22 100644 --- a/src/runtime/proc.c +++ b/src/runtime/proc.c @@ -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); } diff --git a/src/runtime/sys_amd64_linux.s b/src/runtime/sys_amd64_linux.s index 178971b718..2cb6258320 100644 --- a/src/runtime/sys_amd64_linux.s +++ b/src/runtime/sys_amd64_linux.s @@ -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 |
