snapshot: sagernet/gvisor v0.0.0-20250811.0-sing-box-mod.1
Содержимое пина, зафиксированного в go.mod sing-box-lx, одним коммитом без истории. Полная история SagerNet/gvisor — 1.45 ГБ и клонируется в каждой CI-джобе; наша дельта — одна вставка в одну функцию, история для неё не нужна. Module path github.com/sagernet/gvisor сохранён намеренно: на него опирается replace-директива суперпроекта. Патч поверх — отдельным коммитом, чтобы дельта читалась одним git show и переносилась на новый пин копированием. SPECS/TASKS/048-GVISOR_HANDSHAKE_NIL_CRASH
This commit is contained in:
commit
2c4ae3b0a4
712 changed files with 185689 additions and 0 deletions
158
pkg/abi/linux/elf.go
Normal file
158
pkg/abi/linux/elf.go
Normal file
|
|
@ -0,0 +1,158 @@
|
|||
// Copyright 2018 The gVisor Authors.
|
||||
//
|
||||
// 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.
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue