From: Matthew Dempsky Date: Mon, 11 Aug 2014 17:53:38 +0000 (-0400) Subject: cmd/link: fix zig-zag decoding X-Git-Tag: go1.4beta1~861 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=eae9fee3bf8c58c7403bcd103050ef2196fdfed1;p=gostls13.git cmd/link: fix zig-zag decoding The >>1 shift needs to happen before converting to int32, otherwise large values will decode with an incorrect sign bit. The <<31 shift can happen before or after, but before is consistent with liblink and the go12symtab doc. Bug demo at http://play.golang.org/p/jLrhPUakIu LGTM=rsc R=golang-codereviews, minux, rsc CC=golang-codereviews https://golang.org/cl/119630043 --- diff --git a/src/cmd/link/pclntab.go b/src/cmd/link/pclntab.go index b0b19ad53c..a950895aa5 100644 --- a/src/cmd/link/pclntab.go +++ b/src/cmd/link/pclntab.go @@ -437,7 +437,7 @@ func (it *PCIter) Next() { return } it.start = false - sv := int32(uv)>>1 ^ int32(uv)<<31>>31 + sv := int32(uv>>1) ^ int32(uv<<31)>>31 it.Value += sv // pc delta