package staticinit

import "cmd/compile/internal/staticinit"

Index

Variables

var MapInitToVar map[*ir.Func]*ir.Name

MapInitToVar is the inverse of VarToMapInit; it maintains a mapping from a compiler-generated init function to the map the function is initializing.

Functions

func AddKeepRelocations

func AddKeepRelocations()

AddKeepRelocations adds a dummy "R_KEEP" relocation from each global map variable V to its associated outlined init function. These relocation ensure that if the map var itself is determined to be reachable at link time, we also mark the init function as reachable.

func AnySideEffects

func AnySideEffects(n ir.Node) bool

AnySideEffects reports whether n contains any operations that could have observable side effects.

func OutlineMapInits

func OutlineMapInits(fn *ir.Func)

OutlineMapInits replaces global map initializers with outlined calls to separate "map init" functions (where possible and profitable), to facilitate better dead-code elimination by the linker.

func StaticLoc

func StaticLoc(n ir.Node) (name *ir.Name, offset int64, ok bool)

StaticLoc returns the static address of n, if n has one, or else nil.

func StaticName

func StaticName(t *types.Type) *ir.Name

StaticName returns a name backed by a (writable) static data symbol.

Types

type Entry

type Entry struct {
	Xoffset int64   // struct, array only
	Expr    ir.Node // bytes of run-time computed expressions
}

type Plan

type Plan struct {
	E []Entry
}

type Schedule

type Schedule struct {
	// Out is the ordered list of dynamic initialization
	// statements.
	Out []ir.Node

	Plans map[ir.Node]*Plan
	Temps map[ir.Node]*ir.Name
	// contains filtered or unexported fields
}

An Schedule is used to decompose assignment statements into static and dynamic initialization parts. Static initializations are handled by populating variables' linker symbol data, while dynamic initializations are accumulated to be executed in order.

func (*Schedule) StaticAssign

func (s *Schedule) StaticAssign(l *ir.Name, loff int64, r ir.Node, typ *types.Type) bool

func (*Schedule) StaticInit

func (s *Schedule) StaticInit(n ir.Node)

StaticInit adds an initialization statement n to the schedule.

Source Files

sched.go

Version
v1.24.0 (latest)
Published
Feb 10, 2025
Platform
linux/amd64
Imports
14 packages
Last checked
1 minute ago

Tools for package owners.