summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2022-09-06 13:02:50 +0000
committerbors <bors@rust-lang.org>2022-09-06 13:02:50 +0000
commit6b36b182410f8be1c6adb487986d152fc70add17 (patch)
tree3e267b511d0a3b38851b51f06404158178aa9329
parentaec8514342e2b03924f4d17198ce77eb0a12fda5 (diff)
parent1d11c020abb7897ae43a261c5cdb78a73d044de2 (diff)
downloadrust-libc-6b36b182410f8be1c6adb487986d152fc70add17.tar.gz
Auto merge of #2897 - paandahl:add-elf-constants, r=JohnTitor
Added missing constants from elf.h I have added a bunch of constants from elf.h, useful for parsing ELF files. Closes #1876
-rw-r--r--libc-test/semver/linux-gnu.txt1
-rw-r--r--libc-test/semver/linux.txt139
-rw-r--r--src/unix/linux_like/linux/gnu/mod.rs2
-rw-r--r--src/unix/linux_like/linux/mod.rs195
4 files changed, 317 insertions, 20 deletions
diff --git a/libc-test/semver/linux-gnu.txt b/libc-test/semver/linux-gnu.txt
index 14c4ab9cfe..27bd593843 100644
--- a/libc-test/semver/linux-gnu.txt
+++ b/libc-test/semver/linux-gnu.txt
@@ -55,6 +55,7 @@ DEBUGFS_MAGIC
DEVPTS_SUPER_MAGIC
ECRYPTFS_SUPER_MAGIC
EFS_SUPER_MAGIC
+ELFOSABI_ARM_AEABI
EMPTY
EXT2_SUPER_MAGIC
EXT3_SUPER_MAGIC
diff --git a/libc-test/semver/linux.txt b/libc-test/semver/linux.txt
index 5bdb3143d2..356107bd4d 100644
--- a/libc-test/semver/linux.txt
+++ b/libc-test/semver/linux.txt
@@ -364,6 +364,17 @@ EFD_NONBLOCK
EFD_SEMAPHORE
EHWPOISON
EISNAM
+EI_ABIVERSION
+EI_CLASS
+EI_DATA
+EI_MAG0
+EI_MAG1
+EI_MAG2
+EI_MAG3
+EI_NIDENT
+EI_OSABI
+EI_PAD
+EI_VERSION
EKEYEXPIRED
EKEYREJECTED
EKEYREVOKED
@@ -371,6 +382,33 @@ EL2HLT
EL2NSYNC
EL3HLT
EL3RST
+ELFCLASS32
+ELFCLASS64
+ELFCLASSNONE
+ELFCLASSNUM
+ELFDATA2LSB
+ELFDATA2MSB
+ELFDATANONE
+ELFDATANUM
+ELFMAG0
+ELFMAG1
+ELFMAG2
+ELFMAG3
+ELFOSABI_AIX
+ELFOSABI_ARM
+ELFOSABI_FREEBSD
+ELFOSABI_GNU
+ELFOSABI_HPUX
+ELFOSABI_IRIX
+ELFOSABI_LINUX
+ELFOSABI_MODESTO
+ELFOSABI_NETBSD
+ELFOSABI_NONE
+ELFOSABI_OPENBSD
+ELFOSABI_SOLARIS
+ELFOSABI_STANDALONE
+ELFOSABI_SYSV
+ELFOSABI_TRU64
ELIBACC
ELIBBAD
ELIBEXEC
@@ -379,6 +417,84 @@ ELIBSCN
ELNRNG
EMEDIUMTYPE
EMULTIHOP
+EM_386
+EM_68HC05
+EM_68HC08
+EM_68HC11
+EM_68HC12
+EM_68HC16
+EM_68K
+EM_860
+EM_88K
+EM_960
+EM_AARCH64
+EM_ALPHA
+EM_ARC
+EM_ARC_A5
+EM_ARM
+EM_AVR
+EM_COLDFIRE
+EM_CRIS
+EM_D10V
+EM_D30V
+EM_FAKE_ALPHA
+EM_FIREPATH
+EM_FR20
+EM_FR30
+EM_FX66
+EM_H8_300
+EM_H8_300H
+EM_H8_500
+EM_H8S
+EM_HUANY
+EM_IA_64
+EM_JAVELIN
+EM_M32
+EM_M32R
+EM_ME16
+EM_MIPS
+EM_MIPS_RS3_LE
+EM_MIPS_X
+EM_MMA
+EM_MMIX
+EM_MN10200
+EM_MN10300
+EM_NCPU
+EM_NDR1
+EM_NONE
+EM_OPENRISC
+EM_PARISC
+EM_PCP
+EM_PDSP
+EM_PJ
+EM_PPC
+EM_PPC64
+EM_PRISM
+EM_RCE
+EM_RH32
+EM_S370
+EM_S390
+EM_SH
+EM_SPARC
+EM_SPARC32PLUS
+EM_SPARCV9
+EM_ST100
+EM_ST19
+EM_ST7
+EM_ST9PLUS
+EM_STARCORE
+EM_SVX
+EM_TILEGX
+EM_TILEPRO
+EM_TINYJ
+EM_TRICORE
+EM_V800
+EM_V850
+EM_VAX
+EM_VPP500
+EM_X86_64
+EM_XTENSA
+EM_ZSP
ENAVAIL
ENOANO
ENOATTR
@@ -516,11 +632,24 @@ ETH_P_X25
ETH_ZLEN
ETOOMANYREFS
ETIME
+ET_CORE
+ET_DYN
+ET_EXEC
+ET_HIOS
+ET_HIPROC
+ET_LOOS
+ET_LOPROC
+ET_NONE
+ET_NUM
+ET_REL
EUCLEAN
EUNATCH
EUSERS
EV_CNT
+EV_CURRENT
EV_MAX
+EV_NONE
+EV_NUM
EXFULL
EXTA
EXTB
@@ -1521,6 +1650,8 @@ PF_IUCV
PF_KEY
PF_LLC
PF_LOCAL
+PF_MASKOS
+PF_MASKPROC
PF_NETBEUI
PF_NETLINK
PF_NETROM
@@ -1528,6 +1659,7 @@ PF_NFC
PF_PACKET
PF_PHONET
PF_PPPOX
+PF_R
PF_RDS
PF_ROSE
PF_ROUTE
@@ -1536,7 +1668,9 @@ PF_SECURITY
PF_SNA
PF_TIPC
PF_VSOCK
+PF_W
PF_WANPIPE
+PF_X
PF_X25
PIPE_BUF
PM_STR
@@ -1710,6 +1844,7 @@ PTRACE_SINGLESTEP
PTRACE_SYSCALL
PTRACE_TRACEME
PT_HIOS
+PT_HISUNW
PT_LOPROC
PT_HIPROC
PT_DYNAMIC
@@ -1719,11 +1854,14 @@ PT_GNU_STACK
PT_INTERP
PT_LOAD
PT_LOOS
+PT_LOSUNW
PT_NOTE
PT_NULL
PT_NUM
PT_PHDR
PT_SHLIB
+PT_SUNWBSS
+PT_SUNWSTACK
PT_TLS
P_ALL
P_PGID
@@ -2001,6 +2139,7 @@ SECCOMP_RET_TRACE
SECCOMP_RET_TRAP
SEEK_DATA
SEEK_HOLE
+SELFMAG
SEM_FAILED
SFD_CLOEXEC
SFD_NONBLOCK
diff --git a/src/unix/linux_like/linux/gnu/mod.rs b/src/unix/linux_like/linux/gnu/mod.rs
index 88bc935f63..6b86dea32b 100644
--- a/src/unix/linux_like/linux/gnu/mod.rs
+++ b/src/unix/linux_like/linux/gnu/mod.rs
@@ -954,6 +954,8 @@ pub const NT_LWPSTATUS: ::c_int = 16;
pub const NT_LWPSINFO: ::c_int = 17;
pub const NT_PRFPXREG: ::c_int = 20;
+pub const ELFOSABI_ARM_AEABI: u8 = 64;
+
// linux/keyctl.h
pub const KEYCTL_DH_COMPUTE: u32 = 23;
pub const KEYCTL_PKEY_QUERY: u32 = 24;
diff --git a/src/unix/linux_like/linux/mod.rs b/src/unix/linux_like/linux/mod.rs
index 2a4866bb0d..54ca083279 100644
--- a/src/unix/linux_like/linux/mod.rs
+++ b/src/unix/linux_like/linux/mod.rs
@@ -1299,6 +1299,181 @@ pub const _SC_THREAD_ROBUST_PRIO_PROTECT: ::c_int = 248;
pub const RLIM_SAVED_MAX: ::rlim_t = RLIM_INFINITY;
pub const RLIM_SAVED_CUR: ::rlim_t = RLIM_INFINITY;
+// elf.h - Fields in the e_ident array.
+pub const EI_NIDENT: usize = 16;
+
+pub const EI_MAG0: usize = 0;
+pub const ELFMAG0: u8 = 0x7f;
+pub const EI_MAG1: usize = 1;
+pub const ELFMAG1: u8 = b'E';
+pub const EI_MAG2: usize = 2;
+pub const ELFMAG2: u8 = b'L';
+pub const EI_MAG3: usize = 3;
+pub const ELFMAG3: u8 = b'F';
+pub const SELFMAG: usize = 4;
+
+pub const EI_CLASS: usize = 4;
+pub const ELFCLASSNONE: u8 = 0;
+pub const ELFCLASS32: u8 = 1;
+pub const ELFCLASS64: u8 = 2;
+pub const ELFCLASSNUM: usize = 3;
+
+pub const EI_DATA: usize = 5;
+pub const ELFDATANONE: u8 = 0;
+pub const ELFDATA2LSB: u8 = 1;
+pub const ELFDATA2MSB: u8 = 2;
+pub const ELFDATANUM: usize = 3;
+
+pub const EI_VERSION: usize = 6;
+
+pub const EI_OSABI: usize = 7;
+pub const ELFOSABI_NONE: u8 = 0;
+pub const ELFOSABI_SYSV: u8 = 0;
+pub const ELFOSABI_HPUX: u8 = 1;
+pub const ELFOSABI_NETBSD: u8 = 2;
+pub const ELFOSABI_GNU: u8 = 3;
+pub const ELFOSABI_LINUX: u8 = ELFOSABI_GNU;
+pub const ELFOSABI_SOLARIS: u8 = 6;
+pub const ELFOSABI_AIX: u8 = 7;
+pub const ELFOSABI_IRIX: u8 = 8;
+pub const ELFOSABI_FREEBSD: u8 = 9;
+pub const ELFOSABI_TRU64: u8 = 10;
+pub const ELFOSABI_MODESTO: u8 = 11;
+pub const ELFOSABI_OPENBSD: u8 = 12;
+pub const ELFOSABI_ARM: u8 = 97;
+pub const ELFOSABI_STANDALONE: u8 = 255;
+
+pub const EI_ABIVERSION: usize = 8;
+
+pub const EI_PAD: usize = 9;
+
+// elf.h - Legal values for e_type (object file type).
+pub const ET_NONE: u16 = 0;
+pub const ET_REL: u16 = 1;
+pub const ET_EXEC: u16 = 2;
+pub const ET_DYN: u16 = 3;
+pub const ET_CORE: u16 = 4;
+pub const ET_NUM: u16 = 5;
+pub const ET_LOOS: u16 = 0xfe00;
+pub const ET_HIOS: u16 = 0xfeff;
+pub const ET_LOPROC: u16 = 0xff00;
+pub const ET_HIPROC: u16 = 0xffff;
+
+// elf.h - Legal values for e_machine (architecture).
+pub const EM_NONE: u16 = 0;
+pub const EM_M32: u16 = 1;
+pub const EM_SPARC: u16 = 2;
+pub const EM_386: u16 = 3;
+pub const EM_68K: u16 = 4;
+pub const EM_88K: u16 = 5;
+pub const EM_860: u16 = 7;
+pub const EM_MIPS: u16 = 8;
+pub const EM_S370: u16 = 9;
+pub const EM_MIPS_RS3_LE: u16 = 10;
+pub const EM_PARISC: u16 = 15;
+pub const EM_VPP500: u16 = 17;
+pub const EM_SPARC32PLUS: u16 = 18;
+pub const EM_960: u16 = 19;
+pub const EM_PPC: u16 = 20;
+pub const EM_PPC64: u16 = 21;
+pub const EM_S390: u16 = 22;
+pub const EM_V800: u16 = 36;
+pub const EM_FR20: u16 = 37;
+pub const EM_RH32: u16 = 38;
+pub const EM_RCE: u16 = 39;
+pub const EM_ARM: u16 = 40;
+pub const EM_FAKE_ALPHA: u16 = 41;
+pub const EM_SH: u16 = 42;
+pub const EM_SPARCV9: u16 = 43;
+pub const EM_TRICORE: u16 = 44;
+pub const EM_ARC: u16 = 45;
+pub const EM_H8_300: u16 = 46;
+pub const EM_H8_300H: u16 = 47;
+pub const EM_H8S: u16 = 48;
+pub const EM_H8_500: u16 = 49;
+pub const EM_IA_64: u16 = 50;
+pub const EM_MIPS_X: u16 = 51;
+pub const EM_COLDFIRE: u16 = 52;
+pub const EM_68HC12: u16 = 53;
+pub const EM_MMA: u16 = 54;
+pub const EM_PCP: u16 = 55;
+pub const EM_NCPU: u16 = 56;
+pub const EM_NDR1: u16 = 57;
+pub const EM_STARCORE: u16 = 58;
+pub const EM_ME16: u16 = 59;
+pub const EM_ST100: u16 = 60;
+pub const EM_TINYJ: u16 = 61;
+pub const EM_X86_64: u16 = 62;
+pub const EM_PDSP: u16 = 63;
+pub const EM_FX66: u16 = 66;
+pub const EM_ST9PLUS: u16 = 67;
+pub const EM_ST7: u16 = 68;
+pub const EM_68HC16: u16 = 69;
+pub const EM_68HC11: u16 = 70;
+pub const EM_68HC08: u16 = 71;
+pub const EM_68HC05: u16 = 72;
+pub const EM_SVX: u16 = 73;
+pub const EM_ST19: u16 = 74;
+pub const EM_VAX: u16 = 75;
+pub const EM_CRIS: u16 = 76;
+pub const EM_JAVELIN: u16 = 77;
+pub const EM_FIREPATH: u16 = 78;
+pub const EM_ZSP: u16 = 79;
+pub const EM_MMIX: u16 = 80;
+pub const EM_HUANY: u16 = 81;
+pub const EM_PRISM: u16 = 82;
+pub const EM_AVR: u16 = 83;
+pub const EM_FR30: u16 = 84;
+pub const EM_D10V: u16 = 85;
+pub const EM_D30V: u16 = 86;
+pub const EM_V850: u16 = 87;
+pub const EM_M32R: u16 = 88;
+pub const EM_MN10300: u16 = 89;
+pub const EM_MN10200: u16 = 90;
+pub const EM_PJ: u16 = 91;
+pub const EM_OPENRISC: u16 = 92;
+pub const EM_ARC_A5: u16 = 93;
+pub const EM_XTENSA: u16 = 94;
+pub const EM_AARCH64: u16 = 183;
+pub const EM_TILEPRO: u16 = 188;
+pub const EM_TILEGX: u16 = 191;
+pub const EM_ALPHA: u16 = 0x9026;
+
+// elf.h - Legal values for e_version (version).
+pub const EV_NONE: u32 = 0;
+pub const EV_CURRENT: u32 = 1;
+pub const EV_NUM: u32 = 2;
+
+// elf.h - Legal values for p_type (segment type).
+pub const PT_NULL: u32 = 0;
+pub const PT_LOAD: u32 = 1;
+pub const PT_DYNAMIC: u32 = 2;
+pub const PT_INTERP: u32 = 3;
+pub const PT_NOTE: u32 = 4;
+pub const PT_SHLIB: u32 = 5;
+pub const PT_PHDR: u32 = 6;
+pub const PT_TLS: u32 = 7;
+pub const PT_NUM: u32 = 8;
+pub const PT_LOOS: u32 = 0x60000000;
+pub const PT_GNU_EH_FRAME: u32 = 0x6474e550;
+pub const PT_GNU_STACK: u32 = 0x6474e551;
+pub const PT_GNU_RELRO: u32 = 0x6474e552;
+pub const PT_LOSUNW: u32 = 0x6ffffffa;
+pub const PT_SUNWBSS: u32 = 0x6ffffffa;
+pub const PT_SUNWSTACK: u32 = 0x6ffffffb;
+pub const PT_HISUNW: u32 = 0x6fffffff;
+pub const PT_HIOS: u32 = 0x6fffffff;
+pub const PT_LOPROC: u32 = 0x70000000;
+pub const PT_HIPROC: u32 = 0x7fffffff;
+
+// Legal values for p_flags (segment flags).
+pub const PF_X: u32 = 1 << 0;
+pub const PF_W: u32 = 1 << 1;
+pub const PF_R: u32 = 1 << 2;
+pub const PF_MASKOS: u32 = 0x0ff00000;
+pub const PF_MASKPROC: u32 = 0xf0000000;
+
+// elf.h - Legal values for a_type (entry type).
pub const AT_NULL: ::c_ulong = 0;
pub const AT_IGNORE: ::c_ulong = 1;
pub const AT_EXECFD: ::c_ulong = 2;
@@ -1951,26 +2126,6 @@ pub const RESOLVE_BENEATH: ::__u64 = 0x08;
pub const RESOLVE_IN_ROOT: ::__u64 = 0x10;
pub const RESOLVE_CACHED: ::__u64 = 0x20;
-// these are used in the p_type field of Elf32_Phdr and Elf64_Phdr, which has
-// the type Elf32Word and Elf64Word respectively. Luckily, both of those are u32
-// so we can use that type here to avoid having to cast.
-pub const PT_NULL: u32 = 0;
-pub const PT_LOAD: u32 = 1;
-pub const PT_DYNAMIC: u32 = 2;
-pub const PT_INTERP: u32 = 3;
-pub const PT_NOTE: u32 = 4;
-pub const PT_SHLIB: u32 = 5;
-pub const PT_PHDR: u32 = 6;
-pub const PT_TLS: u32 = 7;
-pub const PT_NUM: u32 = 8;
-pub const PT_LOOS: u32 = 0x60000000;
-pub const PT_GNU_EH_FRAME: u32 = 0x6474e550;
-pub const PT_GNU_STACK: u32 = 0x6474e551;
-pub const PT_GNU_RELRO: u32 = 0x6474e552;
-pub const PT_HIOS: u32 = 0x6fffffff;
-pub const PT_LOPROC: u32 = 0x70000000;
-pub const PT_HIPROC: u32 = 0x7fffffff;
-
// linux/if_ether.h
pub const ETH_ALEN: ::c_int = 6;
pub const ETH_HLEN: ::c_int = 14;