1 /// An enumeration of the possible values for the `AT_*` constants. 2 #[derive(Debug, Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash)] 3 pub enum AtType { 4 /// End of vector. 5 Null, 6 /// Entry should be ignored. 7 Ignore, 8 /// File descriptor of program. 9 ExecFd, 10 /// Program headers for program. 11 Phdr, 12 /// Size of program header entry. 13 PhEnt, 14 /// Number of program headers. 15 PhNum, 16 /// System page size. 17 PageSize, 18 /// Base address of interpreter. 19 Base, 20 /// Flags. 21 Flags, 22 /// Entry point of program. 23 Entry, 24 /// Program is not ELF. 25 NotElf, 26 /// Real uid. 27 Uid, 28 /// Effective uid. 29 EUid, 30 /// Real gid. 31 Gid, 32 /// Effective gid. 33 EGid, 34 /// String identifying CPU for optimizations. 35 Platform, 36 /// Arch dependent hints at CPU capabilities. 37 HwCap, 38 /// Frequency at which times() increments. 39 ClkTck, 40 /// Secure mode boolean. 41 Secure, 42 /// String identifying real platform, may differ from AT_PLATFORM. 43 BasePlatform, 44 /// Address of 16 random bytes. 45 Random, 46 /// Extension of AT_HWCAP. 47 HwCap2, 48 /// Filename of program. 49 ExecFn, 50 /// Minimal stack size for signal delivery. 51 MinSigStackSize, 52 } 53 54 impl TryFrom<u32> for AtType { 55 type Error = &'static str; 56 try_from(value: u32) -> Result<Self, Self::Error>57 fn try_from(value: u32) -> Result<Self, Self::Error> { 58 match value { 59 0 => Ok(AtType::Null), 60 1 => Ok(AtType::Ignore), 61 2 => Ok(AtType::ExecFd), 62 3 => Ok(AtType::Phdr), 63 4 => Ok(AtType::PhEnt), 64 5 => Ok(AtType::PhNum), 65 6 => Ok(AtType::PageSize), 66 7 => Ok(AtType::Base), 67 8 => Ok(AtType::Flags), 68 9 => Ok(AtType::Entry), 69 10 => Ok(AtType::NotElf), 70 11 => Ok(AtType::Uid), 71 12 => Ok(AtType::EUid), 72 13 => Ok(AtType::Gid), 73 14 => Ok(AtType::EGid), 74 15 => Ok(AtType::Platform), 75 16 => Ok(AtType::HwCap), 76 17 => Ok(AtType::ClkTck), 77 23 => Ok(AtType::Secure), 78 24 => Ok(AtType::BasePlatform), 79 25 => Ok(AtType::Random), 80 26 => Ok(AtType::HwCap2), 81 31 => Ok(AtType::ExecFn), 82 51 => Ok(AtType::MinSigStackSize), 83 _ => Err("Invalid value for AtType"), 84 } 85 } 86 } 87