diff mbox series

libgo patch committed: fix lfstackUnpack on ia64

Message ID CAOyqgcVLTGMe4SpwVpisugTd_+6TYKPZ9J--GM=hzF+zQm-Giw@mail.gmail.com
State New
Headers show
Series libgo patch committed: fix lfstackUnpack on ia64 | expand

Commit Message

Ian Lance Taylor Jan. 25, 2018, 5:44 p.m. UTC
This libgo patch by James Clarke fixes 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.  Bootstrapped and ran Go runtime tests
on x86_64-pc-linux-gnu.  Committed to mainline.

Ian
diff mbox series

Patch

Index: gcc/go/gofrontend/MERGE
===================================================================
--- gcc/go/gofrontend/MERGE	(revision 257049)
+++ gcc/go/gofrontend/MERGE	(working copy)
@@ -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.
Index: libgo/go/runtime/lfstack_64bit.go
===================================================================
--- libgo/go/runtime/lfstack_64bit.go	(revision 256593)
+++ libgo/go/runtime/lfstack_64bit.go	(working copy)
@@ -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 {