forked from ~ljy/RK356X_SDK_RELEASE

hc
2024-12-19 9370bb92b2d16684ee45cf24e879c93c509162da
kernel/tools/bpf/bpf_exp.y
....@@ -545,6 +545,16 @@
545545 }
546546 }
547547
548
+static uint8_t bpf_encode_jt_jf_offset(int off, int i)
549
+{
550
+ int delta = off - i - 1;
551
+
552
+ if (delta < 0 || delta > 255)
553
+ fprintf(stderr, "warning: insn #%d jumps to insn #%d, "
554
+ "which is out of range\n", i, off);
555
+ return (uint8_t) delta;
556
+}
557
+
548558 static void bpf_reduce_jt_jumps(void)
549559 {
550560 int i;
....@@ -552,7 +562,7 @@
552562 for (i = 0; i < curr_instr; i++) {
553563 if (labels_jt[i]) {
554564 int off = bpf_find_insns_offset(labels_jt[i]);
555
- out[i].jt = (uint8_t) (off - i -1);
565
+ out[i].jt = bpf_encode_jt_jf_offset(off, i);
556566 }
557567 }
558568 }
....@@ -564,7 +574,7 @@
564574 for (i = 0; i < curr_instr; i++) {
565575 if (labels_jf[i]) {
566576 int off = bpf_find_insns_offset(labels_jf[i]);
567
- out[i].jf = (uint8_t) (off - i - 1);
577
+ out[i].jf = bpf_encode_jt_jf_offset(off, i);
568578 }
569579 }
570580 }