https://gcc.gnu.org/bugzilla/show_bug.cgi?id=64999
--- Comment #9 from Ian Lance Taylor <ian at airs dot com> --- I think that libbacktrace is doing more or less the right thing. If we don't subtract one from pc there, we have no way to convey signal handler frames correctly. Also, the resulting PC value is in the instruction we want, not the next instruction. So probably runtime.Callers (in libgo/runtime/go-callers.c) ought to adjust the value, since that is what the Go code expects. There is a deeper problem with this code, which is that although the gc compiler can reliably map a PC value to a location, the gccgo compiler can not, because of inlining. To get inlining right, you need to collect the file/line information when unwinding; you can't recreate it afterward. runtime_callers get the right information, but runtime.Callers throws it away.