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 {