elf_utilities/header/
osabi.rs

1pub enum OSABI {
2    // UNIX System V ABI
3    None,
4    SysV,
5    // HP-UX
6    HPUX,
7    // NetBSD
8    NetBSD,
9    // Object uses GNU ELF extensions
10    GNU,
11    Linux,
12
13    //  Sun Solaris
14    Solaris,
15    //  IBM AIX
16    AIX,
17    //  SGI Irix
18    Irix,
19    //  FreeBSD
20    FreeBSD,
21    //  Compaq TRU64 UNIX
22    TRU64,
23    //  Novell Modesto
24    Modesto,
25    //  OpenBSD
26    OPENBSD,
27    //  ARM EABI
28    ArmAEABI,
29    //  ARM
30    Arm,
31    // Standalone (embedded) application
32    Standalone,
33    // for architecture-specific-value
34    Any(u8),
35}
36
37impl OSABI {
38    pub const INDEX: usize = 7;
39
40    pub fn to_identifier(&self) -> u8 {
41        match self {
42            Self::None | Self::SysV => 0,
43            Self::HPUX => 1,
44            Self::NetBSD => 2,
45            Self::GNU | Self::Linux => 3,
46
47            Self::Solaris => 6,
48            Self::AIX => 7,
49            Self::Irix => 8,
50            Self::FreeBSD => 9,
51            Self::TRU64 => 10,
52            Self::Modesto => 11,
53            Self::OPENBSD => 12,
54            Self::ArmAEABI => 64,
55            Self::Arm => 97,
56            Self::Standalone => 255,
57            Self::Any(c) => *c,
58        }
59    }
60}
61
62impl From<u8> for OSABI {
63    fn from(byte: u8) -> Self {
64        match byte {
65            0 => Self::SysV,
66            1 => Self::HPUX,
67            2 => Self::NetBSD,
68            3 => Self::GNU,
69            6 => Self::Solaris,
70            7 => Self::AIX,
71            8 => Self::Irix,
72            9 => Self::FreeBSD,
73            10 => Self::TRU64,
74            11 => Self::Modesto,
75            12 => Self::OPENBSD,
76            64 => Self::ArmAEABI,
77            97 => Self::Arm,
78            255 => Self::Standalone,
79            _ => Self::Any(byte),
80        }
81    }
82}