Source file
src/runtime/set_vma_name_linux.go
1
2
3
4
5
6
7 package runtime
8
9 import (
10 "internal/runtime/atomic"
11 "internal/runtime/syscall"
12 "unsafe"
13 )
14
15 var prSetVMAUnsupported atomic.Bool
16
17 func setVMANameSupported() bool {
18 return !prSetVMAUnsupported.Load()
19 }
20
21
22 func setVMAName(start unsafe.Pointer, length uintptr, name string) {
23 if debug.decoratemappings == 0 || !setVMANameSupported() {
24 return
25 }
26
27 var sysName [80]byte
28 n := copy(sysName[:], " Go: ")
29 copy(sysName[n:79], name)
30
31 _, _, err := syscall.Syscall6(syscall.SYS_PRCTL, syscall.PR_SET_VMA, syscall.PR_SET_VMA_ANON_NAME, uintptr(start), length, uintptr(unsafe.Pointer(&sysName[0])), 0)
32 if err == _EINVAL {
33 prSetVMAUnsupported.Store(true)
34 }
35
36 }
37
View as plain text