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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
#[derive(Debug, Clone, Hash, PartialOrd, Ord, PartialEq, Eq)]
pub enum Flag {
Origin,
Symbolic,
TextRel,
BindNow,
StaticTLS,
Now1,
Global1,
Group1,
NoDelete1,
LoadFilter1,
InitFirst1,
NoOpen1,
Origin1,
Direct1,
Trans1,
Interpose1,
NoDefLib1,
NoDump1,
ConfAlt1,
EndFiltee1,
DispRelDNE1,
DispRelPND1,
NoDirect1,
IGNMulDef1,
NokSyms1,
NoHdr1,
Edited1,
NoReloc1,
SymInterpose1,
GlobalAudit1,
Singleton1,
Stub1,
PIE1,
KMod1,
WeakFilter1,
NoCommon1,
Any(u64),
}
impl Flag {
pub fn from_def(value: u64) -> Flag {
match value {
0x1 => Flag::Origin,
0x2 => Flag::Symbolic,
0x4 => Flag::TextRel,
0x8 => Flag::BindNow,
0x10 => Flag::StaticTLS,
_ => Flag::Any(value),
}
}
pub fn from_1(value: u64) -> Flag {
match value {
0x1 => Flag::Now1,
0x2 => Flag::Global1,
0x4 => Flag::Group1,
0x8 => Flag::NoDelete1,
0x10 => Flag::LoadFilter1,
0x20 => Flag::InitFirst1,
0x40 => Flag::NoOpen1,
0x80 => Flag::Origin1,
0x100 => Flag::Direct1,
0x200 => Flag::Trans1,
0x400 => Flag::Interpose1,
0x800 => Flag::NoDefLib1,
0x1000 => Flag::NoDump1,
0x2000 => Flag::ConfAlt1,
0x4000 => Flag::EndFiltee1,
0x8000 => Flag::DispRelDNE1,
0x10000 => Flag::DispRelPND1,
0x20000 => Flag::NoDirect1,
0x40000 => Flag::IGNMulDef1,
0x80000 => Flag::NokSyms1,
0x100000 => Flag::NoHdr1,
0x200000 => Flag::Edited1,
0x400000 => Flag::NoReloc1,
0x800000 => Flag::SymInterpose1,
0x1000000 => Flag::GlobalAudit1,
0x2000000 => Flag::Singleton1,
0x4000000 => Flag::Stub1,
0x8000000 => Flag::PIE1,
0x10000000 => Flag::KMod1,
0x20000000 => Flag::WeakFilter1,
0x40000000 => Flag::NoCommon1,
_ => Flag::Any(value),
}
}
}