pub enum PlanExprOp {
Show 31 variants
LoadRegister(u16),
PushConstant(i64),
Dereference {
size: MemoryAccessSize,
},
FormTlsAddress,
Add,
Sub,
Mul,
Div,
Mod,
And,
Or,
Xor,
Shl,
Shr,
Shra,
Not,
Neg,
Abs,
Dup,
Drop,
Swap,
Rot,
Pick(u8),
Eq,
Ne,
Lt,
Le,
Gt,
Ge,
If {
then_branch: Vec<PlanExprOp>,
else_branch: Vec<PlanExprOp>,
},
EntryValueLookup {
caller_pc_steps: Vec<PlanExprOp>,
cases: Vec<EntryValueCase>,
},
}Expand description
Stack-machine expression op selected by DWARF lowering.
This is the single planned expression IR shared by DWARF expression lowering, read plans, CFI recovery, and compiler/eBPF lowering.
Variants§
LoadRegister(u16)
Load register value from pt_regs
PushConstant(i64)
Push constant
Dereference
Memory dereference via bpf_probe_read_user
Fields
size: MemoryAccessSizeFormTlsAddress
Convert a target-module TLS offset into the current thread’s address.
This models DW_OP_form_tls_address. Runtime lowering is responsible for combining the offset with the thread pointer for the traced thread.
Add
Binary arithmetic operations (pop 2, push 1)
Sub
Mul
Div
Mod
And
Binary bitwise operations
Or
Xor
Shl
Shr
Shra
Not
Unary operations
Neg
Abs
Dup
Stack manipulation
Drop
Swap
Rot
Pick(u8)
Eq
Comparison operations (pop 2, push bool)
Ne
Lt
Le
Gt
Ge
If
Control flow (simplified for eBPF)
EntryValueLookup
Recover a DW_OP_entry_value at runtime by matching the recovered caller return PC against caller-side DW_AT_call_return_pc cases.
Trait Implementations§
Source§impl Clone for PlanExprOp
impl Clone for PlanExprOp
Source§fn clone(&self) -> PlanExprOp
fn clone(&self) -> PlanExprOp
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for PlanExprOp
impl Debug for PlanExprOp
Source§impl Display for PlanExprOp
impl Display for PlanExprOp
Source§impl PartialEq for PlanExprOp
impl PartialEq for PlanExprOp
impl StructuralPartialEq for PlanExprOp
Auto Trait Implementations§
impl Freeze for PlanExprOp
impl RefUnwindSafe for PlanExprOp
impl Send for PlanExprOp
impl Sync for PlanExprOp
impl Unpin for PlanExprOp
impl UnsafeUnpin for PlanExprOp
impl UnwindSafe for PlanExprOp
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more