Lines Matching refs:rv
31 struct bpf_reg_val rv[EBPF_REG_NUM]; member
122 if (bvf->evst->rv[EBPF_REG_0].v.type == RTE_BPF_ARG_UNDEF) in eval_exit()
129 eval_umax_bound(struct bpf_reg_val *rv, uint64_t mask) in eval_umax_bound() argument
131 rv->u.max = mask; in eval_umax_bound()
132 rv->u.min = 0; in eval_umax_bound()
136 eval_smax_bound(struct bpf_reg_val *rv, uint64_t mask) in eval_smax_bound() argument
138 rv->s.max = mask >> 1; in eval_smax_bound()
139 rv->s.min = rv->s.max ^ UINT64_MAX; in eval_smax_bound()
143 eval_max_bound(struct bpf_reg_val *rv, uint64_t mask) in eval_max_bound() argument
145 eval_umax_bound(rv, mask); in eval_max_bound()
146 eval_smax_bound(rv, mask); in eval_max_bound()
150 eval_fill_max_bound(struct bpf_reg_val *rv, uint64_t mask) in eval_fill_max_bound() argument
152 eval_max_bound(rv, mask); in eval_fill_max_bound()
153 rv->v.type = RTE_BPF_ARG_RAW; in eval_fill_max_bound()
154 rv->mask = mask; in eval_fill_max_bound()
158 eval_fill_imm64(struct bpf_reg_val *rv, uint64_t mask, uint64_t val) in eval_fill_imm64() argument
160 rv->mask = mask; in eval_fill_imm64()
161 rv->s.min = val; in eval_fill_imm64()
162 rv->s.max = val; in eval_fill_imm64()
163 rv->u.min = val; in eval_fill_imm64()
164 rv->u.max = val; in eval_fill_imm64()
168 eval_fill_imm(struct bpf_reg_val *rv, uint64_t mask, int32_t imm) in eval_fill_imm() argument
174 rv->v.type = RTE_BPF_ARG_RAW; in eval_fill_imm()
175 eval_fill_imm64(rv, mask, v); in eval_fill_imm()
187 rd = bvf->evst->rv + ins->dst_reg; in eval_ld_imm64()
206 eval_apply_mask(struct bpf_reg_val *rv, uint64_t mask) in eval_apply_mask() argument
210 rt.u.min = rv->u.min & mask; in eval_apply_mask()
211 rt.u.max = rv->u.max & mask; in eval_apply_mask()
212 if (rt.u.min != rv->u.min || rt.u.max != rv->u.max) { in eval_apply_mask()
213 rv->u.max = RTE_MAX(rt.u.max, mask); in eval_apply_mask()
214 rv->u.min = 0; in eval_apply_mask()
218 rv->s.max = RTE_MIN(rt.s.max, rv->s.max); in eval_apply_mask()
219 rv->s.min = RTE_MAX(rt.s.min, rv->s.min); in eval_apply_mask()
221 rv->mask = mask; in eval_apply_mask()
227 struct bpf_reg_val rv; in eval_add() local
229 rv.u.min = (rd->u.min + rs->u.min) & msk; in eval_add()
230 rv.u.max = (rd->u.max + rs->u.max) & msk; in eval_add()
231 rv.s.min = (rd->s.min + rs->s.min) & msk; in eval_add()
232 rv.s.max = (rd->s.max + rs->s.max) & msk; in eval_add()
239 (rv.u.min < rd->u.min || rv.u.max < rd->u.max)) in eval_add()
240 eval_umax_bound(&rv, msk); in eval_add()
243 (((rs->s.min < 0 && rv.s.min > rd->s.min) || in eval_add()
244 rv.s.min < rd->s.min) || in eval_add()
245 ((rs->s.max < 0 && rv.s.max > rd->s.max) || in eval_add()
246 rv.s.max < rd->s.max))) in eval_add()
247 eval_smax_bound(&rv, msk); in eval_add()
249 rd->s = rv.s; in eval_add()
250 rd->u = rv.u; in eval_add()
256 struct bpf_reg_val rv; in eval_sub() local
258 rv.u.min = (rd->u.min - rs->u.max) & msk; in eval_sub()
259 rv.u.max = (rd->u.max - rs->u.min) & msk; in eval_sub()
260 rv.s.min = (rd->s.min - rs->s.max) & msk; in eval_sub()
261 rv.s.max = (rd->s.max - rs->s.min) & msk; in eval_sub()
268 (rv.u.min > rd->u.min || rv.u.max > rd->u.max)) in eval_sub()
269 eval_umax_bound(&rv, msk); in eval_sub()
272 (((rs->s.min < 0 && rv.s.min < rd->s.min) || in eval_sub()
273 rv.s.min > rd->s.min) || in eval_sub()
274 ((rs->s.max < 0 && rv.s.max < rd->s.max) || in eval_sub()
275 rv.s.max > rd->s.max))) in eval_sub()
276 eval_smax_bound(&rv, msk); in eval_sub()
278 rd->s = rv.s; in eval_sub()
279 rd->u = rv.u; in eval_sub()
588 struct bpf_reg_val *rv, ri, rs; in eval_ld_mbuf() local
593 if (bvf->evst->rv[EBPF_REG_6].v.type != RTE_BPF_ARG_PTR_MBUF) in eval_ld_mbuf()
597 rs = bvf->evst->rv[ins->src_reg]; in eval_ld_mbuf()
610 bvf->evst->rv[i].v.type = RTE_BPF_ARG_UNDEF; in eval_ld_mbuf()
613 rv = bvf->evst->rv + EBPF_REG_0; in eval_ld_mbuf()
614 rv->v.size = bpf_size(BPF_SIZE(ins->code)); in eval_ld_mbuf()
615 eval_fill_max_bound(rv, RTE_LEN2MASK(rv->v.size * CHAR_BIT, uint64_t)); in eval_ld_mbuf()
649 rd = st->rv + ins->dst_reg; in eval_alu()
652 rs = st->rv[ins->src_reg]; in eval_alu()
714 rd = st->rv + ins->dst_reg; in eval_bele()
739 struct bpf_reg_val rv; in eval_ptr() local
742 eval_fill_imm(&rv, rm->mask, off); in eval_ptr()
743 eval_add(rm, &rv, rm->mask); in eval_ptr()
779 eval_max_load(struct bpf_reg_val *rv, uint64_t mask) in eval_max_load() argument
781 eval_umax_bound(rv, mask); in eval_max_load()
785 eval_smax_bound(rv, mask); in eval_max_load()
788 rv->s.min = rv->u.min; in eval_max_load()
789 rv->s.max = rv->u.max; in eval_max_load()
804 rd = st->rv + ins->dst_reg; in eval_load()
805 rs = st->rv[ins->src_reg]; in eval_load()
849 eval_mbuf_store(const struct bpf_reg_val *rv, uint32_t opsz) in eval_mbuf_store() argument
868 rv->u.max || rv->u.max + opsz <= mbuf_ro_fileds[i].off); in eval_mbuf_store()
892 rd = st->rv[ins->dst_reg]; in eval_store()
895 rs = st->rv[ins->src_reg]; in eval_store()
929 struct bpf_reg_val *rv) in eval_func_arg() argument
937 if (rv->v.type == RTE_BPF_ARG_UNDEF) in eval_func_arg()
940 if (arg->type != rv->v.type && in eval_func_arg()
943 RTE_BPF_ARG_PTR_TYPE(rv->v.type) == 0)) in eval_func_arg()
951 err = eval_ptr(bvf, rv, arg->size, 1, 0); in eval_func_arg()
957 if (err == NULL && rv->v.type == BPF_ARG_PTR_STACK) { in eval_func_arg()
959 i = rv->u.max / sizeof(uint64_t); in eval_func_arg()
975 struct bpf_reg_val *rv; in eval_call() local
995 bvf->evst->rv + EBPF_REG_1 + i); in eval_call()
1000 bvf->evst->rv[i].v.type = RTE_BPF_ARG_UNDEF; in eval_call()
1004 rv = bvf->evst->rv + EBPF_REG_0; in eval_call()
1005 rv->v = xsym->func.ret; in eval_call()
1006 if (rv->v.type == RTE_BPF_ARG_RAW) in eval_call()
1007 eval_fill_max_bound(rv, in eval_call()
1008 RTE_LEN2MASK(rv->v.size * CHAR_BIT, uint64_t)); in eval_call()
1009 else if (RTE_BPF_ARG_PTR_TYPE(rv->v.type) != 0) in eval_call()
1010 eval_fill_imm64(rv, UINTPTR_MAX, 0); in eval_call()
1087 frd = fst->rv + ins->dst_reg; in eval_jcc()
1088 trd = tst->rv + ins->dst_reg; in eval_jcc()
1091 frs = fst->rv + ins->src_reg; in eval_jcc()
1092 trs = tst->rv + ins->src_reg; in eval_jcc()
2184 const struct bpf_reg_val *rv; in log_eval_state() local
2189 rv = st->rv + ins->dst_reg; in log_eval_state()
2199 rv->v.type, rv->v.size, in log_eval_state()
2200 rv->mask, in log_eval_state()
2201 rv->u.min, rv->u.max, in log_eval_state()
2202 rv->s.min, rv->s.max); in log_eval_state()
2234 bvf->evst->rv[EBPF_REG_1].v = bvf->prm->prog_arg; in evaluate()
2235 bvf->evst->rv[EBPF_REG_1].mask = UINT64_MAX; in evaluate()
2237 eval_max_bound(bvf->evst->rv + EBPF_REG_1, UINT64_MAX); in evaluate()
2239 bvf->evst->rv[EBPF_REG_10] = rvfp; in evaluate()