package ld
import "cmd/link/internal/ld"
Copyright 2020 The Go Authors. All rights reserved. Use of this source code is governed by a BSD-style license that can be found in the LICENSE file.
Index ¶
- Constants
- Variables
- func Adddynsym2(ldr *loader.Loader, target *Target, syms *ArchSyms, s loader.Sym)
- func Addstring(s *sym.Symbol, str string) int64
- func Asmbelf(ctxt *Link, symo int64)
- func Asmbelfsetup()
- func Asmbmacho(ctxt *Link)
- func Asmbpe(ctxt *Link)
- func Asmbxcoff(ctxt *Link, fileoff int64)
- func Asmelfsym(ctxt *Link)
- func Asmplan9sym(ctxt *Link)
- func AtExit(f func())
- func Codeblk(ctxt *Link, out *OutBuf, addr int64, size int64)
- func CodeblkPad(ctxt *Link, out *OutBuf, addr int64, size int64, pad []byte)
- func Datblk(ctxt *Link, out *OutBuf, addr, size int64)
- func DatblkBytes(ctxt *Link, addr int64, size int64) []byte
- func Domacholink(ctxt *Link) int64
- func Dwarfblk(ctxt *Link, out *OutBuf, addr int64, size int64)
- func ELF32_R_INFO(sym uint32, type_ uint32) uint32
- func ELF32_R_SYM(info uint32) uint32
- func ELF32_R_TYPE(info uint32) uint32
- func ELF32_ST_BIND(info uint8) uint8
- func ELF32_ST_INFO(bind uint8, type_ uint8) uint8
- func ELF32_ST_TYPE(info uint8) uint8
- func ELF32_ST_VISIBILITY(oth uint8) uint8
- func ELF64_R_INFO(sym uint32, type_ uint32) uint64
- func ELF64_R_SYM(info uint64) uint32
- func ELF64_R_TYPE(info uint64) uint32
- func ELF64_ST_BIND(info uint8) uint8
- func ELF64_ST_INFO(bind uint8, type_ uint8) uint8
- func ELF64_ST_TYPE(info uint8) uint8
- func ELF64_ST_VISIBILITY(oth uint8) uint8
- func ElfSymForReloc(ctxt *Link, s *sym.Symbol) int32
- func Elfemitreloc(ctxt *Link)
- func Elfinit(ctxt *Link)
- func Elfwritedynent2(arch *sys.Arch, s *loader.SymbolBuilder, tag int, val uint64)
- func Elfwritedynentsymplus(arch *sys.Arch, s *sym.Symbol, tag int, t *sym.Symbol, add int64)
- func Elfwritedynentsymplus2(ctxt *Link, s *loader.SymbolBuilder, tag int, t loader.Sym, add int64)
- func Entryvalue(ctxt *Link) int64
- func Errorf(s *sym.Symbol, format string, args ...interface{})
- func Exit(code int)
- func Exitf(format string, a ...interface{})
- func Lflag(ctxt *Link, arg string)
- func Loaderblk(ctxt *Link, off uint64)
- func Machoemitreloc(ctxt *Link)
- func Main(arch *sys.Arch, theArch Arch)
- func Peinit(ctxt *Link)
- func PrepareAddmoduledata(ctxt *Link) (*loader.SymbolBuilder, loader.Sym)
- func Rnd(v int64, r int64) int64
- func Symaddr(s *sym.Symbol) int64
- func WriteParallel(wg *sync.WaitGroup, fn writeFn, ctxt *Link, seek, vaddr, length uint64)
- func Xcoffadddynrel(target *Target, ldr *loader.Loader, s *sym.Symbol, r *sym.Reloc) bool
- func Xcoffadddynrel2(target *Target, ldr *loader.Loader, syms *ArchSyms, s loader.Sym, r loader.Reloc2, rIdx int) bool
- func Xcoffinit(ctxt *Link)
- type ArHdr
- type Arch
- type ArchSyms
- type BuildMode
- type Dll
- type ElfEhdr
- type ElfPhdr
- type ElfShdr
- type Elfaux
- type Elflib
- type Elfstring
- type ErrorReporter
- type GCProg2
- func (p *GCProg2) AddSym(s loader.Sym)
- func (p *GCProg2) End(size int64)
- func (p *GCProg2) Init(ctxt *Link, name string)
- type Hostobj
- type IMAGE_EXPORT_DIRECTORY
- type IMAGE_IMPORT_DESCRIPTOR
- type Imp
- type Link
- func (ctxt *Link) AddTramp(s *loader.SymbolBuilder)
- func (ctxt *Link) CanUsePlugins() bool
- func (ctxt *Link) DynlinkingGo() bool
- func (ctxt *Link) Errorf(s loader.Sym, format string, args ...interface{})
- func (ctxt *Link) FixedFrameSize() int64
- func (ctxt *Link) Logf(format string, args ...interface{})
- type LinkMode
- type LookupFn
- type MachoHdr
- type MachoLoad
- type MachoPlatform
- type MachoPlatformLoad
- type MachoSect
- type MachoSeg
- type OutBuf
- func NewOutBuf(arch *sys.Arch) *OutBuf
- func (out *OutBuf) Close() error
- func (out *OutBuf) Mmap(filesize uint64) error
- func (out *OutBuf) Offset() int64
- func (out *OutBuf) Open(name string) error
- func (out *OutBuf) SeekSet(p int64)
- func (out *OutBuf) View(start uint64) (*OutBuf, error)
- func (out *OutBuf) Write(v []byte) (int, error)
- func (out *OutBuf) Write16(v uint16)
- func (out *OutBuf) Write32(v uint32)
- func (out *OutBuf) Write32b(v uint32)
- func (out *OutBuf) Write64(v uint64)
- func (out *OutBuf) Write64b(v uint64)
- func (out *OutBuf) Write8(v uint8)
- func (out *OutBuf) WriteByte(v byte) error
- func (out *OutBuf) WriteString(s string)
- func (out *OutBuf) WriteStringN(s string, n int)
- func (out *OutBuf) WriteStringPad(s string, n int, pad []byte)
- func (out *OutBuf) WriteSym(ldr *loader.Loader, s loader.Sym)
- type Pkg
- type Rpath
- type Shlib
- type SymbolType
- type Target
- func (t *Target) CanUsePlugins() bool
- func (t *Target) Is386() bool
- func (t *Target) IsAIX() bool
- func (t *Target) IsAMD64() bool
- func (t *Target) IsARM() bool
- func (t *Target) IsARM64() bool
- func (t *Target) IsBigEndian() bool
- func (t *Target) IsDarwin() bool
- func (t *Target) IsDynlinkingGo() bool
- func (t *Target) IsElf() bool
- func (t *Target) IsExe() bool
- func (t *Target) IsExternal() bool
- func (t *Target) IsInternal() bool
- func (t *Target) IsLinux() bool
- func (t *Target) IsMIPS() bool
- func (t *Target) IsMIPS64() bool
- func (t *Target) IsNetbsd() bool
- func (t *Target) IsOpenbsd() bool
- func (t *Target) IsPIE() bool
- func (t *Target) IsPPC64() bool
- func (t *Target) IsPlan9() bool
- func (t *Target) IsPlugin() bool
- func (t *Target) IsRISCV64() bool
- func (t *Target) IsS390X() bool
- func (t *Target) IsShared() bool
- func (t *Target) IsSharedGoLink() bool
- func (t *Target) IsSolaris() bool
- func (t *Target) IsWasm() bool
- func (t *Target) IsWindows() bool
- func (t *Target) UseRelro() bool
- type XcoffAoutHdr64
- type XcoffAuxCSect64
- type XcoffAuxDWARF64
- type XcoffAuxFcn64
- type XcoffAuxFile64
- type XcoffFileHdr64
- type XcoffLdHdr64
- type XcoffLdImportFile64
- type XcoffLdRel64
- type XcoffLdStr64
- type XcoffLdSym64
- type XcoffScnHdr64
- type XcoffSymEnt64
Constants ¶
const ( SARMAG = 8 SAR_HDR = 16 + 44 )
const ( MaxKeySize = 128 MaxValSize = 128 BucketSize = 8 )
synthesizemaptypes is way too closely married to runtime/hashmap.c
const ( LINE_BASE = -4 LINE_RANGE = 10 PC_RANGE = (255 - OPCODE_BASE) / LINE_RANGE OPCODE_BASE = 11 )
* Generate a sequence of opcodes that is as short as possible. * See section 6.2.5
const ( EI_MAG0 = 0 EI_MAG1 = 1 EI_MAG2 = 2 EI_MAG3 = 3 EI_CLASS = 4 EI_DATA = 5 EI_VERSION = 6 EI_OSABI = 7 EI_ABIVERSION = 8 OLD_EI_BRAND = 8 EI_PAD = 9 EI_NIDENT = 16 ELFMAG0 = 0x7f ELFMAG1 = 'E' ELFMAG2 = 'L' ELFMAG3 = 'F' SELFMAG = 4 EV_NONE = 0 EV_CURRENT = 1 ELFCLASSNONE = 0 ELFCLASS32 = 1 ELFCLASS64 = 2 ELFDATANONE = 0 ELFDATA2LSB = 1 ELFDATA2MSB = 2 ELFOSABI_NONE = 0 ELFOSABI_HPUX = 1 ELFOSABI_NETBSD = 2 ELFOSABI_LINUX = 3 ELFOSABI_HURD = 4 ELFOSABI_86OPEN = 5 ELFOSABI_SOLARIS = 6 ELFOSABI_AIX = 7 ELFOSABI_IRIX = 8 ELFOSABI_FREEBSD = 9 ELFOSABI_TRU64 = 10 ELFOSABI_MODESTO = 11 ELFOSABI_OPENBSD = 12 ELFOSABI_OPENVMS = 13 ELFOSABI_NSK = 14 ELFOSABI_ARM = 97 ELFOSABI_STANDALONE = 255 ELFOSABI_SYSV = ELFOSABI_NONE ELFOSABI_MONTEREY = ELFOSABI_AIX ET_NONE = 0 ET_REL = 1 ET_EXEC = 2 ET_DYN = 3 ET_CORE = 4 ET_LOOS = 0xfe00 ET_HIOS = 0xfeff ET_LOPROC = 0xff00 ET_HIPROC = 0xffff EM_NONE = 0 EM_M32 = 1 EM_SPARC = 2 EM_386 = 3 EM_68K = 4 EM_88K = 5 EM_860 = 7 EM_MIPS = 8 EM_S370 = 9 EM_MIPS_RS3_LE = 10 EM_PARISC = 15 EM_VPP500 = 17 EM_SPARC32PLUS = 18 EM_960 = 19 EM_PPC = 20 EM_PPC64 = 21 EM_S390 = 22 EM_V800 = 36 EM_FR20 = 37 EM_RH32 = 38 EM_RCE = 39 EM_ARM = 40 EM_SH = 42 EM_SPARCV9 = 43 EM_TRICORE = 44 EM_ARC = 45 EM_H8_300 = 46 EM_H8_300H = 47 EM_H8S = 48 EM_H8_500 = 49 EM_IA_64 = 50 EM_MIPS_X = 51 EM_COLDFIRE = 52 EM_68HC12 = 53 EM_MMA = 54 EM_PCP = 55 EM_NCPU = 56 EM_NDR1 = 57 EM_STARCORE = 58 EM_ME16 = 59 EM_ST100 = 60 EM_TINYJ = 61 EM_X86_64 = 62 EM_AARCH64 = 183 EM_486 = 6 EM_MIPS_RS4_BE = 10 EM_ALPHA_STD = 41 EM_ALPHA = 0x9026 EM_RISCV = 243 SHN_UNDEF = 0 SHN_LORESERVE = 0xff00 SHN_LOPROC = 0xff00 SHN_HIPROC = 0xff1f SHN_LOOS = 0xff20 SHN_HIOS = 0xff3f SHN_ABS = 0xfff1 SHN_COMMON = 0xfff2 SHN_XINDEX = 0xffff SHN_HIRESERVE = 0xffff SHT_NULL = 0 SHT_PROGBITS = 1 SHT_SYMTAB = 2 SHT_STRTAB = 3 SHT_RELA = 4 SHT_HASH = 5 SHT_DYNAMIC = 6 SHT_NOTE = 7 SHT_NOBITS = 8 SHT_REL = 9 SHT_SHLIB = 10 SHT_DYNSYM = 11 SHT_INIT_ARRAY = 14 SHT_FINI_ARRAY = 15 SHT_PREINIT_ARRAY = 16 SHT_GROUP = 17 SHT_SYMTAB_SHNDX = 18 SHT_LOOS = 0x60000000 SHT_HIOS = 0x6fffffff SHT_GNU_VERDEF = 0x6ffffffd SHT_GNU_VERNEED = 0x6ffffffe SHT_GNU_VERSYM = 0x6fffffff SHT_LOPROC = 0x70000000 SHT_ARM_ATTRIBUTES = 0x70000003 SHT_HIPROC = 0x7fffffff SHT_LOUSER = 0x80000000 SHT_HIUSER = 0xffffffff SHF_WRITE = 0x1 SHF_ALLOC = 0x2 SHF_EXECINSTR = 0x4 SHF_MERGE = 0x10 SHF_STRINGS = 0x20 SHF_INFO_LINK = 0x40 SHF_LINK_ORDER = 0x80 SHF_OS_NONCONFORMING = 0x100 SHF_GROUP = 0x200 SHF_TLS = 0x400 SHF_MASKOS = 0x0ff00000 SHF_MASKPROC = 0xf0000000 PT_NULL = 0 PT_LOAD = 1 PT_DYNAMIC = 2 PT_INTERP = 3 PT_NOTE = 4 PT_SHLIB = 5 PT_PHDR = 6 PT_TLS = 7 PT_LOOS = 0x60000000 PT_HIOS = 0x6fffffff PT_LOPROC = 0x70000000 PT_HIPROC = 0x7fffffff PT_GNU_STACK = 0x6474e551 PT_GNU_RELRO = 0x6474e552 PT_PAX_FLAGS = 0x65041580 PT_SUNWSTACK = 0x6ffffffb PF_X = 0x1 PF_W = 0x2 PF_R = 0x4 PF_MASKOS = 0x0ff00000 PF_MASKPROC = 0xf0000000 DT_NULL = 0 DT_NEEDED = 1 DT_PLTRELSZ = 2 DT_PLTGOT = 3 DT_HASH = 4 DT_STRTAB = 5 DT_SYMTAB = 6 DT_RELA = 7 DT_RELASZ = 8 DT_RELAENT = 9 DT_STRSZ = 10 DT_SYMENT = 11 DT_INIT = 12 DT_FINI = 13 DT_SONAME = 14 DT_RPATH = 15 DT_SYMBOLIC = 16 DT_REL = 17 DT_RELSZ = 18 DT_RELENT = 19 DT_PLTREL = 20 DT_DEBUG = 21 DT_TEXTREL = 22 DT_JMPREL = 23 DT_BIND_NOW = 24 DT_INIT_ARRAY = 25 DT_FINI_ARRAY = 26 DT_INIT_ARRAYSZ = 27 DT_FINI_ARRAYSZ = 28 DT_RUNPATH = 29 DT_FLAGS = 30 DT_ENCODING = 32 DT_PREINIT_ARRAY = 32 DT_PREINIT_ARRAYSZ = 33 DT_LOOS = 0x6000000d DT_HIOS = 0x6ffff000 DT_LOPROC = 0x70000000 DT_HIPROC = 0x7fffffff DT_VERNEED = 0x6ffffffe DT_VERNEEDNUM = 0x6fffffff DT_VERSYM = 0x6ffffff0 DT_PPC64_GLINK = DT_LOPROC + 0 DT_PPC64_OPT = DT_LOPROC + 3 DF_ORIGIN = 0x0001 DF_SYMBOLIC = 0x0002 DF_TEXTREL = 0x0004 DF_BIND_NOW = 0x0008 DF_STATIC_TLS = 0x0010 NT_PRSTATUS = 1 NT_FPREGSET = 2 NT_PRPSINFO = 3 STB_LOCAL = 0 STB_GLOBAL = 1 STB_WEAK = 2 STB_LOOS = 10 STB_HIOS = 12 STB_LOPROC = 13 STB_HIPROC = 15 STT_NOTYPE = 0 STT_OBJECT = 1 STT_FUNC = 2 STT_SECTION = 3 STT_FILE = 4 STT_COMMON = 5 STT_TLS = 6 STT_LOOS = 10 STT_HIOS = 12 STT_LOPROC = 13 STT_HIPROC = 15 STV_DEFAULT = 0x0 STV_INTERNAL = 0x1 STV_HIDDEN = 0x2 STV_PROTECTED = 0x3 STN_UNDEF = 0 )
const ( ELF64HDRSIZE = 64 ELF64PHDRSIZE = 56 ELF64SHDRSIZE = 64 ELF64RELSIZE = 16 ELF64RELASIZE = 24 ELF64SYMSIZE = 24 ELF32HDRSIZE = 52 ELF32PHDRSIZE = 32 ELF32SHDRSIZE = 40 ELF32SYMSIZE = 16 ELF32RELSIZE = 8 )
* Go linker interface
const ( ELF_NOTE_NETBSD_NAMESZ = 7 ELF_NOTE_NETBSD_DESCSZ = 4 ELF_NOTE_NETBSD_TAG = 1 ELF_NOTE_NETBSD_VERSION = 700000000 /* NetBSD 7.0 */ )
NetBSD Signature (as per sys/exec_elf.h)
const ( ELF_NOTE_OPENBSD_NAMESZ = 8 ELF_NOTE_OPENBSD_DESCSZ = 4 ELF_NOTE_OPENBSD_TAG = 1 ELF_NOTE_OPENBSD_VERSION = 0 )
OpenBSD Signature
const ( ELF_NOTE_BUILDINFO_NAMESZ = 4 ELF_NOTE_BUILDINFO_TAG = 3 )
Build info note
const ( ELF_NOTE_GOPKGLIST_TAG = 1 ELF_NOTE_GOABIHASH_TAG = 2 ELF_NOTE_GODEPS_TAG = 3 ELF_NOTE_GOBUILDID_TAG = 4 )
Go specific notes
const ( MACHO_CPU_AMD64 = 1<<24 | 7 MACHO_CPU_386 = 7 MACHO_SUBCPU_X86 = 3 MACHO_CPU_ARM = 12 MACHO_SUBCPU_ARM = 0 MACHO_SUBCPU_ARMV7 = 9 MACHO_CPU_ARM64 = 1<<24 | 12 MACHO_SUBCPU_ARM64_ALL = 0 MACHO32SYMSIZE = 12 MACHO64SYMSIZE = 16 MACHO_X86_64_RELOC_UNSIGNED = 0 MACHO_X86_64_RELOC_SIGNED = 1 MACHO_X86_64_RELOC_BRANCH = 2 MACHO_X86_64_RELOC_GOT_LOAD = 3 MACHO_X86_64_RELOC_GOT = 4 MACHO_X86_64_RELOC_SUBTRACTOR = 5 MACHO_X86_64_RELOC_SIGNED_1 = 6 MACHO_X86_64_RELOC_SIGNED_2 = 7 MACHO_X86_64_RELOC_SIGNED_4 = 8 MACHO_ARM_RELOC_VANILLA = 0 MACHO_ARM_RELOC_PAIR = 1 MACHO_ARM_RELOC_SECTDIFF = 2 MACHO_ARM_RELOC_BR24 = 5 MACHO_ARM64_RELOC_UNSIGNED = 0 MACHO_ARM64_RELOC_BRANCH26 = 2 MACHO_ARM64_RELOC_PAGE21 = 3 MACHO_ARM64_RELOC_PAGEOFF12 = 4 MACHO_ARM64_RELOC_ADDEND = 10 MACHO_GENERIC_RELOC_VANILLA = 0 MACHO_FAKE_GOTPCREL = 100 )
const ( MH_MAGIC = 0xfeedface MH_MAGIC_64 = 0xfeedfacf MH_OBJECT = 0x1 MH_EXECUTE = 0x2 MH_NOUNDEFS = 0x1 )
const ( LC_SEGMENT = 0x1 LC_SYMTAB = 0x2 LC_SYMSEG = 0x3 LC_THREAD = 0x4 LC_UNIXTHREAD = 0x5 LC_LOADFVMLIB = 0x6 LC_IDFVMLIB = 0x7 LC_IDENT = 0x8 LC_FVMFILE = 0x9 LC_PREPAGE = 0xa LC_DYSYMTAB = 0xb LC_LOAD_DYLIB = 0xc LC_ID_DYLIB = 0xd LC_LOAD_DYLINKER = 0xe LC_ID_DYLINKER = 0xf LC_PREBOUND_DYLIB = 0x10 LC_ROUTINES = 0x11 LC_SUB_FRAMEWORK = 0x12 LC_SUB_UMBRELLA = 0x13 LC_SUB_CLIENT = 0x14 LC_SUB_LIBRARY = 0x15 LC_TWOLEVEL_HINTS = 0x16 LC_PREBIND_CKSUM = 0x17 LC_LOAD_WEAK_DYLIB = 0x80000018 LC_SEGMENT_64 = 0x19 LC_ROUTINES_64 = 0x1a LC_UUID = 0x1b LC_RPATH = 0x8000001c LC_CODE_SIGNATURE = 0x1d LC_SEGMENT_SPLIT_INFO = 0x1e LC_REEXPORT_DYLIB = 0x8000001f LC_LAZY_LOAD_DYLIB = 0x20 LC_ENCRYPTION_INFO = 0x21 LC_DYLD_INFO = 0x22 LC_DYLD_INFO_ONLY = 0x80000022 LC_LOAD_UPWARD_DYLIB = 0x80000023 LC_VERSION_MIN_MACOSX = 0x24 LC_VERSION_MIN_IPHONEOS = 0x25 LC_FUNCTION_STARTS = 0x26 LC_DYLD_ENVIRONMENT = 0x27 LC_MAIN = 0x80000028 LC_DATA_IN_CODE = 0x29 LC_SOURCE_VERSION = 0x2A LC_DYLIB_CODE_SIGN_DRS = 0x2B LC_ENCRYPTION_INFO_64 = 0x2C LC_LINKER_OPTION = 0x2D LC_LINKER_OPTIMIZATION_HINT = 0x2E LC_VERSION_MIN_TVOS = 0x2F LC_VERSION_MIN_WATCHOS = 0x30 LC_VERSION_NOTE = 0x31 LC_BUILD_VERSION = 0x32 )
const ( S_REGULAR = 0x0 S_ZEROFILL = 0x1 S_NON_LAZY_SYMBOL_POINTERS = 0x6 S_SYMBOL_STUBS = 0x8 S_MOD_INIT_FUNC_POINTERS = 0x9 S_ATTR_PURE_INSTRUCTIONS = 0x80000000 S_ATTR_DEBUG = 0x02000000 S_ATTR_SOME_INSTRUCTIONS = 0x00000400 )
const ( SymKindLocal = 0 + iota SymKindExtdef SymKindUndef NumSymKind )
const ( BUCKETSIZE = 256 * MINFUNC SUBBUCKETS = 16 SUBBUCKETSIZE = BUCKETSIZE / SUBBUCKETS NOIDX = 0x7fffffff )
const ( IMAGE_SCN_CNT_CODE = 0x00000020 IMAGE_SCN_CNT_INITIALIZED_DATA = 0x00000040 IMAGE_SCN_CNT_UNINITIALIZED_DATA = 0x00000080 IMAGE_SCN_MEM_EXECUTE = 0x20000000 IMAGE_SCN_MEM_READ = 0x40000000 IMAGE_SCN_MEM_WRITE = 0x80000000 IMAGE_SCN_MEM_DISCARDABLE = 0x2000000 IMAGE_SCN_LNK_NRELOC_OVFL = 0x1000000 IMAGE_SCN_ALIGN_32BYTES = 0x600000 )
const ( // TODO: the Microsoft doco says IMAGE_SYM_DTYPE_ARRAY is 3 and IMAGE_SYM_DTYPE_FUNCTION is 2 IMAGE_SYM_TYPE_NULL = 0 IMAGE_SYM_TYPE_STRUCT = 8 IMAGE_SYM_DTYPE_FUNCTION = 0x20 IMAGE_SYM_DTYPE_ARRAY = 0x30 IMAGE_SYM_CLASS_EXTERNAL = 2 IMAGE_SYM_CLASS_STATIC = 3 IMAGE_REL_I386_DIR32 = 0x0006 IMAGE_REL_I386_SECREL = 0x000B IMAGE_REL_I386_REL32 = 0x0014 IMAGE_REL_AMD64_ADDR64 = 0x0001 IMAGE_REL_AMD64_ADDR32 = 0x0002 IMAGE_REL_AMD64_REL32 = 0x0004 IMAGE_REL_AMD64_SECREL = 0x000B IMAGE_REL_ARM_ABSOLUTE = 0x0000 IMAGE_REL_ARM_ADDR32 = 0x0001 IMAGE_REL_ARM_ADDR32NB = 0x0002 IMAGE_REL_ARM_BRANCH24 = 0x0003 IMAGE_REL_ARM_BRANCH11 = 0x0004 IMAGE_REL_ARM_SECREL = 0x000F IMAGE_REL_BASED_HIGHLOW = 3 IMAGE_REL_BASED_DIR64 = 10 )
TODO(crawshaw): add these constants to debug/pe.
const ( PeMinimumTargetMajorVersion = 6 PeMinimumTargetMinorVersion = 1 )
const ( // Total amount of space to reserve at the start of the file // for File Header, Auxiliary Header, and Section Headers. // May waste some. XCOFFHDRRESERVE = FILHSZ_64 + AOUTHSZ_EXEC64 + SCNHSZ_64*23 XCOFFSECTALIGN int64 = 32 // base on dump -o // XCOFF binaries should normally have all its sections position-independent. // However, this is not yet possible for .text because of some R_ADDR relocations // inside RODATA symbols. // .data and .bss are position-independent so their address start inside a unreachable // segment during execution to force segfault if something is wrong. XCOFFTEXTBASE = 0x100000000 // Start of text address XCOFFDATABASE = 0x200000000 // Start of data address )
const ( F_RELFLG = 0x0001 F_EXEC = 0x0002 F_LNNO = 0x0004 F_FDPR_PROF = 0x0010 F_FDPR_OPTI = 0x0020 F_DSA = 0x0040 F_VARPG = 0x0100 F_DYNLOAD = 0x1000 F_SHROBJ = 0x2000 F_LOADONLY = 0x4000 )
Flags that describe the type of the object file.
const ( STYP_DWARF = 0x0010 STYP_TEXT = 0x0020 STYP_DATA = 0x0040 STYP_BSS = 0x0080 STYP_EXCEPT = 0x0100 STYP_INFO = 0x0200 STYP_TDATA = 0x0400 STYP_TBSS = 0x0800 STYP_LOADER = 0x1000 STYP_DEBUG = 0x2000 STYP_TYPCHK = 0x4000 STYP_OVRFLO = 0x8000 )
Flags defining the section type.
const ( SSUBTYP_DWINFO = 0x10000 // DWARF info section SSUBTYP_DWLINE = 0x20000 // DWARF line-number section SSUBTYP_DWPBNMS = 0x30000 // DWARF public names section SSUBTYP_DWPBTYP = 0x40000 // DWARF public types section SSUBTYP_DWARNGE = 0x50000 // DWARF aranges section SSUBTYP_DWABREV = 0x60000 // DWARF abbreviation section SSUBTYP_DWSTR = 0x70000 // DWARF strings section SSUBTYP_DWRNGES = 0x80000 // DWARF ranges section SSUBTYP_DWLOC = 0x90000 // DWARF location lists section SSUBTYP_DWFRAME = 0xA0000 // DWARF frames section SSUBTYP_DWMAC = 0xB0000 // DWARF macros section )
const ( FILHSZ_32 = 20 FILHSZ_64 = 24 AOUTHSZ_EXEC32 = 72 AOUTHSZ_EXEC64 = 120 SCNHSZ_32 = 40 SCNHSZ_64 = 72 LDHDRSZ_32 = 32 LDHDRSZ_64 = 56 LDSYMSZ_64 = 24 RELSZ_64 = 14 )
Headers size
const ( // Nscnum N_DEBUG = -2 N_ABS = -1 N_UNDEF = 0 //Ntype SYM_V_INTERNAL = 0x1000 SYM_V_HIDDEN = 0x2000 SYM_V_PROTECTED = 0x3000 SYM_V_EXPORTED = 0x4000 SYM_TYPE_FUNC = 0x0020 // is function )
const ( C_NULL = 0 // Symbol table entry marked for deletion C_EXT = 2 // External symbol C_STAT = 3 // Static symbol C_BLOCK = 100 // Beginning or end of inner block C_FCN = 101 // Beginning or end of function C_FILE = 103 // Source file name and compiler information C_HIDEXT = 107 // Unnamed external symbol C_BINCL = 108 // Beginning of include file C_EINCL = 109 // End of include file C_WEAKEXT = 111 // Weak external symbol C_DWARF = 112 // DWARF symbol C_GSYM = 128 // Global variable C_LSYM = 129 // Automatic variable allocated on stack C_PSYM = 130 // Argument to subroutine allocated on stack C_RSYM = 131 // Register variable C_RPSYM = 132 // Argument to function or procedure stored in register C_STSYM = 133 // Statically allocated symbol C_BCOMM = 135 // Beginning of common block C_ECOML = 136 // Local member of common block C_ECOMM = 137 // End of common block C_DECL = 140 // Declaration of object C_ENTRY = 141 // Alternate entry C_FUN = 142 // Function or procedure C_BSTAT = 143 // Beginning of static block C_ESTAT = 144 // End of static block C_GTLS = 145 // Global thread-local variable C_STTLS = 146 // Static thread-local variable )
Storage Class.
const ( XFT_FN = 0 // Source File Name XFT_CT = 1 // Compile Time Stamp XFT_CV = 2 // Compiler Version Number XFT_CD = 128 // Compiler Defined Information/ )
Xftype field
const ( XTY_ER = 0 // External reference XTY_SD = 1 // Section definition XTY_LD = 2 // Label definition XTY_CM = 3 // Common csect definition XTY_WK = 0x8 // Weak symbol XTY_EXP = 0x10 // Exported symbol XTY_ENT = 0x20 // Entry point symbol XTY_IMP = 0x40 // Imported symbol )
Symbol type field.
const ( XMC_PR = 0 // Program code XMC_RO = 1 // Read-only constant XMC_DB = 2 // Debug dictionary table XMC_TC = 3 // TOC entry XMC_UA = 4 // Unclassified XMC_RW = 5 // Read/Write data XMC_GL = 6 // Global linkage XMC_XO = 7 // Extended operation XMC_SV = 8 // 32-bit supervisor call descriptor XMC_BS = 9 // BSS class XMC_DS = 10 // Function descriptor XMC_UC = 11 // Unnamed FORTRAN common XMC_TC0 = 15 // TOC anchor XMC_TD = 16 // Scalar data entry in the TOC XMC_SV64 = 17 // 64-bit supervisor call descriptor XMC_SV3264 = 18 // Supervisor call descriptor for both 32-bit and 64-bit XMC_TL = 20 // Read/Write thread-local data XMC_UL = 21 // Read/Write thread-local data (.tbss) XMC_TE = 22 // TOC entry )
Storage-mapping class.
const ( XCOFF_R_POS = 0x00 // A(sym) Positive Relocation XCOFF_R_NEG = 0x01 // -A(sym) Negative Relocation XCOFF_R_REL = 0x02 // A(sym-*) Relative to self XCOFF_R_TOC = 0x03 // A(sym-TOC) Relative to TOC XCOFF_R_TRL = 0x12 // A(sym-TOC) TOC Relative indirect load. XCOFF_R_TRLA = 0x13 // A(sym-TOC) TOC Rel load address. modifiable inst XCOFF_R_GL = 0x05 // A(external TOC of sym) Global Linkage XCOFF_R_TCL = 0x06 // A(local TOC of sym) Local object TOC address XCOFF_R_RL = 0x0C // A(sym) Pos indirect load. modifiable instruction XCOFF_R_RLA = 0x0D // A(sym) Pos Load Address. modifiable instruction XCOFF_R_REF = 0x0F // AL0(sym) Non relocating ref. No garbage collect XCOFF_R_BA = 0x08 // A(sym) Branch absolute. Cannot modify instruction XCOFF_R_RBA = 0x18 // A(sym) Branch absolute. modifiable instruction XCOFF_R_BR = 0x0A // A(sym-*) Branch rel to self. non modifiable XCOFF_R_RBR = 0x1A // A(sym-*) Branch rel to self. modifiable instr XCOFF_R_TLS = 0x20 // General-dynamic reference to TLS symbol XCOFF_R_TLS_IE = 0x21 // Initial-exec reference to TLS symbol XCOFF_R_TLS_LD = 0x22 // Local-dynamic reference to TLS symbol XCOFF_R_TLS_LE = 0x23 // Local-exec reference to TLS symbol XCOFF_R_TLSM = 0x24 // Module reference to TLS symbol XCOFF_R_TLSML = 0x25 // Module reference to local (own) module XCOFF_R_TOCU = 0x30 // Relative to TOC - high order bits XCOFF_R_TOCL = 0x31 // Relative to TOC - low order bits )
const (
ARMAG = "!<arch>\n"
)
const (
ARM_MAGIC_TRAMP_NUMBER = 0x5c000003
)
* Relocation types.
const AfterLoadlibFull = 2
const BeforeLoadlibFull = 1
const (
COMPUNITHEADERSIZE = 4 + 2 + 4 + 1
)
const (
ELFRESERVE = 4096
)
* Total amount of space to reserve at the start of the file * for Header, PHeaders, SHeaders, and interp. * May waste some. * On FreeBSD, cannot be larger than a page.
const (
INITIAL_MACHO_HEADR = 4 * 1024
)
* Total amount of space to reserve at the start of the file * for Header, PHeaders, and SHeaders. * May waste some.
const ( MINFUNC = 16 // minimum size for a function )
const (
NSECT = 400
)
* We use the 64-bit data structures on both 32- and 64-bit machines * in order to write the code just once. The 64-bit data structure is * written in the 32-bit format on the 32-bit machines.
const (
PEBASE = 0x00400000
)
const SYMESZ = 18
const ( U64_TOCMAGIC = 0767 // AIX 64-bit XCOFF )
Variables ¶
var ( Segtext sym.Segment Segrodata sym.Segment Segrelrodata sym.Segment Segdata sym.Segment Segdwarf sym.Segment )
var ( FlagC = flag.Bool("c", false, "dump call graph") FlagD = flag.Bool("d", false, "disable dynamic executable") FlagS = flag.Bool("s", false, "disable symbol table") FlagW = flag.Bool("w", false, "disable DWARF generation") Flag8 bool // use 64-bit addresses in symbol table FlagDebugTramp = flag.Int("debugtramp", 0, "debug trampolines") FlagStrictDups = flag.Int("strictdups", 0, "sanity check duplicate symbol contents during object file reading (1=warn 2=err).") FlagRound = flag.Int("R", -1, "set address rounding `quantum`") FlagTextAddr = flag.Int64("T", -1, "set text segment `address`") )
Flags used by the linker. The exported flags are used by the architecture-specific packages.
var ( // SectionAlignment must be greater than or equal to FileAlignment. // The default is the page size for the architecture. PESECTALIGN int64 = 0x1000 // FileAlignment should be a power of 2 between 512 and 64 K, inclusive. // The default is 512. If the SectionAlignment is less than // the architecture's page size, then FileAlignment must match SectionAlignment. PEFILEALIGN int64 = 2 << 8 )
var ELF_NOTE_BUILDINFO_NAME = []byte("GNU\x00")
var ELF_NOTE_GO_NAME = []byte("Go\x00\x00")
var ELF_NOTE_NETBSD_NAME = []byte("NetBSD\x00")
var ELF_NOTE_OPENBSD_NAME = []byte("OpenBSD\x00")
var Elfstrdat []byte
var (
Nelfsym = 1
)
Functions ¶
func Adddynsym2 ¶
func Addstring ¶
func Asmbelf ¶
func Asmbelfsetup ¶
func Asmbelfsetup()
func Asmbmacho ¶
func Asmbmacho(ctxt *Link)
func Asmbpe ¶
func Asmbpe(ctxt *Link)
func Asmbxcoff ¶
Generate XCOFF assembly file
func Asmelfsym ¶
func Asmelfsym(ctxt *Link)
func Asmplan9sym ¶
func Asmplan9sym(ctxt *Link)
func AtExit ¶
func AtExit(f func())
func Codeblk ¶
func CodeblkPad ¶
func Datblk ¶
func DatblkBytes ¶
Used only on Wasm for now.
func Domacholink ¶
func Dwarfblk ¶
func ELF32_R_INFO ¶
func ELF32_R_SYM ¶
func ELF32_R_TYPE ¶
func ELF32_ST_BIND ¶
func ELF32_ST_INFO ¶
func ELF32_ST_TYPE ¶
func ELF32_ST_VISIBILITY ¶
func ELF64_R_INFO ¶
func ELF64_R_SYM ¶
func ELF64_R_TYPE ¶
func ELF64_ST_BIND ¶
func ELF64_ST_INFO ¶
func ELF64_ST_TYPE ¶
func ELF64_ST_VISIBILITY ¶
func ElfSymForReloc ¶
func Elfemitreloc ¶
func Elfemitreloc(ctxt *Link)
func Elfinit ¶
func Elfinit(ctxt *Link)
Initialize the global variable that describes the ELF header. It will be updated as we write section and prog headers.
func Elfwritedynent2 ¶
temporary
func Elfwritedynentsymplus ¶
func Elfwritedynentsymplus2 ¶
func Entryvalue ¶
func Errorf ¶
Errorf logs an error message.
If more than 20 errors have been printed, exit with an error.
Logging an error means that on exit cmd/link will delete any output file and return a non-zero error code.
func Exit ¶
func Exit(code int)
Exit exits with code after executing all atExitFuncs.
func Exitf ¶
func Exitf(format string, a ...interface{})
Exitf logs an error message then calls Exit(2).
func Lflag ¶
func Loaderblk ¶
Create loader section and returns its size
func Machoemitreloc ¶
func Machoemitreloc(ctxt *Link)
func Main ¶
Main is the main entry point for the linker code.
func Peinit ¶
func Peinit(ctxt *Link)
func PrepareAddmoduledata ¶
func PrepareAddmoduledata(ctxt *Link) (*loader.SymbolBuilder, loader.Sym)
PrepareAddmoduledata returns a symbol builder that target-specific code can use to build up the linker-generated go.link.addmoduledata function, along with the sym for runtime.addmoduledata itself. If this function is not needed (for example in cases where we're linking a module that contains the runtime) the returned builder will be nil.
func Rnd ¶
func Symaddr ¶
func WriteParallel ¶
WriteParallel handles scheduling parallel execution of data write functions.
func Xcoffadddynrel ¶
Xcoffadddynrel adds a dynamic relocation in a XCOFF file. This relocation will be made by the loader.
func Xcoffadddynrel2 ¶
func Xcoffadddynrel2(target *Target, ldr *loader.Loader, syms *ArchSyms, s loader.Sym, r loader.Reloc2, rIdx int) bool
Xcoffadddynrel adds a dynamic relocation in a XCOFF file. This relocation will be made by the loader.
func Xcoffinit ¶
func Xcoffinit(ctxt *Link)
Xcoffinit initialised some internal value and setups already known header information
Types ¶
type ArHdr ¶
type ArHdr struct {
// contains filtered or unexported fields
}
type Arch ¶
type Arch struct { Funcalign int Maxalign int Minalign int Dwarfregsp int Dwarfreglr int Androiddynld string Linuxdynld string Freebsddynld string Netbsddynld string Openbsddynld string Dragonflydynld string Solarisdynld string Adddynrel func(*Target, *loader.Loader, *ArchSyms, *sym.Symbol, *sym.Reloc) bool Adddynrel2 func(*Target, *loader.Loader, *ArchSyms, loader.Sym, loader.Reloc2, int) bool Archinit func(*Link) // Archreloc is an arch-specific hook that assists in relocation processing // (invoked by 'relocsym'); it handles target-specific relocation tasks. // Here "rel" is the current relocation being examined, "sym" is the symbol // containing the chunk of data to which the relocation applies, and "off" // is the contents of the to-be-relocated data item (from sym.P). Return // value is the appropriately relocated value (to be written back to the // same spot in sym.P), a boolean indicating if the external relocations' // been used, and a boolean indicating success/failure (a failing value // indicates a fatal error). Archreloc func(target *Target, syms *ArchSyms, rel *sym.Reloc, sym *sym.Symbol, offset int64) (relocatedOffset int64, success bool) Archreloc2 func(*Target, *loader.Loader, *ArchSyms, loader.Reloc2, *loader.ExtReloc, loader.Sym, int64) (int64, bool, bool) // Archrelocvariant is a second arch-specific hook used for // relocation processing; it handles relocations where r.Type is // insufficient to describe the relocation (r.Variant != // sym.RV_NONE). Here "rel" is the relocation being applied, "sym" // is the symbol containing the chunk of data to which the // relocation applies, and "off" is the contents of the // to-be-relocated data item (from sym.P). Return is an updated // offset value. Archrelocvariant func(target *Target, syms *ArchSyms, rel *sym.Reloc, sym *sym.Symbol, offset int64) (relocatedOffset int64) // Generate a trampoline for a call from s to rs if necessary. ri is // index of the relocation. Trampoline func(ctxt *Link, ldr *loader.Loader, ri int, rs, s loader.Sym) // Asmb and Asmb2 are arch-specific routines that write the output // file. Typically, Asmb writes most of the content (sections and // segments), for which we have computed the size and offset. Asmb2 // writes the rest. Asmb func(*Link, *loader.Loader) Asmb2 func(*Link) Elfreloc1 func(*Link, *sym.Reloc, int64) bool Elfreloc2 func(*Link, *loader.Loader, loader.Sym, loader.ExtRelocView, int64) bool Elfsetupplt func(ctxt *Link, plt, gotplt *loader.SymbolBuilder, dynamic loader.Sym) Gentext func(*Link) Gentext2 func(*Link, *loader.Loader) Machoreloc1 func(*sys.Arch, *OutBuf, *sym.Symbol, *sym.Reloc, int64) bool PEreloc1 func(*sys.Arch, *OutBuf, *sym.Symbol, *sym.Reloc, int64) bool Xcoffreloc1 func(*sys.Arch, *OutBuf, *sym.Symbol, *sym.Reloc, int64) bool // TLSIEtoLE converts a TLS Initial Executable relocation to // a TLS Local Executable relocation. // // This is possible when a TLS IE relocation refers to a local // symbol in an executable, which is typical when internally // linking PIE binaries. TLSIEtoLE func(P []byte, off, size int) // optional override for assignAddress AssignAddress func(ldr *loader.Loader, sect *sym.Section, n int, s loader.Sym, va uint64, isTramp bool) (*sym.Section, int, uint64) }
type ArchSyms ¶
type ArchSyms struct { TOC *sym.Symbol DotTOC []*sym.Symbol // for each version GOT *sym.Symbol PLT *sym.Symbol GOTPLT *sym.Symbol Tlsg *sym.Symbol Tlsoffset int Dynamic *sym.Symbol DynSym *sym.Symbol DynStr *sym.Symbol // Elf specific Rel *sym.Symbol Rela *sym.Symbol RelPLT *sym.Symbol RelaPLT *sym.Symbol // Darwin symbols LinkEditGOT *sym.Symbol LinkEditPLT *sym.Symbol Rel2 loader.Sym Rela2 loader.Sym RelPLT2 loader.Sym RelaPLT2 loader.Sym LinkEditGOT2 loader.Sym LinkEditPLT2 loader.Sym TOC2 loader.Sym DotTOC2 []loader.Sym // for each version GOT2 loader.Sym PLT2 loader.Sym GOTPLT2 loader.Sym Tlsg2 loader.Sym Dynamic2 loader.Sym DynSym2 loader.Sym DynStr2 loader.Sym }
ArchSyms holds a number of architecture specific symbols used during relocation. Rather than allowing them universal access to all symbols, we keep a subset for relocation application.
type BuildMode ¶
type BuildMode uint8
A BuildMode indicates the sort of object we are building.
Possible build modes are the same as those for the -buildmode flag in cmd/go, and are documented in 'go help buildmode'.
const ( BuildModeUnset BuildMode = iota BuildModeExe BuildModePIE BuildModeCArchive BuildModePlugin )
func (*BuildMode) Set ¶
func (*BuildMode) String ¶
type Dll ¶
type Dll struct {
// contains filtered or unexported fields
}
type ElfEhdr ¶
type ElfEhdr struct {
// contains filtered or unexported fields
}
* ELF header.
type ElfPhdr ¶
type ElfPhdr struct {
// contains filtered or unexported fields
}
* Program header.
type ElfShdr ¶
type ElfShdr struct {
// contains filtered or unexported fields
}
* Section header.
type Elfaux ¶
type Elfaux struct {
// contains filtered or unexported fields
}
type Elflib ¶
type Elflib struct {
// contains filtered or unexported fields
}
type Elfstring ¶
type Elfstring struct {
// contains filtered or unexported fields
}
type ErrorReporter ¶
type ErrorReporter struct { loader.ErrorReporter SymName symNameFn // contains filtered or unexported fields }
ErrorReporter is used to make error reporting thread safe.
type GCProg2 ¶
type GCProg2 struct {
// contains filtered or unexported fields
}
func (*GCProg2) AddSym ¶
func (*GCProg2) End ¶
func (*GCProg2) Init ¶
type Hostobj ¶
type Hostobj struct {
// contains filtered or unexported fields
}
type IMAGE_EXPORT_DIRECTORY ¶
type IMAGE_EXPORT_DIRECTORY struct { Characteristics uint32 TimeDateStamp uint32 MajorVersion uint16 MinorVersion uint16 Name uint32 Base uint32 NumberOfFunctions uint32 NumberOfNames uint32 AddressOfFunctions uint32 AddressOfNames uint32 AddressOfNameOrdinals uint32 }
type IMAGE_IMPORT_DESCRIPTOR ¶
type IMAGE_IMPORT_DESCRIPTOR struct { OriginalFirstThunk uint32 TimeDateStamp uint32 ForwarderChain uint32 Name uint32 FirstThunk uint32 }
type Imp ¶
type Imp struct {
// contains filtered or unexported fields
}
type Link ¶
type Link struct { Target ErrorReporter ArchSyms Out *OutBuf Syms *sym.Symbols Debugvlog int Bso *bufio.Writer Loaded bool // set after all inputs have been loaded as symbols Libdir []string Library []*sym.Library LibraryByPkg map[string]*sym.Library Shlibs []Shlib Textp []*sym.Symbol Textp2 []loader.Sym NumFilesyms int Moduledata *sym.Symbol Moduledata2 loader.Sym PackageFile map[string]string PackageShlib map[string]string // contains filtered or unexported fields }
Link holds the context for writing object code from a compiler or for reading that input into the linker.
func (*Link) AddTramp ¶
func (ctxt *Link) AddTramp(s *loader.SymbolBuilder)
add a trampoline with symbol s (to be laid down after the current function)
func (*Link) CanUsePlugins ¶
CanUsePlugins reports whether a plugins can be used
func (*Link) DynlinkingGo ¶
DynlinkingGo reports whether we are producing Go code that can live in separate shared libraries linked together at runtime.
func (*Link) Errorf ¶
Errorf method logs an error message.
If more than 20 errors have been printed, exit with an error.
Logging an error means that on exit cmd/link will delete any output file and return a non-zero error code.
func (*Link) FixedFrameSize ¶
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.
func (*Link) Logf ¶
type LinkMode ¶
type LinkMode uint8
LinkMode indicates whether an external linker is used for the final link.
func (*LinkMode) Set ¶
func (*LinkMode) String ¶
type LookupFn ¶
type MachoHdr ¶
type MachoHdr struct {
// contains filtered or unexported fields
}
type MachoLoad ¶
type MachoLoad struct {
// contains filtered or unexported fields
}
type MachoPlatform ¶
type MachoPlatform int
const ( PLATFORM_MACOS MachoPlatform = 1 PLATFORM_IOS MachoPlatform = 2 PLATFORM_TVOS MachoPlatform = 3 PLATFORM_WATCHOS MachoPlatform = 4 PLATFORM_BRIDGEOS MachoPlatform = 5 )
type MachoPlatformLoad ¶
type MachoPlatformLoad struct {
// contains filtered or unexported fields
}
MachoPlatformLoad represents a LC_VERSION_MIN_* or LC_BUILD_VERSION load command.
type MachoSect ¶
type MachoSect struct {
// contains filtered or unexported fields
}
type MachoSeg ¶
type MachoSeg struct {
// contains filtered or unexported fields
}
type OutBuf ¶
type OutBuf struct {
// contains filtered or unexported fields
}
OutBuf is a buffered file writer.
It is simlar to the Writer in cmd/internal/bio with a few small differences.
First, it tracks the output architecture and uses it to provide endian helpers.
Second, it provides a very cheap offset counter that doesn't require any system calls to read the value.
Third, it also mmaps the output file (if available). The intended usage is:
- Mmap the output file
- Write the content
- possibly apply any edits in the output buffer
- possibly write more content to the file. These writes take place in a heap backed buffer that will get synced to disk.
- Munmap the output file
And finally, it provides a mechanism by which you can multithread the writing of output files. This mechanism is accomplished by copying a OutBuf, and using it in the thread/goroutine.
Parallel OutBuf is intended to be used like:
func write(out *OutBuf) { var wg sync.WaitGroup for i := 0; i < 10; i++ { wg.Add(1) view, err := out.View(start[i]) if err != nil { // handle output continue } go func(out *OutBuf, i int) { // do output wg.Done() }(view, i) } wg.Wait() }
func NewOutBuf ¶
func (*OutBuf) Close ¶
func (*OutBuf) Mmap ¶
func (*OutBuf) Offset ¶
func (*OutBuf) Open ¶
func (*OutBuf) SeekSet ¶
func (*OutBuf) View ¶
func (*OutBuf) Write ¶
Write writes the contents of v to the buffer.
func (*OutBuf) Write16 ¶
func (*OutBuf) Write32 ¶
func (*OutBuf) Write32b ¶
func (*OutBuf) Write64 ¶
func (*OutBuf) Write64b ¶
func (*OutBuf) Write8 ¶
func (*OutBuf) WriteByte ¶
WriteByte is an alias for Write8 to fulfill the io.ByteWriter interface.
func (*OutBuf) WriteString ¶
func (*OutBuf) WriteStringN ¶
WriteStringN writes the first n bytes of s. If n is larger than len(s) then it is padded with zero bytes.
func (*OutBuf) WriteStringPad ¶
WriteStringPad writes the first n bytes of s. If n is larger than len(s) then it is padded with the bytes in pad (repeated as needed).
func (*OutBuf) WriteSym ¶
WriteSym writes the content of a Symbol, then changes the Symbol's content to point to the output buffer that we just wrote, so we can apply further edit to the symbol content. If the output file is not Mmap'd, just writes the content.
type Pkg ¶
type Pkg struct {
// contains filtered or unexported fields
}
type Rpath ¶
type Rpath struct {
// contains filtered or unexported fields
}
func (*Rpath) Set ¶
func (*Rpath) String ¶
type Shlib ¶
type SymbolType ¶
type SymbolType int8
const ( // see also https://9p.io/magic/man2html/1/nm TextSym SymbolType = 'T' DataSym SymbolType = 'D' BSSSym SymbolType = 'B' UndefinedSym SymbolType = 'U' TLSSym SymbolType = 't' FrameSym SymbolType = 'm' ParamSym SymbolType = 'p' AutoSym SymbolType = 'a' // Deleted auto (not a real sym, just placeholder for type) DeletedAutoSym = 'x' )
type Target ¶
type Target struct { Arch *sys.Arch HeadType objabi.HeadType LinkMode LinkMode BuildMode BuildMode IsELF bool // contains filtered or unexported fields }
Target holds the configuration we're building for.
func (*Target) CanUsePlugins ¶
func (*Target) Is386 ¶
func (*Target) IsAIX ¶
func (*Target) IsAMD64 ¶
func (*Target) IsARM ¶
func (*Target) IsARM64 ¶
func (*Target) IsBigEndian ¶
func (*Target) IsDarwin ¶
func (*Target) IsDynlinkingGo ¶
func (*Target) IsElf ¶
func (*Target) IsExe ¶
func (*Target) IsExternal ¶
func (*Target) IsInternal ¶
func (*Target) IsLinux ¶
func (*Target) IsMIPS ¶
func (*Target) IsMIPS64 ¶
func (*Target) IsNetbsd ¶
func (*Target) IsOpenbsd ¶
func (*Target) IsPIE ¶
func (*Target) IsPPC64 ¶
func (*Target) IsPlan9 ¶
func (*Target) IsPlugin ¶
func (*Target) IsRISCV64 ¶
func (*Target) IsS390X ¶
func (*Target) IsShared ¶
func (*Target) IsSharedGoLink ¶
func (*Target) IsSolaris ¶
func (*Target) IsWasm ¶
func (*Target) IsWindows ¶
func (*Target) UseRelro ¶
UseRelro reports whether to make use of "read only relocations" aka relro.
type XcoffAoutHdr64 ¶
type XcoffAoutHdr64 struct { Omagic int16 // Flags - Ignored If Vstamp Is 1 Ovstamp int16 // Version Odebugger uint32 // Reserved For Debugger Otextstart uint64 // Virtual Address Of Text Odatastart uint64 // Virtual Address Of Data Otoc uint64 // Toc Address Osnentry int16 // Section Number For Entry Point Osntext int16 // Section Number For Text Osndata int16 // Section Number For Data Osntoc int16 // Section Number For Toc Osnloader int16 // Section Number For Loader Osnbss int16 // Section Number For Bss Oalgntext int16 // Max Text Alignment Oalgndata int16 // Max Data Alignment Omodtype [2]byte // Module Type Field Ocpuflag uint8 // Bit Flags - Cputypes Of Objects Ocputype uint8 // Reserved for CPU type Otextpsize uint8 // Requested text page size Odatapsize uint8 // Requested data page size Ostackpsize uint8 // Requested stack page size Oflags uint8 // Flags And TLS Alignment Otsize uint64 // Text Size In Bytes Odsize uint64 // Data Size In Bytes Obsize uint64 // Bss Size In Bytes Oentry uint64 // Entry Point Address Omaxstack uint64 // Max Stack Size Allowed Omaxdata uint64 // Max Data Size Allowed Osntdata int16 // Section Number For Tdata Section Osntbss int16 // Section Number For Tbss Section Ox64flags uint16 // Additional Flags For 64-Bit Objects Oresv3a int16 // Reserved Oresv3 [2]int32 // Reserved }
Auxiliary Header
type XcoffAuxCSect64 ¶
type XcoffAuxCSect64 struct { Xscnlenlo uint32 // Lower 4 bytes of length or symbol table index Xparmhash uint32 // Offset of parameter type-check string Xsnhash uint16 // .typchk section number Xsmtyp uint8 // Symbol alignment and type Xsmclas uint8 // Storage-mapping class Xscnlenhi uint32 // Upper 4 bytes of length or symbol table index Xpad uint8 // Unused Xauxtype uint8 // Type of auxiliary entry }
csect Auxiliary Entry.
type XcoffAuxDWARF64 ¶
type XcoffAuxDWARF64 struct { Xscnlen uint64 // Length of this symbol section X_pad [9]byte Xauxtype uint8 // Type of auxiliary entry }
DWARF Auxiliary Entry
type XcoffAuxFcn64 ¶
type XcoffAuxFcn64 struct { Xlnnoptr uint64 // File pointer to line number Xfsize uint32 // Size of function in bytes Xendndx uint32 // Symbol table index of next entry Xpad uint8 // Unused Xauxtype uint8 // Type of auxiliary entry }
Function Auxiliary Entry
type XcoffAuxFile64 ¶
type XcoffAuxFile64 struct { Xzeroes uint32 // The name is always in the string table Xoffset uint32 // Offset in the string table X_pad1 [6]byte Xftype uint8 // Source file string type X_pad2 [2]byte Xauxtype uint8 // Type of auxiliary entry }
File Auxiliary Entry
type XcoffFileHdr64 ¶
type XcoffFileHdr64 struct { Fmagic uint16 // Target machine Fnscns uint16 // Number of sections Ftimedat int32 // Time and date of file creation Fsymptr uint64 // Byte offset to symbol table start Fopthdr uint16 // Number of bytes in optional header Fflags uint16 // Flags Fnsyms int32 // Number of entries in symbol table }
File Header
type XcoffLdHdr64 ¶
type XcoffLdHdr64 struct { Lversion int32 // Loader section version number Lnsyms int32 // Number of symbol table entries Lnreloc int32 // Number of relocation table entries Listlen uint32 // Length of import file ID string table Lnimpid int32 // Number of import file IDs Lstlen uint32 // Length of string table Limpoff uint64 // Offset to start of import file IDs Lstoff uint64 // Offset to start of string table Lsymoff uint64 // Offset to start of symbol table Lrldoff uint64 // Offset to start of relocation entries }
Loader Header
type XcoffLdImportFile64 ¶
type XcoffLdRel64 ¶
type XcoffLdRel64 struct { Lvaddr uint64 // Address Field Lrtype uint16 // Relocation Size and Type Lrsecnm int16 // Section Number being relocated Lsymndx int32 // Loader-Section symbol table index }
type XcoffLdStr64 ¶
type XcoffLdStr64 struct {
// contains filtered or unexported fields
}
type XcoffLdSym64 ¶
type XcoffLdSym64 struct { Lvalue uint64 // Address field Loffset uint32 // Byte offset into string table of symbol name Lscnum int16 // Section number containing symbol Lsmtype int8 // Symbol type, export, import flags Lsmclas int8 // Symbol storage class Lifile int32 // Import file ID; ordinal of import file IDs Lparm uint32 // Parameter type-check field }
Loader Symbol
type XcoffScnHdr64 ¶
type XcoffScnHdr64 struct { Sname [8]byte // Section Name Spaddr uint64 // Physical Address Svaddr uint64 // Virtual Address Ssize uint64 // Section Size Sscnptr uint64 // File Offset To Raw Data Srelptr uint64 // File Offset To Relocation Slnnoptr uint64 // File Offset To Line Numbers Snreloc uint32 // Number Of Relocation Entries Snlnno uint32 // Number Of Line Number Entries Sflags uint32 // flags }
Section Header
type XcoffSymEnt64 ¶
type XcoffSymEnt64 struct { Nvalue uint64 // Symbol value Noffset uint32 // Offset of the name in string table or .debug section Nscnum int16 // Section number of symbol Ntype uint16 // Basic and derived type specification Nsclass uint8 // Storage class of symbol Nnumaux int8 // Number of auxiliary entries }
Symbol Table Entry
Source Files ¶
ar.go config.go data.go data2.go deadcode.go decodesym.go dwarf.go dwarf2.go elf.go elf2.go errors.go execarchive_noexec.go go.go ld.go lib.go link.go macho.go macho_combine_dwarf.go main.go outbuf.go outbuf_nofallocate.go outbuf_nommap.go pcln.go pe.go sym.go symtab.go target.go typelink.go util.go xcoff.go xcoff2.go
- Version
- v1.15.4
- Published
- Nov 5, 2020
- Platform
- js/wasm
- Imports
- 47 packages
- Last checked
- 5 seconds ago –
Tools for package owners.