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
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}