def bpf_mem.step

bend-osdev-bpf@0.1.0.0 · validate.bend:178

import bend-osdev-bpf@0.1.0.0/validate.bend as Validate
import Base
import bend-osdev-bpf@0.1.0.0/insn.bend as I

178# one instruction, given the slots written on every path to it
179def bpf_mem.step(op: I.BpfOp, +pc: Nat, +now: U32, ahead: List<&2, U32>) -> BpfInitStep:
180  match op:
181    case I.BpfLdMem{k}:
182      bpf_mem.read(pc, now, k, ahead)
183    case I.BpfLdxMem{k}:
184      bpf_mem.read(pc, now, k, ahead)
185    case I.BpfSt{k}:
186      BpfInitStep{Done{Unit{}}, U32.or(now, bpf_mem.bit(k)), ahead}
187    case I.BpfStx{k}:
188      BpfInitStep{Done{Unit{}}, U32.or(now, bpf_mem.bit(k)), ahead}
189    case I.BpfJa{k}:
190      BpfInitStep{Done{Unit{}}, 65535, bpf_mem.meet(ahead, U32.to_nat(k), now)}
191    case I.BpfJmp{c, src, jt, jf}:
192      BpfInitStep{Done{Unit{}}, 65535, bpf_mem.meet(bpf_mem.meet(ahead, U32.to_nat(jt), now), U32.to_nat(jf), now)}
193    case other:
194      BpfInitStep{Done{Unit{}}, now, ahead}

Uses (12)

Used by (1)