platform

package
v1.7.2 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 7, 2024 License: Apache-2.0 Imports: 13 Imported by: 0

Documentation

Overview

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.

Index

Constants

View Source
const (

	// FakeEpochNanos is midnight UTC 2022-01-01 and exposed for testing
	FakeEpochNanos = 1640995200000 * ms
)
View Source
const MmapSupported = true

Variables

View Source
var FakeNanosleep = sys.Nanosleep(func(int64) {})

FakeNanosleep implements sys.Nanosleep by returning without sleeping.

View Source
var FakeOsyield = sys.Osyield(func() {})

FakeOsyield implements sys.Osyield by returning without yielding.

Functions

func CompilerSupported

func CompilerSupported() bool

CompilerSupported is exported for tests and includes constraints here and also the assembler.

func MmapCodeSegment

func MmapCodeSegment(size int) ([]byte, error)

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 MprotectRX added in v1.0.2

func MprotectRX(b []byte) (err error)

MprotectRX is like syscall.Mprotect with RX permission, defined locally so that freebsd compiles.

func MunmapCodeSegment

func MunmapCodeSegment(code []byte) error

MunmapCodeSegment unmaps the given memory region.

func Nanosleep

func Nanosleep(ns int64)

Nanosleep implements sys.Nanosleep with time.Sleep.

func Nanotime

func Nanotime() int64

Nanotime implements sys.Nanotime with runtime.nanotime() if CGO is available and time.Since if not.

func NewFakeNanotime

func NewFakeNanotime() sys.Nanotime

NewFakeNanotime implements sys.Nanotime that increases by 1ms each reading. See /RATIONALE.md

func NewFakeRandSource

func NewFakeRandSource() io.Reader

NewFakeRandSource returns a deterministic source of random values.

func NewFakeWalltime

func NewFakeWalltime() sys.Walltime

NewFakeWalltime implements sys.Walltime with FakeEpochNanos that increases by 1ms each reading. See /RATIONALE.md

func RemapCodeSegment added in v1.2.0

func RemapCodeSegment(code []byte, size int) ([]byte, error)

RemapCodeSegment reallocates the memory mapping of an existing code segment to increase its size. The previous code mapping is unmapped and must not be reused after the function returns.

This is similar to mremap(2) on linux, and emulated on platforms which do not have this syscall.

See https://man7.org/linux/man-pages/man2/mremap.2.html

func ToPosixPath

func ToPosixPath(in string) string

ToPosixPath returns the input, as only windows might return backslashes.

func Walltime

func Walltime() (sec int64, nsec int32)

Walltime implements sys.Walltime with time.Now.

Note: This is only notably less efficient than it could be is reading runtime.walltime(). time.Now defensively reads nanotime also, just in case time.Since is used. This doubles the performance impact. However, wall time is likely to be read less frequently than Nanotime. Also, doubling the cost matters less on fast platforms that can return both in <=100ns.

Types

type CpuFeature added in v1.7.0

type CpuFeature uint64
const (
	// CpuFeatureAmd64SSE3 is the flag to query CpuFeatureFlags.Has for SSEv3 capabilities on amd64
	CpuFeatureAmd64SSE3 CpuFeature = 1
	// CpuFeatureAmd64SSE4_1 is the flag to query CpuFeatureFlags.Has for SSEv4.1 capabilities on amd64
	CpuFeatureAmd64SSE4_1 CpuFeature = 1 << 19
	// CpuFeatureAmd64SSE4_2 is the flag to query CpuFeatureFlags.Has for SSEv4.2 capabilities on amd64
	CpuFeatureAmd64SSE4_2 CpuFeature = 1 << 20
)
const (
	// CpuExtraFeatureAmd64ABM is the flag to query CpuFeatureFlags.HasExtra for Advanced Bit Manipulation capabilities (e.g. LZCNT) on amd64
	CpuExtraFeatureAmd64ABM CpuFeature = 1 << 5
)

type CpuFeatureFlags

type CpuFeatureFlags interface {
	// Has returns true when the specified flag (represented as uint64) is supported
	Has(cpuFeature CpuFeature) bool
	// HasExtra returns true when the specified extraFlag (represented as uint64) is supported
	HasExtra(cpuFeature CpuFeature) bool
}

CpuFeatureFlags exposes methods for querying CPU capabilities

var CpuFeatures CpuFeatureFlags = loadCpuFeatureFlags()

CpuFeatures exposes the capabilities for this CPU, queried via the Has, HasExtra methods

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL