1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
//! Type definitions for segment flags.

use crate::*;

#[derive(PartialEq, Eq, PartialOrd, Ord, Debug, Clone, Copy, Hash)]
/// Segment flags
pub enum Flag {
    /// Segment is executable
    X,
    /// segment is writable
    W,
    /// segment is readable
    R,
}

impl Into<Elf64Word> for Flag {
    fn into(self) -> Elf64Word {
        match self {
            Flag::X => 1 << 0,
            Flag::W => 1 << 1,
            Flag::R => 1 << 2,
        }
    }
}

impl From<Elf64Word> for Flag {
    fn from(v: Elf64Word) -> Self {
        match v {
            0b1 => Flag::X,
            0b10 => Flag::W,
            0b100 => Flag::R,
            _ => unimplemented!(),
        }
    }
}