runtime: update AIX memory allocation for new versions
authorIan Lance Taylor <ian@gcc.gnu.org>
Wed, 28 Feb 2018 01:39:03 +0000 (01:39 +0000)
committerIan Lance Taylor <ian@gcc.gnu.org>
Wed, 28 Feb 2018 01:39:03 +0000 (01:39 +0000)
    Reviewed-on: https://go-review.googlesource.com/97357

From-SVN: r258052

gcc/go/gofrontend/MERGE
libgo/go/runtime/malloc.go

index dae8040bccd50e6e6af36ca76dd193644104391b..f23eef874fd1c6dce6e8b581f2613e176f60966f 100644 (file)
@@ -1,4 +1,4 @@
-bd7fc3c85d874344b18bbb0a738ec94dfb43794b
+821960465883fbdd96568f2325f55ee4b05de1cb
 
 The first line of this file holds the git revision number of the last
 merge done from the gofrontend repository.
index c27aa487df3f7eca24ae9118eb9075c6c731c803..1405a54639c72c623effd989f2fc11d798b032f3 100644 (file)
@@ -296,8 +296,8 @@ func mallocinit() {
                // allocation at 0x40 << 32 because when using 4k pages with 3-level
                // translation buffers, the user address space is limited to 39 bits
                // On darwin/arm64, the address space is even smaller.
-               // On AIX, mmap adresses range start at 0x07000000_00000000 for 64 bits
-               // processes.
+               // On AIX, mmap adresses range starts at 0x0700000000000000 for 64-bit
+               // processes. The new address space allocator starts at 0x0A00000000000000.
                arenaSize := round(_MaxMem, _PageSize)
                pSize = bitmapSize + spansSize + arenaSize + _PageSize
                for i := 0; i <= 0x7f; i++ {
@@ -307,13 +307,16 @@ func mallocinit() {
                        case GOARCH == "arm64":
                                p = uintptr(i)<<40 | uintptrMask&(0x0040<<32)
                        case GOOS == "aix":
-                               i = 1
-                               p = uintptr(i)<<32 | uintptrMask&(0x70<<52)
+                               if i == 0 {
+                                       p = uintptrMask&(1<<32) | uintptrMask&(0xa0<<52)
+                               } else {
+                                       p = uintptr(i)<<32 | uintptrMask&(0x70<<52)
+                               }
                        default:
                                p = uintptr(i)<<40 | uintptrMask&(0x00c0<<32)
                        }
                        p = uintptr(sysReserve(unsafe.Pointer(p), pSize, &reserved))
-                       if p != 0 || GOOS == "aix" { // Useless to loop on AIX, as i is forced to 1
+                       if p != 0 {
                                break
                        }
                }