]> Cypherpunks repositories - gostls13.git/commitdiff
runtime: enable runtime_mmap_test.go on AIX
authorClément Chigot <clement.chigot@atos.net>
Fri, 26 Apr 2019 14:40:01 +0000 (16:40 +0200)
committerBrad Fitzpatrick <bradfitz@golang.org>
Fri, 26 Apr 2019 15:06:36 +0000 (15:06 +0000)
AIX doesn't allow to mmap an address range which is already mmap.
Therefore, once the region has been allocated, it must munmap before
being able to play with it.

Change-Id: I1547782f0379024f57869f1dda8c1c9bb12d831f
Reviewed-on: https://go-review.googlesource.com/c/go/+/174059
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>

src/runtime/defs_aix.go
src/runtime/defs_aix_ppc64.go
src/runtime/export_mmap_test.go
src/runtime/mem_aix.go
src/runtime/runtime_mmap_test.go

index 812c7fcfa231f2bdfb89a563b5928ec69eb05665..bc5101f35d0d49553667077f2f2f93dc803f12bc 100644 (file)
@@ -65,7 +65,7 @@ const (
        _PROT_WRITE = C.PROT_WRITE
        _PROT_EXEC  = C.PROT_EXEC
 
-       _MAP_ANONYMOUS = C.MAP_ANONYMOUS
+       _MAP_ANON      = C.MAP_ANONYMOUS
        _MAP_PRIVATE   = C.MAP_PRIVATE
        _MAP_FIXED     = C.MAP_FIXED
        _MADV_DONTNEED = C.MADV_DONTNEED
index db17b90496504f9032b4e033a1ef8017702c4415..dccc3a5926490da5902741c35fe4d45c49966c9b 100644 (file)
@@ -22,7 +22,7 @@ const (
        _PROT_WRITE = 0x2
        _PROT_EXEC  = 0x4
 
-       _MAP_ANONYMOUS = 0x10
+       _MAP_ANON      = 0x10
        _MAP_PRIVATE   = 0x2
        _MAP_FIXED     = 0x100
        _MADV_DONTNEED = 0x4
index f569627bd369a19782d86197dab66cad06a5e999..6c4a4466de6f8099e97b94698f33e12b17133c62 100644 (file)
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build darwin dragonfly freebsd linux nacl netbsd openbsd solaris
+// +build aix darwin dragonfly freebsd linux nacl netbsd openbsd solaris
 
 // Export guts for testing.
 
index f11f0aba52c18617359460a61d0e33ed258c5e15..56db7426af5280d59f2479e004e8525b62cd5624 100644 (file)
@@ -12,7 +12,7 @@ import (
 // prevents us from allocating more stack.
 //go:nosplit
 func sysAlloc(n uintptr, sysStat *uint64) unsafe.Pointer {
-       p, err := mmap(nil, n, _PROT_READ|_PROT_WRITE, _MAP_ANONYMOUS|_MAP_PRIVATE, -1, 0)
+       p, err := mmap(nil, n, _PROT_READ|_PROT_WRITE, _MAP_ANON|_MAP_PRIVATE, -1, 0)
        if err != 0 {
                if err == _EACCES {
                        print("runtime: mmap: access denied\n")
@@ -46,11 +46,11 @@ func sysFree(v unsafe.Pointer, n uintptr, sysStat *uint64) {
 }
 
 func sysFault(v unsafe.Pointer, n uintptr) {
-       mmap(v, n, _PROT_NONE, _MAP_ANONYMOUS|_MAP_PRIVATE|_MAP_FIXED, -1, 0)
+       mmap(v, n, _PROT_NONE, _MAP_ANON|_MAP_PRIVATE|_MAP_FIXED, -1, 0)
 }
 
 func sysReserve(v unsafe.Pointer, n uintptr) unsafe.Pointer {
-       p, err := mmap(v, n, _PROT_NONE, _MAP_ANONYMOUS|_MAP_PRIVATE, -1, 0)
+       p, err := mmap(v, n, _PROT_NONE, _MAP_ANON|_MAP_PRIVATE, -1, 0)
        if err != 0 {
                return nil
        }
@@ -63,7 +63,7 @@ func sysMap(v unsafe.Pointer, n uintptr, sysStat *uint64) {
        // AIX does not allow mapping a range that is already mapped.
        // So always unmap first even if it is already unmapped.
        munmap(v, n)
-       p, err := mmap(v, n, _PROT_READ|_PROT_WRITE, _MAP_ANONYMOUS|_MAP_FIXED|_MAP_PRIVATE, -1, 0)
+       p, err := mmap(v, n, _PROT_READ|_PROT_WRITE, _MAP_ANON|_MAP_FIXED|_MAP_PRIVATE, -1, 0)
 
        if err == _ENOMEM {
                throw("runtime: out of memory")
index 57c38bc5dc8a78870dd01fddb71dd4aa8542c6c9..6741e1da8ddd46c96cfcbb1289105fa16bee1317 100644 (file)
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build darwin dragonfly freebsd linux nacl netbsd openbsd solaris
+// +build aix darwin dragonfly freebsd linux nacl netbsd openbsd solaris
 
 package runtime_test
 
@@ -34,6 +34,11 @@ func TestPhysPageSize(t *testing.T) {
                t.Fatalf("Mmap: %v", err)
        }
 
+       if runtime.GOOS == "aix" {
+               // AIX does not allow mapping a range that is already mapped.
+               runtime.Munmap(unsafe.Pointer(uintptr(b)), 2*ps)
+       }
+
        // Mmap should fail at a half page into the buffer.
        _, err = runtime.Mmap(unsafe.Pointer(uintptr(b)+ps/2), ps, 0, runtime.MAP_ANON|runtime.MAP_PRIVATE|runtime.MAP_FIXED, -1, 0)
        if err == 0 {