elf_utilities/dynamic/
flags.rs

1#[derive(Debug, Clone, Hash, PartialOrd, Ord, PartialEq, Eq)]
2pub enum Flag {
3    /// Object may use this
4    Origin,
5    /// Symbol resolutions starts here
6    Symbolic,
7    /// Object contains text relocations
8    TextRel,
9    /// No lazy binding for this object.
10    BindNow,
11    /// Module uses the static TLS model.
12    StaticTLS,
13    /// Set `RTLD_NOW` for this object
14    Now1,
15    /// Set `RTLD_GLOBAL` for this object
16    Global1,
17    /// Set `RTLD_GROUP` for this object
18    Group1,
19    /// Set `RTLD_NODELETE` for this object
20    NoDelete1,
21    /// Trigger filtee loading at runtime
22    LoadFilter1,
23    /// Set `RTLD_INITFIRST` for this object
24    InitFirst1,
25    /// Set `RTLD_NOOPEN` for this object
26    NoOpen1,
27    /// $ORIGIN must be handled
28    Origin1,
29    /// Direct binding enabled
30    Direct1,
31    Trans1,
32    /// Object is used to interpose
33    Interpose1,
34    /// Ignore default lib search path
35    NoDefLib1,
36    /// Object can't be dldump'ed
37    NoDump1,
38    /// Configuration alternative created
39    ConfAlt1,
40    /// Filtee terminates filters search
41    EndFiltee1,
42    /// Disp reloc applied at build time
43    DispRelDNE1,
44    /// Disp reloc applied at run-time
45    DispRelPND1,
46    /// Object has no-direct binding
47    NoDirect1,
48    IGNMulDef1,
49    NokSyms1,
50    NoHdr1,
51    /// Object is modified after built
52    Edited1,
53    NoReloc1,
54    /// Object has individual interposers
55    SymInterpose1,
56    /// Global auditing required
57    GlobalAudit1,
58    /// Singleton symbols are used
59    Singleton1,
60    Stub1,
61    PIE1,
62    KMod1,
63    WeakFilter1,
64    NoCommon1,
65    /// User defined value
66    Any(u64),
67}
68
69impl Flag {
70    /// For DT_FLAGS
71    pub fn from_def(value: u64) -> Flag {
72        match value {
73            0x1 => Flag::Origin,
74            0x2 => Flag::Symbolic,
75            0x4 => Flag::TextRel,
76            0x8 => Flag::BindNow,
77            0x10 => Flag::StaticTLS,
78            _ => Flag::Any(value),
79        }
80    }
81    /// For DT_FLAGS_1
82    pub fn from_1(value: u64) -> Flag {
83        match value {
84            0x1 => Flag::Now1,
85            0x2 => Flag::Global1,
86            0x4 => Flag::Group1,
87            0x8 => Flag::NoDelete1,
88            0x10 => Flag::LoadFilter1,
89            0x20 => Flag::InitFirst1,
90            0x40 => Flag::NoOpen1,
91            0x80 => Flag::Origin1,
92            0x100 => Flag::Direct1,
93            0x200 => Flag::Trans1,
94            0x400 => Flag::Interpose1,
95            0x800 => Flag::NoDefLib1,
96            0x1000 => Flag::NoDump1,
97            0x2000 => Flag::ConfAlt1,
98            0x4000 => Flag::EndFiltee1,
99            0x8000 => Flag::DispRelDNE1,
100            0x10000 => Flag::DispRelPND1,
101            0x20000 => Flag::NoDirect1,
102            0x40000 => Flag::IGNMulDef1,
103            0x80000 => Flag::NokSyms1,
104            0x100000 => Flag::NoHdr1,
105            0x200000 => Flag::Edited1,
106            0x400000 => Flag::NoReloc1,
107            0x800000 => Flag::SymInterpose1,
108            0x1000000 => Flag::GlobalAudit1,
109            0x2000000 => Flag::Singleton1,
110            0x4000000 => Flag::Stub1,
111            0x8000000 => Flag::PIE1,
112            0x10000000 => Flag::KMod1,
113            0x20000000 => Flag::WeakFilter1,
114            0x40000000 => Flag::NoCommon1,
115            _ => Flag::Any(value),
116        }
117    }
118}