| // Copyright 2012 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. |
| // |
| // +build fuchsia linux |
| // +build 386 amd64 arm arm64 ppc64 ppc64le |
| |
| package runtime |
| |
| import "unsafe" |
| |
| const ( |
| _AT_SYSINFO_EHDR = 33 |
| |
| _PT_LOAD = 1 /* Loadable program segment */ |
| _PT_DYNAMIC = 2 /* Dynamic linking information */ |
| |
| _PF_X = 1 /* Executable PH segment */ |
| |
| _DT_NULL = 0 /* Marks end of dynamic section */ |
| _DT_HASH = 4 /* Dynamic symbol hash table */ |
| _DT_STRTAB = 5 /* Address of string table */ |
| _DT_SYMTAB = 6 /* Address of symbol table */ |
| _DT_GNU_HASH = 0x6ffffef5 /* GNU-style dynamic symbol hash table */ |
| _DT_VERSYM = 0x6ffffff0 |
| _DT_VERDEF = 0x6ffffffc |
| |
| _VER_FLG_BASE = 0x1 /* Version definition of file itself */ |
| |
| _SHN_UNDEF = 0 /* Undefined section */ |
| |
| _SHT_DYNSYM = 11 /* Dynamic linker symbol table */ |
| |
| _STT_FUNC = 2 /* Symbol is a code object */ |
| |
| _STT_NOTYPE = 0 /* Symbol type is not specified */ |
| |
| _STB_GLOBAL = 1 /* Global symbol */ |
| _STB_WEAK = 2 /* Weak symbol */ |
| |
| _EI_NIDENT = 16 |
| |
| // Maximum indices for the array types used when traversing the vDSO ELF structures. |
| // Computed from architecture-specific max provided by vdso_linux_*.go |
| vdsoSymTabSize = vdsoArrayMax / unsafe.Sizeof(elfSym{}) |
| vdsoDynSize = vdsoArrayMax / unsafe.Sizeof(elfDyn{}) |
| vdsoSymStringsSize = vdsoArrayMax // byte |
| vdsoVerSymSize = vdsoArrayMax / 2 // uint16 |
| vdsoHashSize = vdsoArrayMax / 4 // uint32 |
| |
| // vdsoBloomSizeScale is a scaling factor for gnuhash tables which are uint32 indexed, |
| // but contain uintptrs |
| vdsoBloomSizeScale = unsafe.Sizeof(uintptr(0)) / 4 // uint32 |
| ) |
| |
| /* How to extract and insert information held in the st_info field. */ |
| func _ELF_ST_BIND(val byte) byte { return val >> 4 } |
| func _ELF_ST_TYPE(val byte) byte { return val & 0xf } |