|
@@ -527,10 +527,14 @@ emit_bswap_uxt:
|
|
|
/* IF (dst COND src) JUMP off */
|
|
|
case BPF_JMP | BPF_JEQ | BPF_X:
|
|
|
case BPF_JMP | BPF_JGT | BPF_X:
|
|
|
+ case BPF_JMP | BPF_JLT | BPF_X:
|
|
|
case BPF_JMP | BPF_JGE | BPF_X:
|
|
|
+ case BPF_JMP | BPF_JLE | BPF_X:
|
|
|
case BPF_JMP | BPF_JNE | BPF_X:
|
|
|
case BPF_JMP | BPF_JSGT | BPF_X:
|
|
|
+ case BPF_JMP | BPF_JSLT | BPF_X:
|
|
|
case BPF_JMP | BPF_JSGE | BPF_X:
|
|
|
+ case BPF_JMP | BPF_JSLE | BPF_X:
|
|
|
emit(A64_CMP(1, dst, src), ctx);
|
|
|
emit_cond_jmp:
|
|
|
jmp_offset = bpf2a64_offset(i + off, i, ctx);
|
|
@@ -542,9 +546,15 @@ emit_cond_jmp:
|
|
|
case BPF_JGT:
|
|
|
jmp_cond = A64_COND_HI;
|
|
|
break;
|
|
|
+ case BPF_JLT:
|
|
|
+ jmp_cond = A64_COND_CC;
|
|
|
+ break;
|
|
|
case BPF_JGE:
|
|
|
jmp_cond = A64_COND_CS;
|
|
|
break;
|
|
|
+ case BPF_JLE:
|
|
|
+ jmp_cond = A64_COND_LS;
|
|
|
+ break;
|
|
|
case BPF_JSET:
|
|
|
case BPF_JNE:
|
|
|
jmp_cond = A64_COND_NE;
|
|
@@ -552,9 +562,15 @@ emit_cond_jmp:
|
|
|
case BPF_JSGT:
|
|
|
jmp_cond = A64_COND_GT;
|
|
|
break;
|
|
|
+ case BPF_JSLT:
|
|
|
+ jmp_cond = A64_COND_LT;
|
|
|
+ break;
|
|
|
case BPF_JSGE:
|
|
|
jmp_cond = A64_COND_GE;
|
|
|
break;
|
|
|
+ case BPF_JSLE:
|
|
|
+ jmp_cond = A64_COND_LE;
|
|
|
+ break;
|
|
|
default:
|
|
|
return -EFAULT;
|
|
|
}
|
|
@@ -566,10 +582,14 @@ emit_cond_jmp:
|
|
|
/* IF (dst COND imm) JUMP off */
|
|
|
case BPF_JMP | BPF_JEQ | BPF_K:
|
|
|
case BPF_JMP | BPF_JGT | BPF_K:
|
|
|
+ case BPF_JMP | BPF_JLT | BPF_K:
|
|
|
case BPF_JMP | BPF_JGE | BPF_K:
|
|
|
+ case BPF_JMP | BPF_JLE | BPF_K:
|
|
|
case BPF_JMP | BPF_JNE | BPF_K:
|
|
|
case BPF_JMP | BPF_JSGT | BPF_K:
|
|
|
+ case BPF_JMP | BPF_JSLT | BPF_K:
|
|
|
case BPF_JMP | BPF_JSGE | BPF_K:
|
|
|
+ case BPF_JMP | BPF_JSLE | BPF_K:
|
|
|
emit_a64_mov_i(1, tmp, imm, ctx);
|
|
|
emit(A64_CMP(1, dst, tmp), ctx);
|
|
|
goto emit_cond_jmp;
|