@@ -8,6 +8,7 @@ package unix_test
8
8
9
9
import (
10
10
"testing"
11
+ "unsafe"
11
12
12
13
"golang.org/x/sys/unix"
13
14
)
@@ -44,3 +45,32 @@ func TestMremap(t *testing.T) {
44
45
t .Fatalf ("remapping to a fixed address; got %v, want %v" , err , unix .EINVAL )
45
46
}
46
47
}
48
+
49
+ func TestMremapPtr (t * testing.T ) {
50
+ mmapProt := unix .PROT_NONE
51
+ mmapPtrProt := unix .PROT_READ | unix .PROT_WRITE
52
+ b , err := unix .Mmap (- 1 , 0 , 2 * unix .Getpagesize (), mmapProt , unix .MAP_ANON | unix .MAP_PRIVATE )
53
+ if err != nil {
54
+ t .Fatalf ("Mmap: %v" , err )
55
+ }
56
+ if _ , err := unix .MmapPtr (- 1 , 0 , unsafe .Pointer (& b [0 ]), uintptr (unix .Getpagesize ()),
57
+ mmapPtrProt , unix .MAP_ANON | unix .MAP_PRIVATE | unix .MAP_FIXED ); err != nil {
58
+ t .Fatalf ("MmapPtr: %v" , err )
59
+ }
60
+
61
+ b [0 ] = 42
62
+
63
+ if _ , err := unix .MremapPtr (
64
+ unsafe .Pointer (& b [0 ]), uintptr (unix .Getpagesize ()),
65
+ unsafe .Pointer (& b [unix .Getpagesize ()]), uintptr (unix .Getpagesize ()),
66
+ unix .MremapFixed | unix .MremapMaymove ); err != nil {
67
+ t .Fatalf ("MremapPtr: %v" , err )
68
+ }
69
+ if got := b [unix .Getpagesize ()]; got != 42 {
70
+ t .Errorf ("got %d, want 42" , got )
71
+ }
72
+
73
+ if err := unix .Munmap (b ); err != nil {
74
+ t .Fatalf ("Munmap: %v" , err )
75
+ }
76
+ }
0 commit comments