lin
2025-06-05 ed3dd9d3e7519a82bb871d5eedb24a2fa0c91f47
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
// Copyright 2015 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
 
// Support for memory sanitizer. See runtime/cgo/mmap.go.
 
// +build linux,amd64 linux,arm64
 
package runtime
 
import "unsafe"
 
// _cgo_mmap is filled in by runtime/cgo when it is linked into the
// program, so it is only non-nil when using cgo.
//go:linkname _cgo_mmap _cgo_mmap
var _cgo_mmap unsafe.Pointer
 
// _cgo_munmap is filled in by runtime/cgo when it is linked into the
// program, so it is only non-nil when using cgo.
//go:linkname _cgo_munmap _cgo_munmap
var _cgo_munmap unsafe.Pointer
 
func mmap(addr unsafe.Pointer, n uintptr, prot, flags, fd int32, off uint32) (unsafe.Pointer, int) {
   if _cgo_mmap != nil {
       // Make ret a uintptr so that writing to it in the
       // function literal does not trigger a write barrier.
       // A write barrier here could break because of the way
       // that mmap uses the same value both as a pointer and
       // an errno value.
       var ret uintptr
       systemstack(func() {
           ret = callCgoMmap(addr, n, prot, flags, fd, off)
       })
       if ret < 4096 {
           return nil, int(ret)
       }
       return unsafe.Pointer(ret), 0
   }
   return sysMmap(addr, n, prot, flags, fd, off)
}
 
func munmap(addr unsafe.Pointer, n uintptr) {
   if _cgo_munmap != nil {
       systemstack(func() { callCgoMunmap(addr, n) })
       return
   }
   sysMunmap(addr, n)
}
 
// sysMmap calls the mmap system call. It is implemented in assembly.
func sysMmap(addr unsafe.Pointer, n uintptr, prot, flags, fd int32, off uint32) (p unsafe.Pointer, err int)
 
// callCgoMmap calls the mmap function in the runtime/cgo package
// using the GCC calling convention. It is implemented in assembly.
func callCgoMmap(addr unsafe.Pointer, n uintptr, prot, flags, fd int32, off uint32) uintptr
 
// sysMunmap calls the munmap system call. It is implemented in assembly.
func sysMunmap(addr unsafe.Pointer, n uintptr)
 
// callCgoMunmap calls the munmap function in the runtime/cgo package
// using the GCC calling convention. It is implemented in assembly.
func callCgoMunmap(addr unsafe.Pointer, n uintptr)