[Bug go/64999] s390x libgo test failure in TestMemoryProfiler

vogt at linux dot vnet.ibm.com gcc-bugzilla@gcc.gnu.org
Wed Feb 11 07:38:00 GMT 2015


https://gcc.gnu.org/bugzilla/show_bug.cgi?id=64999

--- Comment #8 from Dominik Vogt <vogt at linux dot vnet.ibm.com> ---
The cause for this bug is the interaction between the "--pc" and this code
snippet from printStackRecord() in pprof.go:

  ... if runtime.GOARCH == "s390" || runtime.GOARCH == "s390x" {
    // only works if function was called
    // with the brasl instruction (or a
    // different 6-byte instruction).
    tracepc -= 6
  } ...

First, the pc is decremented by one, pointing to the last byte of the brasl
instruction.  Then we subtract another six bytes and end up pointing to the
last byte of the previous instruction, and that messes up the stack trace. 
printStackRecord() does not know that unwind() has already decremented the pc
and may mis-calculate the instruction address, possibly not just for s390[x]
but for other architectures as well.



More information about the Gcc-bugs mailing list