Documentation

Index

Constants

View Source
const (
	A_AUTO = 1 + iota
	A_PARAM
	A_DELETED_AUTO
)

    Auto.name

    View Source
    const (
    	PCDATA_UnsafePoint   = 0
    	PCDATA_StackMapIndex = 1
    	PCDATA_InlTreeIndex  = 2
    
    	FUNCDATA_ArgsPointerMaps    = 0
    	FUNCDATA_LocalsPointerMaps  = 1
    	FUNCDATA_StackObjects       = 2
    	FUNCDATA_InlTree            = 3
    	FUNCDATA_OpenCodedDeferInfo = 4
    
    	// ArgsSizeUnknown is set in Func.argsize to mark all functions
    	// whose argument size is unknown (C vararg functions, and
    	// assembly code without an explicit specification).
    	// This value is generated by the compiler, assembler, or linker.
    	ArgsSizeUnknown = -0x80000000
    )
    View Source
    const (
    	// PCDATA_UnsafePoint values.
    	PCDATA_UnsafePointSafe   = -1 // Safe for async preemption
    	PCDATA_UnsafePointUnsafe = -2 // Unsafe for async preemption
    
    	// PCDATA_Restart1(2) apply on a sequence of instructions, within
    	// which if an async preemption happens, we should back off the PC
    	// to the start of the sequence when resuming.
    	// We need two so we can distinguish the start/end of the sequence
    	// in case that two sequences are next to each other.
    	PCDATA_Restart1 = -3
    	PCDATA_Restart2 = -4
    
    	// Like PCDATA_Restart1, but back to function entry if async preempted.
    	PCDATA_RestartAtEntry = -5
    )

      Special PCDATA values.

      View Source
      const (
      	STACKSYSTEM = 0
      	StackSystem = STACKSYSTEM
      	StackBig    = 4096
      	StackSmall  = 128
      )
      View Source
      const (
      	KindBool = 1 + iota
      	KindInt
      	KindInt8
      	KindInt16
      	KindInt32
      	KindInt64
      	KindUint
      	KindUint8
      	KindUint16
      	KindUint32
      	KindUint64
      	KindUintptr
      	KindFloat32
      	KindFloat64
      	KindComplex64
      	KindComplex128
      	KindArray
      	KindChan
      	KindFunc
      	KindInterface
      	KindMap
      	KindPtr
      	KindSlice
      	KindString
      	KindStruct
      	KindUnsafePointer
      	KindDirectIface = 1 << 5
      	KindGCProg      = 1 << 6
      	KindMask        = (1 << 5) - 1
      )
      View Source
      const (
      	ElfRelocOffset   = 256
      	MachoRelocOffset = 2048 // reserve enough space for ELF relocations
      )
      View Source
      const (
      	StackPreempt = -1314 // 0xfff...fade
      )

      Variables

      View Source
      var (
      	GOROOT   = envOr("GOROOT", defaultGOROOT)
      	GOARCH   = envOr("GOARCH", defaultGOARCH)
      	GOOS     = envOr("GOOS", defaultGOOS)
      	GO386    = envOr("GO386", defaultGO386)
      	GOARM    = goarm()
      	GOMIPS   = gomips()
      	GOMIPS64 = gomips64()
      	GOPPC64  = goppc64()
      	GOWASM   = gowasm()
      	GO_LDSO  = defaultGO_LDSO
      	Version  = version
      )
      View Source
      var (
      	Fieldtrack_enabled        int
      	Preemptibleloops_enabled  int
      	Staticlockranking_enabled int
      	Regabi_enabled            int
      )
      View Source
      var Framepointer_enabled = GOARCH == "amd64" || GOARCH == "arm64" && (GOOS == "linux" || GOOS == "darwin" || GOOS == "ios")

        Note: must agree with runtime.framepointer_enabled.

        View Source
        var StackGuard = 928*stackGuardMultiplier() + StackSystem

          Initialize StackGuard and StackLimit according to target system.

          Functions

          func AbsFile

          func AbsFile(dir, file, rewrites string) string

            AbsFile returns the absolute filename for file in the given directory, as rewritten by the rewrites argument. For unrewritten paths, AbsFile rewrites a leading $GOROOT prefix to the literal "$GOROOT". If the resulting path is the empty string, the result is "??".

            The rewrites argument is a ;-separated list of rewrites. Each rewrite is of the form "prefix" or "prefix=>replace", where prefix must match a leading sequence of path elements and is either removed entirely or replaced by the replacement.

            func AddVersionFlag

            func AddVersionFlag()

            func ApplyRewrites

            func ApplyRewrites(file, rewrites string) (string, bool)

              ApplyRewrites returns the filename for file in the given directory, as rewritten by the rewrites argument.

              The rewrites argument is a ;-separated list of rewrites. Each rewrite is of the form "prefix" or "prefix=>replace", where prefix must match a leading sequence of path elements and is either removed entirely or replaced by the replacement.

              func DecodeArg

              func DecodeArg(arg string) string

                DecodeArg decodes an argument.

                This function is public for testing with the parallel encoder.

                func DefaultExpstring

                func DefaultExpstring() string

                func Expstring

                func Expstring() string

                func Flagcount

                func Flagcount(name, usage string, val *int)

                func Flagfn1

                func Flagfn1(name, usage string, f func(string))

                func Flagparse

                func Flagparse(usage func())

                func Flagprint

                func Flagprint(w io.Writer)

                func Getgoextlinkenabled

                func Getgoextlinkenabled() string

                func IsRuntimePackagePath

                func IsRuntimePackagePath(pkgpath string) bool

                  IsRuntimePackagePath examines 'pkgpath' and returns TRUE if it belongs to the collection of "runtime-related" packages, including "runtime" itself, "reflect", "syscall", and the "runtime/internal/*" packages. The compiler and/or assembler in some cases need to be aware of when they are building such a package, for example to enable features such as ABI selectors in assembly sources.

                  func PathToPrefix

                  func PathToPrefix(s string) string

                    PathToPrefix converts raw string to the prefix that will be used in the symbol table. All control characters, space, '%' and '"', as well as non-7-bit clean bytes turn into %xx. The period needs escaping only in the last segment of the path, and it makes for happier users if we escape that as little as possible.

                    func WorkingDir

                    func WorkingDir() string

                      WorkingDir returns the current working directory (or "/???" if the directory cannot be identified), with "/" as separator.

                      Types

                      type FuncID

                      type FuncID uint8

                        A FuncID identifies particular functions that need to be treated specially by the runtime. Note that in some situations involving plugins, there may be multiple copies of a particular special runtime function. Note: this list must match the list in runtime/symtab.go.

                        const (
                        	FuncID_normal FuncID = iota // not a special function
                        	FuncID_runtime_main
                        	FuncID_goexit
                        	FuncID_jmpdefer
                        	FuncID_mcall
                        	FuncID_morestack
                        	FuncID_mstart
                        	FuncID_rt0_go
                        	FuncID_asmcgocall
                        	FuncID_sigpanic
                        	FuncID_runfinq
                        	FuncID_gcBgMarkWorker
                        	FuncID_systemstack_switch
                        	FuncID_systemstack
                        	FuncID_cgocallback
                        	FuncID_gogo
                        	FuncID_externalthreadhandler
                        	FuncID_debugCallV1
                        	FuncID_gopanic
                        	FuncID_panicwrap
                        	FuncID_handleAsyncEvent
                        	FuncID_asyncPreempt
                        	FuncID_wrapper // any autogenerated code (hash/eq algorithms, method wrappers, etc.)
                        )

                        func GetFuncID

                        func GetFuncID(name string, isWrapper bool) FuncID

                          Get the function ID for the named function in the named file. The function should be package-qualified.

                          type HeadType

                          type HeadType uint8

                            HeadType is the executable header type.

                            const (
                            	Hunknown HeadType = iota
                            	Hdarwin
                            	Hdragonfly
                            	Hfreebsd
                            	Hjs
                            	Hlinux
                            	Hnetbsd
                            	Hopenbsd
                            	Hplan9
                            	Hsolaris
                            	Hwindows
                            	Haix
                            )

                            func (*HeadType) Set

                            func (h *HeadType) Set(s string) error

                            func (*HeadType) String

                            func (h *HeadType) String() string

                            type RelocType

                            type RelocType int16
                            const (
                            	R_ADDR RelocType = 1 + iota
                            	// R_ADDRPOWER relocates a pair of "D-form" instructions (instructions with 16-bit
                            	// immediates in the low half of the instruction word), usually addis followed by
                            	// another add or a load, inserting the "high adjusted" 16 bits of the address of
                            	// the referenced symbol into the immediate field of the first instruction and the
                            	// low 16 bits into that of the second instruction.
                            	R_ADDRPOWER
                            	// R_ADDRARM64 relocates an adrp, add pair to compute the address of the
                            	// referenced symbol.
                            	R_ADDRARM64
                            	// R_ADDRMIPS (only used on mips/mips64) resolves to the low 16 bits of an external
                            	// address, by encoding it into the instruction.
                            	R_ADDRMIPS
                            	// R_ADDROFF resolves to a 32-bit offset from the beginning of the section
                            	// holding the data being relocated to the referenced symbol.
                            	R_ADDROFF
                            	// R_WEAKADDROFF resolves just like R_ADDROFF but is a weak relocation.
                            	// A weak relocation does not make the symbol it refers to reachable,
                            	// and is only honored by the linker if the symbol is in some other way
                            	// reachable.
                            	R_WEAKADDROFF
                            	R_SIZE
                            	R_CALL
                            	R_CALLARM
                            	R_CALLARM64
                            	R_CALLIND
                            	R_CALLPOWER
                            	// R_CALLMIPS (only used on mips64) resolves to non-PC-relative target address
                            	// of a CALL (JAL) instruction, by encoding the address into the instruction.
                            	R_CALLMIPS
                            	// R_CALLRISCV marks RISC-V CALLs for stack checking.
                            	R_CALLRISCV
                            	R_CONST
                            	R_PCREL
                            	// R_TLS_LE, used on 386, amd64, and ARM, resolves to the offset of the
                            	// thread-local symbol from the thread local base and is used to implement the
                            	// "local exec" model for tls access (r.Sym is not set on intel platforms but is
                            	// set to a TLS symbol -- runtime.tlsg -- in the linker when externally linking).
                            	R_TLS_LE
                            	// R_TLS_IE, used 386, amd64, and ARM resolves to the PC-relative offset to a GOT
                            	// slot containing the offset from the thread-local symbol from the thread local
                            	// base and is used to implemented the "initial exec" model for tls access (r.Sym
                            	// is not set on intel platforms but is set to a TLS symbol -- runtime.tlsg -- in
                            	// the linker when externally linking).
                            	R_TLS_IE
                            	R_GOTOFF
                            	R_PLT0
                            	R_PLT1
                            	R_PLT2
                            	R_USEFIELD
                            	// R_USETYPE resolves to an *rtype, but no relocation is created. The
                            	// linker uses this as a signal that the pointed-to type information
                            	// should be linked into the final binary, even if there are no other
                            	// direct references. (This is used for types reachable by reflection.)
                            	R_USETYPE
                            	// R_USEIFACE marks a type is converted to an interface in the function this
                            	// relocation is applied to. The target is a type descriptor.
                            	// This is a marker relocation (0-sized), for the linker's reachabililty
                            	// analysis.
                            	R_USEIFACE
                            	// R_USEIFACEMETHOD marks an interface method that is used in the function
                            	// this relocation is applied to. The target is an interface type descriptor.
                            	// The addend is the offset of the method in the type descriptor.
                            	// This is a marker relocation (0-sized), for the linker's reachabililty
                            	// analysis.
                            	R_USEIFACEMETHOD
                            	// R_METHODOFF resolves to a 32-bit offset from the beginning of the section
                            	// holding the data being relocated to the referenced symbol.
                            	// It is a variant of R_ADDROFF used when linking from the uncommonType of a
                            	// *rtype, and may be set to zero by the linker if it determines the method
                            	// text is unreachable by the linked program.
                            	R_METHODOFF
                            	R_POWER_TOC
                            	R_GOTPCREL
                            	// R_JMPMIPS (only used on mips64) resolves to non-PC-relative target address
                            	// of a JMP instruction, by encoding the address into the instruction.
                            	// The stack nosplit check ignores this since it is not a function call.
                            	R_JMPMIPS
                            
                            	// R_DWARFSECREF resolves to the offset of the symbol from its section.
                            	// Target of relocation must be size 4 (in current implementation).
                            	R_DWARFSECREF
                            
                            	// R_DWARFFILEREF resolves to an index into the DWARF .debug_line
                            	// file table for the specified file symbol. Must be applied to an
                            	// attribute of form DW_FORM_data4.
                            	R_DWARFFILEREF
                            
                            	// Set a MOV[NZ] immediate field to bits [15:0] of the offset from the thread
                            	// local base to the thread local variable defined by the referenced (thread
                            	// local) symbol. Error if the offset does not fit into 16 bits.
                            	R_ARM64_TLS_LE
                            
                            	// Relocates an ADRP; LD64 instruction sequence to load the offset between
                            	// the thread local base and the thread local variable defined by the
                            	// referenced (thread local) symbol from the GOT.
                            	R_ARM64_TLS_IE
                            
                            	// R_ARM64_GOTPCREL relocates an adrp, ld64 pair to compute the address of the GOT
                            	// slot of the referenced symbol.
                            	R_ARM64_GOTPCREL
                            
                            	// R_ARM64_GOT resolves a GOT-relative instruction sequence, usually an adrp
                            	// followed by another ld instruction.
                            	R_ARM64_GOT
                            
                            	// R_ARM64_PCREL resolves a PC-relative addresses instruction sequence, usually an
                            	// adrp followed by another add instruction.
                            	R_ARM64_PCREL
                            
                            	// R_ARM64_LDST8 sets a LD/ST immediate value to bits [11:0] of a local address.
                            	R_ARM64_LDST8
                            
                            	// R_ARM64_LDST16 sets a LD/ST immediate value to bits [11:1] of a local address.
                            	R_ARM64_LDST16
                            
                            	// R_ARM64_LDST32 sets a LD/ST immediate value to bits [11:2] of a local address.
                            	R_ARM64_LDST32
                            
                            	// R_ARM64_LDST64 sets a LD/ST immediate value to bits [11:3] of a local address.
                            	R_ARM64_LDST64
                            
                            	// R_ARM64_LDST128 sets a LD/ST immediate value to bits [11:4] of a local address.
                            	R_ARM64_LDST128
                            
                            	// R_POWER_TLS_LE is used to implement the "local exec" model for tls
                            	// access. It resolves to the offset of the thread-local symbol from the
                            	// thread pointer (R13) and inserts this value into the low 16 bits of an
                            	// instruction word.
                            	R_POWER_TLS_LE
                            
                            	// R_POWER_TLS_IE is used to implement the "initial exec" model for tls access. It
                            	// relocates a D-form, DS-form instruction sequence like R_ADDRPOWER_DS. It
                            	// inserts to the offset of GOT slot for the thread-local symbol from the TOC (the
                            	// GOT slot is filled by the dynamic linker with the offset of the thread-local
                            	// symbol from the thread pointer (R13)).
                            	R_POWER_TLS_IE
                            
                            	// R_POWER_TLS marks an X-form instruction such as "MOVD 0(R13)(R31*1), g" as
                            	// accessing a particular thread-local symbol. It does not affect code generation
                            	// but is used by the system linker when relaxing "initial exec" model code to
                            	// "local exec" model code.
                            	R_POWER_TLS
                            
                            	// R_ADDRPOWER_DS is similar to R_ADDRPOWER above, but assumes the second
                            	// instruction is a "DS-form" instruction, which has an immediate field occupying
                            	// bits [15:2] of the instruction word. Bits [15:2] of the address of the
                            	// relocated symbol are inserted into this field; it is an error if the last two
                            	// bits of the address are not 0.
                            	R_ADDRPOWER_DS
                            
                            	// R_ADDRPOWER_PCREL relocates a D-form, DS-form instruction sequence like
                            	// R_ADDRPOWER_DS but inserts the offset of the GOT slot for the referenced symbol
                            	// from the TOC rather than the symbol's address.
                            	R_ADDRPOWER_GOT
                            
                            	// R_ADDRPOWER_PCREL relocates two D-form instructions like R_ADDRPOWER, but
                            	// inserts the displacement from the place being relocated to the address of the
                            	// relocated symbol instead of just its address.
                            	R_ADDRPOWER_PCREL
                            
                            	// R_ADDRPOWER_TOCREL relocates two D-form instructions like R_ADDRPOWER, but
                            	// inserts the offset from the TOC to the address of the relocated symbol
                            	// rather than the symbol's address.
                            	R_ADDRPOWER_TOCREL
                            
                            	// R_ADDRPOWER_TOCREL relocates a D-form, DS-form instruction sequence like
                            	// R_ADDRPOWER_DS but inserts the offset from the TOC to the address of the
                            	// relocated symbol rather than the symbol's address.
                            	R_ADDRPOWER_TOCREL_DS
                            
                            	// R_RISCV_PCREL_ITYPE resolves a 32-bit PC-relative address using an
                            	// AUIPC + I-type instruction pair.
                            	R_RISCV_PCREL_ITYPE
                            
                            	// R_RISCV_PCREL_STYPE resolves a 32-bit PC-relative address using an
                            	// AUIPC + S-type instruction pair.
                            	R_RISCV_PCREL_STYPE
                            
                            	// R_RISCV_TLS_IE_ITYPE resolves a 32-bit TLS initial-exec TOC offset
                            	// address using an AUIPC + I-type instruction pair.
                            	R_RISCV_TLS_IE_ITYPE
                            
                            	// R_RISCV_TLS_IE_STYPE resolves a 32-bit TLS initial-exec TOC offset
                            	// address using an AUIPC + S-type instruction pair.
                            	R_RISCV_TLS_IE_STYPE
                            
                            	// R_PCRELDBL relocates s390x 2-byte aligned PC-relative addresses.
                            	// TODO(mundaym): remove once variants can be serialized - see issue 14218.
                            	R_PCRELDBL
                            
                            	// R_ADDRMIPSU (only used on mips/mips64) resolves to the sign-adjusted "upper" 16
                            	// bits (bit 16-31) of an external address, by encoding it into the instruction.
                            	R_ADDRMIPSU
                            	// R_ADDRMIPSTLS (only used on mips64) resolves to the low 16 bits of a TLS
                            	// address (offset from thread pointer), by encoding it into the instruction.
                            	R_ADDRMIPSTLS
                            
                            	// R_ADDRCUOFF resolves to a pointer-sized offset from the start of the
                            	// symbol's DWARF compile unit.
                            	R_ADDRCUOFF
                            
                            	// R_WASMIMPORT resolves to the index of the WebAssembly function import.
                            	R_WASMIMPORT
                            
                            	// R_XCOFFREF (only used on aix/ppc64) prevents garbage collection by ld
                            	// of a symbol. This isn't a real relocation, it can be placed in anywhere
                            	// in a symbol and target any symbols.
                            	R_XCOFFREF
                            )

                              go:generate stringer -type=RelocType

                              func (RelocType) IsDirectCall

                              func (r RelocType) IsDirectCall() bool

                                IsDirectCall reports whether r is a relocation for a direct call. A direct call is a CALL instruction that takes the target address as an immediate. The address is embedded into the instruction, possibly with limited width. An indirect call is a CALL instruction that takes the target address in register or memory.

                                func (RelocType) IsDirectCallOrJump

                                func (r RelocType) IsDirectCallOrJump() bool

                                  IsDirectCallOrJump reports whether r is a relocation for a direct call or a direct jump.

                                  func (RelocType) IsDirectJump

                                  func (r RelocType) IsDirectJump() bool

                                    IsDirectJump reports whether r is a relocation for a direct jump. A direct jump is a JMP instruction that takes the target address as an immediate. The address is embedded into the instruction, possibly with limited width. An indirect jump is a JMP instruction that takes the target address in register or memory.

                                    func (RelocType) String

                                    func (i RelocType) String() string

                                    type SymKind

                                    type SymKind uint8

                                      A SymKind describes the kind of memory represented by a symbol.

                                      const (
                                      	// An otherwise invalid zero value for the type
                                      	Sxxx SymKind = iota
                                      	// Executable instructions
                                      	STEXT
                                      	// Read only static data
                                      	SRODATA
                                      	// Static data that does not contain any pointers
                                      	SNOPTRDATA
                                      	// Static data
                                      	SDATA
                                      	// Statically data that is initially all 0s
                                      	SBSS
                                      	// Statically data that is initially all 0s and does not contain pointers
                                      	SNOPTRBSS
                                      	// Thread-local data that is initially all 0s
                                      	STLSBSS
                                      	// Debugging data
                                      	SDWARFCUINFO
                                      	SDWARFCONST
                                      	SDWARFFCN
                                      	SDWARFABSFCN
                                      	SDWARFTYPE
                                      	SDWARFVAR
                                      	SDWARFRANGE
                                      	SDWARFLOC
                                      	SDWARFLINES
                                      	// ABI alias. An ABI alias symbol is an empty symbol with a
                                      	// single relocation with 0 size that references the native
                                      	// function implementation symbol.
                                      	//
                                      	// TODO(austin): Remove this and all uses once the compiler
                                      	// generates real ABI wrappers rather than symbol aliases.
                                      	SABIALIAS
                                      	// Coverage instrumentation counter for libfuzzer.
                                      	SLIBFUZZER_EXTRA_COUNTER
                                      )

                                        Defined SymKind values. These are used to index into cmd/link/internal/sym/AbiSymKindToSymKind

                                        TODO(rsc): Give idiomatic Go names. go:generate stringer -type=SymKind

                                        func (SymKind) String

                                        func (i SymKind) String() string