LoongArch: BPF: Support 32-bit offset jmp instructions
authorHengqi Chen <hengqi.chen@gmail.com>
Wed, 8 Nov 2023 06:12:16 +0000 (14:12 +0800)
committerHuacai Chen <chenhuacai@loongson.cn>
Wed, 8 Nov 2023 06:12:16 +0000 (14:12 +0800)
Add support for 32-bit offset jmp instruction. Currently, we use b
instruction which supports range within ±128MB for such jumps. This
should be large enough for BPF progs.

Signed-off-by: Hengqi Chen <hengqi.chen@gmail.com>
Signed-off-by: Huacai Chen <chenhuacai@loongson.cn>
arch/loongarch/net/bpf_jit.c

index a8be6d4b058cd4338b23ef920fb294cd24e03023..050fcf233a34a189cc12942da7837b88c3162e90 100644 (file)
@@ -848,7 +848,11 @@ static int build_insn(const struct bpf_insn *insn, struct jit_ctx *ctx, bool ext
 
        /* PC += off */
        case BPF_JMP | BPF_JA:
-               jmp_offset = bpf2la_offset(i, off, ctx);
+       case BPF_JMP32 | BPF_JA:
+               if (BPF_CLASS(code) == BPF_JMP)
+                       jmp_offset = bpf2la_offset(i, off, ctx);
+               else
+                       jmp_offset = bpf2la_offset(i, imm, ctx);
                if (emit_uncond_jmp(ctx, jmp_offset) < 0)
                        goto toofar;
                break;