On 04/17/2015 01:29 PM, Ian Lance Taylor wrote:
The libbacktrace library returns a PC that was (usually) decremented to be part of the call instruction. The Go code that uses runtime.Callers does not expect this, and Go code that adjusts the PC value, such as libgo/go/runtime/pprof/pprof.go, can get fooled by it. This leads to GCC PRs 64999 and 65180.
There are a couple of bugs in libsanitizer with symptoms similar to those noted in 65180: 65749 and the related 65479. I've been looking into these but don't have a patch yet. What I've found is that using the decremented PC leads to the wrong line numbers on some targets (e.g, powerpc) while using the correct PC causes the same problem on others (such as x86_64) as a result of differences in the DWARF line programs emitted on these targets. Martin
This patch from Lynn Boger adjusts the PC value so that the Go code makes the correct adjustments. Bootstrapped and ran Go testsuite on x86_64-unknown-linux-gnu. Committed to mainline and GCC 5 branch. Ian