sys

package standard library
go1.19beta1 Latest Latest
Warning

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

Go to latest
Published: Jun 9, 2022 License: BSD-3-Clause Imports: 1 Imported by: 0

Documentation

Index

Constants

View Source
const ExecArgLengthLimit = (30 << 10)

ExecArgLengthLimit is the number of bytes we can safely pass as arguments to an exec.Command.

Windows has a limit of 32 KB. To be conservative and not worry about whether that includes spaces or not, just use 30 KB. Darwin's limit is less clear. The OS claims 256KB, but we've seen failures with arglen as small as 50KB.

Variables

View Source
var Arch386 = &Arch{
	Name:           "386",
	Family:         I386,
	ByteOrder:      binary.LittleEndian,
	PtrSize:        4,
	RegSize:        4,
	MinLC:          1,
	Alignment:      1,
	CanMergeLoads:  true,
	HasLR:          false,
	FixedFrameSize: 0,
}
View Source
var ArchAMD64 = &Arch{
	Name:           "amd64",
	Family:         AMD64,
	ByteOrder:      binary.LittleEndian,
	PtrSize:        8,
	RegSize:        8,
	MinLC:          1,
	Alignment:      1,
	CanMergeLoads:  true,
	CanJumpTable:   true,
	HasLR:          false,
	FixedFrameSize: 0,
}
View Source
var ArchARM = &Arch{
	Name:           "arm",
	Family:         ARM,
	ByteOrder:      binary.LittleEndian,
	PtrSize:        4,
	RegSize:        4,
	MinLC:          4,
	Alignment:      4,
	CanMergeLoads:  false,
	HasLR:          true,
	FixedFrameSize: 4,
}
View Source
var ArchARM64 = &Arch{
	Name:           "arm64",
	Family:         ARM64,
	ByteOrder:      binary.LittleEndian,
	PtrSize:        8,
	RegSize:        8,
	MinLC:          4,
	Alignment:      1,
	CanMergeLoads:  true,
	CanJumpTable:   true,
	HasLR:          true,
	FixedFrameSize: 8,
}
View Source
var ArchLoong64 = &Arch{
	Name:           "loong64",
	Family:         Loong64,
	ByteOrder:      binary.LittleEndian,
	PtrSize:        8,
	RegSize:        8,
	MinLC:          4,
	Alignment:      8,
	CanMergeLoads:  false,
	HasLR:          true,
	FixedFrameSize: 8,
}
View Source
var ArchMIPS = &Arch{
	Name:           "mips",
	Family:         MIPS,
	ByteOrder:      binary.BigEndian,
	PtrSize:        4,
	RegSize:        4,
	MinLC:          4,
	Alignment:      4,
	CanMergeLoads:  false,
	HasLR:          true,
	FixedFrameSize: 4,
}
View Source
var ArchMIPS64 = &Arch{
	Name:           "mips64",
	Family:         MIPS64,
	ByteOrder:      binary.BigEndian,
	PtrSize:        8,
	RegSize:        8,
	MinLC:          4,
	Alignment:      8,
	CanMergeLoads:  false,
	HasLR:          true,
	FixedFrameSize: 8,
}
View Source
var ArchMIPS64LE = &Arch{
	Name:           "mips64le",
	Family:         MIPS64,
	ByteOrder:      binary.LittleEndian,
	PtrSize:        8,
	RegSize:        8,
	MinLC:          4,
	Alignment:      8,
	CanMergeLoads:  false,
	HasLR:          true,
	FixedFrameSize: 8,
}
View Source
var ArchMIPSLE = &Arch{
	Name:           "mipsle",
	Family:         MIPS,
	ByteOrder:      binary.LittleEndian,
	PtrSize:        4,
	RegSize:        4,
	MinLC:          4,
	Alignment:      4,
	CanMergeLoads:  false,
	HasLR:          true,
	FixedFrameSize: 4,
}
View Source
var ArchPPC64 = &Arch{
	Name:          "ppc64",
	Family:        PPC64,
	ByteOrder:     binary.BigEndian,
	PtrSize:       8,
	RegSize:       8,
	MinLC:         4,
	Alignment:     1,
	CanMergeLoads: false,
	HasLR:         true,

	FixedFrameSize: 4 * 8,
}
View Source
var ArchPPC64LE = &Arch{
	Name:           "ppc64le",
	Family:         PPC64,
	ByteOrder:      binary.LittleEndian,
	PtrSize:        8,
	RegSize:        8,
	MinLC:          4,
	Alignment:      1,
	CanMergeLoads:  true,
	HasLR:          true,
	FixedFrameSize: 4 * 8,
}
View Source
var ArchRISCV64 = &Arch{
	Name:           "riscv64",
	Family:         RISCV64,
	ByteOrder:      binary.LittleEndian,
	PtrSize:        8,
	RegSize:        8,
	MinLC:          4,
	Alignment:      8,
	CanMergeLoads:  false,
	HasLR:          true,
	FixedFrameSize: 8,
}
View Source
var ArchS390X = &Arch{
	Name:           "s390x",
	Family:         S390X,
	ByteOrder:      binary.BigEndian,
	PtrSize:        8,
	RegSize:        8,
	MinLC:          2,
	Alignment:      1,
	CanMergeLoads:  true,
	HasLR:          true,
	FixedFrameSize: 8,
}
View Source
var ArchWasm = &Arch{
	Name:           "wasm",
	Family:         Wasm,
	ByteOrder:      binary.LittleEndian,
	PtrSize:        8,
	RegSize:        8,
	MinLC:          1,
	Alignment:      1,
	CanMergeLoads:  false,
	HasLR:          false,
	FixedFrameSize: 0,
}

Functions

func ASanSupported added in go1.18

func ASanSupported(goos, goarch string) bool

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

func BuildModeSupported added in go1.14

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

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

func FuzzInstrumented added in go1.18

func FuzzInstrumented(goos, goarch string) bool

FuzzInstrumented reports whether fuzzing on goos/goarch uses coverage instrumentation. (FuzzInstrumented implies FuzzSupported.)

func FuzzSupported added in go1.18

func FuzzSupported(goos, goarch string) bool

FuzzSupported reports whether goos/goarch supports fuzzing ('go test -fuzz=.').

func InternalLinkPIESupported added in go1.16

func InternalLinkPIESupported(goos, goarch string) bool

func MSanSupported added in go1.12

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 added in go1.13

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 added in go1.12

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.

Types

type Arch

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

	// CanMergeLoads reports whether the backend optimization passes
	// can combine adjacent loads into a single larger, possibly unaligned, load.
	// Note that currently the optimizations must be able to handle little endian byte order.
	CanMergeLoads bool

	// CanJumpTable reports whether the backend can handle
	// compiling a jump table.
	CanJumpTable bool

	// HasLR indicates that this architecture uses a link register
	// for calls.
	HasLR bool

	// FixedFrameSize is the smallest possible offset from the
	// hardware stack pointer to a local variable on the stack.
	// Architectures that use a link register save its value on
	// the stack in the function prologue and so always have a
	// pointer between the hardware stack pointer and the local
	// variable area.
	FixedFrameSize int64
}

Arch represents an individual architecture.

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

type ArchFamily byte

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

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

Jump to

Keyboard shortcuts

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