Skip to content

Commit f2b613e

Browse files
authored
Merge pull request #83 from matts1/master
Add missing tags for relative relocations
2 parents ae828f7 + 750de6b commit f2b613e

File tree

1 file changed

+51
-13
lines changed

1 file changed

+51
-13
lines changed

src/dynamic.rs

Lines changed: 51 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,13 @@
11
use core::fmt;
2-
use {P32, P64};
32
use zero::Pod;
3+
use {P32, P64};
44

55
#[derive(Debug)]
66
#[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+
{
811
tag: Tag_<P>,
912
un: P,
1013
}
@@ -50,6 +53,9 @@ pub enum Tag<P> {
5053
PreInitArray,
5154
PreInitArraySize,
5255
SymTabShIndex,
56+
RelrSize,
57+
Relr,
58+
RelrEnt,
5359
Flags1,
5460
OsSpecific(P),
5561
ProcessorSpecific(P),
@@ -64,22 +70,51 @@ macro_rules! impls {
6470

6571
pub fn get_val(&self) -> Result<$p, &'static str> {
6672
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),
7294
_ => Err("Invalid value"),
7395
}
7496
}
7597

7698
pub fn get_ptr(&self) -> Result<$p, &'static str> {
7799
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"),
83118
}
84119
}
85120
}
@@ -121,6 +156,9 @@ macro_rules! impls {
121156
32 => Ok(Tag::PreInitArray),
122157
33 => Ok(Tag::PreInitArraySize),
123158
34 => Ok(Tag::SymTabShIndex),
159+
35 => Ok(Tag::RelrSize),
160+
36 => Ok(Tag::Relr),
161+
37 => Ok(Tag::RelrEnt),
124162
0x6ffffffb => Ok(Tag::Flags1),
125163
t if (0x6000000D..0x70000000).contains(&t) => Ok(Tag::OsSpecific(t)),
126164
t if (0x70000000..0x80000000).contains(&t) => Ok(Tag::ProcessorSpecific(t)),
@@ -134,7 +172,7 @@ macro_rules! impls {
134172
self.as_tag().fmt(f)
135173
}
136174
}
137-
}
175+
};
138176
}
139177

140178
impls!(P32);

0 commit comments

Comments
 (0)