AIX doesn't allow calling mmap on an address range which is already
mmap.  Therefore, once the region has been allocated, it must munmap
before being able to use it.  This patch by Clément Chigot does that
in libgo.  Bootstrapped on x86_64-pc-linux-gnu.  Committed to
mainline.

Ian
Index: gcc/go/gofrontend/MERGE
===================================================================
--- gcc/go/gofrontend/MERGE     (revision 270564)
+++ gcc/go/gofrontend/MERGE     (working copy)
@@ -1,4 +1,4 @@
-cb6fb7285bac72389bdce7ecfe87f9366022571a
+b117b468264665cfe6ec2cf3affb48330a704fa7
 
 The first line of this file holds the git revision number of the last
 merge done from the gofrontend repository.
Index: libgo/go/runtime/runtime_mmap_test.go
===================================================================
--- libgo/go/runtime/runtime_mmap_test.go       (revision 270552)
+++ libgo/go/runtime/runtime_mmap_test.go       (working copy)
@@ -32,6 +32,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 {

Reply via email to