aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIan Lance Taylor <ian@gcc.gnu.org>2018-01-25 17:44:19 +0000
committerIan Lance Taylor <ian@gcc.gnu.org>2018-01-25 17:44:19 +0000
commita88d1f8bb2015c752fc783e168e25e5dab99a8b9 (patch)
treec538ad105bcf5484334faf79a5d0f5116ea5862c
parent19e502d4132a2b02e71f75e4a20e6396081cdbc5 (diff)
downloadgcc-a88d1f8bb2015c752fc783e168e25e5dab99a8b9.zip
gcc-a88d1f8bb2015c752fc783e168e25e5dab99a8b9.tar.gz
gcc-a88d1f8bb2015c752fc783e168e25e5dab99a8b9.tar.bz2
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 From-SVN: r257061
-rw-r--r--gcc/go/gofrontend/MERGE2
-rw-r--r--libgo/go/runtime/lfstack_64bit.go2
2 files changed, 2 insertions, 2 deletions
diff --git a/gcc/go/gofrontend/MERGE b/gcc/go/gofrontend/MERGE
index e55b2bc..adee9cc 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 44cbf74..95d0eba 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 {