Home | History | Annotate | Line # | Download | only in libbpfjit
t_bpfjit.c revision 1.8
      1  1.8  alnsn /*	$NetBSD: t_bpfjit.c,v 1.8 2014/11/20 11:08:29 alnsn Exp $ */
      2  1.1  alnsn 
      3  1.1  alnsn /*-
      4  1.4  alnsn  * Copyright (c) 2011-2012, 2014 Alexander Nasonov.
      5  1.1  alnsn  * All rights reserved.
      6  1.1  alnsn  *
      7  1.1  alnsn  * Redistribution and use in source and binary forms, with or without
      8  1.1  alnsn  * modification, are permitted provided that the following conditions
      9  1.1  alnsn  * are met:
     10  1.1  alnsn  *
     11  1.1  alnsn  * 1. Redistributions of source code must retain the above copyright
     12  1.1  alnsn  *    notice, this list of conditions and the following disclaimer.
     13  1.1  alnsn  * 2. Redistributions in binary form must reproduce the above copyright
     14  1.1  alnsn  *    notice, this list of conditions and the following disclaimer in
     15  1.1  alnsn  *    the documentation and/or other materials provided with the
     16  1.1  alnsn  *    distribution.
     17  1.1  alnsn  *
     18  1.1  alnsn  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
     19  1.1  alnsn  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
     20  1.1  alnsn  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
     21  1.1  alnsn  * FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE
     22  1.1  alnsn  * COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
     23  1.1  alnsn  * INCIDENTAL, SPECIAL, EXEMPLARY OR CONSEQUENTIAL DAMAGES (INCLUDING,
     24  1.1  alnsn  * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
     25  1.1  alnsn  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
     26  1.1  alnsn  * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
     27  1.1  alnsn  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
     28  1.1  alnsn  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     29  1.1  alnsn  * SUCH DAMAGE.
     30  1.1  alnsn  */
     31  1.1  alnsn 
     32  1.1  alnsn #include <sys/cdefs.h>
     33  1.8  alnsn __RCSID("$NetBSD: t_bpfjit.c,v 1.8 2014/11/20 11:08:29 alnsn Exp $");
     34  1.1  alnsn 
     35  1.1  alnsn #include <atf-c.h>
     36  1.1  alnsn #include <stdint.h>
     37  1.1  alnsn #include <string.h>
     38  1.1  alnsn 
     39  1.2  rmind #include <net/bpf.h>
     40  1.2  rmind #include <net/bpfjit.h>
     41  1.2  rmind 
     42  1.1  alnsn static uint8_t deadbeef_at_5[16] = {
     43  1.1  alnsn 	0, 0xf1, 2, 0xf3, 4, 0xde, 0xad, 0xbe, 0xef, 0xff
     44  1.1  alnsn };
     45  1.1  alnsn 
     46  1.5  alnsn static inline
     47  1.5  alnsn unsigned int jitcall(bpfjit_func_t fn,
     48  1.5  alnsn     const uint8_t *pkt, unsigned int wirelen, unsigned int buflen)
     49  1.5  alnsn {
     50  1.5  alnsn 	bpf_args_t args;
     51  1.5  alnsn 
     52  1.5  alnsn 	args.pkt = pkt;
     53  1.5  alnsn 	args.wirelen = wirelen;
     54  1.5  alnsn 	args.buflen = buflen;
     55  1.5  alnsn 
     56  1.5  alnsn 	return fn(NULL, &args);
     57  1.5  alnsn }
     58  1.2  rmind 
     59  1.6  alnsn ATF_TC(libbpfjit_empty);
     60  1.6  alnsn ATF_TC_HEAD(libbpfjit_empty, tc)
     61  1.1  alnsn {
     62  1.1  alnsn 	atf_tc_set_md_var(tc, "descr",
     63  1.6  alnsn 	    "Test that JIT compilation of an empty bpf program fails");
     64  1.1  alnsn }
     65  1.1  alnsn 
     66  1.6  alnsn ATF_TC_BODY(libbpfjit_empty, tc)
     67  1.1  alnsn {
     68  1.1  alnsn 	struct bpf_insn dummy;
     69  1.1  alnsn 
     70  1.5  alnsn 	ATF_CHECK(bpfjit_generate_code(NULL, &dummy, 0) == NULL);
     71  1.1  alnsn }
     72  1.1  alnsn 
     73  1.6  alnsn ATF_TC(libbpfjit_alu_add_k);
     74  1.6  alnsn ATF_TC_HEAD(libbpfjit_alu_add_k, tc)
     75  1.1  alnsn {
     76  1.1  alnsn 	atf_tc_set_md_var(tc, "descr",
     77  1.1  alnsn 	    "Test JIT compilation of BPF_ALU+BPF_ADD+BPF_K");
     78  1.1  alnsn }
     79  1.1  alnsn 
     80  1.6  alnsn ATF_TC_BODY(libbpfjit_alu_add_k, tc)
     81  1.1  alnsn {
     82  1.1  alnsn 	static struct bpf_insn insns[] = {
     83  1.1  alnsn 		BPF_STMT(BPF_LD+BPF_IMM, 3),
     84  1.1  alnsn 		BPF_STMT(BPF_ALU+BPF_ADD+BPF_K, 2),
     85  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_A, 0)
     86  1.1  alnsn 	};
     87  1.1  alnsn 
     88  1.2  rmind 	bpfjit_func_t code;
     89  1.1  alnsn 	uint8_t pkt[1]; /* the program doesn't read any data */
     90  1.1  alnsn 
     91  1.1  alnsn 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
     92  1.1  alnsn 
     93  1.1  alnsn 	ATF_CHECK(bpf_validate(insns, insn_count));
     94  1.1  alnsn 
     95  1.5  alnsn 	code = bpfjit_generate_code(NULL, insns, insn_count);
     96  1.1  alnsn 	ATF_REQUIRE(code != NULL);
     97  1.1  alnsn 
     98  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 1, 1) == 5);
     99  1.1  alnsn 
    100  1.1  alnsn 	bpfjit_free_code(code);
    101  1.1  alnsn }
    102  1.1  alnsn 
    103  1.6  alnsn ATF_TC(libbpfjit_alu_sub_k);
    104  1.6  alnsn ATF_TC_HEAD(libbpfjit_alu_sub_k, tc)
    105  1.1  alnsn {
    106  1.1  alnsn 	atf_tc_set_md_var(tc, "descr",
    107  1.1  alnsn 	    "Test JIT compilation of BPF_ALU+BPF_SUB+BPF_K");
    108  1.1  alnsn }
    109  1.1  alnsn 
    110  1.6  alnsn ATF_TC_BODY(libbpfjit_alu_sub_k, tc)
    111  1.1  alnsn {
    112  1.1  alnsn 	static struct bpf_insn insns[] = {
    113  1.1  alnsn 		BPF_STMT(BPF_LD+BPF_IMM, 1),
    114  1.1  alnsn 		BPF_STMT(BPF_ALU+BPF_SUB+BPF_K, 2),
    115  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_A, 0)
    116  1.1  alnsn 	};
    117  1.1  alnsn 
    118  1.2  rmind 	bpfjit_func_t code;
    119  1.1  alnsn 	uint8_t pkt[1]; /* the program doesn't read any data */
    120  1.1  alnsn 
    121  1.1  alnsn 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
    122  1.1  alnsn 
    123  1.1  alnsn 	ATF_CHECK(bpf_validate(insns, insn_count));
    124  1.1  alnsn 
    125  1.5  alnsn 	code = bpfjit_generate_code(NULL, insns, insn_count);
    126  1.1  alnsn 	ATF_REQUIRE(code != NULL);
    127  1.1  alnsn 
    128  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 1, 1) == UINT32_MAX);
    129  1.1  alnsn 
    130  1.1  alnsn 	bpfjit_free_code(code);
    131  1.1  alnsn }
    132  1.1  alnsn 
    133  1.6  alnsn ATF_TC(libbpfjit_alu_mul_k);
    134  1.6  alnsn ATF_TC_HEAD(libbpfjit_alu_mul_k, tc)
    135  1.1  alnsn {
    136  1.1  alnsn 	atf_tc_set_md_var(tc, "descr",
    137  1.1  alnsn 	    "Test JIT compilation of BPF_ALU+BPF_MUL+BPF_K");
    138  1.1  alnsn }
    139  1.1  alnsn 
    140  1.6  alnsn ATF_TC_BODY(libbpfjit_alu_mul_k, tc)
    141  1.1  alnsn {
    142  1.1  alnsn 	static struct bpf_insn insns[] = {
    143  1.1  alnsn 		BPF_STMT(BPF_LD+BPF_IMM, UINT32_C(0xffffffff)),
    144  1.1  alnsn 		BPF_STMT(BPF_ALU+BPF_MUL+BPF_K, 3),
    145  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_A, 0)
    146  1.1  alnsn 	};
    147  1.1  alnsn 
    148  1.2  rmind 	bpfjit_func_t code;
    149  1.1  alnsn 	uint8_t pkt[1]; /* the program doesn't read any data */
    150  1.1  alnsn 
    151  1.1  alnsn 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
    152  1.1  alnsn 
    153  1.1  alnsn 	ATF_CHECK(bpf_validate(insns, insn_count));
    154  1.1  alnsn 
    155  1.5  alnsn 	code = bpfjit_generate_code(NULL, insns, insn_count);
    156  1.1  alnsn 	ATF_REQUIRE(code != NULL);
    157  1.1  alnsn 
    158  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 1, 1) == UINT32_C(0xfffffffd));
    159  1.1  alnsn 
    160  1.1  alnsn 	bpfjit_free_code(code);
    161  1.1  alnsn }
    162  1.1  alnsn 
    163  1.6  alnsn ATF_TC(libbpfjit_alu_div0_k);
    164  1.6  alnsn ATF_TC_HEAD(libbpfjit_alu_div0_k, tc)
    165  1.1  alnsn {
    166  1.1  alnsn 	atf_tc_set_md_var(tc, "descr",
    167  1.1  alnsn 	    "Test JIT compilation of BPF_ALU+BPF_DIV+BPF_K with k=0");
    168  1.1  alnsn }
    169  1.1  alnsn 
    170  1.6  alnsn ATF_TC_BODY(libbpfjit_alu_div0_k, tc)
    171  1.1  alnsn {
    172  1.1  alnsn 	static struct bpf_insn insns[] = {
    173  1.1  alnsn 		BPF_STMT(BPF_ALU+BPF_DIV+BPF_K, 0),
    174  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_A, 0)
    175  1.1  alnsn 	};
    176  1.1  alnsn 
    177  1.2  rmind 	bpfjit_func_t code;
    178  1.1  alnsn 	uint8_t pkt[1]; /* the program doesn't read any data */
    179  1.1  alnsn 
    180  1.1  alnsn 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
    181  1.1  alnsn 
    182  1.1  alnsn 	//ATF_CHECK(bpf_validate(insns, insn_count));
    183  1.1  alnsn 
    184  1.5  alnsn 	code = bpfjit_generate_code(NULL, insns, insn_count);
    185  1.1  alnsn 	ATF_REQUIRE(code != NULL);
    186  1.1  alnsn 
    187  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 1, 1) == 0);
    188  1.1  alnsn 
    189  1.1  alnsn 	bpfjit_free_code(code);
    190  1.1  alnsn }
    191  1.1  alnsn 
    192  1.6  alnsn ATF_TC(libbpfjit_alu_div1_k);
    193  1.6  alnsn ATF_TC_HEAD(libbpfjit_alu_div1_k, tc)
    194  1.1  alnsn {
    195  1.1  alnsn 	atf_tc_set_md_var(tc, "descr",
    196  1.1  alnsn 	    "Test JIT compilation of BPF_ALU+BPF_DIV+BPF_K with k=1");
    197  1.1  alnsn }
    198  1.1  alnsn 
    199  1.6  alnsn ATF_TC_BODY(libbpfjit_alu_div1_k, tc)
    200  1.1  alnsn {
    201  1.1  alnsn 	static struct bpf_insn insns[] = {
    202  1.1  alnsn 		BPF_STMT(BPF_LD+BPF_IMM, 7),
    203  1.1  alnsn 		BPF_STMT(BPF_ALU+BPF_DIV+BPF_K, 1),
    204  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_A, 0)
    205  1.1  alnsn 	};
    206  1.1  alnsn 
    207  1.2  rmind 	bpfjit_func_t code;
    208  1.1  alnsn 	uint8_t pkt[1]; /* the program doesn't read any data */
    209  1.1  alnsn 
    210  1.1  alnsn 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
    211  1.1  alnsn 
    212  1.1  alnsn 	ATF_CHECK(bpf_validate(insns, insn_count));
    213  1.1  alnsn 
    214  1.5  alnsn 	code = bpfjit_generate_code(NULL, insns, insn_count);
    215  1.1  alnsn 	ATF_REQUIRE(code != NULL);
    216  1.1  alnsn 
    217  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 1, 1) == 7);
    218  1.1  alnsn 
    219  1.1  alnsn 	bpfjit_free_code(code);
    220  1.1  alnsn }
    221  1.1  alnsn 
    222  1.6  alnsn ATF_TC(libbpfjit_alu_div2_k);
    223  1.6  alnsn ATF_TC_HEAD(libbpfjit_alu_div2_k, tc)
    224  1.1  alnsn {
    225  1.1  alnsn 	atf_tc_set_md_var(tc, "descr",
    226  1.1  alnsn 	    "Test JIT compilation of BPF_ALU+BPF_DIV+BPF_K with k=2");
    227  1.1  alnsn }
    228  1.1  alnsn 
    229  1.6  alnsn ATF_TC_BODY(libbpfjit_alu_div2_k, tc)
    230  1.1  alnsn {
    231  1.1  alnsn 	static struct bpf_insn insns[] = {
    232  1.1  alnsn 		BPF_STMT(BPF_LD+BPF_IMM, 7),
    233  1.1  alnsn 		BPF_STMT(BPF_ALU+BPF_DIV+BPF_K, 2),
    234  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_A, 0)
    235  1.1  alnsn 	};
    236  1.1  alnsn 
    237  1.2  rmind 	bpfjit_func_t code;
    238  1.1  alnsn 	uint8_t pkt[1]; /* the program doesn't read any data */
    239  1.1  alnsn 
    240  1.1  alnsn 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
    241  1.1  alnsn 
    242  1.1  alnsn 	ATF_CHECK(bpf_validate(insns, insn_count));
    243  1.1  alnsn 
    244  1.5  alnsn 	code = bpfjit_generate_code(NULL, insns, insn_count);
    245  1.1  alnsn 	ATF_REQUIRE(code != NULL);
    246  1.1  alnsn 
    247  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 1, 1) == 3);
    248  1.1  alnsn 
    249  1.1  alnsn 	bpfjit_free_code(code);
    250  1.1  alnsn }
    251  1.1  alnsn 
    252  1.6  alnsn ATF_TC(libbpfjit_alu_div4_k);
    253  1.6  alnsn ATF_TC_HEAD(libbpfjit_alu_div4_k, tc)
    254  1.1  alnsn {
    255  1.1  alnsn 	atf_tc_set_md_var(tc, "descr",
    256  1.1  alnsn 	    "Test JIT compilation of BPF_ALU+BPF_DIV+BPF_K with k=4");
    257  1.1  alnsn }
    258  1.1  alnsn 
    259  1.6  alnsn ATF_TC_BODY(libbpfjit_alu_div4_k, tc)
    260  1.1  alnsn {
    261  1.1  alnsn 	static struct bpf_insn insns[] = {
    262  1.1  alnsn 		BPF_STMT(BPF_LD+BPF_IMM, UINT32_C(0xffffffff)),
    263  1.1  alnsn 		BPF_STMT(BPF_ALU+BPF_DIV+BPF_K, 4),
    264  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_A, 0)
    265  1.1  alnsn 	};
    266  1.1  alnsn 
    267  1.2  rmind 	bpfjit_func_t code;
    268  1.1  alnsn 	uint8_t pkt[1]; /* the program doesn't read any data */
    269  1.1  alnsn 
    270  1.1  alnsn 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
    271  1.1  alnsn 
    272  1.1  alnsn 	ATF_CHECK(bpf_validate(insns, insn_count));
    273  1.1  alnsn 
    274  1.5  alnsn 	code = bpfjit_generate_code(NULL, insns, insn_count);
    275  1.1  alnsn 	ATF_REQUIRE(code != NULL);
    276  1.1  alnsn 
    277  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 1, 1) == UINT32_C(0x3fffffff));
    278  1.1  alnsn 
    279  1.1  alnsn 	bpfjit_free_code(code);
    280  1.1  alnsn }
    281  1.1  alnsn 
    282  1.6  alnsn ATF_TC(libbpfjit_alu_div10_k);
    283  1.6  alnsn ATF_TC_HEAD(libbpfjit_alu_div10_k, tc)
    284  1.1  alnsn {
    285  1.1  alnsn 	atf_tc_set_md_var(tc, "descr",
    286  1.1  alnsn 	    "Test JIT compilation of BPF_ALU+BPF_DIV+BPF_K with k=10");
    287  1.1  alnsn }
    288  1.1  alnsn 
    289  1.6  alnsn ATF_TC_BODY(libbpfjit_alu_div10_k, tc)
    290  1.1  alnsn {
    291  1.1  alnsn 	static struct bpf_insn insns[] = {
    292  1.1  alnsn 		BPF_STMT(BPF_LD+BPF_IMM, UINT32_C(4294843849)),
    293  1.1  alnsn 		BPF_STMT(BPF_ALU+BPF_DIV+BPF_K, 10),
    294  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_A, 0)
    295  1.1  alnsn 	};
    296  1.1  alnsn 
    297  1.2  rmind 	bpfjit_func_t code;
    298  1.1  alnsn 	uint8_t pkt[1]; /* the program doesn't read any data */
    299  1.1  alnsn 
    300  1.1  alnsn 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
    301  1.1  alnsn 
    302  1.1  alnsn 	ATF_CHECK(bpf_validate(insns, insn_count));
    303  1.1  alnsn 
    304  1.5  alnsn 	code = bpfjit_generate_code(NULL, insns, insn_count);
    305  1.1  alnsn 	ATF_REQUIRE(code != NULL);
    306  1.1  alnsn 
    307  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 1, 1) == UINT32_C(429484384));
    308  1.1  alnsn 
    309  1.1  alnsn 	bpfjit_free_code(code);
    310  1.1  alnsn }
    311  1.1  alnsn 
    312  1.6  alnsn ATF_TC(libbpfjit_alu_div10000_k);
    313  1.6  alnsn ATF_TC_HEAD(libbpfjit_alu_div10000_k, tc)
    314  1.1  alnsn {
    315  1.1  alnsn 	atf_tc_set_md_var(tc, "descr",
    316  1.1  alnsn 	    "Test JIT compilation of BPF_ALU+BPF_DIV+BPF_K with k=10000");
    317  1.1  alnsn }
    318  1.1  alnsn 
    319  1.6  alnsn ATF_TC_BODY(libbpfjit_alu_div10000_k, tc)
    320  1.1  alnsn {
    321  1.1  alnsn 	static struct bpf_insn insns[] = {
    322  1.1  alnsn 		BPF_STMT(BPF_LD+BPF_IMM, UINT32_C(4294843849)),
    323  1.1  alnsn 		BPF_STMT(BPF_ALU+BPF_DIV+BPF_K, 10000),
    324  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_A, 0)
    325  1.1  alnsn 	};
    326  1.1  alnsn 
    327  1.2  rmind 	bpfjit_func_t code;
    328  1.1  alnsn 	uint8_t pkt[1]; /* the program doesn't read any data */
    329  1.1  alnsn 
    330  1.1  alnsn 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
    331  1.1  alnsn 
    332  1.1  alnsn 	ATF_CHECK(bpf_validate(insns, insn_count));
    333  1.1  alnsn 
    334  1.5  alnsn 	code = bpfjit_generate_code(NULL, insns, insn_count);
    335  1.1  alnsn 	ATF_REQUIRE(code != NULL);
    336  1.1  alnsn 
    337  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 1, 1) == UINT32_C(429484));
    338  1.1  alnsn 
    339  1.1  alnsn 	bpfjit_free_code(code);
    340  1.1  alnsn }
    341  1.1  alnsn 
    342  1.6  alnsn ATF_TC(libbpfjit_alu_div7609801_k);
    343  1.6  alnsn ATF_TC_HEAD(libbpfjit_alu_div7609801_k, tc)
    344  1.1  alnsn {
    345  1.1  alnsn 	atf_tc_set_md_var(tc, "descr",
    346  1.1  alnsn 	    "Test JIT compilation of BPF_ALU+BPF_DIV+BPF_K with k=7609801");
    347  1.1  alnsn }
    348  1.1  alnsn 
    349  1.6  alnsn ATF_TC_BODY(libbpfjit_alu_div7609801_k, tc)
    350  1.1  alnsn {
    351  1.1  alnsn 	static struct bpf_insn insns[] = {
    352  1.1  alnsn 		BPF_STMT(BPF_LD+BPF_IMM, UINT32_C(4294967295)),
    353  1.1  alnsn 		BPF_STMT(BPF_ALU+BPF_DIV+BPF_K, UINT32_C(7609801)),
    354  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_A, 0)
    355  1.1  alnsn 	};
    356  1.1  alnsn 
    357  1.2  rmind 	bpfjit_func_t code;
    358  1.1  alnsn 	uint8_t pkt[1]; /* the program doesn't read any data */
    359  1.1  alnsn 
    360  1.1  alnsn 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
    361  1.1  alnsn 
    362  1.1  alnsn 	ATF_CHECK(bpf_validate(insns, insn_count));
    363  1.1  alnsn 
    364  1.5  alnsn 	code = bpfjit_generate_code(NULL, insns, insn_count);
    365  1.1  alnsn 	ATF_REQUIRE(code != NULL);
    366  1.1  alnsn 
    367  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 1, 1) == 564);
    368  1.1  alnsn 
    369  1.1  alnsn 	bpfjit_free_code(code);
    370  1.1  alnsn }
    371  1.1  alnsn 
    372  1.6  alnsn ATF_TC(libbpfjit_alu_div80000000_k);
    373  1.6  alnsn ATF_TC_HEAD(libbpfjit_alu_div80000000_k, tc)
    374  1.1  alnsn {
    375  1.1  alnsn 	atf_tc_set_md_var(tc, "descr",
    376  1.1  alnsn 	    "Test JIT compilation of BPF_ALU+BPF_DIV+BPF_K with k=0x80000000");
    377  1.1  alnsn }
    378  1.1  alnsn 
    379  1.6  alnsn ATF_TC_BODY(libbpfjit_alu_div80000000_k, tc)
    380  1.1  alnsn {
    381  1.1  alnsn 	static struct bpf_insn insns[] = {
    382  1.1  alnsn 		BPF_STMT(BPF_LD+BPF_IMM, UINT32_C(0xffffffde)),
    383  1.1  alnsn 		BPF_STMT(BPF_ALU+BPF_DIV+BPF_K, UINT32_C(0x80000000)),
    384  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_A, 0)
    385  1.1  alnsn 	};
    386  1.1  alnsn 
    387  1.2  rmind 	bpfjit_func_t code;
    388  1.1  alnsn 	uint8_t pkt[1]; /* the program doesn't read any data */
    389  1.1  alnsn 
    390  1.1  alnsn 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
    391  1.1  alnsn 
    392  1.1  alnsn 	ATF_CHECK(bpf_validate(insns, insn_count));
    393  1.1  alnsn 
    394  1.5  alnsn 	code = bpfjit_generate_code(NULL, insns, insn_count);
    395  1.1  alnsn 	ATF_REQUIRE(code != NULL);
    396  1.1  alnsn 
    397  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 1, 1) == 1);
    398  1.1  alnsn 
    399  1.1  alnsn 	bpfjit_free_code(code);
    400  1.1  alnsn }
    401  1.1  alnsn 
    402  1.8  alnsn ATF_TC(libbpfjit_alu_mod0_k);
    403  1.8  alnsn ATF_TC_HEAD(libbpfjit_alu_mod0_k, tc)
    404  1.8  alnsn {
    405  1.8  alnsn 	atf_tc_set_md_var(tc, "descr",
    406  1.8  alnsn 	    "Test JIT compilation of BPF_ALU+BPF_MOD+BPF_K with k=0");
    407  1.8  alnsn }
    408  1.8  alnsn 
    409  1.8  alnsn ATF_TC_BODY(libbpfjit_alu_mod0_k, tc)
    410  1.8  alnsn {
    411  1.8  alnsn 	static struct bpf_insn insns[] = {
    412  1.8  alnsn 		BPF_STMT(BPF_ALU+BPF_MOD+BPF_K, 0),
    413  1.8  alnsn 		BPF_STMT(BPF_RET+BPF_A, 0)
    414  1.8  alnsn 	};
    415  1.8  alnsn 
    416  1.8  alnsn 	bpfjit_func_t code;
    417  1.8  alnsn 	uint8_t pkt[1]; /* the program doesn't read any data */
    418  1.8  alnsn 
    419  1.8  alnsn 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
    420  1.8  alnsn 
    421  1.8  alnsn 	//ATF_CHECK(bpf_validate(insns, insn_count));
    422  1.8  alnsn 
    423  1.8  alnsn 	code = bpfjit_generate_code(NULL, insns, insn_count);
    424  1.8  alnsn 	ATF_REQUIRE(code != NULL);
    425  1.8  alnsn 
    426  1.8  alnsn 	ATF_CHECK(jitcall(code, pkt, 1, 1) == 0);
    427  1.8  alnsn 
    428  1.8  alnsn 	bpfjit_free_code(code);
    429  1.8  alnsn }
    430  1.8  alnsn 
    431  1.8  alnsn ATF_TC(libbpfjit_alu_mod1_k);
    432  1.8  alnsn ATF_TC_HEAD(libbpfjit_alu_mod1_k, tc)
    433  1.8  alnsn {
    434  1.8  alnsn 	atf_tc_set_md_var(tc, "descr",
    435  1.8  alnsn 	    "Test JIT compilation of BPF_ALU+BPF_MOD+BPF_K with k=1");
    436  1.8  alnsn }
    437  1.8  alnsn 
    438  1.8  alnsn ATF_TC_BODY(libbpfjit_alu_mod1_k, tc)
    439  1.8  alnsn {
    440  1.8  alnsn 	static struct bpf_insn insns[] = {
    441  1.8  alnsn 		BPF_STMT(BPF_LD+BPF_IMM, 7),
    442  1.8  alnsn 		BPF_STMT(BPF_ALU+BPF_MOD+BPF_K, 1),
    443  1.8  alnsn 		BPF_STMT(BPF_RET+BPF_A, 0)
    444  1.8  alnsn 	};
    445  1.8  alnsn 
    446  1.8  alnsn 	bpfjit_func_t code;
    447  1.8  alnsn 	uint8_t pkt[1]; /* the program doesn't read any data */
    448  1.8  alnsn 
    449  1.8  alnsn 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
    450  1.8  alnsn 
    451  1.8  alnsn 	ATF_CHECK(bpf_validate(insns, insn_count));
    452  1.8  alnsn 
    453  1.8  alnsn 	code = bpfjit_generate_code(NULL, insns, insn_count);
    454  1.8  alnsn 	ATF_REQUIRE(code != NULL);
    455  1.8  alnsn 
    456  1.8  alnsn 	ATF_CHECK(jitcall(code, pkt, 1, 1) == 0);
    457  1.8  alnsn 
    458  1.8  alnsn 	bpfjit_free_code(code);
    459  1.8  alnsn }
    460  1.8  alnsn 
    461  1.8  alnsn ATF_TC(libbpfjit_alu_mod2_k);
    462  1.8  alnsn ATF_TC_HEAD(libbpfjit_alu_mod2_k, tc)
    463  1.8  alnsn {
    464  1.8  alnsn 	atf_tc_set_md_var(tc, "descr",
    465  1.8  alnsn 	    "Test JIT compilation of BPF_ALU+BPF_MOD+BPF_K with k=2");
    466  1.8  alnsn }
    467  1.8  alnsn 
    468  1.8  alnsn ATF_TC_BODY(libbpfjit_alu_mod2_k, tc)
    469  1.8  alnsn {
    470  1.8  alnsn 	static struct bpf_insn insns[] = {
    471  1.8  alnsn 		BPF_STMT(BPF_LD+BPF_IMM, 7),
    472  1.8  alnsn 		BPF_STMT(BPF_ALU+BPF_MOD+BPF_K, 2),
    473  1.8  alnsn 		BPF_STMT(BPF_RET+BPF_A, 0)
    474  1.8  alnsn 	};
    475  1.8  alnsn 
    476  1.8  alnsn 	bpfjit_func_t code;
    477  1.8  alnsn 	uint8_t pkt[1]; /* the program doesn't read any data */
    478  1.8  alnsn 
    479  1.8  alnsn 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
    480  1.8  alnsn 
    481  1.8  alnsn 	ATF_CHECK(bpf_validate(insns, insn_count));
    482  1.8  alnsn 
    483  1.8  alnsn 	code = bpfjit_generate_code(NULL, insns, insn_count);
    484  1.8  alnsn 	ATF_REQUIRE(code != NULL);
    485  1.8  alnsn 
    486  1.8  alnsn 	ATF_CHECK(jitcall(code, pkt, 1, 1) == 1);
    487  1.8  alnsn 
    488  1.8  alnsn 	bpfjit_free_code(code);
    489  1.8  alnsn }
    490  1.8  alnsn 
    491  1.8  alnsn ATF_TC(libbpfjit_alu_mod4_k);
    492  1.8  alnsn ATF_TC_HEAD(libbpfjit_alu_mod4_k, tc)
    493  1.8  alnsn {
    494  1.8  alnsn 	atf_tc_set_md_var(tc, "descr",
    495  1.8  alnsn 	    "Test JIT compilation of BPF_ALU+BPF_MOD+BPF_K with k=4");
    496  1.8  alnsn }
    497  1.8  alnsn 
    498  1.8  alnsn ATF_TC_BODY(libbpfjit_alu_mod4_k, tc)
    499  1.8  alnsn {
    500  1.8  alnsn 	static struct bpf_insn insns[] = {
    501  1.8  alnsn 		BPF_STMT(BPF_LD+BPF_IMM, UINT32_C(0xffffffff)),
    502  1.8  alnsn 		BPF_STMT(BPF_ALU+BPF_MOD+BPF_K, 4),
    503  1.8  alnsn 		BPF_STMT(BPF_RET+BPF_A, 0)
    504  1.8  alnsn 	};
    505  1.8  alnsn 
    506  1.8  alnsn 	bpfjit_func_t code;
    507  1.8  alnsn 	uint8_t pkt[1]; /* the program doesn't read any data */
    508  1.8  alnsn 
    509  1.8  alnsn 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
    510  1.8  alnsn 
    511  1.8  alnsn 	ATF_CHECK(bpf_validate(insns, insn_count));
    512  1.8  alnsn 
    513  1.8  alnsn 	code = bpfjit_generate_code(NULL, insns, insn_count);
    514  1.8  alnsn 	ATF_REQUIRE(code != NULL);
    515  1.8  alnsn 
    516  1.8  alnsn 	ATF_CHECK(jitcall(code, pkt, 1, 1) == 3);
    517  1.8  alnsn 
    518  1.8  alnsn 	bpfjit_free_code(code);
    519  1.8  alnsn }
    520  1.8  alnsn 
    521  1.8  alnsn ATF_TC(libbpfjit_alu_mod10_k);
    522  1.8  alnsn ATF_TC_HEAD(libbpfjit_alu_mod10_k, tc)
    523  1.8  alnsn {
    524  1.8  alnsn 	atf_tc_set_md_var(tc, "descr",
    525  1.8  alnsn 	    "Test JIT compilation of BPF_ALU+BPF_MOD+BPF_K with k=10");
    526  1.8  alnsn }
    527  1.8  alnsn 
    528  1.8  alnsn ATF_TC_BODY(libbpfjit_alu_mod10_k, tc)
    529  1.8  alnsn {
    530  1.8  alnsn 	static struct bpf_insn insns[] = {
    531  1.8  alnsn 		BPF_STMT(BPF_LD+BPF_IMM, UINT32_C(4294843849)),
    532  1.8  alnsn 		BPF_STMT(BPF_ALU+BPF_MOD+BPF_K, 10),
    533  1.8  alnsn 		BPF_STMT(BPF_RET+BPF_A, 0)
    534  1.8  alnsn 	};
    535  1.8  alnsn 
    536  1.8  alnsn 	bpfjit_func_t code;
    537  1.8  alnsn 	uint8_t pkt[1]; /* the program doesn't read any data */
    538  1.8  alnsn 
    539  1.8  alnsn 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
    540  1.8  alnsn 
    541  1.8  alnsn 	ATF_CHECK(bpf_validate(insns, insn_count));
    542  1.8  alnsn 
    543  1.8  alnsn 	code = bpfjit_generate_code(NULL, insns, insn_count);
    544  1.8  alnsn 	ATF_REQUIRE(code != NULL);
    545  1.8  alnsn 
    546  1.8  alnsn 	ATF_CHECK(jitcall(code, pkt, 1, 1) == 9);
    547  1.8  alnsn 
    548  1.8  alnsn 	bpfjit_free_code(code);
    549  1.8  alnsn }
    550  1.8  alnsn 
    551  1.8  alnsn ATF_TC(libbpfjit_alu_mod10000_k);
    552  1.8  alnsn ATF_TC_HEAD(libbpfjit_alu_mod10000_k, tc)
    553  1.8  alnsn {
    554  1.8  alnsn 	atf_tc_set_md_var(tc, "descr",
    555  1.8  alnsn 	    "Test JIT compilation of BPF_ALU+BPF_MOD+BPF_K with k=10000");
    556  1.8  alnsn }
    557  1.8  alnsn 
    558  1.8  alnsn ATF_TC_BODY(libbpfjit_alu_mod10000_k, tc)
    559  1.8  alnsn {
    560  1.8  alnsn 	static struct bpf_insn insns[] = {
    561  1.8  alnsn 		BPF_STMT(BPF_LD+BPF_IMM, UINT32_C(4294843849)),
    562  1.8  alnsn 		BPF_STMT(BPF_ALU+BPF_MOD+BPF_K, 10000),
    563  1.8  alnsn 		BPF_STMT(BPF_RET+BPF_A, 0)
    564  1.8  alnsn 	};
    565  1.8  alnsn 
    566  1.8  alnsn 	bpfjit_func_t code;
    567  1.8  alnsn 	uint8_t pkt[1]; /* the program doesn't read any data */
    568  1.8  alnsn 
    569  1.8  alnsn 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
    570  1.8  alnsn 
    571  1.8  alnsn 	ATF_CHECK(bpf_validate(insns, insn_count));
    572  1.8  alnsn 
    573  1.8  alnsn 	code = bpfjit_generate_code(NULL, insns, insn_count);
    574  1.8  alnsn 	ATF_REQUIRE(code != NULL);
    575  1.8  alnsn 
    576  1.8  alnsn 	ATF_CHECK(jitcall(code, pkt, 1, 1) == 3849);
    577  1.8  alnsn 
    578  1.8  alnsn 	bpfjit_free_code(code);
    579  1.8  alnsn }
    580  1.8  alnsn 
    581  1.8  alnsn ATF_TC(libbpfjit_alu_mod7609801_k);
    582  1.8  alnsn ATF_TC_HEAD(libbpfjit_alu_mod7609801_k, tc)
    583  1.8  alnsn {
    584  1.8  alnsn 	atf_tc_set_md_var(tc, "descr",
    585  1.8  alnsn 	    "Test JIT compilation of BPF_ALU+BPF_mod+BPF_K with k=7609801");
    586  1.8  alnsn }
    587  1.8  alnsn 
    588  1.8  alnsn ATF_TC_BODY(libbpfjit_alu_mod7609801_k, tc)
    589  1.8  alnsn {
    590  1.8  alnsn 	static struct bpf_insn insns[] = {
    591  1.8  alnsn 		BPF_STMT(BPF_LD+BPF_IMM, UINT32_C(4294967295)),
    592  1.8  alnsn 		BPF_STMT(BPF_ALU+BPF_MOD+BPF_K, UINT32_C(7609801)),
    593  1.8  alnsn 		BPF_STMT(BPF_RET+BPF_A, 0)
    594  1.8  alnsn 	};
    595  1.8  alnsn 
    596  1.8  alnsn 	bpfjit_func_t code;
    597  1.8  alnsn 	uint8_t pkt[1]; /* the program doesn't read any data */
    598  1.8  alnsn 
    599  1.8  alnsn 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
    600  1.8  alnsn 
    601  1.8  alnsn 	ATF_CHECK(bpf_validate(insns, insn_count));
    602  1.8  alnsn 
    603  1.8  alnsn 	code = bpfjit_generate_code(NULL, insns, insn_count);
    604  1.8  alnsn 	ATF_REQUIRE(code != NULL);
    605  1.8  alnsn 
    606  1.8  alnsn 	ATF_CHECK(jitcall(code, pkt, 1, 1) == UINT32_C(3039531));
    607  1.8  alnsn 
    608  1.8  alnsn 	bpfjit_free_code(code);
    609  1.8  alnsn }
    610  1.8  alnsn 
    611  1.8  alnsn ATF_TC(libbpfjit_alu_mod80000000_k);
    612  1.8  alnsn ATF_TC_HEAD(libbpfjit_alu_mod80000000_k, tc)
    613  1.8  alnsn {
    614  1.8  alnsn 	atf_tc_set_md_var(tc, "descr",
    615  1.8  alnsn 	    "Test JIT compilation of BPF_ALU+BPF_MOD+BPF_K with k=0x80000000");
    616  1.8  alnsn }
    617  1.8  alnsn 
    618  1.8  alnsn ATF_TC_BODY(libbpfjit_alu_mod80000000_k, tc)
    619  1.8  alnsn {
    620  1.8  alnsn 	static struct bpf_insn insns[] = {
    621  1.8  alnsn 		BPF_STMT(BPF_LD+BPF_IMM, UINT32_C(0xffffffde)),
    622  1.8  alnsn 		BPF_STMT(BPF_ALU+BPF_MOD+BPF_K, UINT32_C(0x80000000)),
    623  1.8  alnsn 		BPF_STMT(BPF_RET+BPF_A, 0)
    624  1.8  alnsn 	};
    625  1.8  alnsn 
    626  1.8  alnsn 	bpfjit_func_t code;
    627  1.8  alnsn 	uint8_t pkt[1]; /* the program doesn't read any data */
    628  1.8  alnsn 
    629  1.8  alnsn 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
    630  1.8  alnsn 
    631  1.8  alnsn 	ATF_CHECK(bpf_validate(insns, insn_count));
    632  1.8  alnsn 
    633  1.8  alnsn 	code = bpfjit_generate_code(NULL, insns, insn_count);
    634  1.8  alnsn 	ATF_REQUIRE(code != NULL);
    635  1.8  alnsn 
    636  1.8  alnsn 	ATF_CHECK(jitcall(code, pkt, 1, 1) == UINT32_C(0x7fffffde));
    637  1.8  alnsn 
    638  1.8  alnsn 	bpfjit_free_code(code);
    639  1.8  alnsn }
    640  1.8  alnsn 
    641  1.6  alnsn ATF_TC(libbpfjit_alu_and_k);
    642  1.6  alnsn ATF_TC_HEAD(libbpfjit_alu_and_k, tc)
    643  1.1  alnsn {
    644  1.1  alnsn 	atf_tc_set_md_var(tc, "descr",
    645  1.1  alnsn 	    "Test JIT compilation of BPF_ALU+BPF_AND+BPF_K");
    646  1.1  alnsn }
    647  1.1  alnsn 
    648  1.6  alnsn ATF_TC_BODY(libbpfjit_alu_and_k, tc)
    649  1.1  alnsn {
    650  1.1  alnsn 	static struct bpf_insn insns[] = {
    651  1.1  alnsn 		BPF_STMT(BPF_LD+BPF_IMM, 0xdead),
    652  1.1  alnsn 		BPF_STMT(BPF_ALU+BPF_AND+BPF_K, 0xbeef),
    653  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_A, 0)
    654  1.1  alnsn 	};
    655  1.1  alnsn 
    656  1.2  rmind 	bpfjit_func_t code;
    657  1.1  alnsn 	uint8_t pkt[1]; /* the program doesn't read any data */
    658  1.1  alnsn 
    659  1.1  alnsn 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
    660  1.1  alnsn 
    661  1.1  alnsn 	ATF_CHECK(bpf_validate(insns, insn_count));
    662  1.1  alnsn 
    663  1.5  alnsn 	code = bpfjit_generate_code(NULL, insns, insn_count);
    664  1.1  alnsn 	ATF_REQUIRE(code != NULL);
    665  1.1  alnsn 
    666  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 1, 1) == (0xdead&0xbeef));
    667  1.1  alnsn 
    668  1.1  alnsn 	bpfjit_free_code(code);
    669  1.1  alnsn }
    670  1.1  alnsn 
    671  1.6  alnsn ATF_TC(libbpfjit_alu_or_k);
    672  1.6  alnsn ATF_TC_HEAD(libbpfjit_alu_or_k, tc)
    673  1.1  alnsn {
    674  1.1  alnsn 	atf_tc_set_md_var(tc, "descr",
    675  1.1  alnsn 	    "Test JIT compilation of BPF_ALU+BPF_OR+BPF_K");
    676  1.1  alnsn }
    677  1.1  alnsn 
    678  1.6  alnsn ATF_TC_BODY(libbpfjit_alu_or_k, tc)
    679  1.1  alnsn {
    680  1.1  alnsn 	static struct bpf_insn insns[] = {
    681  1.1  alnsn 		BPF_STMT(BPF_LD+BPF_IMM, 0xdead0000),
    682  1.1  alnsn 		BPF_STMT(BPF_ALU+BPF_OR+BPF_K, 0x0000beef),
    683  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_A, 0)
    684  1.1  alnsn 	};
    685  1.1  alnsn 
    686  1.2  rmind 	bpfjit_func_t code;
    687  1.1  alnsn 	uint8_t pkt[1]; /* the program doesn't read any data */
    688  1.1  alnsn 
    689  1.1  alnsn 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
    690  1.1  alnsn 
    691  1.1  alnsn 	ATF_CHECK(bpf_validate(insns, insn_count));
    692  1.1  alnsn 
    693  1.5  alnsn 	code = bpfjit_generate_code(NULL, insns, insn_count);
    694  1.1  alnsn 	ATF_REQUIRE(code != NULL);
    695  1.1  alnsn 
    696  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 1, 1) == 0xdeadbeef);
    697  1.1  alnsn 
    698  1.1  alnsn 	bpfjit_free_code(code);
    699  1.1  alnsn }
    700  1.1  alnsn 
    701  1.7  alnsn ATF_TC(libbpfjit_alu_xor_k);
    702  1.7  alnsn ATF_TC_HEAD(libbpfjit_alu_xor_k, tc)
    703  1.7  alnsn {
    704  1.7  alnsn 	atf_tc_set_md_var(tc, "descr",
    705  1.7  alnsn 	    "Test JIT compilation of BPF_ALU+BPF_XOR+BPF_K");
    706  1.7  alnsn }
    707  1.7  alnsn 
    708  1.7  alnsn ATF_TC_BODY(libbpfjit_alu_xor_k, tc)
    709  1.7  alnsn {
    710  1.7  alnsn 	static struct bpf_insn insns[] = {
    711  1.7  alnsn 		BPF_STMT(BPF_LD+BPF_IMM, 0xdead0f0f),
    712  1.7  alnsn 		BPF_STMT(BPF_ALU+BPF_XOR+BPF_K, 0x0000b1e0),
    713  1.7  alnsn 		BPF_STMT(BPF_RET+BPF_A, 0)
    714  1.7  alnsn 	};
    715  1.7  alnsn 
    716  1.7  alnsn 	bpfjit_func_t code;
    717  1.7  alnsn 	uint8_t pkt[1]; /* the program doesn't read any data */
    718  1.7  alnsn 
    719  1.7  alnsn 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
    720  1.7  alnsn 
    721  1.7  alnsn 	ATF_CHECK(bpf_validate(insns, insn_count));
    722  1.7  alnsn 
    723  1.7  alnsn 	code = bpfjit_generate_code(NULL, insns, insn_count);
    724  1.7  alnsn 	ATF_REQUIRE(code != NULL);
    725  1.7  alnsn 
    726  1.7  alnsn 	ATF_CHECK(jitcall(code, pkt, 1, 1) == 0xdeadbeef);
    727  1.7  alnsn 
    728  1.7  alnsn 	bpfjit_free_code(code);
    729  1.7  alnsn }
    730  1.7  alnsn 
    731  1.6  alnsn ATF_TC(libbpfjit_alu_lsh_k);
    732  1.6  alnsn ATF_TC_HEAD(libbpfjit_alu_lsh_k, tc)
    733  1.1  alnsn {
    734  1.1  alnsn 	atf_tc_set_md_var(tc, "descr",
    735  1.1  alnsn 	    "Test JIT compilation of BPF_ALU+BPF_LSH+BPF_K");
    736  1.1  alnsn }
    737  1.1  alnsn 
    738  1.6  alnsn ATF_TC_BODY(libbpfjit_alu_lsh_k, tc)
    739  1.1  alnsn {
    740  1.1  alnsn 	static struct bpf_insn insns[] = {
    741  1.1  alnsn 		BPF_STMT(BPF_LD+BPF_IMM, 0xdeadbeef),
    742  1.1  alnsn 		BPF_STMT(BPF_ALU+BPF_LSH+BPF_K, 16),
    743  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_A, 0)
    744  1.1  alnsn 	};
    745  1.1  alnsn 
    746  1.2  rmind 	bpfjit_func_t code;
    747  1.1  alnsn 	uint8_t pkt[1]; /* the program doesn't read any data */
    748  1.1  alnsn 
    749  1.1  alnsn 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
    750  1.1  alnsn 
    751  1.1  alnsn 	ATF_CHECK(bpf_validate(insns, insn_count));
    752  1.1  alnsn 
    753  1.5  alnsn 	code = bpfjit_generate_code(NULL, insns, insn_count);
    754  1.1  alnsn 	ATF_REQUIRE(code != NULL);
    755  1.1  alnsn 
    756  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 1, 1) == 0xbeef0000);
    757  1.1  alnsn 
    758  1.1  alnsn 	bpfjit_free_code(code);
    759  1.1  alnsn }
    760  1.1  alnsn 
    761  1.6  alnsn ATF_TC(libbpfjit_alu_lsh0_k);
    762  1.6  alnsn ATF_TC_HEAD(libbpfjit_alu_lsh0_k, tc)
    763  1.1  alnsn {
    764  1.1  alnsn 	atf_tc_set_md_var(tc, "descr",
    765  1.1  alnsn 	    "Test JIT compilation of BPF_ALU+BPF_LSH+BPF_K with k=0");
    766  1.1  alnsn }
    767  1.1  alnsn 
    768  1.6  alnsn ATF_TC_BODY(libbpfjit_alu_lsh0_k, tc)
    769  1.1  alnsn {
    770  1.1  alnsn 	static struct bpf_insn insns[] = {
    771  1.1  alnsn 		BPF_STMT(BPF_LD+BPF_IMM, 0xdeadbeef),
    772  1.1  alnsn 		BPF_STMT(BPF_ALU+BPF_LSH+BPF_K, 0),
    773  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_A, 0)
    774  1.1  alnsn 	};
    775  1.1  alnsn 
    776  1.2  rmind 	bpfjit_func_t code;
    777  1.1  alnsn 	uint8_t pkt[1]; /* the program doesn't read any data */
    778  1.1  alnsn 
    779  1.1  alnsn 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
    780  1.1  alnsn 
    781  1.1  alnsn 	ATF_CHECK(bpf_validate(insns, insn_count));
    782  1.1  alnsn 
    783  1.5  alnsn 	code = bpfjit_generate_code(NULL, insns, insn_count);
    784  1.1  alnsn 	ATF_REQUIRE(code != NULL);
    785  1.1  alnsn 
    786  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 1, 1) == 0xdeadbeef);
    787  1.1  alnsn 
    788  1.1  alnsn 	bpfjit_free_code(code);
    789  1.1  alnsn }
    790  1.1  alnsn 
    791  1.6  alnsn ATF_TC(libbpfjit_alu_rsh_k);
    792  1.6  alnsn ATF_TC_HEAD(libbpfjit_alu_rsh_k, tc)
    793  1.1  alnsn {
    794  1.1  alnsn 	atf_tc_set_md_var(tc, "descr",
    795  1.1  alnsn 	    "Test JIT compilation of BPF_ALU+BPF_RSH+BPF_K");
    796  1.1  alnsn }
    797  1.1  alnsn 
    798  1.6  alnsn ATF_TC_BODY(libbpfjit_alu_rsh_k, tc)
    799  1.1  alnsn {
    800  1.1  alnsn 	static struct bpf_insn insns[] = {
    801  1.1  alnsn 		BPF_STMT(BPF_LD+BPF_IMM, 0xdeadbeef),
    802  1.1  alnsn 		BPF_STMT(BPF_ALU+BPF_RSH+BPF_K, 16),
    803  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_A, 0)
    804  1.1  alnsn 	};
    805  1.1  alnsn 
    806  1.2  rmind 	bpfjit_func_t code;
    807  1.1  alnsn 	uint8_t pkt[1]; /* the program doesn't read any data */
    808  1.1  alnsn 
    809  1.1  alnsn 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
    810  1.1  alnsn 
    811  1.1  alnsn 	ATF_CHECK(bpf_validate(insns, insn_count));
    812  1.1  alnsn 
    813  1.5  alnsn 	code = bpfjit_generate_code(NULL, insns, insn_count);
    814  1.1  alnsn 	ATF_REQUIRE(code != NULL);
    815  1.1  alnsn 
    816  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 1, 1) == 0x0000dead);
    817  1.1  alnsn 
    818  1.1  alnsn 	bpfjit_free_code(code);
    819  1.1  alnsn }
    820  1.1  alnsn 
    821  1.6  alnsn ATF_TC(libbpfjit_alu_rsh0_k);
    822  1.6  alnsn ATF_TC_HEAD(libbpfjit_alu_rsh0_k, tc)
    823  1.1  alnsn {
    824  1.1  alnsn 	atf_tc_set_md_var(tc, "descr",
    825  1.1  alnsn 	    "Test JIT compilation of BPF_ALU+BPF_RSH+BPF_K with k=0");
    826  1.1  alnsn }
    827  1.1  alnsn 
    828  1.6  alnsn ATF_TC_BODY(libbpfjit_alu_rsh0_k, tc)
    829  1.1  alnsn {
    830  1.1  alnsn 	static struct bpf_insn insns[] = {
    831  1.1  alnsn 		BPF_STMT(BPF_LD+BPF_IMM, 0xdeadbeef),
    832  1.1  alnsn 		BPF_STMT(BPF_ALU+BPF_RSH+BPF_K, 0),
    833  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_A, 0)
    834  1.1  alnsn 	};
    835  1.1  alnsn 
    836  1.2  rmind 	bpfjit_func_t code;
    837  1.1  alnsn 	uint8_t pkt[1]; /* the program doesn't read any data */
    838  1.1  alnsn 
    839  1.1  alnsn 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
    840  1.1  alnsn 
    841  1.1  alnsn 	ATF_CHECK(bpf_validate(insns, insn_count));
    842  1.1  alnsn 
    843  1.5  alnsn 	code = bpfjit_generate_code(NULL, insns, insn_count);
    844  1.1  alnsn 	ATF_REQUIRE(code != NULL);
    845  1.1  alnsn 
    846  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 1, 1) == 0xdeadbeef);
    847  1.1  alnsn 
    848  1.1  alnsn 	bpfjit_free_code(code);
    849  1.1  alnsn }
    850  1.1  alnsn 
    851  1.6  alnsn ATF_TC(libbpfjit_alu_modulo_k);
    852  1.6  alnsn ATF_TC_HEAD(libbpfjit_alu_modulo_k, tc)
    853  1.1  alnsn {
    854  1.1  alnsn 	atf_tc_set_md_var(tc, "descr",
    855  1.1  alnsn 	    "Test JIT compilation of modulo logic of BPF_ALU+BPF_K operations");
    856  1.1  alnsn }
    857  1.1  alnsn 
    858  1.6  alnsn ATF_TC_BODY(libbpfjit_alu_modulo_k, tc)
    859  1.1  alnsn {
    860  1.1  alnsn 	static struct bpf_insn insns[] = {
    861  1.1  alnsn 		BPF_STMT(BPF_LD+BPF_IMM, UINT32_C(0x7fffff77)),
    862  1.1  alnsn 
    863  1.1  alnsn 		/* (7FFFFF77 * 0FFFFF77) = 07FFFFB2,F0004951 */
    864  1.1  alnsn 		BPF_STMT(BPF_ALU+BPF_MUL+BPF_K, UINT32_C(0x0fffff77)),
    865  1.1  alnsn 
    866  1.1  alnsn 		/* 07FFFFB2,F0004951 << 1 = 0FFFFF65,E00092A2 */
    867  1.1  alnsn 		BPF_STMT(BPF_ALU+BPF_LSH+BPF_K, 1),
    868  1.1  alnsn 
    869  1.1  alnsn 		/* 0FFFFF65,E00092A2 + DDDDDDDD = 0FFFFF66,BDDE707F */
    870  1.1  alnsn 		BPF_STMT(BPF_ALU+BPF_ADD+BPF_K, UINT32_C(0xdddddddd)),
    871  1.1  alnsn 
    872  1.1  alnsn 		/* 0FFFFF66,BDDE707F - FFFFFFFF = 0FFFFF65,BDDE7080 */
    873  1.1  alnsn 		BPF_STMT(BPF_ALU+BPF_SUB+BPF_K, UINT32_C(0xffffffff)),
    874  1.1  alnsn 
    875  1.1  alnsn 		/* 0FFFFF65,BDDE7080 | 0000030C = 0FFFFF65,BDDE738C */
    876  1.1  alnsn 		BPF_STMT(BPF_ALU+BPF_OR+BPF_K, UINT32_C(0x0000030c)),
    877  1.1  alnsn 
    878  1.1  alnsn 		/* -0FFFFF65,BDDE738C mod(2^64) = F000009A,42218C74 */
    879  1.1  alnsn 		BPF_STMT(BPF_ALU+BPF_NEG, 0),
    880  1.1  alnsn 
    881  1.1  alnsn 		/* F000009A,42218C74 & FFFFFF0F = F000009A,42218C04 */
    882  1.1  alnsn 		BPF_STMT(BPF_ALU+BPF_AND+BPF_K, UINT32_C(0xffffff0f)),
    883  1.1  alnsn 
    884  1.1  alnsn 		/* F000009A,42218C74 >> 3 = 1E000013,48443180 */
    885  1.1  alnsn 		/* 00000000,42218C74 >> 3 = 00000000,08443180 */
    886  1.1  alnsn 		BPF_STMT(BPF_ALU+BPF_RSH+BPF_K, 3),
    887  1.1  alnsn 
    888  1.1  alnsn 		/* 00000000,08443180 * 7FFFFF77 = 042218BB,93818280 */
    889  1.1  alnsn 		BPF_STMT(BPF_ALU+BPF_MUL+BPF_K, UINT32_C(0x7fffff77)),
    890  1.1  alnsn 
    891  1.1  alnsn 		/* 042218BB,93818280 / DEAD = 000004C0,71CBBBC3 */
    892  1.1  alnsn 		/* 00000000,93818280 / DEAD = 00000000,0000A994 */
    893  1.1  alnsn 		BPF_STMT(BPF_ALU+BPF_DIV+BPF_K, UINT32_C(0xdead)),
    894  1.1  alnsn 
    895  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_A, 0)
    896  1.1  alnsn 	};
    897  1.1  alnsn 
    898  1.2  rmind 	bpfjit_func_t code;
    899  1.1  alnsn 	uint8_t pkt[1]; /* the program doesn't read any data */
    900  1.1  alnsn 
    901  1.1  alnsn 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
    902  1.1  alnsn 
    903  1.1  alnsn 	ATF_CHECK(bpf_validate(insns, insn_count));
    904  1.1  alnsn 
    905  1.5  alnsn 	code = bpfjit_generate_code(NULL, insns, insn_count);
    906  1.1  alnsn 	ATF_REQUIRE(code != NULL);
    907  1.1  alnsn 
    908  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 1, 1) != UINT32_C(0x71cbbbc3));
    909  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 1, 1) == UINT32_C(0x0000a994));
    910  1.1  alnsn 
    911  1.1  alnsn 
    912  1.1  alnsn 	bpfjit_free_code(code);
    913  1.1  alnsn }
    914  1.1  alnsn 
    915  1.6  alnsn ATF_TC(libbpfjit_alu_add_x);
    916  1.6  alnsn ATF_TC_HEAD(libbpfjit_alu_add_x, tc)
    917  1.1  alnsn {
    918  1.1  alnsn 	atf_tc_set_md_var(tc, "descr",
    919  1.1  alnsn 	    "Test JIT compilation of BPF_ALU+BPF_ADD+BPF_X");
    920  1.1  alnsn }
    921  1.1  alnsn 
    922  1.6  alnsn ATF_TC_BODY(libbpfjit_alu_add_x, tc)
    923  1.1  alnsn {
    924  1.1  alnsn 	static struct bpf_insn insns[] = {
    925  1.1  alnsn 		BPF_STMT(BPF_LD+BPF_IMM, 3),
    926  1.1  alnsn 		BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 2),
    927  1.1  alnsn 		BPF_STMT(BPF_ALU+BPF_ADD+BPF_X, 0),
    928  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_A, 0)
    929  1.1  alnsn 	};
    930  1.1  alnsn 
    931  1.2  rmind 	bpfjit_func_t code;
    932  1.1  alnsn 	uint8_t pkt[1]; /* the program doesn't read any data */
    933  1.1  alnsn 
    934  1.1  alnsn 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
    935  1.1  alnsn 
    936  1.1  alnsn 	ATF_CHECK(bpf_validate(insns, insn_count));
    937  1.1  alnsn 
    938  1.5  alnsn 	code = bpfjit_generate_code(NULL, insns, insn_count);
    939  1.1  alnsn 	ATF_REQUIRE(code != NULL);
    940  1.1  alnsn 
    941  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 1, 1) == 5);
    942  1.1  alnsn 
    943  1.1  alnsn 	bpfjit_free_code(code);
    944  1.1  alnsn }
    945  1.1  alnsn 
    946  1.6  alnsn ATF_TC(libbpfjit_alu_sub_x);
    947  1.6  alnsn ATF_TC_HEAD(libbpfjit_alu_sub_x, tc)
    948  1.1  alnsn {
    949  1.1  alnsn 	atf_tc_set_md_var(tc, "descr",
    950  1.1  alnsn 	    "Test JIT compilation of BPF_ALU+BPF_SUB+BPF_X");
    951  1.1  alnsn }
    952  1.1  alnsn 
    953  1.6  alnsn ATF_TC_BODY(libbpfjit_alu_sub_x, tc)
    954  1.1  alnsn {
    955  1.1  alnsn 	static struct bpf_insn insns[] = {
    956  1.1  alnsn 		BPF_STMT(BPF_LD+BPF_IMM, 1),
    957  1.1  alnsn 		BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 2),
    958  1.1  alnsn 		BPF_STMT(BPF_ALU+BPF_SUB+BPF_X, 0),
    959  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_A, 0)
    960  1.1  alnsn 	};
    961  1.1  alnsn 
    962  1.2  rmind 	bpfjit_func_t code;
    963  1.1  alnsn 	uint8_t pkt[1]; /* the program doesn't read any data */
    964  1.1  alnsn 
    965  1.1  alnsn 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
    966  1.1  alnsn 
    967  1.1  alnsn 	ATF_CHECK(bpf_validate(insns, insn_count));
    968  1.1  alnsn 
    969  1.5  alnsn 	code = bpfjit_generate_code(NULL, insns, insn_count);
    970  1.1  alnsn 	ATF_REQUIRE(code != NULL);
    971  1.1  alnsn 
    972  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 1, 1) == UINT32_MAX);
    973  1.1  alnsn 
    974  1.1  alnsn 	bpfjit_free_code(code);
    975  1.1  alnsn }
    976  1.1  alnsn 
    977  1.6  alnsn ATF_TC(libbpfjit_alu_mul_x);
    978  1.6  alnsn ATF_TC_HEAD(libbpfjit_alu_mul_x, tc)
    979  1.1  alnsn {
    980  1.1  alnsn 	atf_tc_set_md_var(tc, "descr",
    981  1.1  alnsn 	    "Test JIT compilation of BPF_ALU+BPF_MUL+BPF_X");
    982  1.1  alnsn }
    983  1.1  alnsn 
    984  1.6  alnsn ATF_TC_BODY(libbpfjit_alu_mul_x, tc)
    985  1.1  alnsn {
    986  1.1  alnsn 	static struct bpf_insn insns[] = {
    987  1.1  alnsn 		BPF_STMT(BPF_LD+BPF_IMM, UINT32_C(0xffffffff)),
    988  1.1  alnsn 		BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 3),
    989  1.1  alnsn 		BPF_STMT(BPF_ALU+BPF_MUL+BPF_X, 0),
    990  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_A, 0)
    991  1.1  alnsn 	};
    992  1.1  alnsn 
    993  1.2  rmind 	bpfjit_func_t code;
    994  1.1  alnsn 	uint8_t pkt[1]; /* the program doesn't read any data */
    995  1.1  alnsn 
    996  1.1  alnsn 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
    997  1.1  alnsn 
    998  1.1  alnsn 	ATF_CHECK(bpf_validate(insns, insn_count));
    999  1.1  alnsn 
   1000  1.5  alnsn 	code = bpfjit_generate_code(NULL, insns, insn_count);
   1001  1.1  alnsn 	ATF_REQUIRE(code != NULL);
   1002  1.1  alnsn 
   1003  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 1, 1) == UINT32_C(0xfffffffd));
   1004  1.1  alnsn 
   1005  1.1  alnsn 	bpfjit_free_code(code);
   1006  1.1  alnsn }
   1007  1.1  alnsn 
   1008  1.6  alnsn ATF_TC(libbpfjit_alu_div0_x);
   1009  1.6  alnsn ATF_TC_HEAD(libbpfjit_alu_div0_x, tc)
   1010  1.1  alnsn {
   1011  1.1  alnsn 	atf_tc_set_md_var(tc, "descr",
   1012  1.1  alnsn 	    "Test JIT compilation of BPF_ALU+BPF_DIV+BPF_X with X=0");
   1013  1.1  alnsn }
   1014  1.1  alnsn 
   1015  1.6  alnsn ATF_TC_BODY(libbpfjit_alu_div0_x, tc)
   1016  1.1  alnsn {
   1017  1.1  alnsn 	static struct bpf_insn insns[] = {
   1018  1.1  alnsn 		BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 0),
   1019  1.1  alnsn 		BPF_STMT(BPF_ALU+BPF_DIV+BPF_X, 0),
   1020  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_A, 0)
   1021  1.1  alnsn 	};
   1022  1.1  alnsn 
   1023  1.2  rmind 	bpfjit_func_t code;
   1024  1.1  alnsn 	uint8_t pkt[1]; /* the program doesn't read any data */
   1025  1.1  alnsn 
   1026  1.1  alnsn 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
   1027  1.1  alnsn 
   1028  1.1  alnsn 	ATF_CHECK(bpf_validate(insns, insn_count));
   1029  1.1  alnsn 
   1030  1.5  alnsn 	code = bpfjit_generate_code(NULL, insns, insn_count);
   1031  1.1  alnsn 	ATF_REQUIRE(code != NULL);
   1032  1.1  alnsn 
   1033  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 1, 1) == 0);
   1034  1.1  alnsn 
   1035  1.1  alnsn 	bpfjit_free_code(code);
   1036  1.1  alnsn }
   1037  1.1  alnsn 
   1038  1.6  alnsn ATF_TC(libbpfjit_alu_div1_x);
   1039  1.6  alnsn ATF_TC_HEAD(libbpfjit_alu_div1_x, tc)
   1040  1.1  alnsn {
   1041  1.1  alnsn 	atf_tc_set_md_var(tc, "descr",
   1042  1.1  alnsn 	    "Test JIT compilation of BPF_ALU+BPF_DIV+BPF_X with X=1");
   1043  1.1  alnsn }
   1044  1.1  alnsn 
   1045  1.6  alnsn ATF_TC_BODY(libbpfjit_alu_div1_x, tc)
   1046  1.1  alnsn {
   1047  1.1  alnsn 	static struct bpf_insn insns[] = {
   1048  1.1  alnsn 		BPF_STMT(BPF_LD+BPF_IMM, 7),
   1049  1.1  alnsn 		BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 1),
   1050  1.1  alnsn 		BPF_STMT(BPF_ALU+BPF_DIV+BPF_X, 0),
   1051  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_A, 0)
   1052  1.1  alnsn 	};
   1053  1.1  alnsn 
   1054  1.2  rmind 	bpfjit_func_t code;
   1055  1.1  alnsn 	uint8_t pkt[1]; /* the program doesn't read any data */
   1056  1.1  alnsn 
   1057  1.1  alnsn 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
   1058  1.1  alnsn 
   1059  1.1  alnsn 	ATF_CHECK(bpf_validate(insns, insn_count));
   1060  1.1  alnsn 
   1061  1.5  alnsn 	code = bpfjit_generate_code(NULL, insns, insn_count);
   1062  1.1  alnsn 	ATF_REQUIRE(code != NULL);
   1063  1.1  alnsn 
   1064  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 1, 1) == 7);
   1065  1.1  alnsn 
   1066  1.1  alnsn 	bpfjit_free_code(code);
   1067  1.1  alnsn }
   1068  1.1  alnsn 
   1069  1.6  alnsn ATF_TC(libbpfjit_alu_div2_x);
   1070  1.6  alnsn ATF_TC_HEAD(libbpfjit_alu_div2_x, tc)
   1071  1.1  alnsn {
   1072  1.1  alnsn 	atf_tc_set_md_var(tc, "descr",
   1073  1.1  alnsn 	    "Test JIT compilation of BPF_ALU+BPF_DIV+BPF_X with X=2");
   1074  1.1  alnsn }
   1075  1.1  alnsn 
   1076  1.6  alnsn ATF_TC_BODY(libbpfjit_alu_div2_x, tc)
   1077  1.1  alnsn {
   1078  1.1  alnsn 	static struct bpf_insn insns[] = {
   1079  1.1  alnsn 		BPF_STMT(BPF_LD+BPF_IMM, 7),
   1080  1.1  alnsn 		BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 2),
   1081  1.1  alnsn 		BPF_STMT(BPF_ALU+BPF_DIV+BPF_X, 0),
   1082  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_A, 0)
   1083  1.1  alnsn 	};
   1084  1.1  alnsn 
   1085  1.2  rmind 	bpfjit_func_t code;
   1086  1.1  alnsn 	uint8_t pkt[1]; /* the program doesn't read any data */
   1087  1.1  alnsn 
   1088  1.1  alnsn 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
   1089  1.1  alnsn 
   1090  1.1  alnsn 	ATF_CHECK(bpf_validate(insns, insn_count));
   1091  1.1  alnsn 
   1092  1.5  alnsn 	code = bpfjit_generate_code(NULL, insns, insn_count);
   1093  1.1  alnsn 	ATF_REQUIRE(code != NULL);
   1094  1.1  alnsn 
   1095  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 1, 1) == 3);
   1096  1.1  alnsn 
   1097  1.1  alnsn 	bpfjit_free_code(code);
   1098  1.1  alnsn }
   1099  1.1  alnsn 
   1100  1.6  alnsn ATF_TC(libbpfjit_alu_div4_x);
   1101  1.6  alnsn ATF_TC_HEAD(libbpfjit_alu_div4_x, tc)
   1102  1.1  alnsn {
   1103  1.1  alnsn 	atf_tc_set_md_var(tc, "descr",
   1104  1.1  alnsn 	    "Test JIT compilation of BPF_ALU+BPF_DIV+BPF_X with X=4");
   1105  1.1  alnsn }
   1106  1.1  alnsn 
   1107  1.6  alnsn ATF_TC_BODY(libbpfjit_alu_div4_x, tc)
   1108  1.1  alnsn {
   1109  1.1  alnsn 	static struct bpf_insn insns[] = {
   1110  1.1  alnsn 		BPF_STMT(BPF_LD+BPF_IMM, UINT32_C(0xffffffff)),
   1111  1.1  alnsn 		BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 4),
   1112  1.1  alnsn 		BPF_STMT(BPF_ALU+BPF_DIV+BPF_X, 0),
   1113  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_A, 0)
   1114  1.1  alnsn 	};
   1115  1.1  alnsn 
   1116  1.2  rmind 	bpfjit_func_t code;
   1117  1.1  alnsn 	uint8_t pkt[1]; /* the program doesn't read any data */
   1118  1.1  alnsn 
   1119  1.1  alnsn 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
   1120  1.1  alnsn 
   1121  1.1  alnsn 	ATF_CHECK(bpf_validate(insns, insn_count));
   1122  1.1  alnsn 
   1123  1.5  alnsn 	code = bpfjit_generate_code(NULL, insns, insn_count);
   1124  1.1  alnsn 	ATF_REQUIRE(code != NULL);
   1125  1.1  alnsn 
   1126  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 1, 1) == UINT32_C(0x3fffffff));
   1127  1.1  alnsn 
   1128  1.1  alnsn 	bpfjit_free_code(code);
   1129  1.1  alnsn }
   1130  1.1  alnsn 
   1131  1.6  alnsn ATF_TC(libbpfjit_alu_div10_x);
   1132  1.6  alnsn ATF_TC_HEAD(libbpfjit_alu_div10_x, tc)
   1133  1.1  alnsn {
   1134  1.1  alnsn 	atf_tc_set_md_var(tc, "descr",
   1135  1.1  alnsn 	    "Test JIT compilation of BPF_ALU+BPF_DIV+BPF_X with X=10");
   1136  1.1  alnsn }
   1137  1.1  alnsn 
   1138  1.6  alnsn ATF_TC_BODY(libbpfjit_alu_div10_x, tc)
   1139  1.1  alnsn {
   1140  1.1  alnsn 	static struct bpf_insn insns[] = {
   1141  1.1  alnsn 		BPF_STMT(BPF_LD+BPF_IMM, UINT32_C(4294843849)),
   1142  1.1  alnsn 		BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 10),
   1143  1.1  alnsn 		BPF_STMT(BPF_ALU+BPF_DIV+BPF_X, 0),
   1144  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_A, 0)
   1145  1.1  alnsn 	};
   1146  1.1  alnsn 
   1147  1.2  rmind 	bpfjit_func_t code;
   1148  1.1  alnsn 	uint8_t pkt[1]; /* the program doesn't read any data */
   1149  1.1  alnsn 
   1150  1.1  alnsn 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
   1151  1.1  alnsn 
   1152  1.1  alnsn 	ATF_CHECK(bpf_validate(insns, insn_count));
   1153  1.1  alnsn 
   1154  1.5  alnsn 	code = bpfjit_generate_code(NULL, insns, insn_count);
   1155  1.1  alnsn 	ATF_REQUIRE(code != NULL);
   1156  1.1  alnsn 
   1157  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 1, 1) == UINT32_C(429484384));
   1158  1.1  alnsn 
   1159  1.1  alnsn 	bpfjit_free_code(code);
   1160  1.1  alnsn }
   1161  1.1  alnsn 
   1162  1.6  alnsn ATF_TC(libbpfjit_alu_div10000_x);
   1163  1.6  alnsn ATF_TC_HEAD(libbpfjit_alu_div10000_x, tc)
   1164  1.1  alnsn {
   1165  1.1  alnsn 	atf_tc_set_md_var(tc, "descr",
   1166  1.1  alnsn 	    "Test JIT compilation of BPF_ALU+BPF_DIV+BPF_X with X=10000");
   1167  1.1  alnsn }
   1168  1.1  alnsn 
   1169  1.6  alnsn ATF_TC_BODY(libbpfjit_alu_div10000_x, tc)
   1170  1.1  alnsn {
   1171  1.1  alnsn 	static struct bpf_insn insns[] = {
   1172  1.1  alnsn 		BPF_STMT(BPF_LD+BPF_IMM, UINT32_C(4294843849)),
   1173  1.1  alnsn 		BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 10000),
   1174  1.1  alnsn 		BPF_STMT(BPF_ALU+BPF_DIV+BPF_X, 0),
   1175  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_A, 0)
   1176  1.1  alnsn 	};
   1177  1.1  alnsn 
   1178  1.2  rmind 	bpfjit_func_t code;
   1179  1.1  alnsn 	uint8_t pkt[1]; /* the program doesn't read any data */
   1180  1.1  alnsn 
   1181  1.1  alnsn 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
   1182  1.1  alnsn 
   1183  1.1  alnsn 	ATF_CHECK(bpf_validate(insns, insn_count));
   1184  1.1  alnsn 
   1185  1.5  alnsn 	code = bpfjit_generate_code(NULL, insns, insn_count);
   1186  1.1  alnsn 	ATF_REQUIRE(code != NULL);
   1187  1.1  alnsn 
   1188  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 1, 1) == UINT32_C(429484));
   1189  1.1  alnsn 
   1190  1.1  alnsn 	bpfjit_free_code(code);
   1191  1.1  alnsn }
   1192  1.1  alnsn 
   1193  1.6  alnsn ATF_TC(libbpfjit_alu_div7609801_x);
   1194  1.6  alnsn ATF_TC_HEAD(libbpfjit_alu_div7609801_x, tc)
   1195  1.1  alnsn {
   1196  1.1  alnsn 	atf_tc_set_md_var(tc, "descr",
   1197  1.1  alnsn 	    "Test JIT compilation of BPF_ALU+BPF_DIV+BPF_X with X=7609801");
   1198  1.1  alnsn }
   1199  1.1  alnsn 
   1200  1.6  alnsn ATF_TC_BODY(libbpfjit_alu_div7609801_x, tc)
   1201  1.1  alnsn {
   1202  1.1  alnsn 	static struct bpf_insn insns[] = {
   1203  1.1  alnsn 		BPF_STMT(BPF_LD+BPF_IMM, UINT32_C(4294967295)),
   1204  1.1  alnsn 		BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, UINT32_C(7609801)),
   1205  1.1  alnsn 		BPF_STMT(BPF_ALU+BPF_DIV+BPF_X, 0),
   1206  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_A, 0)
   1207  1.1  alnsn 	};
   1208  1.1  alnsn 
   1209  1.2  rmind 	bpfjit_func_t code;
   1210  1.1  alnsn 	uint8_t pkt[1]; /* the program doesn't read any data */
   1211  1.1  alnsn 
   1212  1.1  alnsn 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
   1213  1.1  alnsn 
   1214  1.1  alnsn 	ATF_CHECK(bpf_validate(insns, insn_count));
   1215  1.1  alnsn 
   1216  1.5  alnsn 	code = bpfjit_generate_code(NULL, insns, insn_count);
   1217  1.1  alnsn 	ATF_REQUIRE(code != NULL);
   1218  1.1  alnsn 
   1219  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 1, 1) == 564);
   1220  1.1  alnsn 
   1221  1.1  alnsn 	bpfjit_free_code(code);
   1222  1.1  alnsn }
   1223  1.1  alnsn 
   1224  1.6  alnsn ATF_TC(libbpfjit_alu_div80000000_x);
   1225  1.6  alnsn ATF_TC_HEAD(libbpfjit_alu_div80000000_x, tc)
   1226  1.1  alnsn {
   1227  1.1  alnsn 	atf_tc_set_md_var(tc, "descr",
   1228  1.1  alnsn 	    "Test JIT compilation of BPF_ALU+BPF_DIV+BPF_X with X=0x80000000");
   1229  1.1  alnsn }
   1230  1.1  alnsn 
   1231  1.6  alnsn ATF_TC_BODY(libbpfjit_alu_div80000000_x, tc)
   1232  1.1  alnsn {
   1233  1.1  alnsn 	static struct bpf_insn insns[] = {
   1234  1.8  alnsn 		BPF_STMT(BPF_LD+BPF_IMM, UINT32_C(0xffffffde)),
   1235  1.1  alnsn 		BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, UINT32_C(0x80000000)),
   1236  1.1  alnsn 		BPF_STMT(BPF_ALU+BPF_DIV+BPF_X, 0),
   1237  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_A, 0)
   1238  1.1  alnsn 	};
   1239  1.1  alnsn 
   1240  1.2  rmind 	bpfjit_func_t code;
   1241  1.1  alnsn 	uint8_t pkt[1]; /* the program doesn't read any data */
   1242  1.1  alnsn 
   1243  1.1  alnsn 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
   1244  1.1  alnsn 
   1245  1.1  alnsn 	ATF_CHECK(bpf_validate(insns, insn_count));
   1246  1.1  alnsn 
   1247  1.5  alnsn 	code = bpfjit_generate_code(NULL, insns, insn_count);
   1248  1.1  alnsn 	ATF_REQUIRE(code != NULL);
   1249  1.1  alnsn 
   1250  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 1, 1) == 1);
   1251  1.1  alnsn 
   1252  1.1  alnsn 	bpfjit_free_code(code);
   1253  1.1  alnsn }
   1254  1.1  alnsn 
   1255  1.8  alnsn ATF_TC(libbpfjit_alu_mod0_x);
   1256  1.8  alnsn ATF_TC_HEAD(libbpfjit_alu_mod0_x, tc)
   1257  1.8  alnsn {
   1258  1.8  alnsn 	atf_tc_set_md_var(tc, "descr",
   1259  1.8  alnsn 	    "Test JIT compilation of BPF_ALU+BPF_MOD+BPF_X with X=0");
   1260  1.8  alnsn }
   1261  1.8  alnsn 
   1262  1.8  alnsn ATF_TC_BODY(libbpfjit_alu_mod0_x, tc)
   1263  1.8  alnsn {
   1264  1.8  alnsn 	static struct bpf_insn insns[] = {
   1265  1.8  alnsn 		BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 0),
   1266  1.8  alnsn 		BPF_STMT(BPF_ALU+BPF_MOD+BPF_X, 0),
   1267  1.8  alnsn 		BPF_STMT(BPF_RET+BPF_A, 0)
   1268  1.8  alnsn 	};
   1269  1.8  alnsn 
   1270  1.8  alnsn 	bpfjit_func_t code;
   1271  1.8  alnsn 	uint8_t pkt[1]; /* the program doesn't read any data */
   1272  1.8  alnsn 
   1273  1.8  alnsn 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
   1274  1.8  alnsn 
   1275  1.8  alnsn 	ATF_CHECK(bpf_validate(insns, insn_count));
   1276  1.8  alnsn 
   1277  1.8  alnsn 	code = bpfjit_generate_code(NULL, insns, insn_count);
   1278  1.8  alnsn 	ATF_REQUIRE(code != NULL);
   1279  1.8  alnsn 
   1280  1.8  alnsn 	ATF_CHECK(jitcall(code, pkt, 1, 1) == 0);
   1281  1.8  alnsn 
   1282  1.8  alnsn 	bpfjit_free_code(code);
   1283  1.8  alnsn }
   1284  1.8  alnsn 
   1285  1.8  alnsn ATF_TC(libbpfjit_alu_mod1_x);
   1286  1.8  alnsn ATF_TC_HEAD(libbpfjit_alu_mod1_x, tc)
   1287  1.8  alnsn {
   1288  1.8  alnsn 	atf_tc_set_md_var(tc, "descr",
   1289  1.8  alnsn 	    "Test JIT compilation of BPF_ALU+BPF_MOD+BPF_X with X=1");
   1290  1.8  alnsn }
   1291  1.8  alnsn 
   1292  1.8  alnsn ATF_TC_BODY(libbpfjit_alu_mod1_x, tc)
   1293  1.8  alnsn {
   1294  1.8  alnsn 	static struct bpf_insn insns[] = {
   1295  1.8  alnsn 		BPF_STMT(BPF_LD+BPF_IMM, 7),
   1296  1.8  alnsn 		BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 1),
   1297  1.8  alnsn 		BPF_STMT(BPF_ALU+BPF_MOD+BPF_X, 0),
   1298  1.8  alnsn 		BPF_STMT(BPF_RET+BPF_A, 0)
   1299  1.8  alnsn 	};
   1300  1.8  alnsn 
   1301  1.8  alnsn 	bpfjit_func_t code;
   1302  1.8  alnsn 	uint8_t pkt[1]; /* the program doesn't read any data */
   1303  1.8  alnsn 
   1304  1.8  alnsn 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
   1305  1.8  alnsn 
   1306  1.8  alnsn 	ATF_CHECK(bpf_validate(insns, insn_count));
   1307  1.8  alnsn 
   1308  1.8  alnsn 	code = bpfjit_generate_code(NULL, insns, insn_count);
   1309  1.8  alnsn 	ATF_REQUIRE(code != NULL);
   1310  1.8  alnsn 
   1311  1.8  alnsn 	ATF_CHECK(jitcall(code, pkt, 1, 1) == 0);
   1312  1.8  alnsn 
   1313  1.8  alnsn 	bpfjit_free_code(code);
   1314  1.8  alnsn }
   1315  1.8  alnsn 
   1316  1.8  alnsn ATF_TC(libbpfjit_alu_mod2_x);
   1317  1.8  alnsn ATF_TC_HEAD(libbpfjit_alu_mod2_x, tc)
   1318  1.8  alnsn {
   1319  1.8  alnsn 	atf_tc_set_md_var(tc, "descr",
   1320  1.8  alnsn 	    "Test JIT compilation of BPF_ALU+BPF_MOD+BPF_X with X=2");
   1321  1.8  alnsn }
   1322  1.8  alnsn 
   1323  1.8  alnsn ATF_TC_BODY(libbpfjit_alu_mod2_x, tc)
   1324  1.8  alnsn {
   1325  1.8  alnsn 	static struct bpf_insn insns[] = {
   1326  1.8  alnsn 		BPF_STMT(BPF_LD+BPF_IMM, 7),
   1327  1.8  alnsn 		BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 2),
   1328  1.8  alnsn 		BPF_STMT(BPF_ALU+BPF_MOD+BPF_X, 0),
   1329  1.8  alnsn 		BPF_STMT(BPF_RET+BPF_A, 0)
   1330  1.8  alnsn 	};
   1331  1.8  alnsn 
   1332  1.8  alnsn 	bpfjit_func_t code;
   1333  1.8  alnsn 	uint8_t pkt[1]; /* the program doesn't read any data */
   1334  1.8  alnsn 
   1335  1.8  alnsn 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
   1336  1.8  alnsn 
   1337  1.8  alnsn 	ATF_CHECK(bpf_validate(insns, insn_count));
   1338  1.8  alnsn 
   1339  1.8  alnsn 	code = bpfjit_generate_code(NULL, insns, insn_count);
   1340  1.8  alnsn 	ATF_REQUIRE(code != NULL);
   1341  1.8  alnsn 
   1342  1.8  alnsn 	ATF_CHECK(jitcall(code, pkt, 1, 1) == 1);
   1343  1.8  alnsn 
   1344  1.8  alnsn 	bpfjit_free_code(code);
   1345  1.8  alnsn }
   1346  1.8  alnsn 
   1347  1.8  alnsn ATF_TC(libbpfjit_alu_mod4_x);
   1348  1.8  alnsn ATF_TC_HEAD(libbpfjit_alu_mod4_x, tc)
   1349  1.8  alnsn {
   1350  1.8  alnsn 	atf_tc_set_md_var(tc, "descr",
   1351  1.8  alnsn 	    "Test JIT compilation of BPF_ALU+BPF_MOD+BPF_X with X=4");
   1352  1.8  alnsn }
   1353  1.8  alnsn 
   1354  1.8  alnsn ATF_TC_BODY(libbpfjit_alu_mod4_x, tc)
   1355  1.8  alnsn {
   1356  1.8  alnsn 	static struct bpf_insn insns[] = {
   1357  1.8  alnsn 		BPF_STMT(BPF_LD+BPF_IMM, UINT32_C(0xffffffff)),
   1358  1.8  alnsn 		BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 4),
   1359  1.8  alnsn 		BPF_STMT(BPF_ALU+BPF_MOD+BPF_X, 0),
   1360  1.8  alnsn 		BPF_STMT(BPF_RET+BPF_A, 0)
   1361  1.8  alnsn 	};
   1362  1.8  alnsn 
   1363  1.8  alnsn 	bpfjit_func_t code;
   1364  1.8  alnsn 	uint8_t pkt[1]; /* the program doesn't read any data */
   1365  1.8  alnsn 
   1366  1.8  alnsn 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
   1367  1.8  alnsn 
   1368  1.8  alnsn 	ATF_CHECK(bpf_validate(insns, insn_count));
   1369  1.8  alnsn 
   1370  1.8  alnsn 	code = bpfjit_generate_code(NULL, insns, insn_count);
   1371  1.8  alnsn 	ATF_REQUIRE(code != NULL);
   1372  1.8  alnsn 
   1373  1.8  alnsn 	ATF_CHECK(jitcall(code, pkt, 1, 1) == 3);
   1374  1.8  alnsn 
   1375  1.8  alnsn 	bpfjit_free_code(code);
   1376  1.8  alnsn }
   1377  1.8  alnsn 
   1378  1.8  alnsn ATF_TC(libbpfjit_alu_mod10_x);
   1379  1.8  alnsn ATF_TC_HEAD(libbpfjit_alu_mod10_x, tc)
   1380  1.8  alnsn {
   1381  1.8  alnsn 	atf_tc_set_md_var(tc, "descr",
   1382  1.8  alnsn 	    "Test JIT compilation of BPF_ALU+BPF_MOD+BPF_X with X=10");
   1383  1.8  alnsn }
   1384  1.8  alnsn 
   1385  1.8  alnsn ATF_TC_BODY(libbpfjit_alu_mod10_x, tc)
   1386  1.8  alnsn {
   1387  1.8  alnsn 	static struct bpf_insn insns[] = {
   1388  1.8  alnsn 		BPF_STMT(BPF_LD+BPF_IMM, UINT32_C(4294843849)),
   1389  1.8  alnsn 		BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 10),
   1390  1.8  alnsn 		BPF_STMT(BPF_ALU+BPF_MOD+BPF_X, 0),
   1391  1.8  alnsn 		BPF_STMT(BPF_RET+BPF_A, 0)
   1392  1.8  alnsn 	};
   1393  1.8  alnsn 
   1394  1.8  alnsn 	bpfjit_func_t code;
   1395  1.8  alnsn 	uint8_t pkt[1]; /* the program doesn't read any data */
   1396  1.8  alnsn 
   1397  1.8  alnsn 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
   1398  1.8  alnsn 
   1399  1.8  alnsn 	ATF_CHECK(bpf_validate(insns, insn_count));
   1400  1.8  alnsn 
   1401  1.8  alnsn 	code = bpfjit_generate_code(NULL, insns, insn_count);
   1402  1.8  alnsn 	ATF_REQUIRE(code != NULL);
   1403  1.8  alnsn 
   1404  1.8  alnsn 	ATF_CHECK(jitcall(code, pkt, 1, 1) == 9);
   1405  1.8  alnsn 
   1406  1.8  alnsn 	bpfjit_free_code(code);
   1407  1.8  alnsn }
   1408  1.8  alnsn 
   1409  1.8  alnsn ATF_TC(libbpfjit_alu_mod10000_x);
   1410  1.8  alnsn ATF_TC_HEAD(libbpfjit_alu_mod10000_x, tc)
   1411  1.8  alnsn {
   1412  1.8  alnsn 	atf_tc_set_md_var(tc, "descr",
   1413  1.8  alnsn 	    "Test JIT compilation of BPF_ALU+BPF_MOD+BPF_X with X=10000");
   1414  1.8  alnsn }
   1415  1.8  alnsn 
   1416  1.8  alnsn ATF_TC_BODY(libbpfjit_alu_mod10000_x, tc)
   1417  1.8  alnsn {
   1418  1.8  alnsn 	static struct bpf_insn insns[] = {
   1419  1.8  alnsn 		BPF_STMT(BPF_LD+BPF_IMM, UINT32_C(4294843849)),
   1420  1.8  alnsn 		BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 10000),
   1421  1.8  alnsn 		BPF_STMT(BPF_ALU+BPF_MOD+BPF_X, 0),
   1422  1.8  alnsn 		BPF_STMT(BPF_RET+BPF_A, 0)
   1423  1.8  alnsn 	};
   1424  1.8  alnsn 
   1425  1.8  alnsn 	bpfjit_func_t code;
   1426  1.8  alnsn 	uint8_t pkt[1]; /* the program doesn't read any data */
   1427  1.8  alnsn 
   1428  1.8  alnsn 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
   1429  1.8  alnsn 
   1430  1.8  alnsn 	ATF_CHECK(bpf_validate(insns, insn_count));
   1431  1.8  alnsn 
   1432  1.8  alnsn 	code = bpfjit_generate_code(NULL, insns, insn_count);
   1433  1.8  alnsn 	ATF_REQUIRE(code != NULL);
   1434  1.8  alnsn 
   1435  1.8  alnsn 	ATF_CHECK(jitcall(code, pkt, 1, 1) == 3849);
   1436  1.8  alnsn 
   1437  1.8  alnsn 	bpfjit_free_code(code);
   1438  1.8  alnsn }
   1439  1.8  alnsn 
   1440  1.8  alnsn ATF_TC(libbpfjit_alu_mod7609801_x);
   1441  1.8  alnsn ATF_TC_HEAD(libbpfjit_alu_mod7609801_x, tc)
   1442  1.8  alnsn {
   1443  1.8  alnsn 	atf_tc_set_md_var(tc, "descr",
   1444  1.8  alnsn 	    "Test JIT compilation of BPF_ALU+BPF_MOD+BPF_X with X=7609801");
   1445  1.8  alnsn }
   1446  1.8  alnsn 
   1447  1.8  alnsn ATF_TC_BODY(libbpfjit_alu_mod7609801_x, tc)
   1448  1.8  alnsn {
   1449  1.8  alnsn 	static struct bpf_insn insns[] = {
   1450  1.8  alnsn 		BPF_STMT(BPF_LD+BPF_IMM, UINT32_C(4294967295)),
   1451  1.8  alnsn 		BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, UINT32_C(7609801)),
   1452  1.8  alnsn 		BPF_STMT(BPF_ALU+BPF_MOD+BPF_X, 0),
   1453  1.8  alnsn 		BPF_STMT(BPF_RET+BPF_A, 0)
   1454  1.8  alnsn 	};
   1455  1.8  alnsn 
   1456  1.8  alnsn 	bpfjit_func_t code;
   1457  1.8  alnsn 	uint8_t pkt[1]; /* the program doesn't read any data */
   1458  1.8  alnsn 
   1459  1.8  alnsn 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
   1460  1.8  alnsn 
   1461  1.8  alnsn 	ATF_CHECK(bpf_validate(insns, insn_count));
   1462  1.8  alnsn 
   1463  1.8  alnsn 	code = bpfjit_generate_code(NULL, insns, insn_count);
   1464  1.8  alnsn 	ATF_REQUIRE(code != NULL);
   1465  1.8  alnsn 
   1466  1.8  alnsn 	ATF_CHECK(jitcall(code, pkt, 1, 1) == UINT32_C(3039531));
   1467  1.8  alnsn 
   1468  1.8  alnsn 	bpfjit_free_code(code);
   1469  1.8  alnsn }
   1470  1.8  alnsn 
   1471  1.8  alnsn ATF_TC(libbpfjit_alu_mod80000000_x);
   1472  1.8  alnsn ATF_TC_HEAD(libbpfjit_alu_mod80000000_x, tc)
   1473  1.8  alnsn {
   1474  1.8  alnsn 	atf_tc_set_md_var(tc, "descr",
   1475  1.8  alnsn 	    "Test JIT compilation of BPF_ALU+BPF_MOD+BPF_X with X=0x80000000");
   1476  1.8  alnsn }
   1477  1.8  alnsn 
   1478  1.8  alnsn ATF_TC_BODY(libbpfjit_alu_mod80000000_x, tc)
   1479  1.8  alnsn {
   1480  1.8  alnsn 	static struct bpf_insn insns[] = {
   1481  1.8  alnsn 		BPF_STMT(BPF_LD+BPF_IMM, UINT32_C(0xffffffde)),
   1482  1.8  alnsn 		BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, UINT32_C(0x80000000)),
   1483  1.8  alnsn 		BPF_STMT(BPF_ALU+BPF_MOD+BPF_X, 0),
   1484  1.8  alnsn 		BPF_STMT(BPF_RET+BPF_A, 0)
   1485  1.8  alnsn 	};
   1486  1.8  alnsn 
   1487  1.8  alnsn 	bpfjit_func_t code;
   1488  1.8  alnsn 	uint8_t pkt[1]; /* the program doesn't read any data */
   1489  1.8  alnsn 
   1490  1.8  alnsn 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
   1491  1.8  alnsn 
   1492  1.8  alnsn 	ATF_CHECK(bpf_validate(insns, insn_count));
   1493  1.8  alnsn 
   1494  1.8  alnsn 	code = bpfjit_generate_code(NULL, insns, insn_count);
   1495  1.8  alnsn 	ATF_REQUIRE(code != NULL);
   1496  1.8  alnsn 
   1497  1.8  alnsn 	ATF_CHECK(jitcall(code, pkt, 1, 1) == UINT32_C(0x7fffffde));
   1498  1.8  alnsn 
   1499  1.8  alnsn 	bpfjit_free_code(code);
   1500  1.8  alnsn }
   1501  1.8  alnsn 
   1502  1.6  alnsn ATF_TC(libbpfjit_alu_and_x);
   1503  1.6  alnsn ATF_TC_HEAD(libbpfjit_alu_and_x, tc)
   1504  1.1  alnsn {
   1505  1.1  alnsn 	atf_tc_set_md_var(tc, "descr",
   1506  1.1  alnsn 	    "Test JIT compilation of BPF_ALU+BPF_AND+BPF_X");
   1507  1.1  alnsn }
   1508  1.1  alnsn 
   1509  1.6  alnsn ATF_TC_BODY(libbpfjit_alu_and_x, tc)
   1510  1.1  alnsn {
   1511  1.1  alnsn 	static struct bpf_insn insns[] = {
   1512  1.1  alnsn 		BPF_STMT(BPF_LD+BPF_IMM, 0xdead),
   1513  1.1  alnsn 		BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 0xbeef),
   1514  1.1  alnsn 		BPF_STMT(BPF_ALU+BPF_AND+BPF_X, 0),
   1515  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_A, 0)
   1516  1.1  alnsn 	};
   1517  1.1  alnsn 
   1518  1.2  rmind 	bpfjit_func_t code;
   1519  1.1  alnsn 	uint8_t pkt[1]; /* the program doesn't read any data */
   1520  1.1  alnsn 
   1521  1.1  alnsn 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
   1522  1.1  alnsn 
   1523  1.1  alnsn 	ATF_CHECK(bpf_validate(insns, insn_count));
   1524  1.1  alnsn 
   1525  1.5  alnsn 	code = bpfjit_generate_code(NULL, insns, insn_count);
   1526  1.1  alnsn 	ATF_REQUIRE(code != NULL);
   1527  1.1  alnsn 
   1528  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 1, 1) == (0xdead&0xbeef));
   1529  1.1  alnsn 
   1530  1.1  alnsn 	bpfjit_free_code(code);
   1531  1.1  alnsn }
   1532  1.1  alnsn 
   1533  1.6  alnsn ATF_TC(libbpfjit_alu_or_x);
   1534  1.6  alnsn ATF_TC_HEAD(libbpfjit_alu_or_x, tc)
   1535  1.1  alnsn {
   1536  1.1  alnsn 	atf_tc_set_md_var(tc, "descr",
   1537  1.1  alnsn 	    "Test JIT compilation of BPF_ALU+BPF_OR+BPF_X");
   1538  1.1  alnsn }
   1539  1.1  alnsn 
   1540  1.6  alnsn ATF_TC_BODY(libbpfjit_alu_or_x, tc)
   1541  1.1  alnsn {
   1542  1.1  alnsn 	static struct bpf_insn insns[] = {
   1543  1.1  alnsn 		BPF_STMT(BPF_LD+BPF_IMM, 0xdead0000),
   1544  1.1  alnsn 		BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 0x0000beef),
   1545  1.1  alnsn 		BPF_STMT(BPF_ALU+BPF_OR+BPF_X, 0),
   1546  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_A, 0)
   1547  1.1  alnsn 	};
   1548  1.1  alnsn 
   1549  1.2  rmind 	bpfjit_func_t code;
   1550  1.1  alnsn 	uint8_t pkt[1]; /* the program doesn't read any data */
   1551  1.1  alnsn 
   1552  1.1  alnsn 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
   1553  1.1  alnsn 
   1554  1.1  alnsn 	ATF_CHECK(bpf_validate(insns, insn_count));
   1555  1.1  alnsn 
   1556  1.5  alnsn 	code = bpfjit_generate_code(NULL, insns, insn_count);
   1557  1.1  alnsn 	ATF_REQUIRE(code != NULL);
   1558  1.1  alnsn 
   1559  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 1, 1) == 0xdeadbeef);
   1560  1.1  alnsn 
   1561  1.1  alnsn 	bpfjit_free_code(code);
   1562  1.1  alnsn }
   1563  1.1  alnsn 
   1564  1.7  alnsn ATF_TC(libbpfjit_alu_xor_x);
   1565  1.7  alnsn ATF_TC_HEAD(libbpfjit_alu_xor_x, tc)
   1566  1.7  alnsn {
   1567  1.7  alnsn 	atf_tc_set_md_var(tc, "descr",
   1568  1.7  alnsn 	    "Test JIT compilation of BPF_ALU+BPF_XOR+BPF_X");
   1569  1.7  alnsn }
   1570  1.7  alnsn 
   1571  1.7  alnsn ATF_TC_BODY(libbpfjit_alu_xor_x, tc)
   1572  1.7  alnsn {
   1573  1.7  alnsn 	static struct bpf_insn insns[] = {
   1574  1.7  alnsn 		BPF_STMT(BPF_LD+BPF_IMM, 0xdead0f0f),
   1575  1.7  alnsn 		BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 0x0000b1e0),
   1576  1.7  alnsn 		BPF_STMT(BPF_ALU+BPF_XOR+BPF_X, 0),
   1577  1.7  alnsn 		BPF_STMT(BPF_RET+BPF_A, 0)
   1578  1.7  alnsn 	};
   1579  1.7  alnsn 
   1580  1.7  alnsn 	bpfjit_func_t code;
   1581  1.7  alnsn 	uint8_t pkt[1]; /* the program doesn't read any data */
   1582  1.7  alnsn 
   1583  1.7  alnsn 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
   1584  1.7  alnsn 
   1585  1.7  alnsn 	ATF_CHECK(bpf_validate(insns, insn_count));
   1586  1.7  alnsn 
   1587  1.7  alnsn 	code = bpfjit_generate_code(NULL, insns, insn_count);
   1588  1.7  alnsn 	ATF_REQUIRE(code != NULL);
   1589  1.7  alnsn 
   1590  1.7  alnsn 	ATF_CHECK(jitcall(code, pkt, 1, 1) == 0xdeadbeef);
   1591  1.7  alnsn 
   1592  1.7  alnsn 	bpfjit_free_code(code);
   1593  1.7  alnsn }
   1594  1.7  alnsn 
   1595  1.6  alnsn ATF_TC(libbpfjit_alu_lsh_x);
   1596  1.6  alnsn ATF_TC_HEAD(libbpfjit_alu_lsh_x, tc)
   1597  1.1  alnsn {
   1598  1.1  alnsn 	atf_tc_set_md_var(tc, "descr",
   1599  1.1  alnsn 	    "Test JIT compilation of BPF_ALU+BPF_LSH+BPF_X");
   1600  1.1  alnsn }
   1601  1.1  alnsn 
   1602  1.6  alnsn ATF_TC_BODY(libbpfjit_alu_lsh_x, tc)
   1603  1.1  alnsn {
   1604  1.1  alnsn 	static struct bpf_insn insns[] = {
   1605  1.1  alnsn 		BPF_STMT(BPF_LD+BPF_IMM, 0xdeadbeef),
   1606  1.1  alnsn 		BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 16),
   1607  1.1  alnsn 		BPF_STMT(BPF_ALU+BPF_LSH+BPF_X, 0),
   1608  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_A, 0)
   1609  1.1  alnsn 	};
   1610  1.1  alnsn 
   1611  1.2  rmind 	bpfjit_func_t code;
   1612  1.1  alnsn 	uint8_t pkt[1]; /* the program doesn't read any data */
   1613  1.1  alnsn 
   1614  1.1  alnsn 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
   1615  1.1  alnsn 
   1616  1.1  alnsn 	ATF_CHECK(bpf_validate(insns, insn_count));
   1617  1.1  alnsn 
   1618  1.5  alnsn 	code = bpfjit_generate_code(NULL, insns, insn_count);
   1619  1.1  alnsn 	ATF_REQUIRE(code != NULL);
   1620  1.1  alnsn 
   1621  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 1, 1) == 0xbeef0000);
   1622  1.1  alnsn 
   1623  1.1  alnsn 	bpfjit_free_code(code);
   1624  1.1  alnsn }
   1625  1.1  alnsn 
   1626  1.6  alnsn ATF_TC(libbpfjit_alu_lsh0_x);
   1627  1.6  alnsn ATF_TC_HEAD(libbpfjit_alu_lsh0_x, tc)
   1628  1.1  alnsn {
   1629  1.1  alnsn 	atf_tc_set_md_var(tc, "descr",
   1630  1.1  alnsn 	    "Test JIT compilation of BPF_ALU+BPF_LSH+BPF_X with k=0");
   1631  1.1  alnsn }
   1632  1.1  alnsn 
   1633  1.6  alnsn ATF_TC_BODY(libbpfjit_alu_lsh0_x, tc)
   1634  1.1  alnsn {
   1635  1.1  alnsn 	static struct bpf_insn insns[] = {
   1636  1.1  alnsn 		BPF_STMT(BPF_LD+BPF_IMM, 0xdeadbeef),
   1637  1.1  alnsn 		BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 0),
   1638  1.1  alnsn 		BPF_STMT(BPF_ALU+BPF_LSH+BPF_X, 0),
   1639  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_A, 0)
   1640  1.1  alnsn 	};
   1641  1.1  alnsn 
   1642  1.2  rmind 	bpfjit_func_t code;
   1643  1.1  alnsn 	uint8_t pkt[1]; /* the program doesn't read any data */
   1644  1.1  alnsn 
   1645  1.1  alnsn 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
   1646  1.1  alnsn 
   1647  1.1  alnsn 	ATF_CHECK(bpf_validate(insns, insn_count));
   1648  1.1  alnsn 
   1649  1.5  alnsn 	code = bpfjit_generate_code(NULL, insns, insn_count);
   1650  1.1  alnsn 	ATF_REQUIRE(code != NULL);
   1651  1.1  alnsn 
   1652  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 1, 1) == 0xdeadbeef);
   1653  1.1  alnsn 
   1654  1.1  alnsn 	bpfjit_free_code(code);
   1655  1.1  alnsn }
   1656  1.1  alnsn 
   1657  1.6  alnsn ATF_TC(libbpfjit_alu_rsh_x);
   1658  1.6  alnsn ATF_TC_HEAD(libbpfjit_alu_rsh_x, tc)
   1659  1.1  alnsn {
   1660  1.1  alnsn 	atf_tc_set_md_var(tc, "descr",
   1661  1.1  alnsn 	    "Test JIT compilation of BPF_ALU+BPF_RSH+BPF_X");
   1662  1.1  alnsn }
   1663  1.1  alnsn 
   1664  1.6  alnsn ATF_TC_BODY(libbpfjit_alu_rsh_x, tc)
   1665  1.1  alnsn {
   1666  1.1  alnsn 	static struct bpf_insn insns[] = {
   1667  1.1  alnsn 		BPF_STMT(BPF_LD+BPF_IMM, 0xdeadbeef),
   1668  1.1  alnsn 		BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 16),
   1669  1.1  alnsn 		BPF_STMT(BPF_ALU+BPF_RSH+BPF_X, 0),
   1670  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_A, 0)
   1671  1.1  alnsn 	};
   1672  1.1  alnsn 
   1673  1.2  rmind 	bpfjit_func_t code;
   1674  1.1  alnsn 	uint8_t pkt[1]; /* the program doesn't read any data */
   1675  1.1  alnsn 
   1676  1.1  alnsn 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
   1677  1.1  alnsn 
   1678  1.1  alnsn 	ATF_CHECK(bpf_validate(insns, insn_count));
   1679  1.1  alnsn 
   1680  1.5  alnsn 	code = bpfjit_generate_code(NULL, insns, insn_count);
   1681  1.1  alnsn 	ATF_REQUIRE(code != NULL);
   1682  1.1  alnsn 
   1683  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 1, 1) == 0x0000dead);
   1684  1.1  alnsn 
   1685  1.1  alnsn 	bpfjit_free_code(code);
   1686  1.1  alnsn }
   1687  1.1  alnsn 
   1688  1.6  alnsn ATF_TC(libbpfjit_alu_rsh0_x);
   1689  1.6  alnsn ATF_TC_HEAD(libbpfjit_alu_rsh0_x, tc)
   1690  1.1  alnsn {
   1691  1.1  alnsn 	atf_tc_set_md_var(tc, "descr",
   1692  1.1  alnsn 	    "Test JIT compilation of BPF_ALU+BPF_RSH+BPF_X with k=0");
   1693  1.1  alnsn }
   1694  1.1  alnsn 
   1695  1.6  alnsn ATF_TC_BODY(libbpfjit_alu_rsh0_x, tc)
   1696  1.1  alnsn {
   1697  1.1  alnsn 	static struct bpf_insn insns[] = {
   1698  1.1  alnsn 		BPF_STMT(BPF_LD+BPF_IMM, 0xdeadbeef),
   1699  1.1  alnsn 		BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 0),
   1700  1.1  alnsn 		BPF_STMT(BPF_ALU+BPF_RSH+BPF_X, 0),
   1701  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_A, 0)
   1702  1.1  alnsn 	};
   1703  1.1  alnsn 
   1704  1.2  rmind 	bpfjit_func_t code;
   1705  1.1  alnsn 	uint8_t pkt[1]; /* the program doesn't read any data */
   1706  1.1  alnsn 
   1707  1.1  alnsn 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
   1708  1.1  alnsn 
   1709  1.1  alnsn 	ATF_CHECK(bpf_validate(insns, insn_count));
   1710  1.1  alnsn 
   1711  1.5  alnsn 	code = bpfjit_generate_code(NULL, insns, insn_count);
   1712  1.1  alnsn 	ATF_REQUIRE(code != NULL);
   1713  1.1  alnsn 
   1714  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 1, 1) == 0xdeadbeef);
   1715  1.1  alnsn 
   1716  1.1  alnsn 	bpfjit_free_code(code);
   1717  1.1  alnsn }
   1718  1.1  alnsn 
   1719  1.6  alnsn ATF_TC(libbpfjit_alu_modulo_x);
   1720  1.6  alnsn ATF_TC_HEAD(libbpfjit_alu_modulo_x, tc)
   1721  1.1  alnsn {
   1722  1.1  alnsn 	atf_tc_set_md_var(tc, "descr",
   1723  1.1  alnsn 	    "Test JIT compilation of modulo logic of BPF_ALU+BPF_X operations");
   1724  1.1  alnsn }
   1725  1.1  alnsn 
   1726  1.6  alnsn ATF_TC_BODY(libbpfjit_alu_modulo_x, tc)
   1727  1.1  alnsn {
   1728  1.1  alnsn 	static struct bpf_insn insns[] = {
   1729  1.1  alnsn 		BPF_STMT(BPF_LD+BPF_IMM, UINT32_C(0x7fffff77)),
   1730  1.1  alnsn 
   1731  1.1  alnsn 		/* (7FFFFF77 * 0FFFFF77) = 07FFFFB2,F0004951 */
   1732  1.1  alnsn 		BPF_STMT(BPF_LDX+BPF_W+BPF_K, UINT32_C(0x0fffff77)),
   1733  1.1  alnsn 		BPF_STMT(BPF_ALU+BPF_MUL+BPF_X, 0),
   1734  1.1  alnsn 
   1735  1.1  alnsn 		/* 07FFFFB2,F0004951 << 1 = 0FFFFF65,E00092A2 */
   1736  1.1  alnsn 		BPF_STMT(BPF_LDX+BPF_W+BPF_K, 1),
   1737  1.1  alnsn 		BPF_STMT(BPF_ALU+BPF_LSH+BPF_X, 0),
   1738  1.1  alnsn 
   1739  1.1  alnsn 		/* 0FFFFF65,E00092A2 + DDDDDDDD = 0FFFFF66,BDDE707F */
   1740  1.1  alnsn 		BPF_STMT(BPF_LDX+BPF_W+BPF_K, UINT32_C(0xdddddddd)),
   1741  1.1  alnsn 		BPF_STMT(BPF_ALU+BPF_ADD+BPF_X, 0),
   1742  1.1  alnsn 
   1743  1.1  alnsn 		/* 0FFFFF66,BDDE707F - FFFFFFFF = 0FFFFF65,BDDE7080 */
   1744  1.1  alnsn 		BPF_STMT(BPF_LDX+BPF_W+BPF_K, UINT32_C(0xffffffff)),
   1745  1.1  alnsn 		BPF_STMT(BPF_ALU+BPF_SUB+BPF_X, 0),
   1746  1.1  alnsn 
   1747  1.1  alnsn 		/* 0FFFFF65,BDDE7080 | 0000030C = 0FFFFF65,BDDE738C */
   1748  1.1  alnsn 		BPF_STMT(BPF_LDX+BPF_W+BPF_K, UINT32_C(0x0000030c)),
   1749  1.1  alnsn 		BPF_STMT(BPF_ALU+BPF_OR+BPF_X, 0),
   1750  1.1  alnsn 
   1751  1.1  alnsn 		/* -0FFFFF65,BDDE738C mod(2^64) = F000009A,42218C74 */
   1752  1.1  alnsn 		BPF_STMT(BPF_ALU+BPF_NEG, 0),
   1753  1.1  alnsn 
   1754  1.1  alnsn 		/* F000009A,42218C74 & FFFFFF0F = F000009A,42218C04 */
   1755  1.1  alnsn 		BPF_STMT(BPF_LDX+BPF_W+BPF_K, UINT32_C(0xffffff0f)),
   1756  1.1  alnsn 		BPF_STMT(BPF_ALU+BPF_AND+BPF_X, 0),
   1757  1.1  alnsn 
   1758  1.1  alnsn 		/* F000009A,42218C74 >> 3 = 1E000013,48443180 */
   1759  1.1  alnsn 		/* 00000000,42218C74 >> 3 = 00000000,08443180 */
   1760  1.1  alnsn 		BPF_STMT(BPF_LDX+BPF_W+BPF_K, 3),
   1761  1.1  alnsn 		BPF_STMT(BPF_ALU+BPF_RSH+BPF_X, 0),
   1762  1.1  alnsn 
   1763  1.1  alnsn 		/* 00000000,08443180 * 7FFFFF77 = 042218BB,93818280 */
   1764  1.1  alnsn 		BPF_STMT(BPF_LDX+BPF_W+BPF_K, UINT32_C(0x7fffff77)),
   1765  1.1  alnsn 		BPF_STMT(BPF_ALU+BPF_MUL+BPF_X, 0),
   1766  1.1  alnsn 
   1767  1.1  alnsn 		/* 042218BB,93818280 / DEAD = 000004C0,71CBBBC3 */
   1768  1.1  alnsn 		/* 00000000,93818280 / DEAD = 00000000,0000A994 */
   1769  1.1  alnsn 		BPF_STMT(BPF_LDX+BPF_W+BPF_K, UINT32_C(0xdead)),
   1770  1.1  alnsn 		BPF_STMT(BPF_ALU+BPF_DIV+BPF_X, 0),
   1771  1.1  alnsn 
   1772  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_A, 0)
   1773  1.1  alnsn 	};
   1774  1.1  alnsn 
   1775  1.2  rmind 	bpfjit_func_t code;
   1776  1.1  alnsn 	uint8_t pkt[1]; /* the program doesn't read any data */
   1777  1.1  alnsn 
   1778  1.1  alnsn 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
   1779  1.1  alnsn 
   1780  1.1  alnsn 	ATF_CHECK(bpf_validate(insns, insn_count));
   1781  1.1  alnsn 
   1782  1.5  alnsn 	code = bpfjit_generate_code(NULL, insns, insn_count);
   1783  1.1  alnsn 	ATF_REQUIRE(code != NULL);
   1784  1.1  alnsn 
   1785  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 1, 1) != UINT32_C(0x71cbbbc3));
   1786  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 1, 1) == UINT32_C(0x0000a994));
   1787  1.1  alnsn 
   1788  1.1  alnsn 
   1789  1.1  alnsn 	bpfjit_free_code(code);
   1790  1.1  alnsn }
   1791  1.1  alnsn 
   1792  1.6  alnsn ATF_TC(libbpfjit_alu_neg);
   1793  1.6  alnsn ATF_TC_HEAD(libbpfjit_alu_neg, tc)
   1794  1.1  alnsn {
   1795  1.1  alnsn 	atf_tc_set_md_var(tc, "descr",
   1796  1.1  alnsn 	    "Test JIT compilation of BPF_ALU+BPF_NEG");
   1797  1.1  alnsn }
   1798  1.1  alnsn 
   1799  1.6  alnsn ATF_TC_BODY(libbpfjit_alu_neg, tc)
   1800  1.1  alnsn {
   1801  1.1  alnsn 	static struct bpf_insn insns[] = {
   1802  1.1  alnsn 		BPF_STMT(BPF_LD+BPF_IMM, 777),
   1803  1.1  alnsn 		BPF_STMT(BPF_ALU+BPF_NEG, 0),
   1804  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_A, 0)
   1805  1.1  alnsn 	};
   1806  1.1  alnsn 
   1807  1.2  rmind 	bpfjit_func_t code;
   1808  1.1  alnsn 	uint8_t pkt[1]; /* the program doesn't read any data */
   1809  1.1  alnsn 
   1810  1.1  alnsn 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
   1811  1.1  alnsn 
   1812  1.1  alnsn 	ATF_CHECK(bpf_validate(insns, insn_count));
   1813  1.1  alnsn 
   1814  1.5  alnsn 	code = bpfjit_generate_code(NULL, insns, insn_count);
   1815  1.1  alnsn 	ATF_REQUIRE(code != NULL);
   1816  1.1  alnsn 
   1817  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 1, 1) == 0u-777u);
   1818  1.1  alnsn 
   1819  1.1  alnsn 	bpfjit_free_code(code);
   1820  1.1  alnsn }
   1821  1.1  alnsn 
   1822  1.6  alnsn ATF_TC(libbpfjit_jmp_ja);
   1823  1.6  alnsn ATF_TC_HEAD(libbpfjit_jmp_ja, tc)
   1824  1.1  alnsn {
   1825  1.1  alnsn 	atf_tc_set_md_var(tc, "descr",
   1826  1.1  alnsn 	    "Test JIT compilation of BPF_JMP+BPF_JA");
   1827  1.1  alnsn }
   1828  1.1  alnsn 
   1829  1.6  alnsn ATF_TC_BODY(libbpfjit_jmp_ja, tc)
   1830  1.1  alnsn {
   1831  1.1  alnsn 	static struct bpf_insn insns[] = {
   1832  1.1  alnsn 		BPF_STMT(BPF_JMP+BPF_JA, 1),
   1833  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_K, 0),
   1834  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_K, UINT32_MAX),
   1835  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_K, 1),
   1836  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_K, 2),
   1837  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_K, 3),
   1838  1.1  alnsn 	};
   1839  1.1  alnsn 
   1840  1.2  rmind 	bpfjit_func_t code;
   1841  1.1  alnsn 	uint8_t pkt[1]; /* the program doesn't read any data */
   1842  1.1  alnsn 
   1843  1.1  alnsn 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
   1844  1.1  alnsn 
   1845  1.1  alnsn 	ATF_CHECK(bpf_validate(insns, insn_count));
   1846  1.1  alnsn 
   1847  1.5  alnsn 	code = bpfjit_generate_code(NULL, insns, insn_count);
   1848  1.1  alnsn 	ATF_REQUIRE(code != NULL);
   1849  1.1  alnsn 
   1850  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 1, 1) == UINT32_MAX);
   1851  1.1  alnsn 
   1852  1.1  alnsn 	bpfjit_free_code(code);
   1853  1.1  alnsn }
   1854  1.1  alnsn 
   1855  1.6  alnsn ATF_TC(libbpfjit_jmp_jgt_k);
   1856  1.6  alnsn ATF_TC_HEAD(libbpfjit_jmp_jgt_k, tc)
   1857  1.1  alnsn {
   1858  1.1  alnsn 	atf_tc_set_md_var(tc, "descr",
   1859  1.1  alnsn 	    "Test JIT compilation of BPF_JMP+BPF_JGT+BPF_K");
   1860  1.1  alnsn }
   1861  1.1  alnsn 
   1862  1.6  alnsn ATF_TC_BODY(libbpfjit_jmp_jgt_k, tc)
   1863  1.1  alnsn {
   1864  1.1  alnsn 	static struct bpf_insn insns[] = {
   1865  1.1  alnsn 		BPF_STMT(BPF_LD+BPF_W+BPF_LEN, 0),
   1866  1.1  alnsn 		BPF_JUMP(BPF_JMP+BPF_JGT+BPF_K, 7, 0, 1),
   1867  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_K, 0),
   1868  1.1  alnsn 		BPF_JUMP(BPF_JMP+BPF_JGT+BPF_K, 2, 2, 0),
   1869  1.1  alnsn 		BPF_JUMP(BPF_JMP+BPF_JGT+BPF_K, 9, 0, 0),
   1870  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_K, 1),
   1871  1.1  alnsn 		BPF_JUMP(BPF_JMP+BPF_JGT+BPF_K, 4, 1, 1),
   1872  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_K, 2),
   1873  1.1  alnsn 		BPF_JUMP(BPF_JMP+BPF_JGT+BPF_K, 6, 2, 3),
   1874  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_K, 3),
   1875  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_K, 4),
   1876  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_K, 5),
   1877  1.1  alnsn 		BPF_JUMP(BPF_JMP+BPF_JGT+BPF_K, 5, 3, 1),
   1878  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_K, 6),
   1879  1.1  alnsn 		BPF_JUMP(BPF_JMP+BPF_JGT+BPF_K, 0, 0, 0),
   1880  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_K, 7),
   1881  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_K, 8)
   1882  1.1  alnsn 	};
   1883  1.1  alnsn 
   1884  1.2  rmind 	bpfjit_func_t code;
   1885  1.1  alnsn 	uint8_t pkt[8]; /* the program doesn't read any data */
   1886  1.1  alnsn 
   1887  1.1  alnsn 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
   1888  1.1  alnsn 
   1889  1.1  alnsn 	ATF_CHECK(bpf_validate(insns, insn_count));
   1890  1.1  alnsn 
   1891  1.5  alnsn 	code = bpfjit_generate_code(NULL, insns, insn_count);
   1892  1.1  alnsn 	ATF_REQUIRE(code != NULL);
   1893  1.1  alnsn 
   1894  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 1, 1) == 1);
   1895  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 2, 2) == 1);
   1896  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 3, 3) == 7);
   1897  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 4, 4) == 7);
   1898  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 5, 5) == 7);
   1899  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 6, 6) == 8);
   1900  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 7, 7) == 5);
   1901  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 8, 8) == 0);
   1902  1.1  alnsn 
   1903  1.1  alnsn 	bpfjit_free_code(code);
   1904  1.1  alnsn }
   1905  1.1  alnsn 
   1906  1.6  alnsn ATF_TC(libbpfjit_jmp_jge_k);
   1907  1.6  alnsn ATF_TC_HEAD(libbpfjit_jmp_jge_k, tc)
   1908  1.1  alnsn {
   1909  1.1  alnsn 	atf_tc_set_md_var(tc, "descr",
   1910  1.1  alnsn 	    "Test JIT compilation of BPF_JMP+BPF_JGE+BPF_K");
   1911  1.1  alnsn }
   1912  1.1  alnsn 
   1913  1.6  alnsn ATF_TC_BODY(libbpfjit_jmp_jge_k, tc)
   1914  1.1  alnsn {
   1915  1.1  alnsn 	static struct bpf_insn insns[] = {
   1916  1.1  alnsn 		BPF_STMT(BPF_LD+BPF_W+BPF_LEN, 0),
   1917  1.1  alnsn 		BPF_JUMP(BPF_JMP+BPF_JGE+BPF_K, 8, 0, 1),
   1918  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_K, 0),
   1919  1.1  alnsn 		BPF_JUMP(BPF_JMP+BPF_JGE+BPF_K, 3, 2, 0),
   1920  1.1  alnsn 		BPF_JUMP(BPF_JMP+BPF_JGE+BPF_K, 9, 0, 0),
   1921  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_K, 1),
   1922  1.1  alnsn 		BPF_JUMP(BPF_JMP+BPF_JGE+BPF_K, 5, 1, 1),
   1923  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_K, 2),
   1924  1.1  alnsn 		BPF_JUMP(BPF_JMP+BPF_JGE+BPF_K, 7, 2, 3),
   1925  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_K, 3),
   1926  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_K, 4),
   1927  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_K, 5),
   1928  1.1  alnsn 		BPF_JUMP(BPF_JMP+BPF_JGE+BPF_K, 6, 3, 1),
   1929  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_K, 6),
   1930  1.1  alnsn 		BPF_JUMP(BPF_JMP+BPF_JGE+BPF_K, 1, 0, 0),
   1931  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_K, 7),
   1932  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_K, 8)
   1933  1.1  alnsn 	};
   1934  1.1  alnsn 
   1935  1.2  rmind 	bpfjit_func_t code;
   1936  1.1  alnsn 	uint8_t pkt[8]; /* the program doesn't read any data */
   1937  1.1  alnsn 
   1938  1.1  alnsn 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
   1939  1.1  alnsn 
   1940  1.1  alnsn 	ATF_CHECK(bpf_validate(insns, insn_count));
   1941  1.1  alnsn 
   1942  1.5  alnsn 	code = bpfjit_generate_code(NULL, insns, insn_count);
   1943  1.1  alnsn 	ATF_REQUIRE(code != NULL);
   1944  1.1  alnsn 
   1945  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 1, 1) == 1);
   1946  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 2, 2) == 1);
   1947  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 3, 3) == 7);
   1948  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 4, 4) == 7);
   1949  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 5, 5) == 7);
   1950  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 6, 6) == 8);
   1951  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 7, 7) == 5);
   1952  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 8, 8) == 0);
   1953  1.1  alnsn 
   1954  1.1  alnsn 	bpfjit_free_code(code);
   1955  1.1  alnsn }
   1956  1.1  alnsn 
   1957  1.6  alnsn ATF_TC(libbpfjit_jmp_jeq_k);
   1958  1.6  alnsn ATF_TC_HEAD(libbpfjit_jmp_jeq_k, tc)
   1959  1.1  alnsn {
   1960  1.1  alnsn 	atf_tc_set_md_var(tc, "descr",
   1961  1.1  alnsn 	    "Test JIT compilation of BPF_JMP+BPF_JEQ+BPF_K");
   1962  1.1  alnsn }
   1963  1.1  alnsn 
   1964  1.6  alnsn ATF_TC_BODY(libbpfjit_jmp_jeq_k, tc)
   1965  1.1  alnsn {
   1966  1.1  alnsn 	static struct bpf_insn insns[] = {
   1967  1.1  alnsn 		BPF_STMT(BPF_LD+BPF_W+BPF_LEN, 0),
   1968  1.1  alnsn 		BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, 8, 0, 1),
   1969  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_K, 0),
   1970  1.1  alnsn 		BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, 3, 1, 0),
   1971  1.1  alnsn 		BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, 9, 1, 1),
   1972  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_K, 1),
   1973  1.1  alnsn 		BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, 5, 1, 1),
   1974  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_K, 2),
   1975  1.1  alnsn 		BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, 7, 2, 3),
   1976  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_K, 3),
   1977  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_K, 4),
   1978  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_K, 5),
   1979  1.1  alnsn 		BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, 6, 3, 1),
   1980  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_K, 6),
   1981  1.1  alnsn 		BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, 1, 0, 0),
   1982  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_K, 7),
   1983  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_K, 8)
   1984  1.1  alnsn 	};
   1985  1.1  alnsn 
   1986  1.2  rmind 	bpfjit_func_t code;
   1987  1.1  alnsn 	uint8_t pkt[8]; /* the program doesn't read any data */
   1988  1.1  alnsn 
   1989  1.1  alnsn 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
   1990  1.1  alnsn 
   1991  1.1  alnsn 	ATF_CHECK(bpf_validate(insns, insn_count));
   1992  1.1  alnsn 
   1993  1.5  alnsn 	code = bpfjit_generate_code(NULL, insns, insn_count);
   1994  1.1  alnsn 	ATF_REQUIRE(code != NULL);
   1995  1.1  alnsn 
   1996  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 1, 1) == 7);
   1997  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 2, 2) == 7);
   1998  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 3, 3) == 1);
   1999  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 4, 4) == 7);
   2000  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 5, 5) == 7);
   2001  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 6, 6) == 8);
   2002  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 7, 7) == 5);
   2003  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 8, 8) == 0);
   2004  1.1  alnsn 
   2005  1.1  alnsn 	bpfjit_free_code(code);
   2006  1.1  alnsn }
   2007  1.1  alnsn 
   2008  1.6  alnsn ATF_TC(libbpfjit_jmp_jset_k);
   2009  1.6  alnsn ATF_TC_HEAD(libbpfjit_jmp_jset_k, tc)
   2010  1.1  alnsn {
   2011  1.1  alnsn 	atf_tc_set_md_var(tc, "descr",
   2012  1.1  alnsn 	    "Test JIT compilation of BPF_JMP+BPF_JSET+BPF_K");
   2013  1.1  alnsn }
   2014  1.1  alnsn 
   2015  1.6  alnsn ATF_TC_BODY(libbpfjit_jmp_jset_k, tc)
   2016  1.1  alnsn {
   2017  1.1  alnsn 	static struct bpf_insn insns[] = {
   2018  1.1  alnsn 		BPF_STMT(BPF_LD+BPF_W+BPF_LEN, 0),
   2019  1.1  alnsn 		BPF_JUMP(BPF_JMP+BPF_JSET+BPF_K, 8, 0, 1),
   2020  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_K, 0),
   2021  1.1  alnsn 		BPF_JUMP(BPF_JMP+BPF_JSET+BPF_K, 4, 2, 0),
   2022  1.1  alnsn 		BPF_JUMP(BPF_JMP+BPF_JSET+BPF_K, 3, 0, 0),
   2023  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_K, 1),
   2024  1.1  alnsn 		BPF_JUMP(BPF_JMP+BPF_JSET+BPF_K, 2, 1, 1),
   2025  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_K, 2),
   2026  1.1  alnsn 		BPF_JUMP(BPF_JMP+BPF_JSET+BPF_K, 1, 2, 3),
   2027  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_K, 3),
   2028  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_K, 4),
   2029  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_K, 5),
   2030  1.1  alnsn 		BPF_JUMP(BPF_JMP+BPF_JSET+BPF_K, 2, 3, 1),
   2031  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_K, 6),
   2032  1.1  alnsn 		BPF_JUMP(BPF_JMP+BPF_JSET+BPF_K, 7, 0, 0),
   2033  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_K, 7),
   2034  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_K, 8)
   2035  1.1  alnsn 	};
   2036  1.1  alnsn 
   2037  1.2  rmind 	bpfjit_func_t code;
   2038  1.1  alnsn 	uint8_t pkt[8]; /* the program doesn't read any data */
   2039  1.1  alnsn 
   2040  1.1  alnsn 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
   2041  1.1  alnsn 
   2042  1.1  alnsn 	ATF_CHECK(bpf_validate(insns, insn_count));
   2043  1.1  alnsn 
   2044  1.5  alnsn 	code = bpfjit_generate_code(NULL, insns, insn_count);
   2045  1.1  alnsn 	ATF_REQUIRE(code != NULL);
   2046  1.1  alnsn 
   2047  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 1, 1) == 1);
   2048  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 2, 2) == 1);
   2049  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 3, 3) == 1);
   2050  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 4, 4) == 7);
   2051  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 5, 5) == 5);
   2052  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 6, 6) == 8);
   2053  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 7, 7) == 5);
   2054  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 8, 8) == 0);
   2055  1.1  alnsn 
   2056  1.1  alnsn 	bpfjit_free_code(code);
   2057  1.1  alnsn }
   2058  1.1  alnsn 
   2059  1.6  alnsn ATF_TC(libbpfjit_jmp_modulo_k);
   2060  1.6  alnsn ATF_TC_HEAD(libbpfjit_jmp_modulo_k, tc)
   2061  1.1  alnsn {
   2062  1.1  alnsn 	atf_tc_set_md_var(tc, "descr",
   2063  1.1  alnsn 	    "Test JIT compilation of modulo logic of BPF_JMP+BPF_K operations");
   2064  1.1  alnsn }
   2065  1.1  alnsn 
   2066  1.6  alnsn ATF_TC_BODY(libbpfjit_jmp_modulo_k, tc)
   2067  1.1  alnsn {
   2068  1.1  alnsn 	static struct bpf_insn insns[] = {
   2069  1.1  alnsn 		BPF_STMT(BPF_LD+BPF_IMM, UINT32_C(0x7fffff77)),
   2070  1.1  alnsn 		BPF_STMT(BPF_ALU+BPF_LSH+BPF_K, 4),
   2071  1.1  alnsn 		BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, UINT32_C(0xfffff770), 1, 0),
   2072  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_K, 0),
   2073  1.1  alnsn 		BPF_JUMP(BPF_JMP+BPF_JGT+BPF_K, UINT32_C(0xfffff770), 0, 1),
   2074  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_K, 1),
   2075  1.1  alnsn 		BPF_JUMP(BPF_JMP+BPF_JGE+BPF_K, UINT32_C(0xfffff771), 0, 1),
   2076  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_K, 2),
   2077  1.1  alnsn 		BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, UINT32_C(0xfffff770), 0, 3),
   2078  1.1  alnsn 		BPF_JUMP(BPF_JMP+BPF_JGT+BPF_K, UINT32_C(0xfffff770), 2, 0),
   2079  1.1  alnsn 		BPF_JUMP(BPF_JMP+BPF_JGE+BPF_K, UINT32_C(0xfffff771), 1, 0),
   2080  1.1  alnsn 		BPF_STMT(BPF_JMP+BPF_JA, 1),
   2081  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_K, 3),
   2082  1.1  alnsn 
   2083  1.1  alnsn 		/* FFFFF770+FFFFF770 = 00000001,FFFFEEE0 */
   2084  1.1  alnsn 		BPF_STMT(BPF_ALU+BPF_ADD+BPF_K, UINT32_C(0xfffff770)),
   2085  1.1  alnsn 
   2086  1.1  alnsn 		BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, UINT32_C(0xffffeee0), 1, 0),
   2087  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_K, 4),
   2088  1.1  alnsn 		BPF_JUMP(BPF_JMP+BPF_JGT+BPF_K, UINT32_C(0xffffeee0), 0, 1),
   2089  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_K, 5),
   2090  1.1  alnsn 		BPF_JUMP(BPF_JMP+BPF_JGE+BPF_K, UINT32_C(0xffffeee1), 0, 1),
   2091  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_K, 6),
   2092  1.1  alnsn 		BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, UINT32_C(0xffffeee0), 0, 3),
   2093  1.1  alnsn 		BPF_JUMP(BPF_JMP+BPF_JGT+BPF_K, UINT32_C(0xffffeee0), 2, 0),
   2094  1.1  alnsn 		BPF_JUMP(BPF_JMP+BPF_JGE+BPF_K, UINT32_C(0xffffeee1), 1, 0),
   2095  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_K, UINT32_MAX),
   2096  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_K, 7)
   2097  1.1  alnsn 	};
   2098  1.1  alnsn 
   2099  1.2  rmind 	bpfjit_func_t code;
   2100  1.1  alnsn 	uint8_t pkt[1]; /* the program doesn't read any data */
   2101  1.1  alnsn 
   2102  1.1  alnsn 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
   2103  1.1  alnsn 
   2104  1.1  alnsn 	ATF_CHECK(bpf_validate(insns, insn_count));
   2105  1.1  alnsn 
   2106  1.5  alnsn 	code = bpfjit_generate_code(NULL, insns, insn_count);
   2107  1.1  alnsn 	ATF_REQUIRE(code != NULL);
   2108  1.1  alnsn 
   2109  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 1, 1) == UINT32_MAX);
   2110  1.1  alnsn 
   2111  1.1  alnsn 	bpfjit_free_code(code);
   2112  1.1  alnsn }
   2113  1.1  alnsn 
   2114  1.6  alnsn ATF_TC(libbpfjit_jmp_jgt_x);
   2115  1.6  alnsn ATF_TC_HEAD(libbpfjit_jmp_jgt_x, tc)
   2116  1.1  alnsn {
   2117  1.1  alnsn 	atf_tc_set_md_var(tc, "descr",
   2118  1.1  alnsn 	    "Test JIT compilation of BPF_JMP+BPF_JGT+BPF_X");
   2119  1.1  alnsn }
   2120  1.1  alnsn 
   2121  1.6  alnsn ATF_TC_BODY(libbpfjit_jmp_jgt_x, tc)
   2122  1.1  alnsn {
   2123  1.1  alnsn 	static struct bpf_insn insns[] = {
   2124  1.1  alnsn 		BPF_STMT(BPF_LD+BPF_W+BPF_LEN, 0),
   2125  1.1  alnsn 		BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 7),
   2126  1.1  alnsn 		BPF_JUMP(BPF_JMP+BPF_JGT+BPF_X, 0, 0, 1),
   2127  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_K, 0),
   2128  1.1  alnsn 		BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 2),
   2129  1.1  alnsn 		BPF_JUMP(BPF_JMP+BPF_JGT+BPF_X, 0, 3, 0),
   2130  1.1  alnsn 		BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 9),
   2131  1.1  alnsn 		BPF_JUMP(BPF_JMP+BPF_JGT+BPF_X, 0, 0, 0),
   2132  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_K, 1),
   2133  1.1  alnsn 		BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 4),
   2134  1.1  alnsn 		BPF_JUMP(BPF_JMP+BPF_JGT+BPF_X, 0, 1, 1),
   2135  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_K, 2),
   2136  1.1  alnsn 		BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 6),
   2137  1.1  alnsn 		BPF_JUMP(BPF_JMP+BPF_JGT+BPF_X, 0, 2, 3),
   2138  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_K, 3),
   2139  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_K, 4),
   2140  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_K, 5),
   2141  1.1  alnsn 		BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 5),
   2142  1.1  alnsn 		BPF_JUMP(BPF_JMP+BPF_JGT+BPF_X, 0, 4, 1),
   2143  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_K, 6),
   2144  1.1  alnsn 		BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 0),
   2145  1.1  alnsn 		BPF_JUMP(BPF_JMP+BPF_JGT+BPF_X, 0, 0, 0),
   2146  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_K, 7),
   2147  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_K, 8)
   2148  1.1  alnsn 	};
   2149  1.1  alnsn 
   2150  1.2  rmind 	bpfjit_func_t code;
   2151  1.1  alnsn 	uint8_t pkt[8]; /* the program doesn't read any data */
   2152  1.1  alnsn 
   2153  1.1  alnsn 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
   2154  1.1  alnsn 
   2155  1.1  alnsn 	ATF_CHECK(bpf_validate(insns, insn_count));
   2156  1.1  alnsn 
   2157  1.5  alnsn 	code = bpfjit_generate_code(NULL, insns, insn_count);
   2158  1.1  alnsn 	ATF_REQUIRE(code != NULL);
   2159  1.1  alnsn 
   2160  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 1, 1) == 1);
   2161  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 2, 2) == 1);
   2162  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 3, 3) == 7);
   2163  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 4, 4) == 7);
   2164  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 5, 5) == 7);
   2165  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 6, 6) == 8);
   2166  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 7, 7) == 5);
   2167  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 8, 8) == 0);
   2168  1.1  alnsn 
   2169  1.1  alnsn 	bpfjit_free_code(code);
   2170  1.1  alnsn }
   2171  1.1  alnsn 
   2172  1.6  alnsn ATF_TC(libbpfjit_jmp_jge_x);
   2173  1.6  alnsn ATF_TC_HEAD(libbpfjit_jmp_jge_x, tc)
   2174  1.1  alnsn {
   2175  1.1  alnsn 	atf_tc_set_md_var(tc, "descr",
   2176  1.1  alnsn 	    "Test JIT compilation of BPF_JMP+BPF_JGE+BPF_X");
   2177  1.1  alnsn }
   2178  1.1  alnsn 
   2179  1.6  alnsn ATF_TC_BODY(libbpfjit_jmp_jge_x, tc)
   2180  1.1  alnsn {
   2181  1.1  alnsn 	static struct bpf_insn insns[] = {
   2182  1.1  alnsn 		BPF_STMT(BPF_LD+BPF_W+BPF_LEN, 0),
   2183  1.1  alnsn 		BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 8),
   2184  1.1  alnsn 		BPF_JUMP(BPF_JMP+BPF_JGE+BPF_X, 0, 0, 1),
   2185  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_K, 0),
   2186  1.1  alnsn 		BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 3),
   2187  1.1  alnsn 		BPF_JUMP(BPF_JMP+BPF_JGE+BPF_X, 0, 3, 0),
   2188  1.1  alnsn 		BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 9),
   2189  1.1  alnsn 		BPF_JUMP(BPF_JMP+BPF_JGE+BPF_X, 0, 0, 0),
   2190  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_K, 1),
   2191  1.1  alnsn 		BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 5),
   2192  1.1  alnsn 		BPF_JUMP(BPF_JMP+BPF_JGE+BPF_X, 0, 1, 1),
   2193  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_K, 2),
   2194  1.1  alnsn 		BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 7),
   2195  1.1  alnsn 		BPF_JUMP(BPF_JMP+BPF_JGE+BPF_X, 0, 2, 3),
   2196  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_K, 3),
   2197  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_K, 4),
   2198  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_K, 5),
   2199  1.1  alnsn 		BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 6),
   2200  1.1  alnsn 		BPF_JUMP(BPF_JMP+BPF_JGE+BPF_X, 0, 4, 1),
   2201  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_K, 6),
   2202  1.1  alnsn 		BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 1),
   2203  1.1  alnsn 		BPF_JUMP(BPF_JMP+BPF_JGE+BPF_X, 0, 0, 0),
   2204  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_K, 7),
   2205  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_K, 8)
   2206  1.1  alnsn 	};
   2207  1.1  alnsn 
   2208  1.2  rmind 	bpfjit_func_t code;
   2209  1.1  alnsn 	uint8_t pkt[8]; /* the program doesn't read any data */
   2210  1.1  alnsn 
   2211  1.1  alnsn 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
   2212  1.1  alnsn 
   2213  1.1  alnsn 	ATF_CHECK(bpf_validate(insns, insn_count));
   2214  1.1  alnsn 
   2215  1.5  alnsn 	code = bpfjit_generate_code(NULL, insns, insn_count);
   2216  1.1  alnsn 	ATF_REQUIRE(code != NULL);
   2217  1.1  alnsn 
   2218  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 1, 1) == 1);
   2219  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 2, 2) == 1);
   2220  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 3, 3) == 7);
   2221  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 4, 4) == 7);
   2222  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 5, 5) == 7);
   2223  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 6, 6) == 8);
   2224  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 7, 7) == 5);
   2225  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 8, 8) == 0);
   2226  1.1  alnsn 
   2227  1.1  alnsn 	bpfjit_free_code(code);
   2228  1.1  alnsn }
   2229  1.1  alnsn 
   2230  1.6  alnsn ATF_TC(libbpfjit_jmp_jeq_x);
   2231  1.6  alnsn ATF_TC_HEAD(libbpfjit_jmp_jeq_x, tc)
   2232  1.1  alnsn {
   2233  1.1  alnsn 	atf_tc_set_md_var(tc, "descr",
   2234  1.1  alnsn 	    "Test JIT compilation of BPF_JMP+BPF_JEQ+BPF_X");
   2235  1.1  alnsn }
   2236  1.1  alnsn 
   2237  1.6  alnsn ATF_TC_BODY(libbpfjit_jmp_jeq_x, tc)
   2238  1.1  alnsn {
   2239  1.1  alnsn 	static struct bpf_insn insns[] = {
   2240  1.1  alnsn 		BPF_STMT(BPF_LD+BPF_W+BPF_LEN, 0),
   2241  1.1  alnsn 		BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 8),
   2242  1.1  alnsn 		BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_X, 0, 0, 1),
   2243  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_K, 0),
   2244  1.1  alnsn 		BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 3),
   2245  1.1  alnsn 		BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_X, 0, 2, 0),
   2246  1.1  alnsn 		BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 9),
   2247  1.1  alnsn 		BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_X, 0, 1, 1),
   2248  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_K, 1),
   2249  1.1  alnsn 		BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 5),
   2250  1.1  alnsn 		BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_X, 0, 1, 1),
   2251  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_K, 2),
   2252  1.1  alnsn 		BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 7),
   2253  1.1  alnsn 		BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_X, 0, 2, 3),
   2254  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_K, 3),
   2255  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_K, 4),
   2256  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_K, 5),
   2257  1.1  alnsn 		BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 6),
   2258  1.1  alnsn 		BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_X, 0, 3, 1),
   2259  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_K, 6),
   2260  1.1  alnsn 		BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_X, 1, 0, 0),
   2261  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_K, 7),
   2262  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_K, 8)
   2263  1.1  alnsn 	};
   2264  1.1  alnsn 
   2265  1.2  rmind 	bpfjit_func_t code;
   2266  1.1  alnsn 	uint8_t pkt[8]; /* the program doesn't read any data */
   2267  1.1  alnsn 
   2268  1.1  alnsn 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
   2269  1.1  alnsn 
   2270  1.1  alnsn 	ATF_CHECK(bpf_validate(insns, insn_count));
   2271  1.1  alnsn 
   2272  1.5  alnsn 	code = bpfjit_generate_code(NULL, insns, insn_count);
   2273  1.1  alnsn 	ATF_REQUIRE(code != NULL);
   2274  1.1  alnsn 
   2275  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 1, 1) == 7);
   2276  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 2, 2) == 7);
   2277  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 3, 3) == 1);
   2278  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 4, 4) == 7);
   2279  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 5, 5) == 7);
   2280  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 6, 6) == 8);
   2281  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 7, 7) == 5);
   2282  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 8, 8) == 0);
   2283  1.1  alnsn 
   2284  1.1  alnsn 	bpfjit_free_code(code);
   2285  1.1  alnsn }
   2286  1.1  alnsn 
   2287  1.6  alnsn ATF_TC(libbpfjit_jmp_jset_x);
   2288  1.6  alnsn ATF_TC_HEAD(libbpfjit_jmp_jset_x, tc)
   2289  1.1  alnsn {
   2290  1.1  alnsn 	atf_tc_set_md_var(tc, "descr",
   2291  1.1  alnsn 	    "Test JIT compilation of BPF_JMP+BPF_JSET+BPF_X");
   2292  1.1  alnsn }
   2293  1.1  alnsn 
   2294  1.6  alnsn ATF_TC_BODY(libbpfjit_jmp_jset_x, tc)
   2295  1.1  alnsn {
   2296  1.1  alnsn 	static struct bpf_insn insns[] = {
   2297  1.1  alnsn 		BPF_STMT(BPF_LD+BPF_W+BPF_LEN, 0),
   2298  1.1  alnsn 		BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 8),
   2299  1.1  alnsn 		BPF_JUMP(BPF_JMP+BPF_JSET+BPF_X, 0, 0, 1),
   2300  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_K, 0),
   2301  1.1  alnsn 		BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 4),
   2302  1.1  alnsn 		BPF_JUMP(BPF_JMP+BPF_JSET+BPF_X, 0, 2, 0),
   2303  1.1  alnsn 		BPF_JUMP(BPF_JMP+BPF_JSET+BPF_X, 3, 0, 0),
   2304  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_K, 1),
   2305  1.1  alnsn 		BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 2),
   2306  1.1  alnsn 		BPF_JUMP(BPF_JMP+BPF_JSET+BPF_X, 0, 1, 1),
   2307  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_K, 2),
   2308  1.1  alnsn 		BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 1),
   2309  1.1  alnsn 		BPF_JUMP(BPF_JMP+BPF_JSET+BPF_X, 0, 2, 3),
   2310  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_K, 3),
   2311  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_K, 4),
   2312  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_K, 5),
   2313  1.1  alnsn 		BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 2),
   2314  1.1  alnsn 		BPF_JUMP(BPF_JMP+BPF_JSET+BPF_X, 0, 4, 1),
   2315  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_K, 6),
   2316  1.1  alnsn 		BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 7),
   2317  1.1  alnsn 		BPF_JUMP(BPF_JMP+BPF_JSET+BPF_X, 0, 0, 0),
   2318  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_K, 7),
   2319  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_K, 8)
   2320  1.1  alnsn 	};
   2321  1.1  alnsn 
   2322  1.2  rmind 	bpfjit_func_t code;
   2323  1.1  alnsn 	uint8_t pkt[8]; /* the program doesn't read any data */
   2324  1.1  alnsn 
   2325  1.1  alnsn 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
   2326  1.1  alnsn 
   2327  1.1  alnsn 	ATF_CHECK(bpf_validate(insns, insn_count));
   2328  1.1  alnsn 
   2329  1.5  alnsn 	code = bpfjit_generate_code(NULL, insns, insn_count);
   2330  1.1  alnsn 	ATF_REQUIRE(code != NULL);
   2331  1.1  alnsn 
   2332  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 1, 1) == 1);
   2333  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 2, 2) == 1);
   2334  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 3, 3) == 1);
   2335  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 4, 4) == 7);
   2336  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 5, 5) == 5);
   2337  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 6, 6) == 8);
   2338  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 7, 7) == 5);
   2339  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 8, 8) == 0);
   2340  1.1  alnsn 
   2341  1.1  alnsn 	bpfjit_free_code(code);
   2342  1.1  alnsn }
   2343  1.1  alnsn 
   2344  1.6  alnsn ATF_TC(libbpfjit_jmp_modulo_x);
   2345  1.6  alnsn ATF_TC_HEAD(libbpfjit_jmp_modulo_x, tc)
   2346  1.1  alnsn {
   2347  1.1  alnsn 	atf_tc_set_md_var(tc, "descr",
   2348  1.1  alnsn 	    "Test JIT compilation of modulo logic of BPF_JMP+BPF_X operations");
   2349  1.1  alnsn }
   2350  1.1  alnsn 
   2351  1.6  alnsn ATF_TC_BODY(libbpfjit_jmp_modulo_x, tc)
   2352  1.1  alnsn {
   2353  1.1  alnsn 	static struct bpf_insn insns[] = {
   2354  1.1  alnsn 		BPF_STMT(BPF_LD+BPF_IMM, UINT32_C(0x7fffff77)),
   2355  1.1  alnsn 		/* FFFFF770 << 4 = FFFFF770 */
   2356  1.1  alnsn 		BPF_STMT(BPF_ALU+BPF_LSH+BPF_K, 4),
   2357  1.1  alnsn 
   2358  1.1  alnsn 		BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, UINT32_C(0xfffff770)),
   2359  1.1  alnsn 		BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_X, 0, 1, 0),
   2360  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_K, 0),
   2361  1.1  alnsn 		BPF_JUMP(BPF_JMP+BPF_JGT+BPF_X, 0, 0, 1),
   2362  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_K, 1),
   2363  1.1  alnsn 		BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, UINT32_C(0xfffff771)),
   2364  1.1  alnsn 		BPF_JUMP(BPF_JMP+BPF_JGE+BPF_X, 0, 0, 1),
   2365  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_K, 2),
   2366  1.1  alnsn 		BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, UINT32_C(0xfffff770)),
   2367  1.1  alnsn 		BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_X, 0, 0, 4),
   2368  1.1  alnsn 		BPF_JUMP(BPF_JMP+BPF_JGT+BPF_X, 0, 3, 0),
   2369  1.1  alnsn 		BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, UINT32_C(0xfffff771)),
   2370  1.1  alnsn 		BPF_JUMP(BPF_JMP+BPF_JGE+BPF_X, 0, 1, 0),
   2371  1.1  alnsn 		BPF_STMT(BPF_JMP+BPF_JA, 1),
   2372  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_K, 3),
   2373  1.1  alnsn 
   2374  1.1  alnsn 		/* FFFFF770+FFFFF770 = 00000001,FFFFEEE0 */
   2375  1.1  alnsn 		BPF_STMT(BPF_ALU+BPF_ADD+BPF_K, UINT32_C(0xfffff770)),
   2376  1.1  alnsn 
   2377  1.1  alnsn 		BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, UINT32_C(0xffffeee0)),
   2378  1.1  alnsn 		BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_X, 0, 1, 0),
   2379  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_K, 4),
   2380  1.1  alnsn 		BPF_JUMP(BPF_JMP+BPF_JGT+BPF_X, 0, 0, 1),
   2381  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_K, 5),
   2382  1.1  alnsn 		BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, UINT32_C(0xffffeee1)),
   2383  1.1  alnsn 		BPF_JUMP(BPF_JMP+BPF_JGE+BPF_X, 0, 0, 1),
   2384  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_K, 6),
   2385  1.1  alnsn 		BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, UINT32_C(0xffffeee0)),
   2386  1.1  alnsn 		BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_X, 0, 0, 4),
   2387  1.1  alnsn 		BPF_JUMP(BPF_JMP+BPF_JGT+BPF_X, 0, 3, 0),
   2388  1.1  alnsn 		BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, UINT32_C(0xffffeee1)),
   2389  1.1  alnsn 		BPF_JUMP(BPF_JMP+BPF_JGE+BPF_X, 0, 1, 0),
   2390  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_K, UINT32_MAX),
   2391  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_K, 7)
   2392  1.1  alnsn 	};
   2393  1.1  alnsn 
   2394  1.2  rmind 	bpfjit_func_t code;
   2395  1.1  alnsn 	uint8_t pkt[1]; /* the program doesn't read any data */
   2396  1.1  alnsn 
   2397  1.1  alnsn 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
   2398  1.1  alnsn 
   2399  1.1  alnsn 	ATF_CHECK(bpf_validate(insns, insn_count));
   2400  1.1  alnsn 
   2401  1.5  alnsn 	code = bpfjit_generate_code(NULL, insns, insn_count);
   2402  1.1  alnsn 	ATF_REQUIRE(code != NULL);
   2403  1.1  alnsn 
   2404  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 1, 1) == UINT32_MAX);
   2405  1.1  alnsn 
   2406  1.1  alnsn 	bpfjit_free_code(code);
   2407  1.1  alnsn }
   2408  1.1  alnsn 
   2409  1.6  alnsn ATF_TC(libbpfjit_ld_abs);
   2410  1.6  alnsn ATF_TC_HEAD(libbpfjit_ld_abs, tc)
   2411  1.1  alnsn {
   2412  1.1  alnsn 	atf_tc_set_md_var(tc, "descr",
   2413  1.1  alnsn 	    "Test JIT compilation of BPF_LD+BPF_ABS");
   2414  1.1  alnsn }
   2415  1.1  alnsn 
   2416  1.6  alnsn ATF_TC_BODY(libbpfjit_ld_abs, tc)
   2417  1.1  alnsn {
   2418  1.1  alnsn 	static struct bpf_insn insns[3][2] = {
   2419  1.1  alnsn 		{
   2420  1.1  alnsn 			BPF_STMT(BPF_LD+BPF_B+BPF_ABS, 5),
   2421  1.1  alnsn 			BPF_STMT(BPF_RET+BPF_A, 0)
   2422  1.1  alnsn 		},
   2423  1.1  alnsn 		{
   2424  1.1  alnsn 			BPF_STMT(BPF_LD+BPF_H+BPF_ABS, 5),
   2425  1.1  alnsn 			BPF_STMT(BPF_RET+BPF_A, 0)
   2426  1.1  alnsn 		},
   2427  1.1  alnsn 		{
   2428  1.1  alnsn 			BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 5),
   2429  1.1  alnsn 			BPF_STMT(BPF_RET+BPF_A, 0)
   2430  1.1  alnsn 		}
   2431  1.1  alnsn 	};
   2432  1.1  alnsn 
   2433  1.1  alnsn 	static size_t lengths[3] = { 1, 2, 4 };
   2434  1.1  alnsn 	static unsigned int expected[3] = { 0xde, 0xdead, 0xdeadbeef };
   2435  1.1  alnsn 
   2436  1.1  alnsn 	size_t i, l;
   2437  1.1  alnsn 	uint8_t *pkt = deadbeef_at_5;
   2438  1.1  alnsn 	size_t pktsize = sizeof(deadbeef_at_5);
   2439  1.1  alnsn 
   2440  1.1  alnsn 	size_t insn_count = sizeof(insns[0]) / sizeof(insns[0][0]);
   2441  1.1  alnsn 
   2442  1.1  alnsn 	for (i = 0; i < 3; i++) {
   2443  1.2  rmind 		bpfjit_func_t code;
   2444  1.1  alnsn 
   2445  1.1  alnsn 		ATF_CHECK(bpf_validate(insns[i], insn_count));
   2446  1.1  alnsn 
   2447  1.5  alnsn 		code = bpfjit_generate_code(NULL, insns[i], insn_count);
   2448  1.1  alnsn 		ATF_REQUIRE(code != NULL);
   2449  1.1  alnsn 
   2450  1.6  alnsn 		for (l = 1; l < 5 + lengths[i]; l++) {
   2451  1.5  alnsn 			ATF_CHECK(jitcall(code, pkt, l, l) == 0);
   2452  1.5  alnsn 			ATF_CHECK(jitcall(code, pkt, pktsize, l) == 0);
   2453  1.1  alnsn 		}
   2454  1.1  alnsn 
   2455  1.1  alnsn 		l = 5 + lengths[i];
   2456  1.5  alnsn 		ATF_CHECK(jitcall(code, pkt, l, l) == expected[i]);
   2457  1.5  alnsn 		ATF_CHECK(jitcall(code, pkt, pktsize, l) == expected[i]);
   2458  1.1  alnsn 
   2459  1.1  alnsn 		l = pktsize;
   2460  1.5  alnsn 		ATF_CHECK(jitcall(code, pkt, l, l) == expected[i]);
   2461  1.1  alnsn 
   2462  1.1  alnsn 		bpfjit_free_code(code);
   2463  1.1  alnsn 	}
   2464  1.1  alnsn }
   2465  1.1  alnsn 
   2466  1.6  alnsn ATF_TC(libbpfjit_ld_abs_k_overflow);
   2467  1.6  alnsn ATF_TC_HEAD(libbpfjit_ld_abs_k_overflow, tc)
   2468  1.1  alnsn {
   2469  1.1  alnsn 	atf_tc_set_md_var(tc, "descr",
   2470  1.1  alnsn 	    "Test JIT compilation of BPF_LD+BPF_ABS with overflow in k+4");
   2471  1.1  alnsn }
   2472  1.1  alnsn 
   2473  1.6  alnsn ATF_TC_BODY(libbpfjit_ld_abs_k_overflow, tc)
   2474  1.1  alnsn {
   2475  1.1  alnsn 	static struct bpf_insn insns[12][3] = {
   2476  1.1  alnsn 		{
   2477  1.1  alnsn 			BPF_STMT(BPF_LD+BPF_H+BPF_ABS, UINT32_MAX),
   2478  1.1  alnsn 			BPF_STMT(BPF_LD+BPF_B+BPF_ABS, 7),
   2479  1.1  alnsn 			BPF_STMT(BPF_RET+BPF_K, 1)
   2480  1.1  alnsn 		},
   2481  1.1  alnsn 		{
   2482  1.1  alnsn 			BPF_STMT(BPF_LD+BPF_H+BPF_ABS, UINT32_MAX - 1),
   2483  1.1  alnsn 			BPF_STMT(BPF_LD+BPF_B+BPF_ABS, 7),
   2484  1.1  alnsn 			BPF_STMT(BPF_RET+BPF_K, 1)
   2485  1.1  alnsn 		},
   2486  1.1  alnsn 		{
   2487  1.1  alnsn 			BPF_STMT(BPF_LD+BPF_W+BPF_ABS, UINT32_MAX),
   2488  1.1  alnsn 			BPF_STMT(BPF_LD+BPF_B+BPF_ABS, 7),
   2489  1.1  alnsn 			BPF_STMT(BPF_RET+BPF_K, 1)
   2490  1.1  alnsn 		},
   2491  1.1  alnsn 		{
   2492  1.1  alnsn 			BPF_STMT(BPF_LD+BPF_W+BPF_ABS, UINT32_MAX - 1),
   2493  1.1  alnsn 			BPF_STMT(BPF_LD+BPF_B+BPF_ABS, 7),
   2494  1.1  alnsn 			BPF_STMT(BPF_RET+BPF_K, 1)
   2495  1.1  alnsn 		},
   2496  1.1  alnsn 		{
   2497  1.1  alnsn 			BPF_STMT(BPF_LD+BPF_W+BPF_ABS, UINT32_MAX - 2),
   2498  1.1  alnsn 			BPF_STMT(BPF_LD+BPF_B+BPF_ABS, 7),
   2499  1.1  alnsn 			BPF_STMT(BPF_RET+BPF_K, 1)
   2500  1.1  alnsn 		},
   2501  1.1  alnsn 		{
   2502  1.1  alnsn 			BPF_STMT(BPF_LD+BPF_W+BPF_ABS, UINT32_MAX - 3),
   2503  1.1  alnsn 			BPF_STMT(BPF_LD+BPF_B+BPF_ABS, 7),
   2504  1.1  alnsn 			BPF_STMT(BPF_RET+BPF_K, 1)
   2505  1.1  alnsn 		},
   2506  1.1  alnsn 		{
   2507  1.1  alnsn 			BPF_STMT(BPF_LD+BPF_B+BPF_ABS, 7),
   2508  1.1  alnsn 			BPF_STMT(BPF_LD+BPF_H+BPF_ABS, UINT32_MAX),
   2509  1.1  alnsn 			BPF_STMT(BPF_RET+BPF_K, 1)
   2510  1.1  alnsn 		},
   2511  1.1  alnsn 		{
   2512  1.1  alnsn 			BPF_STMT(BPF_LD+BPF_B+BPF_ABS, 7),
   2513  1.1  alnsn 			BPF_STMT(BPF_LD+BPF_H+BPF_ABS, UINT32_MAX - 1),
   2514  1.1  alnsn 			BPF_STMT(BPF_RET+BPF_K, 1)
   2515  1.1  alnsn 		},
   2516  1.1  alnsn 		{
   2517  1.1  alnsn 			BPF_STMT(BPF_LD+BPF_B+BPF_ABS, 7),
   2518  1.1  alnsn 			BPF_STMT(BPF_LD+BPF_W+BPF_ABS, UINT32_MAX),
   2519  1.1  alnsn 			BPF_STMT(BPF_RET+BPF_K, 1)
   2520  1.1  alnsn 		},
   2521  1.1  alnsn 		{
   2522  1.1  alnsn 			BPF_STMT(BPF_LD+BPF_B+BPF_ABS, 7),
   2523  1.1  alnsn 			BPF_STMT(BPF_LD+BPF_W+BPF_ABS, UINT32_MAX - 1),
   2524  1.1  alnsn 			BPF_STMT(BPF_RET+BPF_K, 1)
   2525  1.1  alnsn 		},
   2526  1.1  alnsn 		{
   2527  1.1  alnsn 			BPF_STMT(BPF_LD+BPF_B+BPF_ABS, 7),
   2528  1.1  alnsn 			BPF_STMT(BPF_LD+BPF_W+BPF_ABS, UINT32_MAX - 2),
   2529  1.1  alnsn 			BPF_STMT(BPF_RET+BPF_K, 1)
   2530  1.1  alnsn 		},
   2531  1.1  alnsn 		{
   2532  1.1  alnsn 			BPF_STMT(BPF_LD+BPF_B+BPF_ABS, 7),
   2533  1.1  alnsn 			BPF_STMT(BPF_LD+BPF_W+BPF_ABS, UINT32_MAX - 3),
   2534  1.1  alnsn 			BPF_STMT(BPF_RET+BPF_K, 1)
   2535  1.1  alnsn 		}
   2536  1.1  alnsn 	};
   2537  1.1  alnsn 
   2538  1.1  alnsn 	int i;
   2539  1.1  alnsn 	uint8_t pkt[8] = { 0 };
   2540  1.1  alnsn 
   2541  1.1  alnsn 	size_t insn_count = sizeof(insns[0]) / sizeof(insns[0][0]);
   2542  1.1  alnsn 
   2543  1.1  alnsn 	for (i = 0; i < 3; i++) {
   2544  1.2  rmind 		bpfjit_func_t code;
   2545  1.1  alnsn 
   2546  1.1  alnsn 		ATF_CHECK(bpf_validate(insns[i], insn_count));
   2547  1.1  alnsn 
   2548  1.5  alnsn 		code = bpfjit_generate_code(NULL, insns[i], insn_count);
   2549  1.1  alnsn 		ATF_REQUIRE(code != NULL);
   2550  1.1  alnsn 
   2551  1.5  alnsn 		ATF_CHECK(jitcall(code, pkt, 8, 8) == 0);
   2552  1.1  alnsn 
   2553  1.1  alnsn 		bpfjit_free_code(code);
   2554  1.1  alnsn 	}
   2555  1.1  alnsn }
   2556  1.1  alnsn 
   2557  1.6  alnsn ATF_TC(libbpfjit_ld_ind);
   2558  1.6  alnsn ATF_TC_HEAD(libbpfjit_ld_ind, tc)
   2559  1.1  alnsn {
   2560  1.1  alnsn 	atf_tc_set_md_var(tc, "descr",
   2561  1.1  alnsn 	    "Test JIT compilation of BPF_LD+BPF_IND");
   2562  1.1  alnsn }
   2563  1.1  alnsn 
   2564  1.6  alnsn ATF_TC_BODY(libbpfjit_ld_ind, tc)
   2565  1.1  alnsn {
   2566  1.1  alnsn 	static struct bpf_insn insns[6][3] = {
   2567  1.1  alnsn 		{
   2568  1.1  alnsn 			BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 3),
   2569  1.1  alnsn 			BPF_STMT(BPF_LD+BPF_B+BPF_IND, 2),
   2570  1.1  alnsn 			BPF_STMT(BPF_RET+BPF_A, 0)
   2571  1.1  alnsn 		},
   2572  1.1  alnsn 		{
   2573  1.1  alnsn 			BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 3),
   2574  1.1  alnsn 			BPF_STMT(BPF_LD+BPF_H+BPF_IND, 2),
   2575  1.1  alnsn 			BPF_STMT(BPF_RET+BPF_A, 0)
   2576  1.1  alnsn 		},
   2577  1.1  alnsn 		{
   2578  1.1  alnsn 			BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 3),
   2579  1.1  alnsn 			BPF_STMT(BPF_LD+BPF_W+BPF_IND, 2),
   2580  1.1  alnsn 			BPF_STMT(BPF_RET+BPF_A, 0)
   2581  1.1  alnsn 		},
   2582  1.1  alnsn 		{
   2583  1.1  alnsn 			BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 5),
   2584  1.1  alnsn 			BPF_STMT(BPF_LD+BPF_B+BPF_IND, 0),
   2585  1.1  alnsn 			BPF_STMT(BPF_RET+BPF_A, 0)
   2586  1.1  alnsn 		},
   2587  1.1  alnsn 		{
   2588  1.1  alnsn 			BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 5),
   2589  1.1  alnsn 			BPF_STMT(BPF_LD+BPF_H+BPF_IND, 0),
   2590  1.1  alnsn 			BPF_STMT(BPF_RET+BPF_A, 0)
   2591  1.1  alnsn 		},
   2592  1.1  alnsn 		{
   2593  1.1  alnsn 			BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 5),
   2594  1.1  alnsn 			BPF_STMT(BPF_LD+BPF_W+BPF_IND, 0),
   2595  1.1  alnsn 			BPF_STMT(BPF_RET+BPF_A, 0)
   2596  1.1  alnsn 		}
   2597  1.1  alnsn 	};
   2598  1.1  alnsn 
   2599  1.1  alnsn 	static size_t lengths[6] = { 1, 2, 4, 1, 2, 4 };
   2600  1.1  alnsn 
   2601  1.1  alnsn 	static unsigned int expected[6] = {
   2602  1.1  alnsn 		0xde, 0xdead, 0xdeadbeef,
   2603  1.1  alnsn 		0xde, 0xdead, 0xdeadbeef
   2604  1.1  alnsn 	};
   2605  1.1  alnsn 
   2606  1.1  alnsn 	size_t i, l;
   2607  1.1  alnsn 	uint8_t *pkt = deadbeef_at_5;
   2608  1.1  alnsn 	size_t pktsize = sizeof(deadbeef_at_5);
   2609  1.1  alnsn 
   2610  1.1  alnsn 	size_t insn_count = sizeof(insns[0]) / sizeof(insns[0][0]);
   2611  1.1  alnsn 
   2612  1.1  alnsn 	for (i = 0; i < 3; i++) {
   2613  1.2  rmind 		bpfjit_func_t code;
   2614  1.1  alnsn 
   2615  1.1  alnsn 		ATF_CHECK(bpf_validate(insns[i], insn_count));
   2616  1.1  alnsn 
   2617  1.5  alnsn 		code = bpfjit_generate_code(NULL, insns[i], insn_count);
   2618  1.1  alnsn 		ATF_REQUIRE(code != NULL);
   2619  1.1  alnsn 
   2620  1.6  alnsn 		for (l = 1; l < 5 + lengths[i]; l++) {
   2621  1.5  alnsn 			ATF_CHECK(jitcall(code, pkt, l, l) == 0);
   2622  1.5  alnsn 			ATF_CHECK(jitcall(code, pkt, pktsize, l) == 0);
   2623  1.1  alnsn 		}
   2624  1.1  alnsn 
   2625  1.1  alnsn 		l = 5 + lengths[i];
   2626  1.5  alnsn 		ATF_CHECK(jitcall(code, pkt, l, l) == expected[i]);
   2627  1.5  alnsn 		ATF_CHECK(jitcall(code, pkt, pktsize, l) == expected[i]);
   2628  1.1  alnsn 
   2629  1.1  alnsn 		l = pktsize;
   2630  1.5  alnsn 		ATF_CHECK(jitcall(code, pkt, l, l) == expected[i]);
   2631  1.1  alnsn 
   2632  1.1  alnsn 		bpfjit_free_code(code);
   2633  1.1  alnsn 	}
   2634  1.1  alnsn }
   2635  1.1  alnsn 
   2636  1.6  alnsn ATF_TC(libbpfjit_ld_ind_k_overflow);
   2637  1.6  alnsn ATF_TC_HEAD(libbpfjit_ld_ind_k_overflow, tc)
   2638  1.1  alnsn {
   2639  1.1  alnsn 	atf_tc_set_md_var(tc, "descr",
   2640  1.1  alnsn 	    "Test JIT compilation of BPF_LD+BPF_IND with overflow in k+4");
   2641  1.1  alnsn }
   2642  1.1  alnsn 
   2643  1.6  alnsn ATF_TC_BODY(libbpfjit_ld_ind_k_overflow, tc)
   2644  1.1  alnsn {
   2645  1.1  alnsn 	static struct bpf_insn insns[12][3] = {
   2646  1.1  alnsn 		{
   2647  1.1  alnsn 			BPF_STMT(BPF_LD+BPF_H+BPF_IND, UINT32_MAX),
   2648  1.1  alnsn 			BPF_STMT(BPF_LD+BPF_H+BPF_IND, 7),
   2649  1.1  alnsn 			BPF_STMT(BPF_RET+BPF_K, 1)
   2650  1.1  alnsn 		},
   2651  1.1  alnsn 		{
   2652  1.1  alnsn 			BPF_STMT(BPF_LD+BPF_H+BPF_IND, UINT32_MAX - 1),
   2653  1.1  alnsn 			BPF_STMT(BPF_LD+BPF_H+BPF_IND, 7),
   2654  1.1  alnsn 			BPF_STMT(BPF_RET+BPF_K, 1)
   2655  1.1  alnsn 		},
   2656  1.1  alnsn 		{
   2657  1.1  alnsn 			BPF_STMT(BPF_LD+BPF_W+BPF_IND, UINT32_MAX),
   2658  1.1  alnsn 			BPF_STMT(BPF_LD+BPF_H+BPF_IND, 7),
   2659  1.1  alnsn 			BPF_STMT(BPF_RET+BPF_K, 1)
   2660  1.1  alnsn 		},
   2661  1.1  alnsn 		{
   2662  1.1  alnsn 			BPF_STMT(BPF_LD+BPF_W+BPF_IND, UINT32_MAX - 1),
   2663  1.1  alnsn 			BPF_STMT(BPF_LD+BPF_H+BPF_IND, 7),
   2664  1.1  alnsn 			BPF_STMT(BPF_RET+BPF_K, 1)
   2665  1.1  alnsn 		},
   2666  1.1  alnsn 		{
   2667  1.1  alnsn 			BPF_STMT(BPF_LD+BPF_W+BPF_IND, UINT32_MAX - 2),
   2668  1.1  alnsn 			BPF_STMT(BPF_LD+BPF_H+BPF_IND, 7),
   2669  1.1  alnsn 			BPF_STMT(BPF_RET+BPF_K, 1)
   2670  1.1  alnsn 		},
   2671  1.1  alnsn 		{
   2672  1.1  alnsn 			BPF_STMT(BPF_LD+BPF_W+BPF_IND, UINT32_MAX - 3),
   2673  1.1  alnsn 			BPF_STMT(BPF_LD+BPF_H+BPF_IND, 7),
   2674  1.1  alnsn 			BPF_STMT(BPF_RET+BPF_K, 1)
   2675  1.1  alnsn 		},
   2676  1.1  alnsn 		{
   2677  1.1  alnsn 			BPF_STMT(BPF_LD+BPF_H+BPF_IND, 7),
   2678  1.1  alnsn 			BPF_STMT(BPF_LD+BPF_H+BPF_IND, UINT32_MAX),
   2679  1.1  alnsn 			BPF_STMT(BPF_RET+BPF_K, 1)
   2680  1.1  alnsn 		},
   2681  1.1  alnsn 		{
   2682  1.1  alnsn 			BPF_STMT(BPF_LD+BPF_H+BPF_IND, 7),
   2683  1.1  alnsn 			BPF_STMT(BPF_LD+BPF_H+BPF_IND, UINT32_MAX - 1),
   2684  1.1  alnsn 			BPF_STMT(BPF_RET+BPF_K, 1)
   2685  1.1  alnsn 		},
   2686  1.1  alnsn 		{
   2687  1.1  alnsn 			BPF_STMT(BPF_LD+BPF_H+BPF_IND, 7),
   2688  1.1  alnsn 			BPF_STMT(BPF_LD+BPF_W+BPF_IND, UINT32_MAX),
   2689  1.1  alnsn 			BPF_STMT(BPF_RET+BPF_K, 1)
   2690  1.1  alnsn 		},
   2691  1.1  alnsn 		{
   2692  1.1  alnsn 			BPF_STMT(BPF_LD+BPF_H+BPF_IND, 7),
   2693  1.1  alnsn 			BPF_STMT(BPF_LD+BPF_W+BPF_IND, UINT32_MAX - 1),
   2694  1.1  alnsn 			BPF_STMT(BPF_RET+BPF_K, 1)
   2695  1.1  alnsn 		},
   2696  1.1  alnsn 		{
   2697  1.1  alnsn 			BPF_STMT(BPF_LD+BPF_H+BPF_IND, 7),
   2698  1.1  alnsn 			BPF_STMT(BPF_LD+BPF_W+BPF_IND, UINT32_MAX - 2),
   2699  1.1  alnsn 			BPF_STMT(BPF_RET+BPF_K, 1)
   2700  1.1  alnsn 		},
   2701  1.1  alnsn 		{
   2702  1.1  alnsn 			BPF_STMT(BPF_LD+BPF_H+BPF_IND, 7),
   2703  1.1  alnsn 			BPF_STMT(BPF_LD+BPF_W+BPF_IND, UINT32_MAX - 3),
   2704  1.1  alnsn 			BPF_STMT(BPF_RET+BPF_K, 1)
   2705  1.1  alnsn 		}
   2706  1.1  alnsn 	};
   2707  1.1  alnsn 
   2708  1.1  alnsn 	int i;
   2709  1.1  alnsn 	uint8_t pkt[8] = { 0 };
   2710  1.1  alnsn 
   2711  1.1  alnsn 	size_t insn_count = sizeof(insns[0]) / sizeof(insns[0][0]);
   2712  1.1  alnsn 
   2713  1.1  alnsn 	for (i = 0; i < 3; i++) {
   2714  1.2  rmind 		bpfjit_func_t code;
   2715  1.1  alnsn 
   2716  1.1  alnsn 		ATF_CHECK(bpf_validate(insns[i], insn_count));
   2717  1.1  alnsn 
   2718  1.5  alnsn 		code = bpfjit_generate_code(NULL, insns[i], insn_count);
   2719  1.1  alnsn 		ATF_REQUIRE(code != NULL);
   2720  1.1  alnsn 
   2721  1.5  alnsn 		ATF_CHECK(jitcall(code, pkt, 8, 8) == 0);
   2722  1.1  alnsn 
   2723  1.1  alnsn 		bpfjit_free_code(code);
   2724  1.1  alnsn 	}
   2725  1.1  alnsn }
   2726  1.1  alnsn 
   2727  1.6  alnsn ATF_TC(libbpfjit_ld_ind_x_overflow1);
   2728  1.6  alnsn ATF_TC_HEAD(libbpfjit_ld_ind_x_overflow1, tc)
   2729  1.1  alnsn {
   2730  1.1  alnsn 	atf_tc_set_md_var(tc, "descr",
   2731  1.1  alnsn 	    "Test JIT compilation of BPF_LD+BPF_IND with overflow in X+4");
   2732  1.1  alnsn }
   2733  1.1  alnsn 
   2734  1.6  alnsn ATF_TC_BODY(libbpfjit_ld_ind_x_overflow1, tc)
   2735  1.1  alnsn {
   2736  1.1  alnsn 	static struct bpf_insn insns[] = {
   2737  1.1  alnsn 		BPF_STMT(BPF_LD+BPF_LEN, 0),
   2738  1.1  alnsn 		BPF_STMT(BPF_ALU+BPF_ADD+BPF_K, UINT32_C(0xffffffff)),
   2739  1.1  alnsn 		BPF_STMT(BPF_MISC+BPF_TAX, 0),
   2740  1.1  alnsn 		BPF_STMT(BPF_LD+BPF_B+BPF_IND, 0),
   2741  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_A, 0)
   2742  1.1  alnsn 	};
   2743  1.1  alnsn 
   2744  1.1  alnsn 	size_t i;
   2745  1.2  rmind 	bpfjit_func_t code;
   2746  1.1  alnsn 	uint8_t pkt[8] = { 10, 20, 30, 40, 50, 60, 70, 80 };
   2747  1.1  alnsn 
   2748  1.1  alnsn 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
   2749  1.1  alnsn 
   2750  1.1  alnsn 	ATF_CHECK(bpf_validate(insns, insn_count));
   2751  1.1  alnsn 
   2752  1.5  alnsn 	code = bpfjit_generate_code(NULL, insns, insn_count);
   2753  1.1  alnsn 	ATF_REQUIRE(code != NULL);
   2754  1.1  alnsn 
   2755  1.1  alnsn 	for (i = 1; i <= sizeof(pkt); i++) {
   2756  1.1  alnsn 		ATF_CHECK(bpf_filter(insns, pkt, i, i) == 10 * i);
   2757  1.5  alnsn 		ATF_CHECK(jitcall(code, pkt, i, i) == 10 * i);
   2758  1.1  alnsn 	}
   2759  1.1  alnsn 
   2760  1.1  alnsn 	bpfjit_free_code(code);
   2761  1.1  alnsn }
   2762  1.1  alnsn 
   2763  1.6  alnsn ATF_TC(libbpfjit_ld_ind_x_overflow2);
   2764  1.6  alnsn ATF_TC_HEAD(libbpfjit_ld_ind_x_overflow2, tc)
   2765  1.1  alnsn {
   2766  1.1  alnsn 	atf_tc_set_md_var(tc, "descr",
   2767  1.1  alnsn 	    "Test JIT compilation of BPF_LD+BPF_IND with overflow in X+4");
   2768  1.1  alnsn }
   2769  1.1  alnsn 
   2770  1.6  alnsn ATF_TC_BODY(libbpfjit_ld_ind_x_overflow2, tc)
   2771  1.1  alnsn {
   2772  1.1  alnsn 	static struct bpf_insn insns[] = {
   2773  1.1  alnsn 		BPF_STMT(BPF_LD+BPF_LEN, 0),
   2774  1.1  alnsn 		BPF_STMT(BPF_ALU+BPF_ADD+BPF_K, UINT32_C(0xffffffff)),
   2775  1.1  alnsn 		BPF_STMT(BPF_ST, 3),
   2776  1.1  alnsn 		BPF_STMT(BPF_LDX+BPF_W+BPF_MEM, 3),
   2777  1.1  alnsn 		BPF_STMT(BPF_LD+BPF_B+BPF_IND, 0),
   2778  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_A, 0)
   2779  1.1  alnsn 	};
   2780  1.1  alnsn 
   2781  1.1  alnsn 	size_t i;
   2782  1.2  rmind 	bpfjit_func_t code;
   2783  1.1  alnsn 	uint8_t pkt[8] = { 10, 20, 30, 40, 50, 60, 70, 80 };
   2784  1.1  alnsn 
   2785  1.1  alnsn 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
   2786  1.1  alnsn 
   2787  1.1  alnsn 	ATF_CHECK(bpf_validate(insns, insn_count));
   2788  1.1  alnsn 
   2789  1.5  alnsn 	code = bpfjit_generate_code(NULL, insns, insn_count);
   2790  1.1  alnsn 	ATF_REQUIRE(code != NULL);
   2791  1.1  alnsn 
   2792  1.1  alnsn 	for (i = 1; i <= sizeof(pkt); i++) {
   2793  1.1  alnsn 		ATF_CHECK(bpf_filter(insns, pkt, i, i) == 10 * i);
   2794  1.5  alnsn 		ATF_CHECK(jitcall(code, pkt, i, i) == 10 * i);
   2795  1.1  alnsn 	}
   2796  1.1  alnsn 
   2797  1.1  alnsn 	bpfjit_free_code(code);
   2798  1.1  alnsn }
   2799  1.1  alnsn 
   2800  1.6  alnsn ATF_TC(libbpfjit_ld_len);
   2801  1.6  alnsn ATF_TC_HEAD(libbpfjit_ld_len, tc)
   2802  1.1  alnsn {
   2803  1.1  alnsn 	atf_tc_set_md_var(tc, "descr",
   2804  1.1  alnsn 	    "Test JIT compilation of BPF_LD+BPF_W+BPF_LEN");
   2805  1.1  alnsn }
   2806  1.1  alnsn 
   2807  1.6  alnsn ATF_TC_BODY(libbpfjit_ld_len, tc)
   2808  1.1  alnsn {
   2809  1.1  alnsn 	static struct bpf_insn insns[] = {
   2810  1.1  alnsn 		BPF_STMT(BPF_LD+BPF_W+BPF_LEN, 0),
   2811  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_A, 0)
   2812  1.1  alnsn 	};
   2813  1.1  alnsn 
   2814  1.1  alnsn 	size_t i;
   2815  1.2  rmind 	bpfjit_func_t code;
   2816  1.1  alnsn 	uint8_t pkt[32]; /* the program doesn't read any data */
   2817  1.1  alnsn 
   2818  1.1  alnsn 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
   2819  1.1  alnsn 
   2820  1.1  alnsn 	ATF_CHECK(bpf_validate(insns, insn_count));
   2821  1.1  alnsn 
   2822  1.5  alnsn 	code = bpfjit_generate_code(NULL, insns, insn_count);
   2823  1.1  alnsn 	ATF_REQUIRE(code != NULL);
   2824  1.1  alnsn 
   2825  1.1  alnsn 	for (i = 0; i < sizeof(pkt); i++)
   2826  1.5  alnsn 		ATF_CHECK(jitcall(code, pkt, i, 1) == i);
   2827  1.1  alnsn 
   2828  1.1  alnsn 	bpfjit_free_code(code);
   2829  1.1  alnsn }
   2830  1.1  alnsn 
   2831  1.6  alnsn ATF_TC(libbpfjit_ld_imm);
   2832  1.6  alnsn ATF_TC_HEAD(libbpfjit_ld_imm, tc)
   2833  1.1  alnsn {
   2834  1.1  alnsn 	atf_tc_set_md_var(tc, "descr",
   2835  1.1  alnsn 	    "Test JIT compilation of BPF_LD+BPF_IMM");
   2836  1.1  alnsn }
   2837  1.1  alnsn 
   2838  1.6  alnsn ATF_TC_BODY(libbpfjit_ld_imm, tc)
   2839  1.1  alnsn {
   2840  1.1  alnsn 	static struct bpf_insn insns[] = {
   2841  1.1  alnsn 		BPF_STMT(BPF_LD+BPF_IMM, UINT32_MAX),
   2842  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_A, 0)
   2843  1.1  alnsn 	};
   2844  1.1  alnsn 
   2845  1.2  rmind 	bpfjit_func_t code;
   2846  1.1  alnsn 	uint8_t pkt[1]; /* the program doesn't read any data */
   2847  1.1  alnsn 
   2848  1.1  alnsn 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
   2849  1.1  alnsn 
   2850  1.1  alnsn 	ATF_CHECK(bpf_validate(insns, insn_count));
   2851  1.1  alnsn 
   2852  1.5  alnsn 	code = bpfjit_generate_code(NULL, insns, insn_count);
   2853  1.1  alnsn 	ATF_REQUIRE(code != NULL);
   2854  1.1  alnsn 
   2855  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 1, 1) == UINT32_MAX);
   2856  1.1  alnsn 
   2857  1.1  alnsn 	bpfjit_free_code(code);
   2858  1.1  alnsn }
   2859  1.1  alnsn 
   2860  1.6  alnsn ATF_TC(libbpfjit_ldx_imm1);
   2861  1.6  alnsn ATF_TC_HEAD(libbpfjit_ldx_imm1, tc)
   2862  1.1  alnsn {
   2863  1.1  alnsn 	atf_tc_set_md_var(tc, "descr",
   2864  1.1  alnsn 	    "Test JIT compilation of BPF_LDX+BPF_IMM");
   2865  1.1  alnsn }
   2866  1.1  alnsn 
   2867  1.6  alnsn ATF_TC_BODY(libbpfjit_ldx_imm1, tc)
   2868  1.1  alnsn {
   2869  1.1  alnsn 	static struct bpf_insn insns[] = {
   2870  1.1  alnsn 		BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, UINT32_MAX - 5),
   2871  1.1  alnsn 		BPF_STMT(BPF_ALU+BPF_ADD+BPF_X, 0),
   2872  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_A, 0)
   2873  1.1  alnsn 	};
   2874  1.1  alnsn 
   2875  1.2  rmind 	bpfjit_func_t code;
   2876  1.1  alnsn 	uint8_t pkt[1]; /* the program doesn't read any data */
   2877  1.1  alnsn 
   2878  1.1  alnsn 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
   2879  1.1  alnsn 
   2880  1.1  alnsn 	ATF_CHECK(bpf_validate(insns, insn_count));
   2881  1.1  alnsn 
   2882  1.5  alnsn 	code = bpfjit_generate_code(NULL, insns, insn_count);
   2883  1.1  alnsn 	ATF_REQUIRE(code != NULL);
   2884  1.1  alnsn 
   2885  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 1, 1) == UINT32_MAX - 5);
   2886  1.1  alnsn 
   2887  1.1  alnsn 	bpfjit_free_code(code);
   2888  1.1  alnsn }
   2889  1.1  alnsn 
   2890  1.6  alnsn ATF_TC(libbpfjit_ldx_imm2);
   2891  1.6  alnsn ATF_TC_HEAD(libbpfjit_ldx_imm2, tc)
   2892  1.1  alnsn {
   2893  1.1  alnsn 	atf_tc_set_md_var(tc, "descr",
   2894  1.1  alnsn 	    "Test JIT compilation of BPF_LDX+BPF_IMM");
   2895  1.1  alnsn }
   2896  1.1  alnsn 
   2897  1.6  alnsn ATF_TC_BODY(libbpfjit_ldx_imm2, tc)
   2898  1.1  alnsn {
   2899  1.1  alnsn 	static struct bpf_insn insns[] = {
   2900  1.1  alnsn 		BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 5),
   2901  1.1  alnsn 		BPF_STMT(BPF_LD+BPF_IMM, 5),
   2902  1.1  alnsn 		BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_X, 0, 1, 0),
   2903  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_K, 7),
   2904  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_K, UINT32_MAX)
   2905  1.1  alnsn 	};
   2906  1.1  alnsn 
   2907  1.2  rmind 	bpfjit_func_t code;
   2908  1.1  alnsn 	uint8_t pkt[1]; /* the program doesn't read any data */
   2909  1.1  alnsn 
   2910  1.1  alnsn 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
   2911  1.1  alnsn 
   2912  1.1  alnsn 	ATF_CHECK(bpf_validate(insns, insn_count));
   2913  1.1  alnsn 
   2914  1.5  alnsn 	code = bpfjit_generate_code(NULL, insns, insn_count);
   2915  1.1  alnsn 	ATF_REQUIRE(code != NULL);
   2916  1.1  alnsn 
   2917  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 1, 1) == UINT32_MAX);
   2918  1.1  alnsn 
   2919  1.1  alnsn 	bpfjit_free_code(code);
   2920  1.1  alnsn }
   2921  1.1  alnsn 
   2922  1.6  alnsn ATF_TC(libbpfjit_ldx_len1);
   2923  1.6  alnsn ATF_TC_HEAD(libbpfjit_ldx_len1, tc)
   2924  1.1  alnsn {
   2925  1.1  alnsn 	atf_tc_set_md_var(tc, "descr",
   2926  1.1  alnsn 	    "Test JIT compilation of BPF_LDX+BPF_LEN");
   2927  1.1  alnsn }
   2928  1.1  alnsn 
   2929  1.6  alnsn ATF_TC_BODY(libbpfjit_ldx_len1, tc)
   2930  1.1  alnsn {
   2931  1.1  alnsn 	static struct bpf_insn insns[] = {
   2932  1.1  alnsn 		BPF_STMT(BPF_LDX+BPF_W+BPF_LEN, 0),
   2933  1.1  alnsn 		BPF_STMT(BPF_ALU+BPF_ADD+BPF_X, 0),
   2934  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_A, 0)
   2935  1.1  alnsn 	};
   2936  1.1  alnsn 
   2937  1.1  alnsn 	size_t i;
   2938  1.2  rmind 	bpfjit_func_t code;
   2939  1.1  alnsn 	uint8_t pkt[5]; /* the program doesn't read any data */
   2940  1.1  alnsn 
   2941  1.1  alnsn 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
   2942  1.1  alnsn 
   2943  1.1  alnsn 	ATF_CHECK(bpf_validate(insns, insn_count));
   2944  1.1  alnsn 
   2945  1.5  alnsn 	code = bpfjit_generate_code(NULL, insns, insn_count);
   2946  1.1  alnsn 	ATF_REQUIRE(code != NULL);
   2947  1.1  alnsn 
   2948  1.1  alnsn 	for (i = 1; i < sizeof(pkt); i++) {
   2949  1.5  alnsn 		ATF_CHECK(jitcall(code, pkt, i, 1) == i);
   2950  1.5  alnsn 		ATF_CHECK(jitcall(code, pkt, i + 1, i) == i + 1);
   2951  1.1  alnsn 	}
   2952  1.1  alnsn 
   2953  1.1  alnsn 	bpfjit_free_code(code);
   2954  1.1  alnsn }
   2955  1.1  alnsn 
   2956  1.6  alnsn ATF_TC(libbpfjit_ldx_len2);
   2957  1.6  alnsn ATF_TC_HEAD(libbpfjit_ldx_len2, tc)
   2958  1.1  alnsn {
   2959  1.1  alnsn 	atf_tc_set_md_var(tc, "descr",
   2960  1.1  alnsn 	    "Test JIT compilation of BPF_LDX+BPF_LEN");
   2961  1.1  alnsn }
   2962  1.1  alnsn 
   2963  1.6  alnsn ATF_TC_BODY(libbpfjit_ldx_len2, tc)
   2964  1.1  alnsn {
   2965  1.1  alnsn 	static struct bpf_insn insns[] = {
   2966  1.1  alnsn 		BPF_STMT(BPF_LDX+BPF_W+BPF_LEN, 0),
   2967  1.1  alnsn 		BPF_STMT(BPF_LD+BPF_IMM, 5),
   2968  1.1  alnsn 		BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_X, 0, 1, 0),
   2969  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_K, 7),
   2970  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_K, UINT32_MAX)
   2971  1.1  alnsn 	};
   2972  1.1  alnsn 
   2973  1.2  rmind 	bpfjit_func_t code;
   2974  1.1  alnsn 	uint8_t pkt[5]; /* the program doesn't read any data */
   2975  1.1  alnsn 
   2976  1.1  alnsn 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
   2977  1.1  alnsn 
   2978  1.1  alnsn 	ATF_CHECK(bpf_validate(insns, insn_count));
   2979  1.1  alnsn 
   2980  1.5  alnsn 	code = bpfjit_generate_code(NULL, insns, insn_count);
   2981  1.1  alnsn 	ATF_REQUIRE(code != NULL);
   2982  1.1  alnsn 
   2983  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 5, 1) == UINT32_MAX);
   2984  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 6, 5) == 7);
   2985  1.1  alnsn 
   2986  1.1  alnsn 	bpfjit_free_code(code);
   2987  1.1  alnsn }
   2988  1.1  alnsn 
   2989  1.6  alnsn ATF_TC(libbpfjit_ldx_msh);
   2990  1.6  alnsn ATF_TC_HEAD(libbpfjit_ldx_msh, tc)
   2991  1.1  alnsn {
   2992  1.1  alnsn 	atf_tc_set_md_var(tc, "descr",
   2993  1.1  alnsn 	    "Test JIT compilation of BPF_LDX+BPF_MSH");
   2994  1.1  alnsn }
   2995  1.1  alnsn 
   2996  1.6  alnsn ATF_TC_BODY(libbpfjit_ldx_msh, tc)
   2997  1.1  alnsn {
   2998  1.1  alnsn 	static struct bpf_insn insns[] = {
   2999  1.1  alnsn 		BPF_STMT(BPF_LDX+BPF_B+BPF_MSH, 1),
   3000  1.1  alnsn 		BPF_STMT(BPF_ALU+BPF_ADD+BPF_X, 0),
   3001  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_A, 0)
   3002  1.1  alnsn 	};
   3003  1.1  alnsn 
   3004  1.2  rmind 	bpfjit_func_t code;
   3005  1.1  alnsn 	uint8_t pkt[2] = { 0, 0x7a };
   3006  1.1  alnsn 
   3007  1.1  alnsn 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
   3008  1.1  alnsn 
   3009  1.1  alnsn 	ATF_CHECK(bpf_validate(insns, insn_count));
   3010  1.1  alnsn 
   3011  1.5  alnsn 	code = bpfjit_generate_code(NULL, insns, insn_count);
   3012  1.1  alnsn 	ATF_REQUIRE(code != NULL);
   3013  1.1  alnsn 
   3014  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 2, 2) == 40);
   3015  1.1  alnsn 
   3016  1.1  alnsn 	bpfjit_free_code(code);
   3017  1.1  alnsn }
   3018  1.1  alnsn 
   3019  1.6  alnsn ATF_TC(libbpfjit_misc_tax);
   3020  1.6  alnsn ATF_TC_HEAD(libbpfjit_misc_tax, tc)
   3021  1.1  alnsn {
   3022  1.1  alnsn 	atf_tc_set_md_var(tc, "descr",
   3023  1.1  alnsn 	    "Test JIT compilation of BPF_MISC+BPF_TAX");
   3024  1.1  alnsn }
   3025  1.1  alnsn 
   3026  1.6  alnsn ATF_TC_BODY(libbpfjit_misc_tax, tc)
   3027  1.1  alnsn {
   3028  1.1  alnsn 	static struct bpf_insn insns[] = {
   3029  1.1  alnsn 		BPF_STMT(BPF_LD+BPF_IMM, 3),
   3030  1.1  alnsn 		BPF_STMT(BPF_MISC+BPF_TAX, 0),
   3031  1.1  alnsn 		BPF_STMT(BPF_LD+BPF_B+BPF_IND, 2),
   3032  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_A, 0)
   3033  1.1  alnsn 	};
   3034  1.1  alnsn 
   3035  1.2  rmind 	bpfjit_func_t code;
   3036  1.1  alnsn 	uint8_t pkt[] = { 0, 11, 22, 33, 44, 55 };
   3037  1.1  alnsn 
   3038  1.1  alnsn 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
   3039  1.1  alnsn 
   3040  1.1  alnsn 	ATF_CHECK(bpf_validate(insns, insn_count));
   3041  1.1  alnsn 
   3042  1.5  alnsn 	code = bpfjit_generate_code(NULL, insns, insn_count);
   3043  1.1  alnsn 	ATF_REQUIRE(code != NULL);
   3044  1.1  alnsn 
   3045  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, sizeof(pkt), sizeof(pkt)) == 55);
   3046  1.1  alnsn 
   3047  1.1  alnsn 	bpfjit_free_code(code);
   3048  1.1  alnsn }
   3049  1.1  alnsn 
   3050  1.6  alnsn ATF_TC(libbpfjit_misc_txa);
   3051  1.6  alnsn ATF_TC_HEAD(libbpfjit_misc_txa, tc)
   3052  1.1  alnsn {
   3053  1.1  alnsn 	atf_tc_set_md_var(tc, "descr",
   3054  1.1  alnsn 	    "Test JIT compilation of BPF_MISC+BPF_TXA");
   3055  1.1  alnsn }
   3056  1.1  alnsn 
   3057  1.6  alnsn ATF_TC_BODY(libbpfjit_misc_txa, tc)
   3058  1.1  alnsn {
   3059  1.1  alnsn 	static struct bpf_insn insns[] = {
   3060  1.1  alnsn 		BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 391),
   3061  1.1  alnsn 		BPF_STMT(BPF_MISC+BPF_TXA, 0),
   3062  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_A, 0)
   3063  1.1  alnsn 	};
   3064  1.1  alnsn 
   3065  1.2  rmind 	bpfjit_func_t code;
   3066  1.1  alnsn 	uint8_t pkt[1]; /* the program doesn't read any data */
   3067  1.1  alnsn 
   3068  1.1  alnsn 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
   3069  1.1  alnsn 
   3070  1.1  alnsn 	ATF_CHECK(bpf_validate(insns, insn_count));
   3071  1.1  alnsn 
   3072  1.5  alnsn 	code = bpfjit_generate_code(NULL, insns, insn_count);
   3073  1.1  alnsn 	ATF_REQUIRE(code != NULL);
   3074  1.1  alnsn 
   3075  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 1, 1) == 391);
   3076  1.1  alnsn 
   3077  1.1  alnsn 	bpfjit_free_code(code);
   3078  1.1  alnsn }
   3079  1.1  alnsn 
   3080  1.6  alnsn ATF_TC(libbpfjit_st1);
   3081  1.6  alnsn ATF_TC_HEAD(libbpfjit_st1, tc)
   3082  1.1  alnsn {
   3083  1.1  alnsn 	atf_tc_set_md_var(tc, "descr",
   3084  1.1  alnsn 	    "Test JIT compilation of BPF_ST");
   3085  1.1  alnsn }
   3086  1.1  alnsn 
   3087  1.6  alnsn ATF_TC_BODY(libbpfjit_st1, tc)
   3088  1.1  alnsn {
   3089  1.1  alnsn 	static struct bpf_insn insns[] = {
   3090  1.1  alnsn 		BPF_STMT(BPF_LD+BPF_W+BPF_LEN, 0),
   3091  1.1  alnsn 		BPF_STMT(BPF_ST, 0),
   3092  1.6  alnsn 		BPF_STMT(BPF_ALU+BPF_ADD+BPF_K, 1),
   3093  1.1  alnsn 		BPF_STMT(BPF_LD+BPF_MEM, 0),
   3094  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_A, 0)
   3095  1.1  alnsn 	};
   3096  1.1  alnsn 
   3097  1.1  alnsn 	size_t i;
   3098  1.2  rmind 	bpfjit_func_t code;
   3099  1.1  alnsn 	uint8_t pkt[16]; /* the program doesn't read any data */
   3100  1.1  alnsn 
   3101  1.1  alnsn 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
   3102  1.1  alnsn 
   3103  1.1  alnsn 	ATF_CHECK(bpf_validate(insns, insn_count));
   3104  1.1  alnsn 
   3105  1.5  alnsn 	code = bpfjit_generate_code(NULL, insns, insn_count);
   3106  1.1  alnsn 	ATF_REQUIRE(code != NULL);
   3107  1.1  alnsn 
   3108  1.1  alnsn 	for (i = 1; i <= sizeof(pkt); i++)
   3109  1.5  alnsn 		ATF_CHECK(jitcall(code, pkt, i, sizeof(pkt)) == i);
   3110  1.1  alnsn 
   3111  1.1  alnsn 	bpfjit_free_code(code);
   3112  1.1  alnsn }
   3113  1.1  alnsn 
   3114  1.6  alnsn ATF_TC(libbpfjit_st2);
   3115  1.6  alnsn ATF_TC_HEAD(libbpfjit_st2, tc)
   3116  1.1  alnsn {
   3117  1.1  alnsn 	atf_tc_set_md_var(tc, "descr",
   3118  1.1  alnsn 	    "Test JIT compilation of BPF_ST");
   3119  1.1  alnsn }
   3120  1.1  alnsn 
   3121  1.6  alnsn ATF_TC_BODY(libbpfjit_st2, tc)
   3122  1.1  alnsn {
   3123  1.1  alnsn 	static struct bpf_insn insns[] = {
   3124  1.1  alnsn 		BPF_STMT(BPF_LD+BPF_W+BPF_LEN, 0),
   3125  1.1  alnsn 		BPF_STMT(BPF_ST, BPF_MEMWORDS-1),
   3126  1.1  alnsn 		BPF_STMT(BPF_LD+BPF_MEM, 0),
   3127  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_A, 0)
   3128  1.1  alnsn 	};
   3129  1.1  alnsn 
   3130  1.2  rmind 	bpfjit_func_t code;
   3131  1.1  alnsn 	uint8_t pkt[1]; /* the program doesn't read any data */
   3132  1.1  alnsn 
   3133  1.1  alnsn 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
   3134  1.1  alnsn 
   3135  1.1  alnsn 	ATF_CHECK(bpf_validate(insns, insn_count));
   3136  1.1  alnsn 
   3137  1.5  alnsn 	code = bpfjit_generate_code(NULL, insns, insn_count);
   3138  1.1  alnsn 	ATF_REQUIRE(code != NULL);
   3139  1.1  alnsn 
   3140  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 1, 1) == 0);
   3141  1.1  alnsn 
   3142  1.1  alnsn 	bpfjit_free_code(code);
   3143  1.1  alnsn }
   3144  1.1  alnsn 
   3145  1.6  alnsn ATF_TC(libbpfjit_st3);
   3146  1.6  alnsn ATF_TC_HEAD(libbpfjit_st3, tc)
   3147  1.1  alnsn {
   3148  1.1  alnsn 	atf_tc_set_md_var(tc, "descr",
   3149  1.1  alnsn 	    "Test JIT compilation of BPF_ST");
   3150  1.1  alnsn }
   3151  1.1  alnsn 
   3152  1.6  alnsn ATF_TC_BODY(libbpfjit_st3, tc)
   3153  1.1  alnsn {
   3154  1.1  alnsn 	static struct bpf_insn insns[] = {
   3155  1.1  alnsn 		BPF_STMT(BPF_LD+BPF_W+BPF_LEN, 0),
   3156  1.1  alnsn 		BPF_STMT(BPF_ST, 0),
   3157  1.1  alnsn 		BPF_STMT(BPF_ALU+BPF_ADD+BPF_K, 100),
   3158  1.1  alnsn 		BPF_STMT(BPF_ST, BPF_MEMWORDS-1),
   3159  1.1  alnsn 		BPF_STMT(BPF_ALU+BPF_ADD+BPF_K, 200),
   3160  1.1  alnsn 		BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, 301, 2, 0),
   3161  1.1  alnsn 		BPF_STMT(BPF_LD+BPF_MEM, BPF_MEMWORDS-1),
   3162  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_A, 0),
   3163  1.1  alnsn 		BPF_STMT(BPF_LD+BPF_MEM, 0),
   3164  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_A, 0)
   3165  1.1  alnsn 	};
   3166  1.1  alnsn 
   3167  1.2  rmind 	bpfjit_func_t code;
   3168  1.1  alnsn 	uint8_t pkt[2]; /* the program doesn't read any data */
   3169  1.1  alnsn 
   3170  1.1  alnsn 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
   3171  1.1  alnsn 
   3172  1.1  alnsn 	ATF_REQUIRE(BPF_MEMWORDS > 1);
   3173  1.1  alnsn 
   3174  1.1  alnsn 	ATF_CHECK(bpf_validate(insns, insn_count));
   3175  1.1  alnsn 
   3176  1.5  alnsn 	code = bpfjit_generate_code(NULL, insns, insn_count);
   3177  1.1  alnsn 	ATF_REQUIRE(code != NULL);
   3178  1.1  alnsn 
   3179  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 1, 1) == 1);
   3180  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 2, 2) == 102);
   3181  1.1  alnsn 
   3182  1.1  alnsn 	bpfjit_free_code(code);
   3183  1.1  alnsn }
   3184  1.1  alnsn 
   3185  1.6  alnsn ATF_TC(libbpfjit_st4);
   3186  1.6  alnsn ATF_TC_HEAD(libbpfjit_st4, tc)
   3187  1.1  alnsn {
   3188  1.1  alnsn 	atf_tc_set_md_var(tc, "descr",
   3189  1.1  alnsn 	    "Test JIT compilation of BPF_ST");
   3190  1.1  alnsn }
   3191  1.1  alnsn 
   3192  1.6  alnsn ATF_TC_BODY(libbpfjit_st4, tc)
   3193  1.1  alnsn {
   3194  1.1  alnsn 	static struct bpf_insn insns[] = {
   3195  1.1  alnsn 		BPF_STMT(BPF_LD+BPF_W+BPF_LEN, 0),
   3196  1.1  alnsn 		BPF_STMT(BPF_ST, 5),
   3197  1.1  alnsn 		BPF_STMT(BPF_ALU+BPF_ADD+BPF_K, 100),
   3198  1.1  alnsn 		BPF_STMT(BPF_ST, BPF_MEMWORDS-1),
   3199  1.1  alnsn 		BPF_STMT(BPF_ALU+BPF_ADD+BPF_K, 200),
   3200  1.1  alnsn 		BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, 301, 2, 0),
   3201  1.1  alnsn 		BPF_STMT(BPF_LD+BPF_MEM, BPF_MEMWORDS-1),
   3202  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_A, 0),
   3203  1.1  alnsn 		BPF_STMT(BPF_LD+BPF_MEM, 5),
   3204  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_A, 0)
   3205  1.1  alnsn 	};
   3206  1.1  alnsn 
   3207  1.2  rmind 	bpfjit_func_t code;
   3208  1.1  alnsn 	uint8_t pkt[2]; /* the program doesn't read any data */
   3209  1.1  alnsn 
   3210  1.1  alnsn 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
   3211  1.1  alnsn 
   3212  1.1  alnsn 	ATF_REQUIRE(BPF_MEMWORDS > 6);
   3213  1.1  alnsn 
   3214  1.1  alnsn 	ATF_CHECK(bpf_validate(insns, insn_count));
   3215  1.1  alnsn 
   3216  1.5  alnsn 	code = bpfjit_generate_code(NULL, insns, insn_count);
   3217  1.1  alnsn 	ATF_REQUIRE(code != NULL);
   3218  1.1  alnsn 
   3219  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 1, 1) == 1);
   3220  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 2, 2) == 102);
   3221  1.1  alnsn 
   3222  1.1  alnsn 	bpfjit_free_code(code);
   3223  1.1  alnsn }
   3224  1.1  alnsn 
   3225  1.6  alnsn ATF_TC(libbpfjit_st5);
   3226  1.6  alnsn ATF_TC_HEAD(libbpfjit_st5, tc)
   3227  1.1  alnsn {
   3228  1.1  alnsn 	atf_tc_set_md_var(tc, "descr",
   3229  1.1  alnsn 	    "Test JIT compilation of BPF_ST");
   3230  1.1  alnsn }
   3231  1.1  alnsn 
   3232  1.6  alnsn ATF_TC_BODY(libbpfjit_st5, tc)
   3233  1.1  alnsn {
   3234  1.1  alnsn 	struct bpf_insn insns[5*BPF_MEMWORDS+2];
   3235  1.1  alnsn 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
   3236  1.1  alnsn 
   3237  1.1  alnsn 	size_t k;
   3238  1.2  rmind 	bpfjit_func_t code;
   3239  1.1  alnsn 	uint8_t pkt[BPF_MEMWORDS]; /* the program doesn't read any data */
   3240  1.1  alnsn 
   3241  1.1  alnsn 	memset(insns, 0, sizeof(insns));
   3242  1.1  alnsn 
   3243  1.1  alnsn 	/* for each k do M[k] = k */
   3244  1.1  alnsn 	for (k = 0; k < BPF_MEMWORDS; k++) {
   3245  1.1  alnsn 		insns[2*k].code   = BPF_LD+BPF_IMM;
   3246  1.1  alnsn 		insns[2*k].k      = 3*k;
   3247  1.1  alnsn 		insns[2*k+1].code = BPF_ST;
   3248  1.1  alnsn 		insns[2*k+1].k    = k;
   3249  1.1  alnsn 	}
   3250  1.1  alnsn 
   3251  1.1  alnsn 	/* load wirelen into A */
   3252  1.1  alnsn 	insns[2*BPF_MEMWORDS].code = BPF_LD+BPF_W+BPF_LEN;
   3253  1.1  alnsn 
   3254  1.1  alnsn 	/* for each k, if (A == k + 1) return M[k] */
   3255  1.1  alnsn 	for (k = 0; k < BPF_MEMWORDS; k++) {
   3256  1.1  alnsn 		insns[2*BPF_MEMWORDS+3*k+1].code = BPF_JMP+BPF_JEQ+BPF_K;
   3257  1.1  alnsn 		insns[2*BPF_MEMWORDS+3*k+1].k    = k+1;
   3258  1.1  alnsn 		insns[2*BPF_MEMWORDS+3*k+1].jt   = 0;
   3259  1.1  alnsn 		insns[2*BPF_MEMWORDS+3*k+1].jf   = 2;
   3260  1.1  alnsn 		insns[2*BPF_MEMWORDS+3*k+2].code = BPF_LD+BPF_MEM;
   3261  1.1  alnsn 		insns[2*BPF_MEMWORDS+3*k+2].k    = k;
   3262  1.1  alnsn 		insns[2*BPF_MEMWORDS+3*k+3].code = BPF_RET+BPF_A;
   3263  1.1  alnsn 		insns[2*BPF_MEMWORDS+3*k+3].k    = 0;
   3264  1.1  alnsn 	}
   3265  1.1  alnsn 
   3266  1.1  alnsn 	insns[5*BPF_MEMWORDS+1].code = BPF_RET+BPF_K;
   3267  1.1  alnsn 	insns[5*BPF_MEMWORDS+1].k    = UINT32_MAX;
   3268  1.1  alnsn 
   3269  1.1  alnsn 	ATF_CHECK(bpf_validate(insns, insn_count));
   3270  1.1  alnsn 
   3271  1.5  alnsn 	code = bpfjit_generate_code(NULL, insns, insn_count);
   3272  1.1  alnsn 	ATF_REQUIRE(code != NULL);
   3273  1.1  alnsn 
   3274  1.1  alnsn 	for (k = 1; k <= sizeof(pkt); k++)
   3275  1.5  alnsn 		ATF_CHECK(jitcall(code, pkt, k, k) == 3*(k-1));
   3276  1.1  alnsn 
   3277  1.1  alnsn 	bpfjit_free_code(code);
   3278  1.1  alnsn }
   3279  1.1  alnsn 
   3280  1.6  alnsn ATF_TC(libbpfjit_stx1);
   3281  1.6  alnsn ATF_TC_HEAD(libbpfjit_stx1, tc)
   3282  1.1  alnsn {
   3283  1.1  alnsn 	atf_tc_set_md_var(tc, "descr",
   3284  1.1  alnsn 	    "Test JIT compilation of BPF_STX");
   3285  1.1  alnsn }
   3286  1.1  alnsn 
   3287  1.6  alnsn ATF_TC_BODY(libbpfjit_stx1, tc)
   3288  1.1  alnsn {
   3289  1.1  alnsn 	static struct bpf_insn insns[] = {
   3290  1.1  alnsn 		BPF_STMT(BPF_LDX+BPF_W+BPF_LEN, 0),
   3291  1.1  alnsn 		BPF_STMT(BPF_STX, 0),
   3292  1.1  alnsn 		BPF_STMT(BPF_LDX+BPF_W+BPF_MEM, 0),
   3293  1.1  alnsn 		BPF_STMT(BPF_ALU+BPF_ADD+BPF_X, 0),
   3294  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_A, 0)
   3295  1.1  alnsn 	};
   3296  1.1  alnsn 
   3297  1.1  alnsn 	size_t i;
   3298  1.2  rmind 	bpfjit_func_t code;
   3299  1.1  alnsn 	uint8_t pkt[16]; /* the program doesn't read any data */
   3300  1.1  alnsn 
   3301  1.1  alnsn 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
   3302  1.1  alnsn 
   3303  1.1  alnsn 	ATF_CHECK(bpf_validate(insns, insn_count));
   3304  1.1  alnsn 
   3305  1.5  alnsn 	code = bpfjit_generate_code(NULL, insns, insn_count);
   3306  1.1  alnsn 	ATF_REQUIRE(code != NULL);
   3307  1.1  alnsn 
   3308  1.1  alnsn 	for (i = 1; i <= sizeof(pkt); i++)
   3309  1.5  alnsn 		ATF_CHECK(jitcall(code, pkt, i, sizeof(pkt)) == i);
   3310  1.1  alnsn 
   3311  1.1  alnsn 	bpfjit_free_code(code);
   3312  1.1  alnsn }
   3313  1.1  alnsn 
   3314  1.6  alnsn ATF_TC(libbpfjit_stx2);
   3315  1.6  alnsn ATF_TC_HEAD(libbpfjit_stx2, tc)
   3316  1.1  alnsn {
   3317  1.1  alnsn 	atf_tc_set_md_var(tc, "descr",
   3318  1.1  alnsn 	    "Test JIT compilation of BPF_STX");
   3319  1.1  alnsn }
   3320  1.1  alnsn 
   3321  1.6  alnsn ATF_TC_BODY(libbpfjit_stx2, tc)
   3322  1.1  alnsn {
   3323  1.1  alnsn 	static struct bpf_insn insns[] = {
   3324  1.1  alnsn 		BPF_STMT(BPF_LDX+BPF_W+BPF_LEN, 0),
   3325  1.1  alnsn 		BPF_STMT(BPF_STX, BPF_MEMWORDS-1),
   3326  1.1  alnsn 		BPF_STMT(BPF_LDX+BPF_W+BPF_MEM, 0),
   3327  1.1  alnsn 		BPF_STMT(BPF_MISC+BPF_TXA, 0),
   3328  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_A, 0)
   3329  1.1  alnsn 	};
   3330  1.1  alnsn 
   3331  1.2  rmind 	bpfjit_func_t code;
   3332  1.1  alnsn 	uint8_t pkt[1]; /* the program doesn't read any data */
   3333  1.1  alnsn 
   3334  1.1  alnsn 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
   3335  1.1  alnsn 
   3336  1.1  alnsn 	ATF_CHECK(bpf_validate(insns, insn_count));
   3337  1.1  alnsn 
   3338  1.5  alnsn 	code = bpfjit_generate_code(NULL, insns, insn_count);
   3339  1.1  alnsn 	ATF_REQUIRE(code != NULL);
   3340  1.1  alnsn 
   3341  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 1, 1) == 0);
   3342  1.1  alnsn 
   3343  1.1  alnsn 	bpfjit_free_code(code);
   3344  1.1  alnsn }
   3345  1.1  alnsn 
   3346  1.6  alnsn ATF_TC(libbpfjit_stx3);
   3347  1.6  alnsn ATF_TC_HEAD(libbpfjit_stx3, tc)
   3348  1.1  alnsn {
   3349  1.1  alnsn 	atf_tc_set_md_var(tc, "descr",
   3350  1.1  alnsn 	    "Test JIT compilation of BPF_STX");
   3351  1.1  alnsn }
   3352  1.1  alnsn 
   3353  1.6  alnsn ATF_TC_BODY(libbpfjit_stx3, tc)
   3354  1.1  alnsn {
   3355  1.1  alnsn 	static struct bpf_insn insns[] = {
   3356  1.1  alnsn 		BPF_STMT(BPF_LDX+BPF_W+BPF_LEN, 0),
   3357  1.1  alnsn 		BPF_STMT(BPF_STX, 5),
   3358  1.1  alnsn 		BPF_STMT(BPF_STX, 2),
   3359  1.1  alnsn 		BPF_STMT(BPF_STX, 3),
   3360  1.1  alnsn 		BPF_STMT(BPF_LDX+BPF_W+BPF_MEM, 1),
   3361  1.1  alnsn 		BPF_STMT(BPF_ALU+BPF_ADD+BPF_X, 0),
   3362  1.1  alnsn 		BPF_STMT(BPF_LDX+BPF_W+BPF_MEM, 2),
   3363  1.1  alnsn 		BPF_STMT(BPF_ALU+BPF_ADD+BPF_X, 0),
   3364  1.1  alnsn 		BPF_STMT(BPF_LDX+BPF_W+BPF_MEM, 3),
   3365  1.1  alnsn 		BPF_STMT(BPF_ALU+BPF_ADD+BPF_X, 0),
   3366  1.1  alnsn 		BPF_STMT(BPF_LDX+BPF_W+BPF_MEM, 5),
   3367  1.1  alnsn 		BPF_STMT(BPF_ALU+BPF_ADD+BPF_X, 0),
   3368  1.1  alnsn 		BPF_STMT(BPF_LDX+BPF_W+BPF_MEM, 6),
   3369  1.1  alnsn 		BPF_STMT(BPF_ALU+BPF_ADD+BPF_X, 0),
   3370  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_A, 0)
   3371  1.1  alnsn 	};
   3372  1.1  alnsn 
   3373  1.1  alnsn 	size_t i;
   3374  1.2  rmind 	bpfjit_func_t code;
   3375  1.1  alnsn 	uint8_t pkt[16]; /* the program doesn't read any data */
   3376  1.1  alnsn 
   3377  1.1  alnsn 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
   3378  1.1  alnsn 
   3379  1.1  alnsn 	ATF_CHECK(bpf_validate(insns, insn_count));
   3380  1.1  alnsn 
   3381  1.5  alnsn 	code = bpfjit_generate_code(NULL, insns, insn_count);
   3382  1.1  alnsn 	ATF_REQUIRE(code != NULL);
   3383  1.1  alnsn 
   3384  1.1  alnsn 	for (i = 1; i <= sizeof(pkt); i++)
   3385  1.5  alnsn 		ATF_CHECK(jitcall(code, pkt, i, sizeof(pkt)) == 3 * i);
   3386  1.1  alnsn 
   3387  1.1  alnsn 	bpfjit_free_code(code);
   3388  1.1  alnsn }
   3389  1.1  alnsn 
   3390  1.6  alnsn ATF_TC(libbpfjit_stx4);
   3391  1.6  alnsn ATF_TC_HEAD(libbpfjit_stx4, tc)
   3392  1.1  alnsn {
   3393  1.1  alnsn 	atf_tc_set_md_var(tc, "descr",
   3394  1.1  alnsn 	    "Test JIT compilation of BPF_STX");
   3395  1.1  alnsn }
   3396  1.1  alnsn 
   3397  1.6  alnsn ATF_TC_BODY(libbpfjit_stx4, tc)
   3398  1.1  alnsn {
   3399  1.1  alnsn 	struct bpf_insn insns[5*BPF_MEMWORDS+2];
   3400  1.1  alnsn 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
   3401  1.1  alnsn 
   3402  1.1  alnsn 	size_t k;
   3403  1.2  rmind 	bpfjit_func_t code;
   3404  1.1  alnsn 	uint8_t pkt[BPF_MEMWORDS]; /* the program doesn't read any data */
   3405  1.1  alnsn 
   3406  1.1  alnsn 	memset(insns, 0, sizeof(insns));
   3407  1.1  alnsn 
   3408  1.1  alnsn 	/* for each k do M[k] = k */
   3409  1.1  alnsn 	for (k = 0; k < BPF_MEMWORDS; k++) {
   3410  1.1  alnsn 		insns[2*k].code   = BPF_LDX+BPF_W+BPF_IMM;
   3411  1.1  alnsn 		insns[2*k].k      = 3*k;
   3412  1.1  alnsn 		insns[2*k+1].code = BPF_STX;
   3413  1.1  alnsn 		insns[2*k+1].k    = k;
   3414  1.1  alnsn 	}
   3415  1.1  alnsn 
   3416  1.1  alnsn 	/* load wirelen into A */
   3417  1.1  alnsn 	insns[2*BPF_MEMWORDS].code = BPF_LD+BPF_W+BPF_LEN;
   3418  1.1  alnsn 
   3419  1.1  alnsn 	/* for each k, if (A == k + 1) return M[k] */
   3420  1.1  alnsn 	for (k = 0; k < BPF_MEMWORDS; k++) {
   3421  1.1  alnsn 		insns[2*BPF_MEMWORDS+3*k+1].code = BPF_JMP+BPF_JEQ+BPF_K;
   3422  1.1  alnsn 		insns[2*BPF_MEMWORDS+3*k+1].k    = k+1;
   3423  1.1  alnsn 		insns[2*BPF_MEMWORDS+3*k+1].jt   = 0;
   3424  1.1  alnsn 		insns[2*BPF_MEMWORDS+3*k+1].jf   = 2;
   3425  1.1  alnsn 		insns[2*BPF_MEMWORDS+3*k+2].code = BPF_LD+BPF_MEM;
   3426  1.1  alnsn 		insns[2*BPF_MEMWORDS+3*k+2].k    = k;
   3427  1.1  alnsn 		insns[2*BPF_MEMWORDS+3*k+3].code = BPF_RET+BPF_A;
   3428  1.1  alnsn 		insns[2*BPF_MEMWORDS+3*k+3].k    = 0;
   3429  1.1  alnsn 	}
   3430  1.1  alnsn 
   3431  1.1  alnsn 	insns[5*BPF_MEMWORDS+1].code = BPF_RET+BPF_K;
   3432  1.1  alnsn 	insns[5*BPF_MEMWORDS+1].k    = UINT32_MAX;
   3433  1.1  alnsn 
   3434  1.1  alnsn 	ATF_CHECK(bpf_validate(insns, insn_count));
   3435  1.1  alnsn 
   3436  1.5  alnsn 	code = bpfjit_generate_code(NULL, insns, insn_count);
   3437  1.1  alnsn 	ATF_REQUIRE(code != NULL);
   3438  1.1  alnsn 
   3439  1.1  alnsn 	for (k = 1; k <= sizeof(pkt); k++)
   3440  1.5  alnsn 		ATF_CHECK(jitcall(code, pkt, k, k) == 3*(k-1));
   3441  1.1  alnsn 
   3442  1.1  alnsn 	bpfjit_free_code(code);
   3443  1.1  alnsn }
   3444  1.1  alnsn 
   3445  1.6  alnsn ATF_TC(libbpfjit_opt_ld_abs_1);
   3446  1.6  alnsn ATF_TC_HEAD(libbpfjit_opt_ld_abs_1, tc)
   3447  1.1  alnsn {
   3448  1.1  alnsn 	atf_tc_set_md_var(tc, "descr",
   3449  1.1  alnsn 	    "Test JIT compilation with length optimization "
   3450  1.1  alnsn 	    "applied to BPF_LD+BPF_ABS");
   3451  1.1  alnsn }
   3452  1.1  alnsn 
   3453  1.6  alnsn ATF_TC_BODY(libbpfjit_opt_ld_abs_1, tc)
   3454  1.1  alnsn {
   3455  1.1  alnsn 	static struct bpf_insn insns[] = {
   3456  1.1  alnsn 		BPF_STMT(BPF_LD+BPF_H+BPF_ABS, 12),
   3457  1.1  alnsn 		BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, 0x800, 0, 8),
   3458  1.1  alnsn 		BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 26),
   3459  1.1  alnsn 		BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, 0x8003700f, 0, 2),
   3460  1.1  alnsn 		BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 30),
   3461  1.1  alnsn 		BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, 0x80037023, 3, 4),
   3462  1.1  alnsn 		BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, 0x80037023, 0, 3),
   3463  1.1  alnsn 		BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 30),
   3464  1.1  alnsn 		BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, 0x8003700f, 0, 1),
   3465  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_K, UINT32_MAX),
   3466  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_K, 0),
   3467  1.1  alnsn 	};
   3468  1.1  alnsn 
   3469  1.1  alnsn 	size_t i, j;
   3470  1.2  rmind 	bpfjit_func_t code;
   3471  1.1  alnsn 	uint8_t pkt[2][34] = {
   3472  1.1  alnsn 		{
   3473  1.1  alnsn 			0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 0x08, 0x00,
   3474  1.1  alnsn 			14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
   3475  1.1  alnsn 			0x80, 0x03, 0x70, 0x0f,
   3476  1.1  alnsn 			0x80, 0x03, 0x70, 0x23
   3477  1.1  alnsn 		},
   3478  1.1  alnsn 		{
   3479  1.1  alnsn 			0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 0x08, 0x00,
   3480  1.1  alnsn 			14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
   3481  1.1  alnsn 			0x80, 0x03, 0x70, 0x23,
   3482  1.1  alnsn 			0x80, 0x03, 0x70, 0x0f
   3483  1.1  alnsn 		}
   3484  1.1  alnsn 	};
   3485  1.1  alnsn 
   3486  1.1  alnsn 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
   3487  1.1  alnsn 
   3488  1.1  alnsn 	ATF_CHECK(bpf_validate(insns, insn_count));
   3489  1.1  alnsn 
   3490  1.5  alnsn 	code = bpfjit_generate_code(NULL, insns, insn_count);
   3491  1.1  alnsn 	ATF_REQUIRE(code != NULL);
   3492  1.1  alnsn 
   3493  1.1  alnsn 	for (i = 0; i < 2; i++) {
   3494  1.1  alnsn 		for (j = 1; j < sizeof(pkt[i]); j++)
   3495  1.5  alnsn 			ATF_CHECK(jitcall(code, pkt[i], j, j) == 0);
   3496  1.5  alnsn 		ATF_CHECK(jitcall(code, pkt[i], j, j) == UINT32_MAX);
   3497  1.1  alnsn 	}
   3498  1.1  alnsn 
   3499  1.1  alnsn 	bpfjit_free_code(code);
   3500  1.1  alnsn }
   3501  1.1  alnsn 
   3502  1.6  alnsn ATF_TC(libbpfjit_opt_ld_abs_2);
   3503  1.6  alnsn ATF_TC_HEAD(libbpfjit_opt_ld_abs_2, tc)
   3504  1.1  alnsn {
   3505  1.1  alnsn 	atf_tc_set_md_var(tc, "descr",
   3506  1.1  alnsn 	    "Test JIT compilation with length optimization "
   3507  1.1  alnsn 	    "applied to BPF_LD+BPF_ABS");
   3508  1.1  alnsn }
   3509  1.1  alnsn 
   3510  1.6  alnsn ATF_TC_BODY(libbpfjit_opt_ld_abs_2, tc)
   3511  1.1  alnsn {
   3512  1.1  alnsn 	static struct bpf_insn insns[] = {
   3513  1.1  alnsn 		BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 26),
   3514  1.1  alnsn 		BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, 0x8003700f, 0, 2),
   3515  1.1  alnsn 		BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 30),
   3516  1.1  alnsn 		BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, 0x80037023, 3, 6),
   3517  1.1  alnsn 		BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, 0x80037023, 0, 5),
   3518  1.1  alnsn 		BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 30),
   3519  1.1  alnsn 		BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, 0x8003700f, 0, 3),
   3520  1.1  alnsn 		BPF_STMT(BPF_LD+BPF_H+BPF_ABS, 12),
   3521  1.1  alnsn 		BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, 0x800, 0, 1),
   3522  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_K, UINT32_MAX),
   3523  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_K, 0),
   3524  1.1  alnsn 	};
   3525  1.1  alnsn 
   3526  1.1  alnsn 	size_t i, j;
   3527  1.2  rmind 	bpfjit_func_t code;
   3528  1.1  alnsn 	uint8_t pkt[2][34] = {
   3529  1.1  alnsn 		{
   3530  1.1  alnsn 			0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 0x08, 0x00,
   3531  1.1  alnsn 			14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
   3532  1.1  alnsn 			0x80, 0x03, 0x70, 0x0f,
   3533  1.1  alnsn 			0x80, 0x03, 0x70, 0x23
   3534  1.1  alnsn 		},
   3535  1.1  alnsn 		{
   3536  1.1  alnsn 			0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 0x08, 0x00,
   3537  1.1  alnsn 			14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
   3538  1.1  alnsn 			0x80, 0x03, 0x70, 0x23,
   3539  1.1  alnsn 			0x80, 0x03, 0x70, 0x0f
   3540  1.1  alnsn 		}
   3541  1.1  alnsn 	};
   3542  1.1  alnsn 
   3543  1.1  alnsn 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
   3544  1.1  alnsn 
   3545  1.1  alnsn 	ATF_CHECK(bpf_validate(insns, insn_count));
   3546  1.1  alnsn 
   3547  1.5  alnsn 	code = bpfjit_generate_code(NULL, insns, insn_count);
   3548  1.1  alnsn 	ATF_REQUIRE(code != NULL);
   3549  1.1  alnsn 
   3550  1.1  alnsn 	for (i = 0; i < 2; i++) {
   3551  1.1  alnsn 		for (j = 1; j < sizeof(pkt[i]); j++)
   3552  1.5  alnsn 			ATF_CHECK(jitcall(code, pkt[i], j, j) == 0);
   3553  1.5  alnsn 		ATF_CHECK(jitcall(code, pkt[i], j, j) == UINT32_MAX);
   3554  1.1  alnsn 	}
   3555  1.1  alnsn 
   3556  1.1  alnsn 	bpfjit_free_code(code);
   3557  1.1  alnsn }
   3558  1.1  alnsn 
   3559  1.6  alnsn ATF_TC(libbpfjit_opt_ld_abs_3);
   3560  1.6  alnsn ATF_TC_HEAD(libbpfjit_opt_ld_abs_3, tc)
   3561  1.1  alnsn {
   3562  1.1  alnsn 	atf_tc_set_md_var(tc, "descr",
   3563  1.1  alnsn 	    "Test JIT compilation with length optimization "
   3564  1.1  alnsn 	    "applied to BPF_LD+BPF_ABS");
   3565  1.1  alnsn }
   3566  1.1  alnsn 
   3567  1.6  alnsn ATF_TC_BODY(libbpfjit_opt_ld_abs_3, tc)
   3568  1.1  alnsn {
   3569  1.1  alnsn 	static struct bpf_insn insns[] = {
   3570  1.1  alnsn 		BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 30),
   3571  1.1  alnsn 		BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, 0x80037023, 0, 2),
   3572  1.1  alnsn 		BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 26),
   3573  1.1  alnsn 		BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, 0x8003700f, 3, 6),
   3574  1.1  alnsn 		BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, 0x8003700f, 0, 5),
   3575  1.1  alnsn 		BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 26),
   3576  1.1  alnsn 		BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, 0x80037023, 0, 3),
   3577  1.1  alnsn 		BPF_STMT(BPF_LD+BPF_H+BPF_ABS, 12),
   3578  1.1  alnsn 		BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, 0x800, 0, 1),
   3579  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_K, UINT32_MAX),
   3580  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_K, 0),
   3581  1.1  alnsn 	};
   3582  1.1  alnsn 
   3583  1.1  alnsn 	size_t i, j;
   3584  1.2  rmind 	bpfjit_func_t code;
   3585  1.1  alnsn 	uint8_t pkt[2][34] = {
   3586  1.1  alnsn 		{
   3587  1.1  alnsn 			0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 0x08, 0x00,
   3588  1.1  alnsn 			14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
   3589  1.1  alnsn 			0x80, 0x03, 0x70, 0x0f,
   3590  1.1  alnsn 			0x80, 0x03, 0x70, 0x23
   3591  1.1  alnsn 		},
   3592  1.1  alnsn 		{
   3593  1.1  alnsn 			0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 0x08, 0x00,
   3594  1.1  alnsn 			14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
   3595  1.1  alnsn 			0x80, 0x03, 0x70, 0x23,
   3596  1.1  alnsn 			0x80, 0x03, 0x70, 0x0f
   3597  1.1  alnsn 		}
   3598  1.1  alnsn 	};
   3599  1.1  alnsn 
   3600  1.1  alnsn 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
   3601  1.1  alnsn 
   3602  1.1  alnsn 	ATF_CHECK(bpf_validate(insns, insn_count));
   3603  1.1  alnsn 
   3604  1.5  alnsn 	code = bpfjit_generate_code(NULL, insns, insn_count);
   3605  1.1  alnsn 	ATF_REQUIRE(code != NULL);
   3606  1.1  alnsn 
   3607  1.1  alnsn 	for (i = 0; i < 2; i++) {
   3608  1.1  alnsn 		for (j = 1; j < sizeof(pkt[i]); j++)
   3609  1.5  alnsn 			ATF_CHECK(jitcall(code, pkt[i], j, j) == 0);
   3610  1.5  alnsn 		ATF_CHECK(jitcall(code, pkt[i], j, j) == UINT32_MAX);
   3611  1.1  alnsn 	}
   3612  1.1  alnsn 
   3613  1.1  alnsn 	bpfjit_free_code(code);
   3614  1.1  alnsn }
   3615  1.1  alnsn 
   3616  1.6  alnsn ATF_TC(libbpfjit_opt_ld_ind_1);
   3617  1.6  alnsn ATF_TC_HEAD(libbpfjit_opt_ld_ind_1, tc)
   3618  1.1  alnsn {
   3619  1.1  alnsn 	atf_tc_set_md_var(tc, "descr",
   3620  1.1  alnsn 	    "Test JIT compilation with length optimization "
   3621  1.1  alnsn 	    "applied to BPF_LD+BPF_IND");
   3622  1.1  alnsn }
   3623  1.1  alnsn 
   3624  1.6  alnsn ATF_TC_BODY(libbpfjit_opt_ld_ind_1, tc)
   3625  1.1  alnsn {
   3626  1.1  alnsn 	static struct bpf_insn insns[] = {
   3627  1.1  alnsn 		BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 12),
   3628  1.1  alnsn 		BPF_STMT(BPF_LD+BPF_H+BPF_IND, 0),
   3629  1.1  alnsn 		BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, 0x800, 0, 8),
   3630  1.1  alnsn 		BPF_STMT(BPF_LD+BPF_W+BPF_IND, 14),
   3631  1.1  alnsn 		BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, 0x8003700f, 0, 2),
   3632  1.1  alnsn 		BPF_STMT(BPF_LD+BPF_W+BPF_IND, 18),
   3633  1.1  alnsn 		BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, 0x80037023, 3, 4),
   3634  1.1  alnsn 		BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, 0x80037023, 0, 3),
   3635  1.1  alnsn 		BPF_STMT(BPF_LD+BPF_W+BPF_IND, 18),
   3636  1.1  alnsn 		BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, 0x8003700f, 0, 1),
   3637  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_K, UINT32_MAX),
   3638  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_K, 0),
   3639  1.1  alnsn 	};
   3640  1.1  alnsn 
   3641  1.1  alnsn 	size_t i, j;
   3642  1.2  rmind 	bpfjit_func_t code;
   3643  1.1  alnsn 	uint8_t pkt[2][34] = {
   3644  1.1  alnsn 		{
   3645  1.1  alnsn 			0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 0x08, 0x00,
   3646  1.1  alnsn 			14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
   3647  1.1  alnsn 			0x80, 0x03, 0x70, 0x0f,
   3648  1.1  alnsn 			0x80, 0x03, 0x70, 0x23
   3649  1.1  alnsn 		},
   3650  1.1  alnsn 		{
   3651  1.1  alnsn 			0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 0x08, 0x00,
   3652  1.1  alnsn 			14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
   3653  1.1  alnsn 			0x80, 0x03, 0x70, 0x23,
   3654  1.1  alnsn 			0x80, 0x03, 0x70, 0x0f
   3655  1.1  alnsn 		}
   3656  1.1  alnsn 	};
   3657  1.1  alnsn 
   3658  1.1  alnsn 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
   3659  1.1  alnsn 
   3660  1.1  alnsn 	ATF_CHECK(bpf_validate(insns, insn_count));
   3661  1.1  alnsn 
   3662  1.5  alnsn 	code = bpfjit_generate_code(NULL, insns, insn_count);
   3663  1.1  alnsn 	ATF_REQUIRE(code != NULL);
   3664  1.1  alnsn 
   3665  1.1  alnsn 	for (i = 0; i < 2; i++) {
   3666  1.1  alnsn 		for (j = 1; j < sizeof(pkt[i]); j++)
   3667  1.5  alnsn 			ATF_CHECK(jitcall(code, pkt[i], j, j) == 0);
   3668  1.5  alnsn 		ATF_CHECK(jitcall(code, pkt[i], j, j) == UINT32_MAX);
   3669  1.1  alnsn 	}
   3670  1.1  alnsn 
   3671  1.1  alnsn 	bpfjit_free_code(code);
   3672  1.1  alnsn }
   3673  1.1  alnsn 
   3674  1.6  alnsn ATF_TC(libbpfjit_opt_ld_ind_2);
   3675  1.6  alnsn ATF_TC_HEAD(libbpfjit_opt_ld_ind_2, tc)
   3676  1.1  alnsn {
   3677  1.1  alnsn 	atf_tc_set_md_var(tc, "descr",
   3678  1.1  alnsn 	    "Test JIT compilation with length optimization "
   3679  1.1  alnsn 	    "applied to BPF_LD+BPF_IND");
   3680  1.1  alnsn }
   3681  1.1  alnsn 
   3682  1.6  alnsn ATF_TC_BODY(libbpfjit_opt_ld_ind_2, tc)
   3683  1.1  alnsn {
   3684  1.1  alnsn 	static struct bpf_insn insns[] = {
   3685  1.1  alnsn 		BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 0),
   3686  1.1  alnsn 		BPF_STMT(BPF_LD+BPF_W+BPF_IND, 26),
   3687  1.1  alnsn 		BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, 0x8003700f, 0, 2),
   3688  1.1  alnsn 		BPF_STMT(BPF_LD+BPF_W+BPF_IND, 30),
   3689  1.1  alnsn 		BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, 0x80037023, 3, 6),
   3690  1.1  alnsn 		BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, 0x80037023, 0, 5),
   3691  1.1  alnsn 		BPF_STMT(BPF_LD+BPF_W+BPF_IND, 30),
   3692  1.1  alnsn 		BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, 0x8003700f, 0, 3),
   3693  1.1  alnsn 		BPF_STMT(BPF_LD+BPF_H+BPF_IND, 12),
   3694  1.1  alnsn 		BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, 0x800, 0, 1),
   3695  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_K, UINT32_MAX),
   3696  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_K, 0),
   3697  1.1  alnsn 	};
   3698  1.1  alnsn 
   3699  1.1  alnsn 	size_t i, j;
   3700  1.2  rmind 	bpfjit_func_t code;
   3701  1.1  alnsn 	uint8_t pkt[2][34] = {
   3702  1.1  alnsn 		{
   3703  1.1  alnsn 			0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 0x08, 0x00,
   3704  1.1  alnsn 			14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
   3705  1.1  alnsn 			0x80, 0x03, 0x70, 0x0f,
   3706  1.1  alnsn 			0x80, 0x03, 0x70, 0x23
   3707  1.1  alnsn 		},
   3708  1.1  alnsn 		{
   3709  1.1  alnsn 			0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 0x08, 0x00,
   3710  1.1  alnsn 			14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
   3711  1.1  alnsn 			0x80, 0x03, 0x70, 0x23,
   3712  1.1  alnsn 			0x80, 0x03, 0x70, 0x0f
   3713  1.1  alnsn 		}
   3714  1.1  alnsn 	};
   3715  1.1  alnsn 
   3716  1.1  alnsn 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
   3717  1.1  alnsn 
   3718  1.1  alnsn 	ATF_CHECK(bpf_validate(insns, insn_count));
   3719  1.1  alnsn 
   3720  1.5  alnsn 	code = bpfjit_generate_code(NULL, insns, insn_count);
   3721  1.1  alnsn 	ATF_REQUIRE(code != NULL);
   3722  1.1  alnsn 
   3723  1.1  alnsn 	for (i = 0; i < 2; i++) {
   3724  1.1  alnsn 		for (j = 1; j < sizeof(pkt[i]); j++)
   3725  1.5  alnsn 			ATF_CHECK(jitcall(code, pkt[i], j, j) == 0);
   3726  1.5  alnsn 		ATF_CHECK(jitcall(code, pkt[i], j, j) == UINT32_MAX);
   3727  1.1  alnsn 	}
   3728  1.1  alnsn 
   3729  1.1  alnsn 	bpfjit_free_code(code);
   3730  1.1  alnsn }
   3731  1.1  alnsn 
   3732  1.6  alnsn ATF_TC(libbpfjit_opt_ld_ind_3);
   3733  1.6  alnsn ATF_TC_HEAD(libbpfjit_opt_ld_ind_3, tc)
   3734  1.1  alnsn {
   3735  1.1  alnsn 	atf_tc_set_md_var(tc, "descr",
   3736  1.1  alnsn 	    "Test JIT compilation with length optimization "
   3737  1.1  alnsn 	    "applied to BPF_LD+BPF_IND");
   3738  1.1  alnsn }
   3739  1.1  alnsn 
   3740  1.6  alnsn ATF_TC_BODY(libbpfjit_opt_ld_ind_3, tc)
   3741  1.1  alnsn {
   3742  1.1  alnsn 	static struct bpf_insn insns[] = {
   3743  1.1  alnsn 		BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 15),
   3744  1.1  alnsn 		BPF_STMT(BPF_LD+BPF_W+BPF_IND, 15),
   3745  1.1  alnsn 		BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, 0x80037023, 0, 2),
   3746  1.1  alnsn 		BPF_STMT(BPF_LD+BPF_W+BPF_IND, 11),
   3747  1.1  alnsn 		BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, 0x8003700f, 3, 7),
   3748  1.1  alnsn 		BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, 0x8003700f, 0, 6),
   3749  1.1  alnsn 		BPF_STMT(BPF_LD+BPF_W+BPF_IND, 11),
   3750  1.1  alnsn 		BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, 0x80037023, 0, 4),
   3751  1.1  alnsn 		BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 0),
   3752  1.1  alnsn 		BPF_STMT(BPF_LD+BPF_H+BPF_IND, 12),
   3753  1.1  alnsn 		BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, 0x800, 0, 1),
   3754  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_K, UINT32_MAX),
   3755  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_K, 0),
   3756  1.1  alnsn 	};
   3757  1.1  alnsn 
   3758  1.1  alnsn 	size_t i, j;
   3759  1.2  rmind 	bpfjit_func_t code;
   3760  1.1  alnsn 	uint8_t pkt[2][34] = {
   3761  1.1  alnsn 		{
   3762  1.1  alnsn 			0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 0x08, 0x00,
   3763  1.1  alnsn 			14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
   3764  1.1  alnsn 			0x80, 0x03, 0x70, 0x0f,
   3765  1.1  alnsn 			0x80, 0x03, 0x70, 0x23
   3766  1.1  alnsn 		},
   3767  1.1  alnsn 		{
   3768  1.1  alnsn 			0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 0x08, 0x00,
   3769  1.1  alnsn 			14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
   3770  1.1  alnsn 			0x80, 0x03, 0x70, 0x23,
   3771  1.1  alnsn 			0x80, 0x03, 0x70, 0x0f
   3772  1.1  alnsn 		}
   3773  1.1  alnsn 	};
   3774  1.1  alnsn 
   3775  1.1  alnsn 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
   3776  1.1  alnsn 
   3777  1.1  alnsn 	ATF_CHECK(bpf_validate(insns, insn_count));
   3778  1.1  alnsn 
   3779  1.5  alnsn 	code = bpfjit_generate_code(NULL, insns, insn_count);
   3780  1.1  alnsn 	ATF_REQUIRE(code != NULL);
   3781  1.1  alnsn 
   3782  1.1  alnsn 	for (i = 0; i < 2; i++) {
   3783  1.1  alnsn 		for (j = 1; j < sizeof(pkt[i]); j++)
   3784  1.5  alnsn 			ATF_CHECK(jitcall(code, pkt[i], j, j) == 0);
   3785  1.5  alnsn 		ATF_CHECK(jitcall(code, pkt[i], j, j) == UINT32_MAX);
   3786  1.1  alnsn 	}
   3787  1.1  alnsn 
   3788  1.1  alnsn 	bpfjit_free_code(code);
   3789  1.1  alnsn }
   3790  1.1  alnsn 
   3791  1.6  alnsn ATF_TC(libbpfjit_opt_ld_ind_4);
   3792  1.6  alnsn ATF_TC_HEAD(libbpfjit_opt_ld_ind_4, tc)
   3793  1.1  alnsn {
   3794  1.1  alnsn 	atf_tc_set_md_var(tc, "descr",
   3795  1.1  alnsn 	    "Test JIT compilation with length optimization "
   3796  1.1  alnsn 	    "applied to BPF_LD+BPF_IND");
   3797  1.1  alnsn }
   3798  1.1  alnsn 
   3799  1.6  alnsn ATF_TC_BODY(libbpfjit_opt_ld_ind_4, tc)
   3800  1.1  alnsn {
   3801  1.1  alnsn 	static struct bpf_insn insns[] = {
   3802  1.1  alnsn 		BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 11),
   3803  1.1  alnsn 		BPF_STMT(BPF_LD+BPF_W+BPF_IND, 19),
   3804  1.1  alnsn 		BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, 0x80037023, 0, 2),
   3805  1.1  alnsn 		BPF_STMT(BPF_LD+BPF_W+BPF_IND, 15),
   3806  1.1  alnsn 		BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, 0x8003700f, 3, 7),
   3807  1.1  alnsn 		BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, 0x8003700f, 0, 6),
   3808  1.1  alnsn 		BPF_STMT(BPF_LD+BPF_W+BPF_IND, 15),
   3809  1.1  alnsn 		BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, 0x80037023, 0, 4),
   3810  1.1  alnsn 		BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 0),
   3811  1.1  alnsn 		BPF_STMT(BPF_LD+BPF_H+BPF_IND, 12),
   3812  1.1  alnsn 		BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, 0x800, 0, 1),
   3813  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_K, UINT32_MAX),
   3814  1.1  alnsn 		BPF_STMT(BPF_RET+BPF_K, 0),
   3815  1.1  alnsn 	};
   3816  1.1  alnsn 
   3817  1.1  alnsn 	size_t i, j;
   3818  1.2  rmind 	bpfjit_func_t code;
   3819  1.1  alnsn 	uint8_t pkt[2][34] = {
   3820  1.1  alnsn 		{
   3821  1.1  alnsn 			0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 0x08, 0x00,
   3822  1.1  alnsn 			14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
   3823  1.1  alnsn 			0x80, 0x03, 0x70, 0x0f,
   3824  1.1  alnsn 			0x80, 0x03, 0x70, 0x23
   3825  1.1  alnsn 		},
   3826  1.1  alnsn 		{
   3827  1.1  alnsn 			0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 0x08, 0x00,
   3828  1.1  alnsn 			14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
   3829  1.1  alnsn 			0x80, 0x03, 0x70, 0x23,
   3830  1.1  alnsn 			0x80, 0x03, 0x70, 0x0f
   3831  1.1  alnsn 		}
   3832  1.1  alnsn 	};
   3833  1.1  alnsn 
   3834  1.1  alnsn 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
   3835  1.1  alnsn 
   3836  1.1  alnsn 	ATF_CHECK(bpf_validate(insns, insn_count));
   3837  1.1  alnsn 
   3838  1.5  alnsn 	code = bpfjit_generate_code(NULL, insns, insn_count);
   3839  1.1  alnsn 	ATF_REQUIRE(code != NULL);
   3840  1.1  alnsn 
   3841  1.1  alnsn 	for (i = 0; i < 2; i++) {
   3842  1.1  alnsn 		for (j = 1; j < sizeof(pkt[i]); j++)
   3843  1.5  alnsn 			ATF_CHECK(jitcall(code, pkt[i], j, j) == 0);
   3844  1.5  alnsn 		ATF_CHECK(jitcall(code, pkt[i], j, j) == UINT32_MAX);
   3845  1.1  alnsn 	}
   3846  1.1  alnsn 
   3847  1.1  alnsn 	bpfjit_free_code(code);
   3848  1.1  alnsn }
   3849  1.1  alnsn 
   3850  1.6  alnsn ATF_TC(libbpfjit_abc_ja);
   3851  1.6  alnsn ATF_TC_HEAD(libbpfjit_abc_ja, tc)
   3852  1.3  alnsn {
   3853  1.3  alnsn 	atf_tc_set_md_var(tc, "descr",
   3854  1.3  alnsn 	    "Test ABC optimization with a single BPF_JMP+BPF_JA");
   3855  1.3  alnsn }
   3856  1.3  alnsn 
   3857  1.6  alnsn ATF_TC_BODY(libbpfjit_abc_ja, tc)
   3858  1.3  alnsn {
   3859  1.3  alnsn 	static struct bpf_insn insns[] = {
   3860  1.3  alnsn 		BPF_STMT(BPF_LD+BPF_B+BPF_ABS, 3), /* min. length 4 */
   3861  1.3  alnsn 		BPF_STMT(BPF_JMP+BPF_JA, 2),
   3862  1.3  alnsn 		BPF_STMT(BPF_LD+BPF_B+BPF_ABS, UINT32_MAX - 1),
   3863  1.3  alnsn 		BPF_STMT(BPF_RET+BPF_K, 0),
   3864  1.3  alnsn 		BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 2), /* min. length 6 */
   3865  1.3  alnsn 		BPF_STMT(BPF_RET+BPF_A, 0),
   3866  1.3  alnsn 		BPF_STMT(BPF_RET+BPF_K, 1),
   3867  1.3  alnsn 		BPF_STMT(BPF_LD+BPF_B+BPF_ABS, 6),
   3868  1.3  alnsn 		BPF_STMT(BPF_RET+BPF_K, 2),
   3869  1.3  alnsn 		BPF_STMT(BPF_LD+BPF_B+BPF_ABS, 7),
   3870  1.3  alnsn 		BPF_STMT(BPF_RET+BPF_K, 3),
   3871  1.3  alnsn 	};
   3872  1.3  alnsn 
   3873  1.3  alnsn 	bpfjit_func_t code;
   3874  1.3  alnsn 	uint8_t pkt[6] = {0, 0, /* UINT32_MAX: */ 255, 255, 255, 255};
   3875  1.3  alnsn 
   3876  1.3  alnsn 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
   3877  1.3  alnsn 
   3878  1.3  alnsn 	ATF_CHECK(bpf_validate(insns, insn_count));
   3879  1.3  alnsn 
   3880  1.5  alnsn 	code = bpfjit_generate_code(NULL, insns, insn_count);
   3881  1.3  alnsn 	ATF_REQUIRE(code != NULL);
   3882  1.3  alnsn 
   3883  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 1, 1) == 0);
   3884  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 2, 2) == 0);
   3885  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 3, 3) == 0);
   3886  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 4, 4) == 0);
   3887  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 5, 5) == 0);
   3888  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 6, 6) == UINT32_MAX);
   3889  1.3  alnsn 
   3890  1.3  alnsn 	bpfjit_free_code(code);
   3891  1.3  alnsn }
   3892  1.3  alnsn 
   3893  1.6  alnsn ATF_TC(libbpfjit_abc_ja_over);
   3894  1.6  alnsn ATF_TC_HEAD(libbpfjit_abc_ja_over, tc)
   3895  1.3  alnsn {
   3896  1.3  alnsn 	atf_tc_set_md_var(tc, "descr",
   3897  1.3  alnsn 	    "Test ABC optimization when BPF_JMP+BPF_JA jumps over all loads");
   3898  1.3  alnsn }
   3899  1.3  alnsn 
   3900  1.6  alnsn ATF_TC_BODY(libbpfjit_abc_ja_over, tc)
   3901  1.3  alnsn {
   3902  1.3  alnsn 	static struct bpf_insn insns[] = {
   3903  1.3  alnsn 		BPF_STMT(BPF_JMP+BPF_JA, 2),
   3904  1.3  alnsn 		BPF_STMT(BPF_LD+BPF_B+BPF_ABS, 3),
   3905  1.3  alnsn 		BPF_STMT(BPF_RET+BPF_K, 0),
   3906  1.3  alnsn 		BPF_STMT(BPF_RET+BPF_K, UINT32_MAX),
   3907  1.3  alnsn 		BPF_STMT(BPF_LD+BPF_B+BPF_ABS, 4),
   3908  1.3  alnsn 		BPF_STMT(BPF_RET+BPF_K, 1),
   3909  1.3  alnsn 		BPF_STMT(BPF_LD+BPF_B+BPF_ABS, 5),
   3910  1.3  alnsn 		BPF_STMT(BPF_RET+BPF_K, 2),
   3911  1.3  alnsn 		BPF_STMT(BPF_LD+BPF_B+BPF_ABS, 6),
   3912  1.3  alnsn 		BPF_STMT(BPF_RET+BPF_K, 3),
   3913  1.3  alnsn 	};
   3914  1.3  alnsn 
   3915  1.3  alnsn 	bpfjit_func_t code;
   3916  1.3  alnsn 	uint8_t pkt[1]; /* the program doesn't read any data */
   3917  1.3  alnsn 
   3918  1.3  alnsn 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
   3919  1.3  alnsn 
   3920  1.3  alnsn 	ATF_CHECK(bpf_validate(insns, insn_count));
   3921  1.3  alnsn 
   3922  1.5  alnsn 	code = bpfjit_generate_code(NULL, insns, insn_count);
   3923  1.3  alnsn 	ATF_REQUIRE(code != NULL);
   3924  1.3  alnsn 
   3925  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 1, 1) == UINT32_MAX);
   3926  1.3  alnsn 
   3927  1.3  alnsn 	bpfjit_free_code(code);
   3928  1.3  alnsn }
   3929  1.3  alnsn 
   3930  1.6  alnsn ATF_TC(libbpfjit_abc_ld_chain);
   3931  1.6  alnsn ATF_TC_HEAD(libbpfjit_abc_ld_chain, tc)
   3932  1.3  alnsn {
   3933  1.3  alnsn 	atf_tc_set_md_var(tc, "descr",
   3934  1.3  alnsn 	    "Test ABC optimization of a chain of BPF_LD instructions "
   3935  1.3  alnsn 	    "with exits leading to a single BPF_RET");
   3936  1.3  alnsn }
   3937  1.3  alnsn 
   3938  1.6  alnsn ATF_TC_BODY(libbpfjit_abc_ld_chain, tc)
   3939  1.3  alnsn {
   3940  1.3  alnsn 	static struct bpf_insn insns[] = {
   3941  1.3  alnsn 		BPF_STMT(BPF_LD+BPF_B+BPF_ABS, 3), /* min. length 4 */
   3942  1.3  alnsn 		BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, 8, 0, 4),
   3943  1.3  alnsn 		BPF_STMT(BPF_LD+BPF_H+BPF_ABS, 4), /* min. length 6 */
   3944  1.3  alnsn 		BPF_JUMP(BPF_JMP+BPF_JGE+BPF_K, 7, 0, 2),
   3945  1.3  alnsn 		BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 6), /* min. length 10 */
   3946  1.3  alnsn 		BPF_JUMP(BPF_JMP+BPF_JGT+BPF_K, 6, 0, 1),
   3947  1.3  alnsn 		BPF_STMT(BPF_RET+BPF_K, 123456789),
   3948  1.3  alnsn 		BPF_STMT(BPF_RET+BPF_K, 987654321),
   3949  1.3  alnsn 	};
   3950  1.3  alnsn 
   3951  1.3  alnsn 	bpfjit_func_t code;
   3952  1.3  alnsn 	uint8_t pkt[10] = {};
   3953  1.3  alnsn 
   3954  1.3  alnsn 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
   3955  1.3  alnsn 
   3956  1.3  alnsn 	ATF_CHECK(bpf_validate(insns, insn_count));
   3957  1.3  alnsn 
   3958  1.5  alnsn 	code = bpfjit_generate_code(NULL, insns, insn_count);
   3959  1.3  alnsn 	ATF_REQUIRE(code != NULL);
   3960  1.3  alnsn 
   3961  1.3  alnsn 	/* Packet is too short. */
   3962  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 1, 1) == 0);
   3963  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 2, 2) == 0);
   3964  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 3, 3) == 0);
   3965  1.3  alnsn 
   3966  1.3  alnsn 	/* !(pkt[3] == 8) => return 123456789 */
   3967  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 4, 4) == 123456789);
   3968  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 5, 5) == 123456789);
   3969  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 6, 6) == 123456789);
   3970  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 7, 7) == 123456789);
   3971  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 8, 8) == 123456789);
   3972  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 9, 9) == 123456789);
   3973  1.3  alnsn 
   3974  1.3  alnsn 	/* !(pkt[4:2] >= 7) => too short or return 123456789 */
   3975  1.3  alnsn 	pkt[3] = 8;
   3976  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 1, 1) == 0);
   3977  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 2, 2) == 0);
   3978  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 3, 3) == 0);
   3979  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 4, 4) == 0);
   3980  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 5, 5) == 0);
   3981  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 6, 6) == 123456789);
   3982  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 9, 9) == 123456789);
   3983  1.3  alnsn 
   3984  1.3  alnsn 	/* !(pkt[6:4] > 6) => too short or return 987654321 */
   3985  1.3  alnsn 	pkt[4] = pkt[5] = 1;
   3986  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 1, 1) == 0);
   3987  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 2, 2) == 0);
   3988  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 3, 3) == 0);
   3989  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 4, 4) == 0);
   3990  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 5, 5) == 0);
   3991  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 6, 6) == 0);
   3992  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 7, 7) == 0);
   3993  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 8, 8) == 0);
   3994  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 9, 9) == 0);
   3995  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 10, 10) == 987654321);
   3996  1.3  alnsn 
   3997  1.3  alnsn 	/* (pkt[6:4] > 6) => too short or return 123456789 */
   3998  1.3  alnsn 	pkt[6] = pkt[7] = pkt[8] = pkt[9] = 1;
   3999  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 1, 1) == 0);
   4000  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 2, 2) == 0);
   4001  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 3, 3) == 0);
   4002  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 4, 4) == 0);
   4003  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 5, 5) == 0);
   4004  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 6, 6) == 0);
   4005  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 7, 7) == 0);
   4006  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 8, 8) == 0);
   4007  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 9, 9) == 0);
   4008  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 10, 10) == 123456789);
   4009  1.3  alnsn 
   4010  1.3  alnsn 	bpfjit_free_code(code);
   4011  1.3  alnsn }
   4012  1.3  alnsn 
   4013  1.6  alnsn ATF_TC(libbpfjit_examples_1);
   4014  1.6  alnsn ATF_TC_HEAD(libbpfjit_examples_1, tc)
   4015  1.3  alnsn {
   4016  1.3  alnsn 	atf_tc_set_md_var(tc, "descr",
   4017  1.3  alnsn 	    "Test the first example from bpf(4) - "
   4018  1.3  alnsn 	    "accept Reverse ARP requests");
   4019  1.3  alnsn }
   4020  1.3  alnsn 
   4021  1.6  alnsn ATF_TC_BODY(libbpfjit_examples_1, tc)
   4022  1.3  alnsn {
   4023  1.3  alnsn 	/*
   4024  1.3  alnsn 	 * The following filter is taken from the Reverse ARP
   4025  1.3  alnsn 	 * Daemon. It accepts only Reverse ARP requests.
   4026  1.3  alnsn 	 */
   4027  1.3  alnsn 	struct bpf_insn insns[] = {
   4028  1.3  alnsn 		BPF_STMT(BPF_LD+BPF_H+BPF_ABS, 12),
   4029  1.3  alnsn 		BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, 0x8035, 0, 3),
   4030  1.3  alnsn 		BPF_STMT(BPF_LD+BPF_H+BPF_ABS, 20),
   4031  1.3  alnsn 		BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, 3, 0, 1),
   4032  1.3  alnsn 		BPF_STMT(BPF_RET+BPF_K, 42),
   4033  1.3  alnsn 		BPF_STMT(BPF_RET+BPF_K, 0),
   4034  1.3  alnsn 	};
   4035  1.3  alnsn 
   4036  1.3  alnsn 	bpfjit_func_t code;
   4037  1.3  alnsn 	uint8_t pkt[22] = {};
   4038  1.3  alnsn 
   4039  1.3  alnsn 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
   4040  1.3  alnsn 
   4041  1.3  alnsn 	ATF_CHECK(bpf_validate(insns, insn_count));
   4042  1.3  alnsn 
   4043  1.5  alnsn 	code = bpfjit_generate_code(NULL, insns, insn_count);
   4044  1.3  alnsn 	ATF_REQUIRE(code != NULL);
   4045  1.3  alnsn 
   4046  1.3  alnsn 	/* Packet is too short. */
   4047  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 1, 1) == 0);
   4048  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 2, 2) == 0);
   4049  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 3, 3) == 0);
   4050  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 4, 4) == 0);
   4051  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 5, 5) == 0);
   4052  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 6, 6) == 0);
   4053  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 7, 7) == 0);
   4054  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 8, 8) == 0);
   4055  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 9, 9) == 0);
   4056  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 10, 10) == 0);
   4057  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 11, 11) == 0);
   4058  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 12, 12) == 0);
   4059  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 13, 13) == 0);
   4060  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 14, 14) == 0);
   4061  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 15, 15) == 0);
   4062  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 16, 16) == 0);
   4063  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 17, 17) == 0);
   4064  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 18, 18) == 0);
   4065  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 19, 19) == 0);
   4066  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 20, 20) == 0);
   4067  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 21, 21) == 0);
   4068  1.3  alnsn 
   4069  1.3  alnsn 	/* The packet doesn't match. */
   4070  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 22, 22) == 0);
   4071  1.3  alnsn 
   4072  1.3  alnsn 	/* Still no match after setting the protocol field. */
   4073  1.3  alnsn 	pkt[12] = 0x80; pkt[13] = 0x35;
   4074  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 22, 22) == 0);
   4075  1.3  alnsn 
   4076  1.3  alnsn 	/* Set RARP message type. */
   4077  1.3  alnsn 	pkt[21] = 3;
   4078  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 22, 22) == 42);
   4079  1.3  alnsn 
   4080  1.3  alnsn 	/* Packet is too short. */
   4081  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 1, 1) == 0);
   4082  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 2, 2) == 0);
   4083  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 3, 3) == 0);
   4084  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 4, 4) == 0);
   4085  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 5, 5) == 0);
   4086  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 6, 6) == 0);
   4087  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 7, 7) == 0);
   4088  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 8, 8) == 0);
   4089  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 9, 9) == 0);
   4090  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 10, 10) == 0);
   4091  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 11, 11) == 0);
   4092  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 12, 12) == 0);
   4093  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 13, 13) == 0);
   4094  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 14, 14) == 0);
   4095  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 15, 15) == 0);
   4096  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 16, 16) == 0);
   4097  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 17, 17) == 0);
   4098  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 18, 18) == 0);
   4099  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 19, 19) == 0);
   4100  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 20, 20) == 0);
   4101  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 21, 21) == 0);
   4102  1.3  alnsn 
   4103  1.3  alnsn 	/* Change RARP message type. */
   4104  1.3  alnsn 	pkt[20] = 3;
   4105  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 22, 22) == 0);
   4106  1.3  alnsn 
   4107  1.3  alnsn 	bpfjit_free_code(code);
   4108  1.3  alnsn }
   4109  1.3  alnsn 
   4110  1.6  alnsn ATF_TC(libbpfjit_examples_2);
   4111  1.6  alnsn ATF_TC_HEAD(libbpfjit_examples_2, tc)
   4112  1.3  alnsn {
   4113  1.3  alnsn 	atf_tc_set_md_var(tc, "descr",
   4114  1.3  alnsn 	    "Test the second example from bpf(4) - "
   4115  1.3  alnsn 	    "accept IP packets between two specified hosts");
   4116  1.3  alnsn }
   4117  1.3  alnsn 
   4118  1.6  alnsn ATF_TC_BODY(libbpfjit_examples_2, tc)
   4119  1.3  alnsn {
   4120  1.3  alnsn 	/*
   4121  1.3  alnsn 	 * This filter accepts only IP packets between host 128.3.112.15
   4122  1.3  alnsn 	 * and 128.3.112.35.
   4123  1.3  alnsn 	 */
   4124  1.3  alnsn 	static struct bpf_insn insns[] = {
   4125  1.3  alnsn 		BPF_STMT(BPF_LD+BPF_H+BPF_ABS, 12),
   4126  1.3  alnsn 		BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, 0x0800, 0, 8),
   4127  1.3  alnsn 		BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 26),
   4128  1.3  alnsn 		BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, 0x8003700f, 0, 2),
   4129  1.3  alnsn 		BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 30),
   4130  1.3  alnsn 		BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, 0x80037023, 3, 4),
   4131  1.3  alnsn 		BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, 0x80037023, 0, 3),
   4132  1.3  alnsn 		BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 30),
   4133  1.3  alnsn 		BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, 0x8003700f, 0, 1),
   4134  1.3  alnsn 		BPF_STMT(BPF_RET+BPF_K, UINT32_MAX),
   4135  1.3  alnsn 		BPF_STMT(BPF_RET+BPF_K, 0),
   4136  1.3  alnsn 	};
   4137  1.3  alnsn 
   4138  1.3  alnsn 	bpfjit_func_t code;
   4139  1.3  alnsn 	uint8_t pkt[34] = {};
   4140  1.3  alnsn 
   4141  1.3  alnsn 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
   4142  1.3  alnsn 
   4143  1.3  alnsn 	ATF_CHECK(bpf_validate(insns, insn_count));
   4144  1.3  alnsn 
   4145  1.5  alnsn 	code = bpfjit_generate_code(NULL, insns, insn_count);
   4146  1.3  alnsn 	ATF_REQUIRE(code != NULL);
   4147  1.3  alnsn 
   4148  1.3  alnsn 	/* Packet is too short. */
   4149  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 1, 1) == 0);
   4150  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 2, 2) == 0);
   4151  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 3, 3) == 0);
   4152  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 4, 4) == 0);
   4153  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 5, 5) == 0);
   4154  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 6, 6) == 0);
   4155  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 7, 7) == 0);
   4156  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 8, 8) == 0);
   4157  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 9, 9) == 0);
   4158  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 10, 10) == 0);
   4159  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 11, 11) == 0);
   4160  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 12, 12) == 0);
   4161  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 13, 13) == 0);
   4162  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 14, 14) == 0);
   4163  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 15, 15) == 0);
   4164  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 16, 16) == 0);
   4165  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 17, 17) == 0);
   4166  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 18, 18) == 0);
   4167  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 19, 19) == 0);
   4168  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 20, 20) == 0);
   4169  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 21, 21) == 0);
   4170  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 22, 22) == 0);
   4171  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 23, 23) == 0);
   4172  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 24, 24) == 0);
   4173  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 25, 25) == 0);
   4174  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 26, 26) == 0);
   4175  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 27, 27) == 0);
   4176  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 28, 28) == 0);
   4177  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 29, 29) == 0);
   4178  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 30, 30) == 0);
   4179  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 31, 31) == 0);
   4180  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 32, 32) == 0);
   4181  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 33, 33) == 0);
   4182  1.3  alnsn 
   4183  1.3  alnsn 	/* The packet doesn't match. */
   4184  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 34, 34) == 0);
   4185  1.3  alnsn 
   4186  1.3  alnsn 	/* Still no match after setting the protocol field. */
   4187  1.3  alnsn 	pkt[12] = 8;
   4188  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 34, 34) == 0);
   4189  1.3  alnsn 
   4190  1.3  alnsn 	pkt[26] = 128; pkt[27] = 3; pkt[28] = 112; pkt[29] = 15;
   4191  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 34, 34) == 0);
   4192  1.3  alnsn 
   4193  1.3  alnsn 	pkt[30] = 128; pkt[31] = 3; pkt[32] = 112; pkt[33] = 35;
   4194  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 34, 34) == UINT32_MAX);
   4195  1.3  alnsn 
   4196  1.3  alnsn 	/* Swap the ip addresses. */
   4197  1.3  alnsn 	pkt[26] = 128; pkt[27] = 3; pkt[28] = 112; pkt[29] = 35;
   4198  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 34, 34) == 0);
   4199  1.3  alnsn 
   4200  1.3  alnsn 	pkt[30] = 128; pkt[31] = 3; pkt[32] = 112; pkt[33] = 15;
   4201  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 34, 34) == UINT32_MAX);
   4202  1.3  alnsn 
   4203  1.3  alnsn 	/* Packet is too short. */
   4204  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 1, 1) == 0);
   4205  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 2, 2) == 0);
   4206  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 3, 3) == 0);
   4207  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 4, 4) == 0);
   4208  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 5, 5) == 0);
   4209  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 6, 6) == 0);
   4210  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 7, 7) == 0);
   4211  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 8, 8) == 0);
   4212  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 9, 9) == 0);
   4213  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 10, 10) == 0);
   4214  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 11, 11) == 0);
   4215  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 12, 12) == 0);
   4216  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 13, 13) == 0);
   4217  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 14, 14) == 0);
   4218  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 15, 15) == 0);
   4219  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 16, 16) == 0);
   4220  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 17, 17) == 0);
   4221  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 18, 18) == 0);
   4222  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 19, 19) == 0);
   4223  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 20, 20) == 0);
   4224  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 21, 21) == 0);
   4225  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 22, 22) == 0);
   4226  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 23, 23) == 0);
   4227  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 24, 24) == 0);
   4228  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 25, 25) == 0);
   4229  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 26, 26) == 0);
   4230  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 27, 27) == 0);
   4231  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 28, 28) == 0);
   4232  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 29, 29) == 0);
   4233  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 30, 30) == 0);
   4234  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 31, 31) == 0);
   4235  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 32, 32) == 0);
   4236  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 33, 33) == 0);
   4237  1.3  alnsn 
   4238  1.3  alnsn 	/* Change the protocol field. */
   4239  1.3  alnsn 	pkt[13] = 8;
   4240  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 34, 34) == 0);
   4241  1.3  alnsn 
   4242  1.3  alnsn 	bpfjit_free_code(code);
   4243  1.3  alnsn }
   4244  1.3  alnsn 
   4245  1.6  alnsn ATF_TC(libbpfjit_examples_3);
   4246  1.6  alnsn ATF_TC_HEAD(libbpfjit_examples_3, tc)
   4247  1.3  alnsn {
   4248  1.3  alnsn 	atf_tc_set_md_var(tc, "descr",
   4249  1.3  alnsn 	    "Test the third example from bpf(4) - "
   4250  1.3  alnsn 	    "accept TCP finger packets");
   4251  1.3  alnsn }
   4252  1.3  alnsn 
   4253  1.6  alnsn ATF_TC_BODY(libbpfjit_examples_3, tc)
   4254  1.3  alnsn {
   4255  1.3  alnsn 	/*
   4256  1.3  alnsn 	 * This filter returns only TCP finger packets.
   4257  1.3  alnsn 	 */
   4258  1.3  alnsn 	struct bpf_insn insns[] = {
   4259  1.3  alnsn 		BPF_STMT(BPF_LD+BPF_H+BPF_ABS, 12),
   4260  1.3  alnsn 		BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, 0x0800, 0, 10),
   4261  1.3  alnsn 		BPF_STMT(BPF_LD+BPF_B+BPF_ABS, 23),
   4262  1.3  alnsn 		BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, 6, 0, 8),
   4263  1.3  alnsn 		BPF_STMT(BPF_LD+BPF_H+BPF_ABS, 20),
   4264  1.3  alnsn 		BPF_JUMP(BPF_JMP+BPF_JSET+BPF_K, 0x1fff, 6, 0),
   4265  1.3  alnsn 		BPF_STMT(BPF_LDX+BPF_B+BPF_MSH, 14),
   4266  1.3  alnsn 		BPF_STMT(BPF_LD+BPF_H+BPF_IND, 14),
   4267  1.3  alnsn 		BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, 79, 2, 0),
   4268  1.3  alnsn 		BPF_STMT(BPF_LD+BPF_H+BPF_IND, 16),
   4269  1.3  alnsn 		BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, 79, 0, 1),
   4270  1.3  alnsn 		BPF_STMT(BPF_RET+BPF_K, UINT32_MAX),
   4271  1.3  alnsn 		BPF_STMT(BPF_RET+BPF_K, 0),
   4272  1.3  alnsn 	};
   4273  1.3  alnsn 
   4274  1.3  alnsn 	bpfjit_func_t code;
   4275  1.3  alnsn 	uint8_t pkt[30] = {};
   4276  1.3  alnsn 
   4277  1.3  alnsn 	/* Set IP fragment offset to non-zero. */
   4278  1.3  alnsn 	pkt[20] = 1; pkt[21] = 1;
   4279  1.3  alnsn 
   4280  1.3  alnsn 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
   4281  1.3  alnsn 
   4282  1.3  alnsn 	ATF_CHECK(bpf_validate(insns, insn_count));
   4283  1.3  alnsn 
   4284  1.5  alnsn 	code = bpfjit_generate_code(NULL, insns, insn_count);
   4285  1.3  alnsn 	ATF_REQUIRE(code != NULL);
   4286  1.3  alnsn 
   4287  1.3  alnsn 	/* Packet is too short. */
   4288  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 1, 1) == 0);
   4289  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 2, 2) == 0);
   4290  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 3, 3) == 0);
   4291  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 4, 4) == 0);
   4292  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 5, 5) == 0);
   4293  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 6, 6) == 0);
   4294  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 7, 7) == 0);
   4295  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 8, 8) == 0);
   4296  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 9, 9) == 0);
   4297  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 10, 10) == 0);
   4298  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 11, 11) == 0);
   4299  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 12, 12) == 0);
   4300  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 13, 13) == 0);
   4301  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 14, 14) == 0);
   4302  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 15, 15) == 0);
   4303  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 16, 16) == 0);
   4304  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 17, 17) == 0);
   4305  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 18, 18) == 0);
   4306  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 19, 19) == 0);
   4307  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 20, 20) == 0);
   4308  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 21, 21) == 0);
   4309  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 22, 22) == 0);
   4310  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 23, 23) == 0);
   4311  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 24, 24) == 0);
   4312  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 25, 25) == 0);
   4313  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 26, 26) == 0);
   4314  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 27, 27) == 0);
   4315  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 28, 28) == 0);
   4316  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 29, 29) == 0);
   4317  1.3  alnsn 
   4318  1.3  alnsn 	/* The packet doesn't match. */
   4319  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 30, 30) == 0);
   4320  1.3  alnsn 
   4321  1.3  alnsn 	/* Still no match after setting the protocol field. */
   4322  1.3  alnsn 	pkt[12] = 8;
   4323  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 30, 30) == 0);
   4324  1.3  alnsn 
   4325  1.3  alnsn 	/* Get one step closer to the match. */
   4326  1.3  alnsn 	pkt[23] = 6;
   4327  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 30, 30) == 0);
   4328  1.3  alnsn 
   4329  1.3  alnsn 	/* Set IP fragment offset to zero. */
   4330  1.3  alnsn 	pkt[20] = 0x20; pkt[21] = 0;
   4331  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 30, 30) == 0);
   4332  1.3  alnsn 
   4333  1.3  alnsn 	/* Set IP header length to 12. */
   4334  1.3  alnsn 	pkt[14] = 0xd3;
   4335  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 30, 30) == 0);
   4336  1.3  alnsn 
   4337  1.3  alnsn 	/* Match one branch of the program. */
   4338  1.3  alnsn 	pkt[27] = 79;
   4339  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 30, 30) == UINT32_MAX);
   4340  1.3  alnsn 
   4341  1.3  alnsn 	/* Match the other branch of the program. */
   4342  1.3  alnsn 	pkt[29] = 79; pkt[27] = 0;
   4343  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 30, 30) == UINT32_MAX);
   4344  1.3  alnsn 
   4345  1.3  alnsn 	/* Packet is too short. */
   4346  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 1, 1) == 0);
   4347  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 2, 2) == 0);
   4348  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 3, 3) == 0);
   4349  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 4, 4) == 0);
   4350  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 5, 5) == 0);
   4351  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 6, 6) == 0);
   4352  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 7, 7) == 0);
   4353  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 8, 8) == 0);
   4354  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 9, 9) == 0);
   4355  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 10, 10) == 0);
   4356  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 11, 11) == 0);
   4357  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 12, 12) == 0);
   4358  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 13, 13) == 0);
   4359  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 14, 14) == 0);
   4360  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 15, 15) == 0);
   4361  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 16, 16) == 0);
   4362  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 17, 17) == 0);
   4363  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 18, 18) == 0);
   4364  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 19, 19) == 0);
   4365  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 20, 20) == 0);
   4366  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 21, 21) == 0);
   4367  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 22, 22) == 0);
   4368  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 23, 23) == 0);
   4369  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 24, 24) == 0);
   4370  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 25, 25) == 0);
   4371  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 26, 26) == 0);
   4372  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 27, 27) == 0);
   4373  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 28, 28) == 0);
   4374  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 29, 29) == 0);
   4375  1.3  alnsn 
   4376  1.3  alnsn 	/* Set IP header length to 16. Packet is too short. */
   4377  1.3  alnsn 	pkt[14] = 4;
   4378  1.5  alnsn 	ATF_CHECK(jitcall(code, pkt, 30, 30) == 0);
   4379  1.3  alnsn 
   4380  1.3  alnsn 	bpfjit_free_code(code);
   4381  1.3  alnsn }
   4382  1.3  alnsn 
   4383  1.6  alnsn ATF_TC(libbpfjit_cop_no_ctx);
   4384  1.6  alnsn ATF_TC_HEAD(libbpfjit_cop_no_ctx, tc)
   4385  1.5  alnsn {
   4386  1.5  alnsn 	atf_tc_set_md_var(tc, "descr", "Test that BPF_MISC|BPF_COP "
   4387  1.5  alnsn 	    "instruction can't be accepted without a context");
   4388  1.5  alnsn }
   4389  1.5  alnsn 
   4390  1.6  alnsn ATF_TC_BODY(libbpfjit_cop_no_ctx, tc)
   4391  1.5  alnsn {
   4392  1.5  alnsn 	static struct bpf_insn insns[] = {
   4393  1.5  alnsn 		BPF_STMT(BPF_MISC+BPF_COP, 0),
   4394  1.5  alnsn 		BPF_STMT(BPF_RET+BPF_K, 7)
   4395  1.5  alnsn 	};
   4396  1.5  alnsn 
   4397  1.5  alnsn 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
   4398  1.5  alnsn 
   4399  1.5  alnsn 	ATF_CHECK(!bpf_validate(insns, insn_count));
   4400  1.5  alnsn 
   4401  1.5  alnsn 	ATF_CHECK(bpfjit_generate_code(NULL, insns, insn_count) == NULL);
   4402  1.5  alnsn }
   4403  1.5  alnsn 
   4404  1.6  alnsn ATF_TC(libbpfjit_copx_no_ctx);
   4405  1.6  alnsn ATF_TC_HEAD(libbpfjit_copx_no_ctx, tc)
   4406  1.5  alnsn {
   4407  1.5  alnsn 	atf_tc_set_md_var(tc, "descr", "Test that BPF_MISC|BPF_COPX "
   4408  1.5  alnsn 	    "instruction can't be accepted without a context");
   4409  1.5  alnsn }
   4410  1.5  alnsn 
   4411  1.6  alnsn ATF_TC_BODY(libbpfjit_copx_no_ctx, tc)
   4412  1.5  alnsn {
   4413  1.5  alnsn 	static struct bpf_insn insns[] = {
   4414  1.5  alnsn 		BPF_STMT(BPF_MISC+BPF_COPX, 0),
   4415  1.5  alnsn 		BPF_STMT(BPF_RET+BPF_K, 7)
   4416  1.5  alnsn 	};
   4417  1.5  alnsn 
   4418  1.5  alnsn 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
   4419  1.5  alnsn 
   4420  1.5  alnsn 	ATF_CHECK(!bpf_validate(insns, insn_count));
   4421  1.5  alnsn 
   4422  1.5  alnsn 	ATF_CHECK(bpfjit_generate_code(NULL, insns, insn_count) == NULL);
   4423  1.5  alnsn }
   4424  1.5  alnsn 
   4425  1.1  alnsn ATF_TP_ADD_TCS(tp)
   4426  1.1  alnsn {
   4427  1.1  alnsn 
   4428  1.6  alnsn 	/*
   4429  1.6  alnsn 	 * For every new test please also add a similar test
   4430  1.6  alnsn 	 * to ../../net/bpfjit/t_bpfjit.c
   4431  1.6  alnsn 	 */
   4432  1.6  alnsn 	ATF_TP_ADD_TC(tp, libbpfjit_empty);
   4433  1.6  alnsn 	ATF_TP_ADD_TC(tp, libbpfjit_alu_add_k);
   4434  1.6  alnsn 	ATF_TP_ADD_TC(tp, libbpfjit_alu_sub_k);
   4435  1.6  alnsn 	ATF_TP_ADD_TC(tp, libbpfjit_alu_mul_k);
   4436  1.6  alnsn 	ATF_TP_ADD_TC(tp, libbpfjit_alu_div0_k);
   4437  1.6  alnsn 	ATF_TP_ADD_TC(tp, libbpfjit_alu_div1_k);
   4438  1.6  alnsn 	ATF_TP_ADD_TC(tp, libbpfjit_alu_div2_k);
   4439  1.6  alnsn 	ATF_TP_ADD_TC(tp, libbpfjit_alu_div4_k);
   4440  1.6  alnsn 	ATF_TP_ADD_TC(tp, libbpfjit_alu_div10_k);
   4441  1.6  alnsn 	ATF_TP_ADD_TC(tp, libbpfjit_alu_div10000_k);
   4442  1.6  alnsn 	ATF_TP_ADD_TC(tp, libbpfjit_alu_div7609801_k);
   4443  1.6  alnsn 	ATF_TP_ADD_TC(tp, libbpfjit_alu_div80000000_k);
   4444  1.8  alnsn 	ATF_TP_ADD_TC(tp, libbpfjit_alu_mod0_k);
   4445  1.8  alnsn 	ATF_TP_ADD_TC(tp, libbpfjit_alu_mod1_k);
   4446  1.8  alnsn 	ATF_TP_ADD_TC(tp, libbpfjit_alu_mod2_k);
   4447  1.8  alnsn 	ATF_TP_ADD_TC(tp, libbpfjit_alu_mod4_k);
   4448  1.8  alnsn 	ATF_TP_ADD_TC(tp, libbpfjit_alu_mod10_k);
   4449  1.8  alnsn 	ATF_TP_ADD_TC(tp, libbpfjit_alu_mod10000_k);
   4450  1.8  alnsn 	ATF_TP_ADD_TC(tp, libbpfjit_alu_mod7609801_k);
   4451  1.8  alnsn 	ATF_TP_ADD_TC(tp, libbpfjit_alu_mod80000000_k);
   4452  1.6  alnsn 	ATF_TP_ADD_TC(tp, libbpfjit_alu_and_k);
   4453  1.6  alnsn 	ATF_TP_ADD_TC(tp, libbpfjit_alu_or_k);
   4454  1.7  alnsn 	ATF_TP_ADD_TC(tp, libbpfjit_alu_xor_k);
   4455  1.6  alnsn 	ATF_TP_ADD_TC(tp, libbpfjit_alu_lsh_k);
   4456  1.6  alnsn 	ATF_TP_ADD_TC(tp, libbpfjit_alu_lsh0_k);
   4457  1.6  alnsn 	ATF_TP_ADD_TC(tp, libbpfjit_alu_rsh_k);
   4458  1.6  alnsn 	ATF_TP_ADD_TC(tp, libbpfjit_alu_rsh0_k);
   4459  1.6  alnsn 	ATF_TP_ADD_TC(tp, libbpfjit_alu_modulo_k);
   4460  1.6  alnsn 	ATF_TP_ADD_TC(tp, libbpfjit_alu_add_x);
   4461  1.6  alnsn 	ATF_TP_ADD_TC(tp, libbpfjit_alu_sub_x);
   4462  1.6  alnsn 	ATF_TP_ADD_TC(tp, libbpfjit_alu_mul_x);
   4463  1.6  alnsn 	ATF_TP_ADD_TC(tp, libbpfjit_alu_div0_x);
   4464  1.6  alnsn 	ATF_TP_ADD_TC(tp, libbpfjit_alu_div1_x);
   4465  1.6  alnsn 	ATF_TP_ADD_TC(tp, libbpfjit_alu_div2_x);
   4466  1.6  alnsn 	ATF_TP_ADD_TC(tp, libbpfjit_alu_div4_x);
   4467  1.6  alnsn 	ATF_TP_ADD_TC(tp, libbpfjit_alu_div10_x);
   4468  1.6  alnsn 	ATF_TP_ADD_TC(tp, libbpfjit_alu_div10000_x);
   4469  1.6  alnsn 	ATF_TP_ADD_TC(tp, libbpfjit_alu_div7609801_x);
   4470  1.6  alnsn 	ATF_TP_ADD_TC(tp, libbpfjit_alu_div80000000_x);
   4471  1.8  alnsn 	ATF_TP_ADD_TC(tp, libbpfjit_alu_mod0_x);
   4472  1.8  alnsn 	ATF_TP_ADD_TC(tp, libbpfjit_alu_mod1_x);
   4473  1.8  alnsn 	ATF_TP_ADD_TC(tp, libbpfjit_alu_mod2_x);
   4474  1.8  alnsn 	ATF_TP_ADD_TC(tp, libbpfjit_alu_mod4_x);
   4475  1.8  alnsn 	ATF_TP_ADD_TC(tp, libbpfjit_alu_mod10_x);
   4476  1.8  alnsn 	ATF_TP_ADD_TC(tp, libbpfjit_alu_mod10000_x);
   4477  1.8  alnsn 	ATF_TP_ADD_TC(tp, libbpfjit_alu_mod7609801_x);
   4478  1.8  alnsn 	ATF_TP_ADD_TC(tp, libbpfjit_alu_mod80000000_x);
   4479  1.6  alnsn 	ATF_TP_ADD_TC(tp, libbpfjit_alu_and_x);
   4480  1.6  alnsn 	ATF_TP_ADD_TC(tp, libbpfjit_alu_or_x);
   4481  1.7  alnsn 	ATF_TP_ADD_TC(tp, libbpfjit_alu_xor_x);
   4482  1.6  alnsn 	ATF_TP_ADD_TC(tp, libbpfjit_alu_lsh_x);
   4483  1.6  alnsn 	ATF_TP_ADD_TC(tp, libbpfjit_alu_lsh0_x);
   4484  1.6  alnsn 	ATF_TP_ADD_TC(tp, libbpfjit_alu_rsh_x);
   4485  1.6  alnsn 	ATF_TP_ADD_TC(tp, libbpfjit_alu_rsh0_x);
   4486  1.6  alnsn 	ATF_TP_ADD_TC(tp, libbpfjit_alu_modulo_x);
   4487  1.6  alnsn 	ATF_TP_ADD_TC(tp, libbpfjit_alu_neg);
   4488  1.6  alnsn 	ATF_TP_ADD_TC(tp, libbpfjit_jmp_ja);
   4489  1.6  alnsn 	ATF_TP_ADD_TC(tp, libbpfjit_jmp_jgt_k);
   4490  1.6  alnsn 	ATF_TP_ADD_TC(tp, libbpfjit_jmp_jge_k);
   4491  1.6  alnsn 	ATF_TP_ADD_TC(tp, libbpfjit_jmp_jeq_k);
   4492  1.6  alnsn 	ATF_TP_ADD_TC(tp, libbpfjit_jmp_jset_k);
   4493  1.6  alnsn 	ATF_TP_ADD_TC(tp, libbpfjit_jmp_modulo_k);
   4494  1.6  alnsn 	ATF_TP_ADD_TC(tp, libbpfjit_jmp_jgt_x);
   4495  1.6  alnsn 	ATF_TP_ADD_TC(tp, libbpfjit_jmp_jge_x);
   4496  1.6  alnsn 	ATF_TP_ADD_TC(tp, libbpfjit_jmp_jeq_x);
   4497  1.6  alnsn 	ATF_TP_ADD_TC(tp, libbpfjit_jmp_jset_x);
   4498  1.6  alnsn 	ATF_TP_ADD_TC(tp, libbpfjit_jmp_modulo_x);
   4499  1.6  alnsn 	ATF_TP_ADD_TC(tp, libbpfjit_ld_abs);
   4500  1.6  alnsn 	ATF_TP_ADD_TC(tp, libbpfjit_ld_abs_k_overflow);
   4501  1.6  alnsn 	ATF_TP_ADD_TC(tp, libbpfjit_ld_ind);
   4502  1.6  alnsn 	ATF_TP_ADD_TC(tp, libbpfjit_ld_ind_k_overflow);
   4503  1.6  alnsn 	ATF_TP_ADD_TC(tp, libbpfjit_ld_ind_x_overflow1);
   4504  1.6  alnsn 	ATF_TP_ADD_TC(tp, libbpfjit_ld_ind_x_overflow2);
   4505  1.6  alnsn 	ATF_TP_ADD_TC(tp, libbpfjit_ld_len);
   4506  1.6  alnsn 	ATF_TP_ADD_TC(tp, libbpfjit_ld_imm);
   4507  1.6  alnsn 	ATF_TP_ADD_TC(tp, libbpfjit_ldx_imm1);
   4508  1.6  alnsn 	ATF_TP_ADD_TC(tp, libbpfjit_ldx_imm2);
   4509  1.6  alnsn 	ATF_TP_ADD_TC(tp, libbpfjit_ldx_len1);
   4510  1.6  alnsn 	ATF_TP_ADD_TC(tp, libbpfjit_ldx_len2);
   4511  1.6  alnsn 	ATF_TP_ADD_TC(tp, libbpfjit_ldx_msh);
   4512  1.6  alnsn 	ATF_TP_ADD_TC(tp, libbpfjit_misc_tax);
   4513  1.6  alnsn 	ATF_TP_ADD_TC(tp, libbpfjit_misc_txa);
   4514  1.6  alnsn 	ATF_TP_ADD_TC(tp, libbpfjit_st1);
   4515  1.6  alnsn 	ATF_TP_ADD_TC(tp, libbpfjit_st2);
   4516  1.6  alnsn 	ATF_TP_ADD_TC(tp, libbpfjit_st3);
   4517  1.6  alnsn 	ATF_TP_ADD_TC(tp, libbpfjit_st4);
   4518  1.6  alnsn 	ATF_TP_ADD_TC(tp, libbpfjit_st5);
   4519  1.6  alnsn 	ATF_TP_ADD_TC(tp, libbpfjit_stx1);
   4520  1.6  alnsn 	ATF_TP_ADD_TC(tp, libbpfjit_stx2);
   4521  1.6  alnsn 	ATF_TP_ADD_TC(tp, libbpfjit_stx3);
   4522  1.6  alnsn 	ATF_TP_ADD_TC(tp, libbpfjit_stx4);
   4523  1.6  alnsn 	ATF_TP_ADD_TC(tp, libbpfjit_opt_ld_abs_1);
   4524  1.6  alnsn 	ATF_TP_ADD_TC(tp, libbpfjit_opt_ld_abs_2);
   4525  1.6  alnsn 	ATF_TP_ADD_TC(tp, libbpfjit_opt_ld_abs_3);
   4526  1.6  alnsn 	ATF_TP_ADD_TC(tp, libbpfjit_opt_ld_ind_1);
   4527  1.6  alnsn 	ATF_TP_ADD_TC(tp, libbpfjit_opt_ld_ind_2);
   4528  1.6  alnsn 	ATF_TP_ADD_TC(tp, libbpfjit_opt_ld_ind_3);
   4529  1.6  alnsn 	ATF_TP_ADD_TC(tp, libbpfjit_opt_ld_ind_4);
   4530  1.6  alnsn 	ATF_TP_ADD_TC(tp, libbpfjit_abc_ja);
   4531  1.6  alnsn 	ATF_TP_ADD_TC(tp, libbpfjit_abc_ja_over);
   4532  1.6  alnsn 	ATF_TP_ADD_TC(tp, libbpfjit_abc_ld_chain);
   4533  1.6  alnsn 	ATF_TP_ADD_TC(tp, libbpfjit_examples_1);
   4534  1.6  alnsn 	ATF_TP_ADD_TC(tp, libbpfjit_examples_2);
   4535  1.6  alnsn 	ATF_TP_ADD_TC(tp, libbpfjit_examples_3);
   4536  1.6  alnsn 	ATF_TP_ADD_TC(tp, libbpfjit_cop_no_ctx);
   4537  1.6  alnsn 	ATF_TP_ADD_TC(tp, libbpfjit_copx_no_ctx);
   4538  1.1  alnsn 
   4539  1.1  alnsn 	return atf_no_error();
   4540  1.1  alnsn }
   4541