From b445d0b89283fff9f0c60a2dcaf0f540921dfec1 Mon Sep 17 00:00:00 2001 From: ian Date: Thu, 25 Jan 2018 17:44:19 +0000 Subject: [PATCH] runtime: fix lfstackUnpack on ia64 The top three region number bits must be masked out before right-shifting the address bits into place, otherwise they will be copied down into the lower always-zero address bits. Reviewed-on: https://go-review.googlesource.com/84535 git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@257061 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/go/gofrontend/MERGE | 2 +- libgo/go/runtime/lfstack_64bit.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/gcc/go/gofrontend/MERGE b/gcc/go/gofrontend/MERGE index e55b2bcfc6c..adee9cce151 100644 --- a/gcc/go/gofrontend/MERGE +++ b/gcc/go/gofrontend/MERGE @@ -1,4 +1,4 @@ -016ea21c4cba324c6ea6424da7988c6f985e671b +553e04735d1be372c596c720bcaea27e050b13a6 The first line of this file holds the git revision number of the last merge done from the gofrontend repository. diff --git a/libgo/go/runtime/lfstack_64bit.go b/libgo/go/runtime/lfstack_64bit.go index 44cbf74cae0..95d0eba57a6 100644 --- a/libgo/go/runtime/lfstack_64bit.go +++ b/libgo/go/runtime/lfstack_64bit.go @@ -78,7 +78,7 @@ func lfstackUnpack(val uint64) *lfnode { return (*lfnode)(unsafe.Pointer(uintptr(int64(val) >> sparcLinuxCntBits << 3))) } if GOARCH == "ia64" { - return (*lfnode)(unsafe.Pointer(uintptr((val>>ia64CntBits<<3)&(1<<(64-3)-1) | val&^(1<<(64-3)-1)))) + return (*lfnode)(unsafe.Pointer(uintptr(((val & (1<<(64-3) - 1)) >> ia64CntBits << 3) | val&^(1<<(64-3)-1)))) } if GOARCH == "ppc64" && GOOS == "aix" { if val&(1<<63) != 0 { -- 2.11.4.GIT