sparc: bpf_jit: add support for BPF_LD(X) | BPF_LEN instructions
authorAlexei Starovoitov <ast@plumgrid.com>
Tue, 23 Sep 2014 21:36:11 +0000 (14:36 -0700)
committerDavid S. Miller <davem@davemloft.net>
Fri, 26 Sep 2014 20:52:09 +0000 (16:52 -0400)
BPF_LD | BPF_W | BPF_LEN instruction is occasionally used by tcpdump
and present in 11 tests in lib/test_bpf.c
Teach sparc JIT compiler to emit it.

Signed-off-by: Alexei Starovoitov <ast@plumgrid.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
arch/sparc/net/bpf_jit_comp.c

index c1c60c3..f33e7c7 100644 (file)
@@ -624,7 +624,12 @@ void bpf_jit_compile(struct bpf_prog *fp)
                                        emit_and(r_A, r_TMP, r_A);
                                }
                                break;
-
+                       case BPF_LD | BPF_W | BPF_LEN:
+                               emit_skb_load32(len, r_A);
+                               break;
+                       case BPF_LDX | BPF_W | BPF_LEN:
+                               emit_skb_load32(len, r_X);
+                               break;
                        case BPF_LD | BPF_IMM:
                                emit_loadimm(K, r_A);
                                break;