Documentation ¶
Index ¶
- Constants
- Variables
- func Adddynsym(ctxt *Link, s *sym.Symbol)
- 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, addr int64, size int64)
- func CodeblkPad(ctxt *Link, addr int64, size int64, pad []byte)
- func Cputime() float64
- func Datblk(ctxt *Link, addr int64, size int64)
- func Domacholink(ctxt *Link) int64
- func Dwarfblk(ctxt *Link, 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 Elfemitreloc(ctxt *Link)
- func Elfinit(ctxt *Link)
- func Elfwritedynent(ctxt *Link, s *sym.Symbol, tag int, val uint64)
- func Elfwritedynentsymplus(ctxt *Link, s *sym.Symbol, tag int, t *sym.Symbol, 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 Rnd(v int64, r int64) int64
- func Symaddr(s *sym.Symbol) int64
- func Xcoffadddynrel(ctxt *Link, s *sym.Symbol, r *sym.Reloc) bool
- func Xcoffinit(ctxt *Link)
- type ArHdr
- type Arch
- type BuildMode
- type Dll
- type ElfEhdr
- type ElfPhdr
- type ElfShdr
- type Elfaux
- type Elflib
- type Elfstring
- type GCProg
- type Hostobj
- type IMAGE_EXPORT_DIRECTORY
- type IMAGE_IMPORT_DESCRIPTOR
- type Imp
- type Link
- func (ctxt *Link) AddTramp(s *sym.Symbol)
- func (ctxt *Link) CanUsePlugins() bool
- func (ctxt *Link) DynlinkingGo() bool
- func (ctxt *Link) ErrorUnresolved(s *sym.Symbol, r *sym.Reloc)
- func (ctxt *Link) FixedFrameSize() int64
- func (ctxt *Link) Logf(format string, args ...interface{})
- func (ctxt *Link) UseRelro() bool
- type LinkMode
- type MachoHdr
- type MachoLoad
- type MachoSect
- type MachoSeg
- type OutBuf
- func (out *OutBuf) Flush()
- func (out *OutBuf) Offset() int64
- func (out *OutBuf) SeekSet(p int64)
- 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)
- type Pciter
- type Pkg
- type Rpath
- type Shlib
- type SymbolType
- type XcoffAoutHdr64
- type XcoffAuxCSect64
- 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 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 = 599000000 /* NetBSD 5.99 */ )
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 = 0x18 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_FILE_MACHINE_I386 = 0x14c IMAGE_FILE_MACHINE_AMD64 = 0x8664 IMAGE_FILE_MACHINE_ARM = 0x1c0 IMAGE_FILE_MACHINE_ARMNT = 0x1c4 IMAGE_FILE_RELOCS_STRIPPED = 0x0001 IMAGE_FILE_EXECUTABLE_IMAGE = 0x0002 IMAGE_FILE_LINE_NUMS_STRIPPED = 0x0004 IMAGE_FILE_LARGE_ADDRESS_AWARE = 0x0020 IMAGE_FILE_32BIT_MACHINE = 0x0100 IMAGE_FILE_DEBUG_STRIPPED = 0x0200 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 IMAGE_DIRECTORY_ENTRY_EXPORT = 0 IMAGE_DIRECTORY_ENTRY_IMPORT = 1 IMAGE_DIRECTORY_ENTRY_RESOURCE = 2 IMAGE_DIRECTORY_ENTRY_EXCEPTION = 3 IMAGE_DIRECTORY_ENTRY_SECURITY = 4 IMAGE_DIRECTORY_ENTRY_BASERELOC = 5 IMAGE_DIRECTORY_ENTRY_DEBUG = 6 IMAGE_DIRECTORY_ENTRY_COPYRIGHT = 7 IMAGE_DIRECTORY_ENTRY_ARCHITECTURE = 7 IMAGE_DIRECTORY_ENTRY_GLOBALPTR = 8 IMAGE_DIRECTORY_ENTRY_TLS = 9 IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG = 10 IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT = 11 IMAGE_DIRECTORY_ENTRY_IAT = 12 IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT = 13 IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR = 14 IMAGE_SUBSYSTEM_WINDOWS_GUI = 2 IMAGE_SUBSYSTEM_WINDOWS_CUI = 3 IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE = 0x0040 IMAGE_DLLCHARACTERISTICS_NX_COMPAT = 0x0100 )
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 )
TODO(crawshaw): add these constants to debug/pe.
const ( XCOFFSECTALIGN int64 = 32 // base on dump -o XCOFFBASE = 0x100000000 // Address on 64 bits must start at this value. )
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 )
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 (
ARMAG = "!<arch>\n"
)
const (
ARM_MAGIC_TRAMP_NUMBER = 0x5c000003
)
* Relocation types.
const (
COMPUNITHEADERSIZE = 4 + 2 + 4 + 1
)
* Walk DWarfDebugInfoEntries, and emit .debug_info
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
)
const (
XCOFFHDRRESERVE = FILHSZ_64 + AOUTHSZ_EXEC64 + SCNHSZ_64*23
)
Total amount of space to reserve at the start of the file for FileHeader, Auxiliary Header, and Section Headers. May waste some. Based on 24(fhdr) + 120(ahdr) + 23(max sections number) * 72(scnhdr)
const (
XCOFF_R_POS = 0x00 // A(sym) Positive Relocation
)
Variables ¶
var ( Lcsize int32 Spsize int32 Symsize int32 )
var ( Funcalign int HEADR int32 )
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") FlagRound = flag.Int("R", -1, "set address rounding `quantum`") FlagTextAddr = flag.Int64("T", -1, "set text segment `address`") FlagDataAddr = flag.Int64("D", -1, "set data 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 ( PESECTHEADR int32 PEFILEHEADR int32 )
var ( XCOFFFILEHDR int XCOFFSECTHDR int )
Those values will latter be computed in XcoffInit
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 Asmbelfsetup ¶
func Asmbelfsetup()
func Asmplan9sym ¶
func Asmplan9sym(ctxt *Link)
func Domacholink ¶
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 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 Elfwritedynentsymplus ¶
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 Exitf ¶
func Exitf(format string, a ...interface{})
Exitf logs an error message then calls Exit(2).
func Machoemitreloc ¶
func Machoemitreloc(ctxt *Link)
func Xcoffadddynrel ¶
Xcoffadddynrel adds a dynamic relocation in a XCOFF file. This relocation will be made by the loader.
Types ¶
type Arch ¶
type Arch struct { Funcalign int Maxalign int Minalign int Dwarfregsp int Dwarfreglr int Linuxdynld string Freebsddynld string Netbsddynld string Openbsddynld string Dragonflydynld string Solarisdynld string Adddynrel func(*Link, *sym.Symbol, *sym.Reloc) 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) and a boolean indicating // success/failure (a failing value indicates a fatal error). Archreloc func(link *Link, rel *sym.Reloc, sym *sym.Symbol, offset int64) (relocatedOffset int64, success 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(link *Link, rel *sym.Reloc, sym *sym.Symbol, offset int64) (relocatedOffset int64) Trampoline func(*Link, *sym.Reloc, *sym.Symbol) Asmb func(*Link) Elfreloc1 func(*Link, *sym.Reloc, int64) bool Elfsetupplt func(*Link) Gentext func(*Link) Machoreloc1 func(*sys.Arch, *OutBuf, *sym.Symbol, *sym.Reloc, int64) bool PEreloc1 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(s *sym.Symbol, off, size int) // optional override for assignAddress AssignAddress func(ctxt *Link, sect *sym.Section, n int, s *sym.Symbol, va uint64, isTramp bool) (*sym.Section, int, uint64) }
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'.
type IMAGE_EXPORT_DIRECTORY ¶
type IMAGE_IMPORT_DESCRIPTOR ¶
type Link ¶
type Link struct { Out *OutBuf Syms *sym.Symbols Arch *sys.Arch Debugvlog int Bso *bufio.Writer Loaded bool // set after all inputs have been loaded as symbols IsELF bool HeadType objabi.HeadType LinkMode LinkMode BuildMode BuildMode Tlsg *sym.Symbol Libdir []string Library []*sym.Library LibraryByPkg map[string]*sym.Library Shlibs []Shlib Tlsoffset int Textp []*sym.Symbol Filesyms []*sym.Symbol Moduledata *sym.Symbol PackageFile map[string]string PackageShlib map[string]string // Used to implement field tracking. Reachparent map[*sym.Symbol]*sym.Symbol // 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) CanUsePlugins ¶
CanUsePlugins returns whether a plugins can be used
func (*Link) DynlinkingGo ¶
DynlinkingGo returns whether we are producing Go code that can live in separate shared libraries linked together at runtime.
func (*Link) ErrorUnresolved ¶
ErrorUnresolved prints unresolved symbol error for r.Sym that is referenced from s.
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.
type LinkMode ¶
type LinkMode uint8
LinkMode indicates whether an external linker is used for the final link.
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.
func (*OutBuf) Write ¶
Write writes the contents of v to the buffer.
As Write is backed by a bufio.Writer, callers do not have to explicitly handle the returned error as long as Flush is eventually called.
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.
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 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 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 { Xfname [8]byte // Name or offset inside string table Xftype uint8 // Source file string type 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 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