Black Lives Matter. Support the Equal Justice Initiative.

Package sys

import "cmd/internal/sys"
Overview
Index

Overview ▾

Variables

var Arch386 = &Arch{
    Name:      "386",
    Family:    I386,
    ByteOrder: binary.LittleEndian,
    PtrSize:   4,
    RegSize:   4,
    MinLC:     1,
    Alignment: 1,
}
var ArchAMD64 = &Arch{
    Name:      "amd64",
    Family:    AMD64,
    ByteOrder: binary.LittleEndian,
    PtrSize:   8,
    RegSize:   8,
    MinLC:     1,
    Alignment: 1,
}
var ArchARM = &Arch{
    Name:      "arm",
    Family:    ARM,
    ByteOrder: binary.LittleEndian,
    PtrSize:   4,
    RegSize:   4,
    MinLC:     4,
    Alignment: 4,
}
var ArchARM64 = &Arch{
    Name:      "arm64",
    Family:    ARM64,
    ByteOrder: binary.LittleEndian,
    PtrSize:   8,
    RegSize:   8,
    MinLC:     4,
    Alignment: 1,
}
var ArchMIPS = &Arch{
    Name:      "mips",
    Family:    MIPS,
    ByteOrder: binary.BigEndian,
    PtrSize:   4,
    RegSize:   4,
    MinLC:     4,
    Alignment: 4,
}
var ArchMIPS64 = &Arch{
    Name:      "mips64",
    Family:    MIPS64,
    ByteOrder: binary.BigEndian,
    PtrSize:   8,
    RegSize:   8,
    MinLC:     4,
    Alignment: 8,
}
var ArchMIPS64LE = &Arch{
    Name:      "mips64le",
    Family:    MIPS64,
    ByteOrder: binary.LittleEndian,
    PtrSize:   8,
    RegSize:   8,
    MinLC:     4,
    Alignment: 8,
}
var ArchMIPSLE = &Arch{
    Name:      "mipsle",
    Family:    MIPS,
    ByteOrder: binary.LittleEndian,
    PtrSize:   4,
    RegSize:   4,
    MinLC:     4,
    Alignment: 4,
}
var ArchPPC64 = &Arch{
    Name:      "ppc64",
    Family:    PPC64,
    ByteOrder: binary.BigEndian,
    PtrSize:   8,
    RegSize:   8,
    MinLC:     4,
    Alignment: 1,
}
var ArchPPC64LE = &Arch{
    Name:      "ppc64le",
    Family:    PPC64,
    ByteOrder: binary.LittleEndian,
    PtrSize:   8,
    RegSize:   8,
    MinLC:     4,
    Alignment: 1,
}
var ArchRISCV64 = &Arch{
    Name:      "riscv64",
    Family:    RISCV64,
    ByteOrder: binary.LittleEndian,
    PtrSize:   8,
    RegSize:   8,
    MinLC:     4,
    Alignment: 8,
}
var ArchS390X = &Arch{
    Name:      "s390x",
    Family:    S390X,
    ByteOrder: binary.BigEndian,
    PtrSize:   8,
    RegSize:   8,
    MinLC:     2,
    Alignment: 1,
}
var ArchWasm = &Arch{
    Name:      "wasm",
    Family:    Wasm,
    ByteOrder: binary.LittleEndian,
    PtrSize:   8,
    RegSize:   8,
    MinLC:     1,
    Alignment: 1,
}
var Archs = [...]*Arch{
    Arch386,
    ArchAMD64,
    ArchARM,
    ArchARM64,
    ArchMIPS,
    ArchMIPSLE,
    ArchMIPS64,
    ArchMIPS64LE,
    ArchPPC64,
    ArchPPC64LE,
    ArchRISCV64,
    ArchS390X,
    ArchWasm,
}

func BuildModeSupported

func BuildModeSupported(compiler, buildmode, goos, goarch string) bool

BuildModeSupported reports whether goos/goarch supports the given build mode using the given compiler.

func InternalLinkPIESupported

func InternalLinkPIESupported(goos, goarch string) bool

func MSanSupported

func MSanSupported(goos, goarch string) bool

MSanSupported reports whether goos/goarch supports the memory sanitizer option. There is a copy of this function in misc/cgo/testsanitizers/cc_test.go.

func MustLinkExternal

func MustLinkExternal(goos, goarch string) bool

MustLinkExternal reports whether goos/goarch requires external linking. (This is the opposite of internal/testenv.CanInternalLink. Keep them in sync.)

func RaceDetectorSupported

func RaceDetectorSupported(goos, goarch string) bool

RaceDetectorSupported reports whether goos/goarch supports the race detector. There is a copy of this function in cmd/dist/test.go. Race detector only supports 48-bit VMA on arm64. But it will always return true for arm64, because we don't have VMA size information during the compile time.

type Arch

Arch represents an individual architecture.

type Arch struct {
    Name   string
    Family ArchFamily

    ByteOrder binary.ByteOrder

    // PtrSize is the size in bytes of pointers and the
    // predeclared "int", "uint", and "uintptr" types.
    PtrSize int

    // RegSize is the size in bytes of general purpose registers.
    RegSize int

    // MinLC is the minimum length of an instruction code.
    MinLC int

    // Alignment is maximum alignment required by the architecture
    // for any (compiler-generated) load or store instruction.
    // Loads or stores smaller than Alignment must be naturally aligned.
    // Loads or stores larger than Alignment need only be Alignment-aligned.
    Alignment int8
}

func (*Arch) InFamily

func (a *Arch) InFamily(xs ...ArchFamily) bool

InFamily reports whether a is a member of any of the specified architecture families.

type ArchFamily

ArchFamily represents a family of one or more related architectures. For example, ppc64 and ppc64le are both members of the PPC64 family.

type ArchFamily byte
const (
    NoArch ArchFamily = iota
    AMD64
    ARM
    ARM64
    I386
    MIPS
    MIPS64
    PPC64
    RISCV64
    S390X
    Wasm
)