@@ -46,7 +46,7 @@ func (s *mmapState) new(ctx context.Context, mod api.Module, size int32) *Mapped
46
46
// Save the newly allocated region.
47
47
ptr := uint32 (stack [0 ])
48
48
buf := View (mod , ptr , uint64 (size ))
49
- addr := uintptr ( unsafe .Pointer (& buf [0 ]) )
49
+ addr := unsafe .Pointer (& buf [0 ])
50
50
s .regions = append (s .regions , & MappedRegion {
51
51
Ptr : ptr ,
52
52
addr : addr ,
@@ -56,7 +56,7 @@ func (s *mmapState) new(ctx context.Context, mod api.Module, size int32) *Mapped
56
56
}
57
57
58
58
type MappedRegion struct {
59
- addr uintptr
59
+ addr unsafe. Pointer
60
60
Ptr uint32
61
61
size int32
62
62
used bool
@@ -76,23 +76,15 @@ func (r *MappedRegion) Unmap() error {
76
76
// We can't munmap the region, otherwise it could be remaped.
77
77
// Instead, convert it to a protected, private, anonymous mapping.
78
78
// If successful, it can be reused for a subsequent mmap.
79
- _ , err := mmap (r .addr , uintptr (r .size ),
80
- unix .PROT_NONE , unix .MAP_PRIVATE | unix .MAP_ANON | unix .MAP_FIXED ,
81
- - 1 , 0 )
79
+ _ , err := unix .MmapPtr (- 1 , 0 , r .addr , uintptr (r .size ),
80
+ unix .PROT_NONE , unix .MAP_PRIVATE | unix .MAP_FIXED | unix .MAP_ANON )
82
81
r .used = err != nil
83
82
return err
84
83
}
85
84
86
85
func (r * MappedRegion ) mmap (f * os.File , offset int64 , prot int ) error {
87
- _ , err := mmap (r .addr , uintptr (r .size ),
88
- prot , unix .MAP_SHARED | unix .MAP_FIXED ,
89
- int (f .Fd ()), offset )
86
+ _ , err := unix .MmapPtr (int (f .Fd ()), offset , r .addr , uintptr (r .size ),
87
+ prot , unix .MAP_SHARED | unix .MAP_FIXED )
90
88
r .used = err == nil
91
89
return err
92
90
}
93
-
94
- // We need the low level mmap for MAP_FIXED to work.
95
- // Bind the syscall version hoping that it is more stable.
96
-
97
- //go:linkname mmap syscall.mmap
98
- func mmap (addr , length uintptr , prot , flag , fd int , pos int64 ) (* byte , error )
0 commit comments