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.

Reply via email to