From 5fdb119fd5fb0892b653e829beb4e8e9afaf9e4c Mon Sep 17 00:00:00 2001 From: Ian Lance Taylor Date: Fri, 17 Apr 2015 19:29:28 +0000 Subject: [PATCH] re PR go/64999 (s390x libgo test failure in TestMemoryProfiler) PR go/64999 PR go/65180 runtime: Adjust libbacktrace PC value to what runtime.Callers expects. From Lynn Boger. From-SVN: r222196 --- 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 34a21188e3a..b5ab3be6473 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.30.2