...
1
2
3
4
5 package platform
6
7 import (
8 "regexp"
9 "runtime"
10 )
11
12
13
14 var IsAtLeastGo120 = isAtLeastGo120(runtime.Version())
15
16 func isAtLeastGo120(version string) bool {
17 return regexp.MustCompile("go1.[2-9][0-9][^0-9]").MatchString(version)
18 }
19
20
21 var archRequirementsVerified bool
22
23
24 func CompilerSupported() bool {
25 switch runtime.GOOS {
26 case "darwin", "windows", "linux", "freebsd":
27 default:
28 return false
29 }
30
31 return archRequirementsVerified
32 }
33
34
35
36
37 func MmapCodeSegment(size int) ([]byte, error) {
38 if size == 0 {
39 panic("BUG: MmapCodeSegment with zero length")
40 }
41 if runtime.GOARCH == "amd64" {
42 return mmapCodeSegmentAMD64(size)
43 } else {
44 return mmapCodeSegmentARM64(size)
45 }
46 }
47
48
49
50
51
52
53
54
55
56 func RemapCodeSegment(code []byte, size int) ([]byte, error) {
57 if size < len(code) {
58 panic("BUG: RemapCodeSegment with size less than code")
59 }
60 if code == nil {
61 return MmapCodeSegment(size)
62 }
63 if runtime.GOARCH == "amd64" {
64 return remapCodeSegmentAMD64(code, size)
65 } else {
66 return remapCodeSegmentARM64(code, size)
67 }
68 }
69
70
71 func MunmapCodeSegment(code []byte) error {
72 if len(code) == 0 {
73 panic("BUG: MunmapCodeSegment with zero length")
74 }
75 return munmapCodeSegment(code)
76 }
77
78
79
80
81
82
83
84
85
86 func mustMunmapCodeSegment(code []byte) {
87 if err := munmapCodeSegment(code); err != nil {
88 panic(err)
89 }
90 }
91
View as plain text