mirror of
https://github.com/golang/go
synced 2024-11-12 01:20:22 -07:00
cmd/internal/obj/wasm: increment PC by 2 at sigpanic
On Wasm, PC is not the instruction counter but the block ID. We advance the PC only when necessary. In the case of sigpanic (used in nil check), the panic stack trace expects the PC at the call of sigpanic, not the next one. However, runtime.Caller subtracts 1 from the PC. To make both PC and PC-1 work (have the same line number), we advance the PC by 2 at sigpanic. Fixes #29632. Change-Id: Ieb4d0bb9dc6a8103855a194e3d289f1db4bfb1e5 Reviewed-on: https://go-review.googlesource.com/c/157157 Reviewed-by: Keith Randall <khr@golang.org> Reviewed-by: Richard Musiol <neelance@gmail.com> Run-TryBot: Richard Musiol <neelance@gmail.com> TryBot-Result: Gobot Gobot <gobot@golang.org>
This commit is contained in:
parent
8765a786b6
commit
52cae2763e
@ -280,6 +280,13 @@ func preprocess(ctxt *obj.Link, s *obj.LSym, newprog obj.ProgAlloc) {
|
||||
// implicit call, so entering and leaving this section affects the stack trace.
|
||||
if p.As == ACALLNORESUME || p.As == obj.ANOP || p.As == ANop || p.Spadj != 0 || base != prevBase {
|
||||
pc++
|
||||
if p.To.Sym == sigpanic {
|
||||
// The panic stack trace expects the PC at the call of sigpanic,
|
||||
// not the next one. However, runtime.Caller subtracts 1 from the
|
||||
// PC. To make both PC and PC-1 work (have the same line number),
|
||||
// we advance the PC by 2 at sigpanic.
|
||||
pc++
|
||||
}
|
||||
}
|
||||
}
|
||||
tableIdxs = append(tableIdxs, uint64(numResumePoints))
|
||||
|
Loading…
Reference in New Issue
Block a user