package platform

import "github.com/tetratelabs/wazero/internal/platform"

Package platform includes runtime-specific code needed for the compiler or otherwise.

Index

Constants

const (
	// CpuFeatureAmd64SSE4_1 is the flag to query CpuFeatureFlags.Has for SSEv4.1 capabilities on amd64
	CpuFeatureAmd64SSE4_1 = 1 << iota
	// CpuFeatureAmd64BMI1 is the flag to query CpuFeatureFlags.Has for Bit Manipulation Instruction Set 1 (e.g. TZCNT) on amd64
	CpuFeatureAmd64BMI1
	// CpuExtraFeatureABM is the flag to query CpuFeatureFlags.Has for Advanced Bit Manipulation capabilities (e.g. LZCNT) on amd64
	CpuFeatureAmd64ABM
)
const (

	// FakeEpochNanos is midnight UTC 2022-01-01 and exposed for testing
	FakeEpochNanos = 1640995200000 * ms
)

Variables

var CpuFeatures = loadCpuFeatureFlags()

CpuFeatures exposes the capabilities for this CPU, queried via the Has method.

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

FakeNanosleep implements sys.Nanosleep by returning without sleeping.

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

FakeOsyield implements sys.Osyield by returning without yielding.

Functions

func CompilerSupported

func CompilerSupported() bool

CompilerSupported includes constraints here and also the assembler.

func CompilerSupports

func CompilerSupports(features api.CoreFeatures) bool

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 MprotectCodeSegment

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

MprotectCodeSegment is like unix.Mprotect with RX permission.

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 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 CpuFeatureFlags

type CpuFeatureFlags uint64

CpuFeatureFlags exposes methods for querying CPU capabilities

const (
	// CpuFeatureArm64Atomic is the flag to query CpuFeatureFlags.Has for Large System Extensions capabilities on arm64
	CpuFeatureArm64Atomic CpuFeatureFlags = 1 << iota
)

func (CpuFeatureFlags) Has

func (CpuFeatureFlags) Raw

func (c CpuFeatureFlags) Raw() uint64

Source Files

cpuid.go cpuid_amd64.go crypto.go mmap_linux.go mmap_unix.go path.go platform.go time.go time_notwindows.go

Version
v1.11.0 (latest)
Published
Dec 18, 2025
Platform
linux/amd64
Imports
16 packages
Last checked
4 months ago

Tools for package owners.