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.