1
1
use core:: fmt;
2
- use { P32 , P64 } ;
3
2
use zero:: Pod ;
3
+ use { P32 , P64 } ;
4
4
5
5
#[ derive( Debug ) ]
6
6
#[ repr( C ) ]
7
- pub struct Dynamic < P > where Tag_ < P > : fmt:: Debug {
7
+ pub struct Dynamic < P >
8
+ where
9
+ Tag_ < P > : fmt:: Debug ,
10
+ {
8
11
tag : Tag_ < P > ,
9
12
un : P ,
10
13
}
@@ -50,6 +53,9 @@ pub enum Tag<P> {
50
53
PreInitArray ,
51
54
PreInitArraySize ,
52
55
SymTabShIndex ,
56
+ RelrSize ,
57
+ Relr ,
58
+ RelrEnt ,
53
59
Flags1 ,
54
60
OsSpecific ( P ) ,
55
61
ProcessorSpecific ( P ) ,
@@ -64,22 +70,51 @@ macro_rules! impls {
64
70
65
71
pub fn get_val( & self ) -> Result <$p, & ' static str > {
66
72
match self . get_tag( ) ? {
67
- Tag :: Needed | Tag :: PltRelSize | Tag :: RelaSize | Tag :: RelaEnt | Tag :: StrSize |
68
- Tag :: SymEnt | Tag :: SoName | Tag :: RPath | Tag :: RelSize | Tag :: RelEnt | Tag :: PltRel |
69
- Tag :: InitArraySize | Tag :: FiniArraySize | Tag :: RunPath | Tag :: Flags |
70
- Tag :: PreInitArraySize | Tag :: Flags1 | Tag :: OsSpecific ( _) |
71
- Tag :: ProcessorSpecific ( _) => Ok ( self . un) ,
73
+ Tag :: Needed
74
+ | Tag :: PltRelSize
75
+ | Tag :: RelaSize
76
+ | Tag :: RelaEnt
77
+ | Tag :: StrSize
78
+ | Tag :: SymEnt
79
+ | Tag :: SoName
80
+ | Tag :: RPath
81
+ | Tag :: RelSize
82
+ | Tag :: RelEnt
83
+ | Tag :: PltRel
84
+ | Tag :: InitArraySize
85
+ | Tag :: FiniArraySize
86
+ | Tag :: RunPath
87
+ | Tag :: Flags
88
+ | Tag :: PreInitArraySize
89
+ | Tag :: RelrSize
90
+ | Tag :: RelrEnt
91
+ | Tag :: Flags1
92
+ | Tag :: OsSpecific ( _)
93
+ | Tag :: ProcessorSpecific ( _) => Ok ( self . un) ,
72
94
_ => Err ( "Invalid value" ) ,
73
95
}
74
96
}
75
97
76
98
pub fn get_ptr( & self ) -> Result <$p, & ' static str > {
77
99
match self . get_tag( ) ? {
78
- Tag :: Pltgot | Tag :: Hash | Tag :: StrTab | Tag :: SymTab | Tag :: Rela | Tag :: Init | Tag :: Fini |
79
- Tag :: Rel | Tag :: Debug | Tag :: JmpRel | Tag :: InitArray | Tag :: FiniArray |
80
- Tag :: PreInitArray | Tag :: SymTabShIndex | Tag :: OsSpecific ( _) | Tag :: ProcessorSpecific ( _)
81
- => Ok ( self . un) ,
82
- _ => Err ( "Invalid ptr" ) ,
100
+ Tag :: Pltgot
101
+ | Tag :: Hash
102
+ | Tag :: StrTab
103
+ | Tag :: SymTab
104
+ | Tag :: Rela
105
+ | Tag :: Init
106
+ | Tag :: Fini
107
+ | Tag :: Rel
108
+ | Tag :: Debug
109
+ | Tag :: JmpRel
110
+ | Tag :: InitArray
111
+ | Tag :: FiniArray
112
+ | Tag :: PreInitArray
113
+ | Tag :: SymTabShIndex
114
+ | Tag :: Relr
115
+ | Tag :: OsSpecific ( _)
116
+ | Tag :: ProcessorSpecific ( _) => Ok ( self . un) ,
117
+ _ => Err ( "Invalid ptr" ) ,
83
118
}
84
119
}
85
120
}
@@ -121,6 +156,9 @@ macro_rules! impls {
121
156
32 => Ok ( Tag :: PreInitArray ) ,
122
157
33 => Ok ( Tag :: PreInitArraySize ) ,
123
158
34 => Ok ( Tag :: SymTabShIndex ) ,
159
+ 35 => Ok ( Tag :: RelrSize ) ,
160
+ 36 => Ok ( Tag :: Relr ) ,
161
+ 37 => Ok ( Tag :: RelrEnt ) ,
124
162
0x6ffffffb => Ok ( Tag :: Flags1 ) ,
125
163
t if ( 0x6000000D ..0x70000000 ) . contains( & t) => Ok ( Tag :: OsSpecific ( t) ) ,
126
164
t if ( 0x70000000 ..0x80000000 ) . contains( & t) => Ok ( Tag :: ProcessorSpecific ( t) ) ,
@@ -134,7 +172,7 @@ macro_rules! impls {
134
172
self . as_tag( ) . fmt( f)
135
173
}
136
174
}
137
- }
175
+ } ;
138
176
}
139
177
140
178
impls ! ( P32 ) ;
0 commit comments