// Package platform includes runtime-specific code needed for the compiler or otherwise. // // Note: This is a dependency-free alternative to depending on parts of Go's x/sys. // See /RATIONALE.md for more context.
package platform import ( ) // CompilerSupported includes constraints here and also the assembler. func () bool { return CompilerSupports(api.CoreFeaturesV2) } func ( api.CoreFeatures) bool { switch runtime.GOOS { case "linux", "darwin", "freebsd", "netbsd", "dragonfly", "windows": if runtime.GOARCH == "arm64" { if .IsEnabled(experimental.CoreFeaturesThreads) { return CpuFeatures.Has(CpuFeatureArm64Atomic) } return true } fallthrough case "solaris", "illumos": return runtime.GOARCH == "amd64" && CpuFeatures.Has(CpuFeatureAmd64SSE4_1) default: return false } } // MmapCodeSegment copies the code into the executable region and returns the byte slice of the region. // // See https://man7.org/linux/man-pages/man2/mmap.2.html for mmap API and flags. func ( int) ([]byte, error) { if == 0 { panic("BUG: MmapCodeSegment with zero length") } if runtime.GOARCH == "amd64" { return mmapCodeSegmentAMD64() } else { return mmapCodeSegmentARM64() } } // MunmapCodeSegment unmaps the given memory region. func ( []byte) error { if len() == 0 { panic("BUG: MunmapCodeSegment with zero length") } return munmapCodeSegment() }