From b3d5a695a6ad56fa33455eedf8d502a1a90a51ac Mon Sep 17 00:00:00 2001 From: Dmitriy Vyukov Date: Tue, 19 Aug 2014 11:46:19 +0400 Subject: [PATCH] runtime: improve diagnostics of non-copyable frames LGTM=khr R=golang-codereviews, khr CC=golang-codereviews, rlh, rsc https://golang.org/cl/124560043 --- src/pkg/runtime/stack.c | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/src/pkg/runtime/stack.c b/src/pkg/runtime/stack.c index b4e992e658..3bd96ff314 100644 --- a/src/pkg/runtime/stack.c +++ b/src/pkg/runtime/stack.c @@ -476,6 +476,9 @@ copyabletopsegment(G *gp) if(StackDebug >= 1 && cinfo.frames != -1) runtime·printf("copystack: %d copyable frames\n", cinfo.frames); + if(cinfo.frames == -1) + return -1; + // Check to make sure all Defers are copyable for(d = gp->defer; d != nil; d = d->link) { if(cinfo.stk <= (byte*)d && (byte*)d < cinfo.base) { @@ -490,8 +493,11 @@ copyabletopsegment(G *gp) if(fn == nil) // See issue 8047 continue; f = runtime·findfunc((uintptr)fn->fn); - if(f == nil) + if(f == nil) { + if(StackDebug >= 1) + runtime·printf("copystack: no func for deferred pc %p\n", fn->fn); return -1; + } // Check to make sure we have an args pointer map for the defer's args. // We only need the args map, but we check @@ -499,11 +505,17 @@ copyabletopsegment(G *gp) // isn't provided it means the ptr map came from C and // C (particularly, cgo) lies to us. See issue 7695. stackmap = runtime·funcdata(f, FUNCDATA_ArgsPointerMaps); - if(stackmap == nil || stackmap->n <= 0) + if(stackmap == nil || stackmap->n <= 0) { + if(StackDebug >= 1) + runtime·printf("copystack: no arg info for deferred %s\n", runtime·funcname(f)); return -1; + } stackmap = runtime·funcdata(f, FUNCDATA_LocalsPointerMaps); - if(stackmap == nil || stackmap->n <= 0) + if(stackmap == nil || stackmap->n <= 0) { + if(StackDebug >= 1) + runtime·printf("copystack: no local info for deferred %s\n", runtime·funcname(f)); return -1; + } if(cinfo.stk <= (byte*)fn && (byte*)fn < cinfo.base) { // FuncVal is on the stack. Again, its copyableness -- 2.48.1