From: Dmitriy Vyukov Date: Thu, 11 Jul 2013 17:52:20 +0000 (-0400) Subject: runtime: adjust traceback for new preemptive reality X-Git-Tag: go1.2rc2~1087 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=01e1b0cb5377d665065707f9a270b223ea85a570;p=gostls13.git runtime: adjust traceback for new preemptive reality Currently it crashes as follows: fatal error: unknown pc ... goroutine 71698 [runnable]: runtime.racegoend() src/pkg/runtime/race.c:171 runtime.goexit() src/pkg/runtime/proc.c:1276 +0x9 created by runtime_test.testConcurrentReadsAfterGrowth src/pkg/runtime/map_test.go:264 +0x332 R=golang-dev, rsc CC=golang-dev https://golang.org/cl/10674047 --- diff --git a/src/pkg/runtime/traceback_arm.c b/src/pkg/runtime/traceback_arm.c index b91017eea5..599f6093eb 100644 --- a/src/pkg/runtime/traceback_arm.c +++ b/src/pkg/runtime/traceback_arm.c @@ -164,7 +164,7 @@ runtime·gentraceback(uintptr pc0, uintptr sp0, uintptr lr0, G *gp, int32 skip, waspanic = f->entry == (uintptr)runtime·sigpanic; // Do not unwind past the bottom of the stack. - if(frame.pc == (uintptr)runtime·goexit || f->entry == (uintptr)runtime·mstart || f->entry == (uintptr)_rt0_go) + if(f->entry == (uintptr)runtime·goexit || f->entry == (uintptr)runtime·mstart || f->entry == (uintptr)_rt0_go) break; // Unwind to next frame. diff --git a/src/pkg/runtime/traceback_x86.c b/src/pkg/runtime/traceback_x86.c index a6c6ebcae9..3a9b864e89 100644 --- a/src/pkg/runtime/traceback_x86.c +++ b/src/pkg/runtime/traceback_x86.c @@ -170,7 +170,7 @@ runtime·gentraceback(uintptr pc0, uintptr sp0, uintptr lr0, G *gp, int32 skip, frame.fp += 2*sizeof(uintptr); // Do not unwind past the bottom of the stack. - if(frame.pc == (uintptr)runtime·goexit || f->entry == (uintptr)runtime·mstart || f->entry == (uintptr)_rt0_go) + if(f->entry == (uintptr)runtime·goexit || f->entry == (uintptr)runtime·mstart || f->entry == (uintptr)_rt0_go) break; // Unwind to next frame.