From: Josh Bleecher Snyder Date: Wed, 22 Sep 2021 18:13:20 +0000 (-0700) Subject: debug/gosym: add pcHeader parsing helpers X-Git-Tag: go1.18beta1~1160 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=45134acbe645665e93cf1d399027d56b44f23299;p=gostls13.git debug/gosym: add pcHeader parsing helpers A subsequent change will duplicate most of case ver116. Make it easier to read. Change-Id: I3a93181c7f094b12715b8a618e9efef7a1438a27 Reviewed-on: https://go-review.googlesource.com/c/go/+/351909 Trust: Josh Bleecher Snyder Run-TryBot: Josh Bleecher Snyder TryBot-Result: Go Bot Reviewed-by: Cherry Mui --- diff --git a/src/debug/gosym/pclntab.go b/src/debug/gosym/pclntab.go index a72f9847d7..555add67e3 100644 --- a/src/debug/gosym/pclntab.go +++ b/src/debug/gosym/pclntab.go @@ -225,21 +225,23 @@ func (t *LineTable) parsePclnTab() { t.quantum = uint32(t.Data[6]) t.ptrsize = uint32(t.Data[7]) + offset := func(word uint32) uint64 { + return t.uintptr(t.Data[8+word*t.ptrsize:]) + } + data := func(word uint32) []byte { + return t.Data[offset(word):] + } + switch possibleVersion { case ver116: - t.nfunctab = uint32(t.uintptr(t.Data[8:])) - t.nfiletab = uint32(t.uintptr(t.Data[8+t.ptrsize:])) - offset := t.uintptr(t.Data[8+2*t.ptrsize:]) - t.funcnametab = t.Data[offset:] - offset = t.uintptr(t.Data[8+3*t.ptrsize:]) - t.cutab = t.Data[offset:] - offset = t.uintptr(t.Data[8+4*t.ptrsize:]) - t.filetab = t.Data[offset:] - offset = t.uintptr(t.Data[8+5*t.ptrsize:]) - t.pctab = t.Data[offset:] - offset = t.uintptr(t.Data[8+6*t.ptrsize:]) - t.funcdata = t.Data[offset:] - t.functab = t.Data[offset:] + t.nfunctab = uint32(offset(0)) + t.nfiletab = uint32(offset(1)) + t.funcnametab = data(2) + t.cutab = data(3) + t.filetab = data(4) + t.pctab = data(5) + t.funcdata = data(6) + t.functab = data(6) functabsize := t.nfunctab*2*t.ptrsize + t.ptrsize t.functab = t.functab[:functabsize] case ver12: