From 17ceef2d1fbe4ff6c92f996d96fae451b8ba1d26 Mon Sep 17 00:00:00 2001 From: ian Date: Fri, 17 Apr 2015 19:29:28 +0000 Subject: [PATCH] PR go/64999 PR go/65180 runtime: Adjust libbacktrace PC value to what runtime.Callers expects. From Lynn Boger. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@222196 138bc75d-0d04-0410-961f-82ee72b054a4 --- libgo/runtime/go-callers.c | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/libgo/runtime/go-callers.c b/libgo/runtime/go-callers.c index 34a2118..b5ab3be 100644 --- a/libgo/runtime/go-callers.c +++ b/libgo/runtime/go-callers.c @@ -83,7 +83,20 @@ callback (void *data, uintptr_t pc, const char *filename, int lineno, } loc = &arg->locbuf[arg->index]; - loc->pc = pc; + + /* On the call to backtrace_full the pc value was most likely + decremented if there was a normal call, since the pc referred to + the instruction where the call returned and not the call itself. + This was done so that the line number referred to the call + instruction. To make sure the actual pc from the call stack is + used, it is incremented here. + + In the case of a signal, the pc was not decremented by + backtrace_full but still incremented here. That doesn't really + hurt anything since the line number is right and the pc refers to + the same instruction. */ + + loc->pc = pc + 1; /* The libbacktrace library says that these strings might disappear, but with the current implementation they won't. We can't easily -- 2.7.4