pub enum Edge<'a> {
    Block,
    Jump(&'a Term<Jmp>, Option<&'a Term<Jmp>>),
    Call(&'a Term<Jmp>),
    ExternCallStub(&'a Term<Jmp>),
    CrCallStub,
    CrReturnStub,
    CallCombine(&'a Term<Jmp>),
    ReturnCombine(&'a Term<Jmp>),
}
Expand description

The edge type of an interprocedural fixpoint graph.

Where applicable the edge carries a reference to the corresponding jump instruction. For CRCombine edges the corresponding jump is the call and not the return jump. Intraprocedural jumps carry a second optional reference, which is only set if the jump directly follows an conditional jump, i.e. it represents the “conditional jump not taken” branch. In this case the other jump reference points to the untaken conditional jump.

Variants§

§

Block

An edge between the BlkStart and BlkEnd nodes of a basic block.

§

Jump(&'a Term<Jmp>, Option<&'a Term<Jmp>>)

An edge corresponding to an intraprocedural jump instruction. If the jump is only taken if a previous conditional jump is not taken, then a reference to the untaken conditional jump is also added to the jump label.

§

Call(&'a Term<Jmp>)

An edge corresponding to a function call instruction. Only generated for calls to functions inside the binary. See the module-level documentation for more information.

§

ExternCallStub(&'a Term<Jmp>)

An edge corresponding to a call to a function not contained in the binary, i.e. the target is located in a shared object loaded by the binary. The edge goes directly from the callsite to the return-to-site inside the caller.

§

CrCallStub

An artificial edge. See the module-level documentation for more information.

§

CrReturnStub

An artificial edge. See the module-level documentation for more information.

§

CallCombine(&'a Term<Jmp>)

An artificial edge to combine intra- and interprocedural data flows at the callsite of calls. See the module-level documentation for more information.

§

ReturnCombine(&'a Term<Jmp>)

An artificial edge to combine intra- and interprocedural data flows at the return-to site of calls. See the module-level documentation for more information.

Trait Implementations§

source§

impl<'a> Clone for Edge<'a>

source§

fn clone(&self) -> Edge<'a>

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl<'a> Debug for Edge<'a>

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<'a> Display for Edge<'a>

source§

fn fmt(&self, formatter: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<'a> Hash for Edge<'a>

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
source§

impl<'a> PartialEq for Edge<'a>

source§

fn eq(&self, other: &Edge<'a>) -> bool

This method tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
source§

impl<'a> Serialize for Edge<'a>

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl<'a> Copy for Edge<'a>

source§

impl<'a> Eq for Edge<'a>

source§

impl<'a> StructuralEq for Edge<'a>

source§

impl<'a> StructuralPartialEq for Edge<'a>

Auto Trait Implementations§

§

impl<'a> RefUnwindSafe for Edge<'a>

§

impl<'a> Send for Edge<'a>

§

impl<'a> Sync for Edge<'a>

§

impl<'a> Unpin for Edge<'a>

§

impl<'a> UnwindSafe for Edge<'a>

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T, U> Into<U> for T
where U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T> ToOwned for T
where T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T> ToString for T
where T: Display + ?Sized,

source§

default fn to_string(&self) -> String

Converts the given value to a String. Read more
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.