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
This commit is contained in:
Matthew Dempsky 2014-08-11 13:53:38 -04:00 committed by Russ Cox
parent 5a17aaa830
commit eae9fee3bf
1 changed files with 1 additions and 1 deletions

View File

@ -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