Files

159 lines
4.2 KiB
Go
Raw Permalink Normal View History

// Copyright 2018 The gVisor Authors.
2018-04-27 10:37:02 -07:00
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package linux
// Linux auxiliary vector entry types.
const (
// AT_NULL is the end of the auxiliary vector.
AT_NULL = 0
// AT_IGNORE should be ignored.
AT_IGNORE = 1
// AT_EXECFD is the file descriptor of the program.
AT_EXECFD = 2
// AT_PHDR points to the program headers.
AT_PHDR = 3
// AT_PHENT is the size of a program header entry.
AT_PHENT = 4
// AT_PHNUM is the number of program headers.
AT_PHNUM = 5
// AT_PAGESZ is the system page size.
AT_PAGESZ = 6
// AT_BASE is the base address of the interpreter.
AT_BASE = 7
// AT_FLAGS are flags.
AT_FLAGS = 8
// AT_ENTRY is the program entry point.
AT_ENTRY = 9
// AT_NOTELF indicates that the program is not an ELF binary.
AT_NOTELF = 10
// AT_UID is the real UID.
AT_UID = 11
// AT_EUID is the effective UID.
AT_EUID = 12
// AT_GID is the real GID.
AT_GID = 13
// AT_EGID is the effective GID.
AT_EGID = 14
// AT_PLATFORM is a string identifying the CPU.
AT_PLATFORM = 15
// AT_HWCAP are arch-dependent CPU capabilities.
AT_HWCAP = 16
// AT_CLKTCK is the frequency used by times(2).
AT_CLKTCK = 17
// AT_SECURE indicate secure mode.
AT_SECURE = 23
// AT_BASE_PLATFORM is a string identifying the "real" platform. It may
// differ from AT_PLATFORM.
AT_BASE_PLATFORM = 24
// AT_RANDOM points to 16-bytes of random data.
AT_RANDOM = 25
// AT_HWCAP2 is an extension of AT_HWCAP.
AT_HWCAP2 = 26
// AT_EXECFN is the path used to execute the program.
AT_EXECFN = 31
// AT_SYSINFO_EHDR is the address of the VDSO.
AT_SYSINFO_EHDR = 33
)
// ELF ET_CORE and ptrace GETREGSET/SETREGSET register set types.
//
// See include/uapi/linux/elf.h.
const (
// NT_PRSTATUS is for general purpose register.
NT_PRSTATUS = 0x1
// NT_PRFPREG is for float point register.
NT_PRFPREG = 0x2
// NT_X86_XSTATE is for x86 extended state using xsave.
NT_X86_XSTATE = 0x202
// NT_ARM_TLS is for ARM TLS register.
NT_ARM_TLS = 0x401
)
// ElfHeader64 is the ELF64 file header.
//
// +marshal
type ElfHeader64 struct {
Ident [16]byte // File identification.
Type uint16 // File type.
Machine uint16 // Machine architecture.
Version uint32 // ELF format version.
Entry uint64 // Entry point.
Phoff uint64 // Program header file offset.
Shoff uint64 // Section header file offset.
Flags uint32 // Architecture-specific flags.
Ehsize uint16 // Size of ELF header in bytes.
Phentsize uint16 // Size of program header entry.
Phnum uint16 // Number of program header entries.
Shentsize uint16 // Size of section header entry.
Shnum uint16 // Number of section header entries.
Shstrndx uint16 // Section name strings section.
}
// ElfSection64 is the ELF64 Section header.
//
// +marshal
type ElfSection64 struct {
Name uint32 // Section name (index into the section header string table).
Type uint32 // Section type.
Flags uint64 // Section flags.
Addr uint64 // Address in memory image.
Off uint64 // Offset in file.
Size uint64 // Size in bytes.
Link uint32 // Index of a related section.
Info uint32 // Depends on section type.
Addralign uint64 // Alignment in bytes.
Entsize uint64 // Size of each entry in section.
}
// ElfProg64 is the ELF64 Program header.
//
// +marshal
type ElfProg64 struct {
Type uint32 // Entry type.
Flags uint32 // Access permission flags.
Off uint64 // File offset of contents.
Vaddr uint64 // Virtual address in memory image.
Paddr uint64 // Physical address (not used).
Filesz uint64 // Size of contents in file.
Memsz uint64 // Size of contents in memory.
Align uint64 // Alignment in memory and file.
}