summaryrefslogtreecommitdiff
path: root/rust/src/llil
diff options
context:
space:
mode:
Diffstat (limited to 'rust/src/llil')
-rw-r--r--rust/src/llil/instruction.rs4
-rw-r--r--rust/src/llil/mod.rs2
2 files changed, 4 insertions, 2 deletions
diff --git a/rust/src/llil/instruction.rs b/rust/src/llil/instruction.rs
index c9817dbf..36733472 100644
--- a/rust/src/llil/instruction.rs
+++ b/rust/src/llil/instruction.rs
@@ -111,6 +111,7 @@ where
LLIL_CALL | LLIL_CALL_STACK_ADJUST => {
InstrInfo::Call(Operation::new(self.function, op))
}
+ LLIL_TAILCALL => InstrInfo::TailCall(Operation::new(self.function, op)),
LLIL_SYSCALL => InstrInfo::Syscall(Operation::new(self.function, op)),
LLIL_INTRINSIC => InstrInfo::Intrinsic(Operation::new(self.function, op)),
_ => {
@@ -149,7 +150,7 @@ where
visit!(fb, &op.source_expr());
}
Push(ref op) => visit!(fb, &op.operand()),
- Call(ref op) => visit!(fb, &op.target()),
+ Call(ref op) | TailCall(ref op) => visit!(fb, &op.target()),
Intrinsic(ref _op) => {
// TODO: Use this when we support expression lists
// for expr in op.source_exprs() {
@@ -180,6 +181,7 @@ where
JumpTo(Operation<'func, A, M, F, operation::JumpTo>),
Call(Operation<'func, A, M, F, operation::Call>),
+ TailCall(Operation<'func, A, M, F, operation::Call>),
Ret(Operation<'func, A, M, F, operation::Ret>),
NoRet(Operation<'func, A, M, F, operation::NoArgs>),
diff --git a/rust/src/llil/mod.rs b/rust/src/llil/mod.rs
index f7696d57..8d199a2a 100644
--- a/rust/src/llil/mod.rs
+++ b/rust/src/llil/mod.rs
@@ -49,7 +49,7 @@ pub type LiftedExpr<'a, Arch> = Expression<'a, Arch, Mutable, NonSSA<LiftedNonSS
pub type RegularFunction<Arch> = Function<Arch, Finalized, NonSSA<RegularNonSSA>>;
pub type SSAFunction<Arch> = Function<Arch, Finalized, SSA>;
-#[derive(Copy, Clone)]
+#[derive(Copy, Clone, PartialEq, Eq)]
pub enum Register<R: ArchReg> {
ArchReg(R),
Temp(u32),