18c2ecf20Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-only 28c2ecf20Sopenharmony_ci/* 38c2ecf20Sopenharmony_ci * Testsuite for BPF interpreter and BPF JIT compiler 48c2ecf20Sopenharmony_ci * 58c2ecf20Sopenharmony_ci * Copyright (c) 2011-2014 PLUMgrid, http://plumgrid.com 68c2ecf20Sopenharmony_ci */ 78c2ecf20Sopenharmony_ci 88c2ecf20Sopenharmony_ci#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt 98c2ecf20Sopenharmony_ci 108c2ecf20Sopenharmony_ci#include <linux/init.h> 118c2ecf20Sopenharmony_ci#include <linux/module.h> 128c2ecf20Sopenharmony_ci#include <linux/filter.h> 138c2ecf20Sopenharmony_ci#include <linux/bpf.h> 148c2ecf20Sopenharmony_ci#include <linux/skbuff.h> 158c2ecf20Sopenharmony_ci#include <linux/netdevice.h> 168c2ecf20Sopenharmony_ci#include <linux/if_vlan.h> 178c2ecf20Sopenharmony_ci#include <linux/random.h> 188c2ecf20Sopenharmony_ci#include <linux/highmem.h> 198c2ecf20Sopenharmony_ci#include <linux/sched.h> 208c2ecf20Sopenharmony_ci 218c2ecf20Sopenharmony_ci/* General test specific settings */ 228c2ecf20Sopenharmony_ci#define MAX_SUBTESTS 3 238c2ecf20Sopenharmony_ci#define MAX_TESTRUNS 1000 248c2ecf20Sopenharmony_ci#define MAX_DATA 128 258c2ecf20Sopenharmony_ci#define MAX_INSNS 512 268c2ecf20Sopenharmony_ci#define MAX_K 0xffffFFFF 278c2ecf20Sopenharmony_ci 288c2ecf20Sopenharmony_ci/* Few constants used to init test 'skb' */ 298c2ecf20Sopenharmony_ci#define SKB_TYPE 3 308c2ecf20Sopenharmony_ci#define SKB_MARK 0x1234aaaa 318c2ecf20Sopenharmony_ci#define SKB_HASH 0x1234aaab 328c2ecf20Sopenharmony_ci#define SKB_QUEUE_MAP 123 338c2ecf20Sopenharmony_ci#define SKB_VLAN_TCI 0xffff 348c2ecf20Sopenharmony_ci#define SKB_VLAN_PRESENT 1 358c2ecf20Sopenharmony_ci#define SKB_DEV_IFINDEX 577 368c2ecf20Sopenharmony_ci#define SKB_DEV_TYPE 588 378c2ecf20Sopenharmony_ci 388c2ecf20Sopenharmony_ci/* Redefine REGs to make tests less verbose */ 398c2ecf20Sopenharmony_ci#define R0 BPF_REG_0 408c2ecf20Sopenharmony_ci#define R1 BPF_REG_1 418c2ecf20Sopenharmony_ci#define R2 BPF_REG_2 428c2ecf20Sopenharmony_ci#define R3 BPF_REG_3 438c2ecf20Sopenharmony_ci#define R4 BPF_REG_4 448c2ecf20Sopenharmony_ci#define R5 BPF_REG_5 458c2ecf20Sopenharmony_ci#define R6 BPF_REG_6 468c2ecf20Sopenharmony_ci#define R7 BPF_REG_7 478c2ecf20Sopenharmony_ci#define R8 BPF_REG_8 488c2ecf20Sopenharmony_ci#define R9 BPF_REG_9 498c2ecf20Sopenharmony_ci#define R10 BPF_REG_10 508c2ecf20Sopenharmony_ci 518c2ecf20Sopenharmony_ci/* Flags that can be passed to test cases */ 528c2ecf20Sopenharmony_ci#define FLAG_NO_DATA BIT(0) 538c2ecf20Sopenharmony_ci#define FLAG_EXPECTED_FAIL BIT(1) 548c2ecf20Sopenharmony_ci#define FLAG_SKB_FRAG BIT(2) 558c2ecf20Sopenharmony_ci 568c2ecf20Sopenharmony_cienum { 578c2ecf20Sopenharmony_ci CLASSIC = BIT(6), /* Old BPF instructions only. */ 588c2ecf20Sopenharmony_ci INTERNAL = BIT(7), /* Extended instruction set. */ 598c2ecf20Sopenharmony_ci}; 608c2ecf20Sopenharmony_ci 618c2ecf20Sopenharmony_ci#define TEST_TYPE_MASK (CLASSIC | INTERNAL) 628c2ecf20Sopenharmony_ci 638c2ecf20Sopenharmony_cistruct bpf_test { 648c2ecf20Sopenharmony_ci const char *descr; 658c2ecf20Sopenharmony_ci union { 668c2ecf20Sopenharmony_ci struct sock_filter insns[MAX_INSNS]; 678c2ecf20Sopenharmony_ci struct bpf_insn insns_int[MAX_INSNS]; 688c2ecf20Sopenharmony_ci struct { 698c2ecf20Sopenharmony_ci void *insns; 708c2ecf20Sopenharmony_ci unsigned int len; 718c2ecf20Sopenharmony_ci } ptr; 728c2ecf20Sopenharmony_ci } u; 738c2ecf20Sopenharmony_ci __u8 aux; 748c2ecf20Sopenharmony_ci __u8 data[MAX_DATA]; 758c2ecf20Sopenharmony_ci struct { 768c2ecf20Sopenharmony_ci int data_size; 778c2ecf20Sopenharmony_ci __u32 result; 788c2ecf20Sopenharmony_ci } test[MAX_SUBTESTS]; 798c2ecf20Sopenharmony_ci int (*fill_helper)(struct bpf_test *self); 808c2ecf20Sopenharmony_ci int expected_errcode; /* used when FLAG_EXPECTED_FAIL is set in the aux */ 818c2ecf20Sopenharmony_ci __u8 frag_data[MAX_DATA]; 828c2ecf20Sopenharmony_ci int stack_depth; /* for eBPF only, since tests don't call verifier */ 838c2ecf20Sopenharmony_ci}; 848c2ecf20Sopenharmony_ci 858c2ecf20Sopenharmony_ci/* Large test cases need separate allocation and fill handler. */ 868c2ecf20Sopenharmony_ci 878c2ecf20Sopenharmony_cistatic int bpf_fill_maxinsns1(struct bpf_test *self) 888c2ecf20Sopenharmony_ci{ 898c2ecf20Sopenharmony_ci unsigned int len = BPF_MAXINSNS; 908c2ecf20Sopenharmony_ci struct sock_filter *insn; 918c2ecf20Sopenharmony_ci __u32 k = ~0; 928c2ecf20Sopenharmony_ci int i; 938c2ecf20Sopenharmony_ci 948c2ecf20Sopenharmony_ci insn = kmalloc_array(len, sizeof(*insn), GFP_KERNEL); 958c2ecf20Sopenharmony_ci if (!insn) 968c2ecf20Sopenharmony_ci return -ENOMEM; 978c2ecf20Sopenharmony_ci 988c2ecf20Sopenharmony_ci for (i = 0; i < len; i++, k--) 998c2ecf20Sopenharmony_ci insn[i] = __BPF_STMT(BPF_RET | BPF_K, k); 1008c2ecf20Sopenharmony_ci 1018c2ecf20Sopenharmony_ci self->u.ptr.insns = insn; 1028c2ecf20Sopenharmony_ci self->u.ptr.len = len; 1038c2ecf20Sopenharmony_ci 1048c2ecf20Sopenharmony_ci return 0; 1058c2ecf20Sopenharmony_ci} 1068c2ecf20Sopenharmony_ci 1078c2ecf20Sopenharmony_cistatic int bpf_fill_maxinsns2(struct bpf_test *self) 1088c2ecf20Sopenharmony_ci{ 1098c2ecf20Sopenharmony_ci unsigned int len = BPF_MAXINSNS; 1108c2ecf20Sopenharmony_ci struct sock_filter *insn; 1118c2ecf20Sopenharmony_ci int i; 1128c2ecf20Sopenharmony_ci 1138c2ecf20Sopenharmony_ci insn = kmalloc_array(len, sizeof(*insn), GFP_KERNEL); 1148c2ecf20Sopenharmony_ci if (!insn) 1158c2ecf20Sopenharmony_ci return -ENOMEM; 1168c2ecf20Sopenharmony_ci 1178c2ecf20Sopenharmony_ci for (i = 0; i < len; i++) 1188c2ecf20Sopenharmony_ci insn[i] = __BPF_STMT(BPF_RET | BPF_K, 0xfefefefe); 1198c2ecf20Sopenharmony_ci 1208c2ecf20Sopenharmony_ci self->u.ptr.insns = insn; 1218c2ecf20Sopenharmony_ci self->u.ptr.len = len; 1228c2ecf20Sopenharmony_ci 1238c2ecf20Sopenharmony_ci return 0; 1248c2ecf20Sopenharmony_ci} 1258c2ecf20Sopenharmony_ci 1268c2ecf20Sopenharmony_cistatic int bpf_fill_maxinsns3(struct bpf_test *self) 1278c2ecf20Sopenharmony_ci{ 1288c2ecf20Sopenharmony_ci unsigned int len = BPF_MAXINSNS; 1298c2ecf20Sopenharmony_ci struct sock_filter *insn; 1308c2ecf20Sopenharmony_ci struct rnd_state rnd; 1318c2ecf20Sopenharmony_ci int i; 1328c2ecf20Sopenharmony_ci 1338c2ecf20Sopenharmony_ci insn = kmalloc_array(len, sizeof(*insn), GFP_KERNEL); 1348c2ecf20Sopenharmony_ci if (!insn) 1358c2ecf20Sopenharmony_ci return -ENOMEM; 1368c2ecf20Sopenharmony_ci 1378c2ecf20Sopenharmony_ci prandom_seed_state(&rnd, 3141592653589793238ULL); 1388c2ecf20Sopenharmony_ci 1398c2ecf20Sopenharmony_ci for (i = 0; i < len - 1; i++) { 1408c2ecf20Sopenharmony_ci __u32 k = prandom_u32_state(&rnd); 1418c2ecf20Sopenharmony_ci 1428c2ecf20Sopenharmony_ci insn[i] = __BPF_STMT(BPF_ALU | BPF_ADD | BPF_K, k); 1438c2ecf20Sopenharmony_ci } 1448c2ecf20Sopenharmony_ci 1458c2ecf20Sopenharmony_ci insn[len - 1] = __BPF_STMT(BPF_RET | BPF_A, 0); 1468c2ecf20Sopenharmony_ci 1478c2ecf20Sopenharmony_ci self->u.ptr.insns = insn; 1488c2ecf20Sopenharmony_ci self->u.ptr.len = len; 1498c2ecf20Sopenharmony_ci 1508c2ecf20Sopenharmony_ci return 0; 1518c2ecf20Sopenharmony_ci} 1528c2ecf20Sopenharmony_ci 1538c2ecf20Sopenharmony_cistatic int bpf_fill_maxinsns4(struct bpf_test *self) 1548c2ecf20Sopenharmony_ci{ 1558c2ecf20Sopenharmony_ci unsigned int len = BPF_MAXINSNS + 1; 1568c2ecf20Sopenharmony_ci struct sock_filter *insn; 1578c2ecf20Sopenharmony_ci int i; 1588c2ecf20Sopenharmony_ci 1598c2ecf20Sopenharmony_ci insn = kmalloc_array(len, sizeof(*insn), GFP_KERNEL); 1608c2ecf20Sopenharmony_ci if (!insn) 1618c2ecf20Sopenharmony_ci return -ENOMEM; 1628c2ecf20Sopenharmony_ci 1638c2ecf20Sopenharmony_ci for (i = 0; i < len; i++) 1648c2ecf20Sopenharmony_ci insn[i] = __BPF_STMT(BPF_RET | BPF_K, 0xfefefefe); 1658c2ecf20Sopenharmony_ci 1668c2ecf20Sopenharmony_ci self->u.ptr.insns = insn; 1678c2ecf20Sopenharmony_ci self->u.ptr.len = len; 1688c2ecf20Sopenharmony_ci 1698c2ecf20Sopenharmony_ci return 0; 1708c2ecf20Sopenharmony_ci} 1718c2ecf20Sopenharmony_ci 1728c2ecf20Sopenharmony_cistatic int bpf_fill_maxinsns5(struct bpf_test *self) 1738c2ecf20Sopenharmony_ci{ 1748c2ecf20Sopenharmony_ci unsigned int len = BPF_MAXINSNS; 1758c2ecf20Sopenharmony_ci struct sock_filter *insn; 1768c2ecf20Sopenharmony_ci int i; 1778c2ecf20Sopenharmony_ci 1788c2ecf20Sopenharmony_ci insn = kmalloc_array(len, sizeof(*insn), GFP_KERNEL); 1798c2ecf20Sopenharmony_ci if (!insn) 1808c2ecf20Sopenharmony_ci return -ENOMEM; 1818c2ecf20Sopenharmony_ci 1828c2ecf20Sopenharmony_ci insn[0] = __BPF_JUMP(BPF_JMP | BPF_JA, len - 2, 0, 0); 1838c2ecf20Sopenharmony_ci 1848c2ecf20Sopenharmony_ci for (i = 1; i < len - 1; i++) 1858c2ecf20Sopenharmony_ci insn[i] = __BPF_STMT(BPF_RET | BPF_K, 0xfefefefe); 1868c2ecf20Sopenharmony_ci 1878c2ecf20Sopenharmony_ci insn[len - 1] = __BPF_STMT(BPF_RET | BPF_K, 0xabababab); 1888c2ecf20Sopenharmony_ci 1898c2ecf20Sopenharmony_ci self->u.ptr.insns = insn; 1908c2ecf20Sopenharmony_ci self->u.ptr.len = len; 1918c2ecf20Sopenharmony_ci 1928c2ecf20Sopenharmony_ci return 0; 1938c2ecf20Sopenharmony_ci} 1948c2ecf20Sopenharmony_ci 1958c2ecf20Sopenharmony_cistatic int bpf_fill_maxinsns6(struct bpf_test *self) 1968c2ecf20Sopenharmony_ci{ 1978c2ecf20Sopenharmony_ci unsigned int len = BPF_MAXINSNS; 1988c2ecf20Sopenharmony_ci struct sock_filter *insn; 1998c2ecf20Sopenharmony_ci int i; 2008c2ecf20Sopenharmony_ci 2018c2ecf20Sopenharmony_ci insn = kmalloc_array(len, sizeof(*insn), GFP_KERNEL); 2028c2ecf20Sopenharmony_ci if (!insn) 2038c2ecf20Sopenharmony_ci return -ENOMEM; 2048c2ecf20Sopenharmony_ci 2058c2ecf20Sopenharmony_ci for (i = 0; i < len - 1; i++) 2068c2ecf20Sopenharmony_ci insn[i] = __BPF_STMT(BPF_LD | BPF_W | BPF_ABS, SKF_AD_OFF + 2078c2ecf20Sopenharmony_ci SKF_AD_VLAN_TAG_PRESENT); 2088c2ecf20Sopenharmony_ci 2098c2ecf20Sopenharmony_ci insn[len - 1] = __BPF_STMT(BPF_RET | BPF_A, 0); 2108c2ecf20Sopenharmony_ci 2118c2ecf20Sopenharmony_ci self->u.ptr.insns = insn; 2128c2ecf20Sopenharmony_ci self->u.ptr.len = len; 2138c2ecf20Sopenharmony_ci 2148c2ecf20Sopenharmony_ci return 0; 2158c2ecf20Sopenharmony_ci} 2168c2ecf20Sopenharmony_ci 2178c2ecf20Sopenharmony_cistatic int bpf_fill_maxinsns7(struct bpf_test *self) 2188c2ecf20Sopenharmony_ci{ 2198c2ecf20Sopenharmony_ci unsigned int len = BPF_MAXINSNS; 2208c2ecf20Sopenharmony_ci struct sock_filter *insn; 2218c2ecf20Sopenharmony_ci int i; 2228c2ecf20Sopenharmony_ci 2238c2ecf20Sopenharmony_ci insn = kmalloc_array(len, sizeof(*insn), GFP_KERNEL); 2248c2ecf20Sopenharmony_ci if (!insn) 2258c2ecf20Sopenharmony_ci return -ENOMEM; 2268c2ecf20Sopenharmony_ci 2278c2ecf20Sopenharmony_ci for (i = 0; i < len - 4; i++) 2288c2ecf20Sopenharmony_ci insn[i] = __BPF_STMT(BPF_LD | BPF_W | BPF_ABS, SKF_AD_OFF + 2298c2ecf20Sopenharmony_ci SKF_AD_CPU); 2308c2ecf20Sopenharmony_ci 2318c2ecf20Sopenharmony_ci insn[len - 4] = __BPF_STMT(BPF_MISC | BPF_TAX, 0); 2328c2ecf20Sopenharmony_ci insn[len - 3] = __BPF_STMT(BPF_LD | BPF_W | BPF_ABS, SKF_AD_OFF + 2338c2ecf20Sopenharmony_ci SKF_AD_CPU); 2348c2ecf20Sopenharmony_ci insn[len - 2] = __BPF_STMT(BPF_ALU | BPF_SUB | BPF_X, 0); 2358c2ecf20Sopenharmony_ci insn[len - 1] = __BPF_STMT(BPF_RET | BPF_A, 0); 2368c2ecf20Sopenharmony_ci 2378c2ecf20Sopenharmony_ci self->u.ptr.insns = insn; 2388c2ecf20Sopenharmony_ci self->u.ptr.len = len; 2398c2ecf20Sopenharmony_ci 2408c2ecf20Sopenharmony_ci return 0; 2418c2ecf20Sopenharmony_ci} 2428c2ecf20Sopenharmony_ci 2438c2ecf20Sopenharmony_cistatic int bpf_fill_maxinsns8(struct bpf_test *self) 2448c2ecf20Sopenharmony_ci{ 2458c2ecf20Sopenharmony_ci unsigned int len = BPF_MAXINSNS; 2468c2ecf20Sopenharmony_ci struct sock_filter *insn; 2478c2ecf20Sopenharmony_ci int i, jmp_off = len - 3; 2488c2ecf20Sopenharmony_ci 2498c2ecf20Sopenharmony_ci insn = kmalloc_array(len, sizeof(*insn), GFP_KERNEL); 2508c2ecf20Sopenharmony_ci if (!insn) 2518c2ecf20Sopenharmony_ci return -ENOMEM; 2528c2ecf20Sopenharmony_ci 2538c2ecf20Sopenharmony_ci insn[0] = __BPF_STMT(BPF_LD | BPF_IMM, 0xffffffff); 2548c2ecf20Sopenharmony_ci 2558c2ecf20Sopenharmony_ci for (i = 1; i < len - 1; i++) 2568c2ecf20Sopenharmony_ci insn[i] = __BPF_JUMP(BPF_JMP | BPF_JGT, 0xffffffff, jmp_off--, 0); 2578c2ecf20Sopenharmony_ci 2588c2ecf20Sopenharmony_ci insn[len - 1] = __BPF_STMT(BPF_RET | BPF_A, 0); 2598c2ecf20Sopenharmony_ci 2608c2ecf20Sopenharmony_ci self->u.ptr.insns = insn; 2618c2ecf20Sopenharmony_ci self->u.ptr.len = len; 2628c2ecf20Sopenharmony_ci 2638c2ecf20Sopenharmony_ci return 0; 2648c2ecf20Sopenharmony_ci} 2658c2ecf20Sopenharmony_ci 2668c2ecf20Sopenharmony_cistatic int bpf_fill_maxinsns9(struct bpf_test *self) 2678c2ecf20Sopenharmony_ci{ 2688c2ecf20Sopenharmony_ci unsigned int len = BPF_MAXINSNS; 2698c2ecf20Sopenharmony_ci struct bpf_insn *insn; 2708c2ecf20Sopenharmony_ci int i; 2718c2ecf20Sopenharmony_ci 2728c2ecf20Sopenharmony_ci insn = kmalloc_array(len, sizeof(*insn), GFP_KERNEL); 2738c2ecf20Sopenharmony_ci if (!insn) 2748c2ecf20Sopenharmony_ci return -ENOMEM; 2758c2ecf20Sopenharmony_ci 2768c2ecf20Sopenharmony_ci insn[0] = BPF_JMP_IMM(BPF_JA, 0, 0, len - 2); 2778c2ecf20Sopenharmony_ci insn[1] = BPF_ALU32_IMM(BPF_MOV, R0, 0xcbababab); 2788c2ecf20Sopenharmony_ci insn[2] = BPF_EXIT_INSN(); 2798c2ecf20Sopenharmony_ci 2808c2ecf20Sopenharmony_ci for (i = 3; i < len - 2; i++) 2818c2ecf20Sopenharmony_ci insn[i] = BPF_ALU32_IMM(BPF_MOV, R0, 0xfefefefe); 2828c2ecf20Sopenharmony_ci 2838c2ecf20Sopenharmony_ci insn[len - 2] = BPF_EXIT_INSN(); 2848c2ecf20Sopenharmony_ci insn[len - 1] = BPF_JMP_IMM(BPF_JA, 0, 0, -(len - 1)); 2858c2ecf20Sopenharmony_ci 2868c2ecf20Sopenharmony_ci self->u.ptr.insns = insn; 2878c2ecf20Sopenharmony_ci self->u.ptr.len = len; 2888c2ecf20Sopenharmony_ci 2898c2ecf20Sopenharmony_ci return 0; 2908c2ecf20Sopenharmony_ci} 2918c2ecf20Sopenharmony_ci 2928c2ecf20Sopenharmony_cistatic int bpf_fill_maxinsns10(struct bpf_test *self) 2938c2ecf20Sopenharmony_ci{ 2948c2ecf20Sopenharmony_ci unsigned int len = BPF_MAXINSNS, hlen = len - 2; 2958c2ecf20Sopenharmony_ci struct bpf_insn *insn; 2968c2ecf20Sopenharmony_ci int i; 2978c2ecf20Sopenharmony_ci 2988c2ecf20Sopenharmony_ci insn = kmalloc_array(len, sizeof(*insn), GFP_KERNEL); 2998c2ecf20Sopenharmony_ci if (!insn) 3008c2ecf20Sopenharmony_ci return -ENOMEM; 3018c2ecf20Sopenharmony_ci 3028c2ecf20Sopenharmony_ci for (i = 0; i < hlen / 2; i++) 3038c2ecf20Sopenharmony_ci insn[i] = BPF_JMP_IMM(BPF_JA, 0, 0, hlen - 2 - 2 * i); 3048c2ecf20Sopenharmony_ci for (i = hlen - 1; i > hlen / 2; i--) 3058c2ecf20Sopenharmony_ci insn[i] = BPF_JMP_IMM(BPF_JA, 0, 0, hlen - 1 - 2 * i); 3068c2ecf20Sopenharmony_ci 3078c2ecf20Sopenharmony_ci insn[hlen / 2] = BPF_JMP_IMM(BPF_JA, 0, 0, hlen / 2 - 1); 3088c2ecf20Sopenharmony_ci insn[hlen] = BPF_ALU32_IMM(BPF_MOV, R0, 0xabababac); 3098c2ecf20Sopenharmony_ci insn[hlen + 1] = BPF_EXIT_INSN(); 3108c2ecf20Sopenharmony_ci 3118c2ecf20Sopenharmony_ci self->u.ptr.insns = insn; 3128c2ecf20Sopenharmony_ci self->u.ptr.len = len; 3138c2ecf20Sopenharmony_ci 3148c2ecf20Sopenharmony_ci return 0; 3158c2ecf20Sopenharmony_ci} 3168c2ecf20Sopenharmony_ci 3178c2ecf20Sopenharmony_cistatic int __bpf_fill_ja(struct bpf_test *self, unsigned int len, 3188c2ecf20Sopenharmony_ci unsigned int plen) 3198c2ecf20Sopenharmony_ci{ 3208c2ecf20Sopenharmony_ci struct sock_filter *insn; 3218c2ecf20Sopenharmony_ci unsigned int rlen; 3228c2ecf20Sopenharmony_ci int i, j; 3238c2ecf20Sopenharmony_ci 3248c2ecf20Sopenharmony_ci insn = kmalloc_array(len, sizeof(*insn), GFP_KERNEL); 3258c2ecf20Sopenharmony_ci if (!insn) 3268c2ecf20Sopenharmony_ci return -ENOMEM; 3278c2ecf20Sopenharmony_ci 3288c2ecf20Sopenharmony_ci rlen = (len % plen) - 1; 3298c2ecf20Sopenharmony_ci 3308c2ecf20Sopenharmony_ci for (i = 0; i + plen < len; i += plen) 3318c2ecf20Sopenharmony_ci for (j = 0; j < plen; j++) 3328c2ecf20Sopenharmony_ci insn[i + j] = __BPF_JUMP(BPF_JMP | BPF_JA, 3338c2ecf20Sopenharmony_ci plen - 1 - j, 0, 0); 3348c2ecf20Sopenharmony_ci for (j = 0; j < rlen; j++) 3358c2ecf20Sopenharmony_ci insn[i + j] = __BPF_JUMP(BPF_JMP | BPF_JA, rlen - 1 - j, 3368c2ecf20Sopenharmony_ci 0, 0); 3378c2ecf20Sopenharmony_ci 3388c2ecf20Sopenharmony_ci insn[len - 1] = __BPF_STMT(BPF_RET | BPF_K, 0xababcbac); 3398c2ecf20Sopenharmony_ci 3408c2ecf20Sopenharmony_ci self->u.ptr.insns = insn; 3418c2ecf20Sopenharmony_ci self->u.ptr.len = len; 3428c2ecf20Sopenharmony_ci 3438c2ecf20Sopenharmony_ci return 0; 3448c2ecf20Sopenharmony_ci} 3458c2ecf20Sopenharmony_ci 3468c2ecf20Sopenharmony_cistatic int bpf_fill_maxinsns11(struct bpf_test *self) 3478c2ecf20Sopenharmony_ci{ 3488c2ecf20Sopenharmony_ci /* Hits 70 passes on x86_64, so cannot get JITed there. */ 3498c2ecf20Sopenharmony_ci return __bpf_fill_ja(self, BPF_MAXINSNS, 68); 3508c2ecf20Sopenharmony_ci} 3518c2ecf20Sopenharmony_ci 3528c2ecf20Sopenharmony_cistatic int bpf_fill_maxinsns12(struct bpf_test *self) 3538c2ecf20Sopenharmony_ci{ 3548c2ecf20Sopenharmony_ci unsigned int len = BPF_MAXINSNS; 3558c2ecf20Sopenharmony_ci struct sock_filter *insn; 3568c2ecf20Sopenharmony_ci int i = 0; 3578c2ecf20Sopenharmony_ci 3588c2ecf20Sopenharmony_ci insn = kmalloc_array(len, sizeof(*insn), GFP_KERNEL); 3598c2ecf20Sopenharmony_ci if (!insn) 3608c2ecf20Sopenharmony_ci return -ENOMEM; 3618c2ecf20Sopenharmony_ci 3628c2ecf20Sopenharmony_ci insn[0] = __BPF_JUMP(BPF_JMP | BPF_JA, len - 2, 0, 0); 3638c2ecf20Sopenharmony_ci 3648c2ecf20Sopenharmony_ci for (i = 1; i < len - 1; i++) 3658c2ecf20Sopenharmony_ci insn[i] = __BPF_STMT(BPF_LDX | BPF_B | BPF_MSH, 0); 3668c2ecf20Sopenharmony_ci 3678c2ecf20Sopenharmony_ci insn[len - 1] = __BPF_STMT(BPF_RET | BPF_K, 0xabababab); 3688c2ecf20Sopenharmony_ci 3698c2ecf20Sopenharmony_ci self->u.ptr.insns = insn; 3708c2ecf20Sopenharmony_ci self->u.ptr.len = len; 3718c2ecf20Sopenharmony_ci 3728c2ecf20Sopenharmony_ci return 0; 3738c2ecf20Sopenharmony_ci} 3748c2ecf20Sopenharmony_ci 3758c2ecf20Sopenharmony_cistatic int bpf_fill_maxinsns13(struct bpf_test *self) 3768c2ecf20Sopenharmony_ci{ 3778c2ecf20Sopenharmony_ci unsigned int len = BPF_MAXINSNS; 3788c2ecf20Sopenharmony_ci struct sock_filter *insn; 3798c2ecf20Sopenharmony_ci int i = 0; 3808c2ecf20Sopenharmony_ci 3818c2ecf20Sopenharmony_ci insn = kmalloc_array(len, sizeof(*insn), GFP_KERNEL); 3828c2ecf20Sopenharmony_ci if (!insn) 3838c2ecf20Sopenharmony_ci return -ENOMEM; 3848c2ecf20Sopenharmony_ci 3858c2ecf20Sopenharmony_ci for (i = 0; i < len - 3; i++) 3868c2ecf20Sopenharmony_ci insn[i] = __BPF_STMT(BPF_LDX | BPF_B | BPF_MSH, 0); 3878c2ecf20Sopenharmony_ci 3888c2ecf20Sopenharmony_ci insn[len - 3] = __BPF_STMT(BPF_LD | BPF_IMM, 0xabababab); 3898c2ecf20Sopenharmony_ci insn[len - 2] = __BPF_STMT(BPF_ALU | BPF_XOR | BPF_X, 0); 3908c2ecf20Sopenharmony_ci insn[len - 1] = __BPF_STMT(BPF_RET | BPF_A, 0); 3918c2ecf20Sopenharmony_ci 3928c2ecf20Sopenharmony_ci self->u.ptr.insns = insn; 3938c2ecf20Sopenharmony_ci self->u.ptr.len = len; 3948c2ecf20Sopenharmony_ci 3958c2ecf20Sopenharmony_ci return 0; 3968c2ecf20Sopenharmony_ci} 3978c2ecf20Sopenharmony_ci 3988c2ecf20Sopenharmony_cistatic int bpf_fill_ja(struct bpf_test *self) 3998c2ecf20Sopenharmony_ci{ 4008c2ecf20Sopenharmony_ci /* Hits exactly 11 passes on x86_64 JIT. */ 4018c2ecf20Sopenharmony_ci return __bpf_fill_ja(self, 12, 9); 4028c2ecf20Sopenharmony_ci} 4038c2ecf20Sopenharmony_ci 4048c2ecf20Sopenharmony_cistatic int bpf_fill_ld_abs_get_processor_id(struct bpf_test *self) 4058c2ecf20Sopenharmony_ci{ 4068c2ecf20Sopenharmony_ci unsigned int len = BPF_MAXINSNS; 4078c2ecf20Sopenharmony_ci struct sock_filter *insn; 4088c2ecf20Sopenharmony_ci int i; 4098c2ecf20Sopenharmony_ci 4108c2ecf20Sopenharmony_ci insn = kmalloc_array(len, sizeof(*insn), GFP_KERNEL); 4118c2ecf20Sopenharmony_ci if (!insn) 4128c2ecf20Sopenharmony_ci return -ENOMEM; 4138c2ecf20Sopenharmony_ci 4148c2ecf20Sopenharmony_ci for (i = 0; i < len - 1; i += 2) { 4158c2ecf20Sopenharmony_ci insn[i] = __BPF_STMT(BPF_LD | BPF_B | BPF_ABS, 0); 4168c2ecf20Sopenharmony_ci insn[i + 1] = __BPF_STMT(BPF_LD | BPF_W | BPF_ABS, 4178c2ecf20Sopenharmony_ci SKF_AD_OFF + SKF_AD_CPU); 4188c2ecf20Sopenharmony_ci } 4198c2ecf20Sopenharmony_ci 4208c2ecf20Sopenharmony_ci insn[len - 1] = __BPF_STMT(BPF_RET | BPF_K, 0xbee); 4218c2ecf20Sopenharmony_ci 4228c2ecf20Sopenharmony_ci self->u.ptr.insns = insn; 4238c2ecf20Sopenharmony_ci self->u.ptr.len = len; 4248c2ecf20Sopenharmony_ci 4258c2ecf20Sopenharmony_ci return 0; 4268c2ecf20Sopenharmony_ci} 4278c2ecf20Sopenharmony_ci 4288c2ecf20Sopenharmony_cistatic int __bpf_fill_stxdw(struct bpf_test *self, int size) 4298c2ecf20Sopenharmony_ci{ 4308c2ecf20Sopenharmony_ci unsigned int len = BPF_MAXINSNS; 4318c2ecf20Sopenharmony_ci struct bpf_insn *insn; 4328c2ecf20Sopenharmony_ci int i; 4338c2ecf20Sopenharmony_ci 4348c2ecf20Sopenharmony_ci insn = kmalloc_array(len, sizeof(*insn), GFP_KERNEL); 4358c2ecf20Sopenharmony_ci if (!insn) 4368c2ecf20Sopenharmony_ci return -ENOMEM; 4378c2ecf20Sopenharmony_ci 4388c2ecf20Sopenharmony_ci insn[0] = BPF_ALU32_IMM(BPF_MOV, R0, 1); 4398c2ecf20Sopenharmony_ci insn[1] = BPF_ST_MEM(size, R10, -40, 42); 4408c2ecf20Sopenharmony_ci 4418c2ecf20Sopenharmony_ci for (i = 2; i < len - 2; i++) 4428c2ecf20Sopenharmony_ci insn[i] = BPF_STX_XADD(size, R10, R0, -40); 4438c2ecf20Sopenharmony_ci 4448c2ecf20Sopenharmony_ci insn[len - 2] = BPF_LDX_MEM(size, R0, R10, -40); 4458c2ecf20Sopenharmony_ci insn[len - 1] = BPF_EXIT_INSN(); 4468c2ecf20Sopenharmony_ci 4478c2ecf20Sopenharmony_ci self->u.ptr.insns = insn; 4488c2ecf20Sopenharmony_ci self->u.ptr.len = len; 4498c2ecf20Sopenharmony_ci self->stack_depth = 40; 4508c2ecf20Sopenharmony_ci 4518c2ecf20Sopenharmony_ci return 0; 4528c2ecf20Sopenharmony_ci} 4538c2ecf20Sopenharmony_ci 4548c2ecf20Sopenharmony_cistatic int bpf_fill_stxw(struct bpf_test *self) 4558c2ecf20Sopenharmony_ci{ 4568c2ecf20Sopenharmony_ci return __bpf_fill_stxdw(self, BPF_W); 4578c2ecf20Sopenharmony_ci} 4588c2ecf20Sopenharmony_ci 4598c2ecf20Sopenharmony_cistatic int bpf_fill_stxdw(struct bpf_test *self) 4608c2ecf20Sopenharmony_ci{ 4618c2ecf20Sopenharmony_ci return __bpf_fill_stxdw(self, BPF_DW); 4628c2ecf20Sopenharmony_ci} 4638c2ecf20Sopenharmony_ci 4648c2ecf20Sopenharmony_cistatic struct bpf_test tests[] = { 4658c2ecf20Sopenharmony_ci { 4668c2ecf20Sopenharmony_ci "TAX", 4678c2ecf20Sopenharmony_ci .u.insns = { 4688c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_IMM, 1), 4698c2ecf20Sopenharmony_ci BPF_STMT(BPF_MISC | BPF_TAX, 0), 4708c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_IMM, 2), 4718c2ecf20Sopenharmony_ci BPF_STMT(BPF_ALU | BPF_ADD | BPF_X, 0), 4728c2ecf20Sopenharmony_ci BPF_STMT(BPF_ALU | BPF_NEG, 0), /* A == -3 */ 4738c2ecf20Sopenharmony_ci BPF_STMT(BPF_MISC | BPF_TAX, 0), 4748c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_LEN, 0), 4758c2ecf20Sopenharmony_ci BPF_STMT(BPF_ALU | BPF_ADD | BPF_X, 0), 4768c2ecf20Sopenharmony_ci BPF_STMT(BPF_MISC | BPF_TAX, 0), /* X == len - 3 */ 4778c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_B | BPF_IND, 1), 4788c2ecf20Sopenharmony_ci BPF_STMT(BPF_RET | BPF_A, 0) 4798c2ecf20Sopenharmony_ci }, 4808c2ecf20Sopenharmony_ci CLASSIC, 4818c2ecf20Sopenharmony_ci { 10, 20, 30, 40, 50 }, 4828c2ecf20Sopenharmony_ci { { 2, 10 }, { 3, 20 }, { 4, 30 } }, 4838c2ecf20Sopenharmony_ci }, 4848c2ecf20Sopenharmony_ci { 4858c2ecf20Sopenharmony_ci "TXA", 4868c2ecf20Sopenharmony_ci .u.insns = { 4878c2ecf20Sopenharmony_ci BPF_STMT(BPF_LDX | BPF_LEN, 0), 4888c2ecf20Sopenharmony_ci BPF_STMT(BPF_MISC | BPF_TXA, 0), 4898c2ecf20Sopenharmony_ci BPF_STMT(BPF_ALU | BPF_ADD | BPF_X, 0), 4908c2ecf20Sopenharmony_ci BPF_STMT(BPF_RET | BPF_A, 0) /* A == len * 2 */ 4918c2ecf20Sopenharmony_ci }, 4928c2ecf20Sopenharmony_ci CLASSIC, 4938c2ecf20Sopenharmony_ci { 10, 20, 30, 40, 50 }, 4948c2ecf20Sopenharmony_ci { { 1, 2 }, { 3, 6 }, { 4, 8 } }, 4958c2ecf20Sopenharmony_ci }, 4968c2ecf20Sopenharmony_ci { 4978c2ecf20Sopenharmony_ci "ADD_SUB_MUL_K", 4988c2ecf20Sopenharmony_ci .u.insns = { 4998c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_IMM, 1), 5008c2ecf20Sopenharmony_ci BPF_STMT(BPF_ALU | BPF_ADD | BPF_K, 2), 5018c2ecf20Sopenharmony_ci BPF_STMT(BPF_LDX | BPF_IMM, 3), 5028c2ecf20Sopenharmony_ci BPF_STMT(BPF_ALU | BPF_SUB | BPF_X, 0), 5038c2ecf20Sopenharmony_ci BPF_STMT(BPF_ALU | BPF_ADD | BPF_K, 0xffffffff), 5048c2ecf20Sopenharmony_ci BPF_STMT(BPF_ALU | BPF_MUL | BPF_K, 3), 5058c2ecf20Sopenharmony_ci BPF_STMT(BPF_RET | BPF_A, 0) 5068c2ecf20Sopenharmony_ci }, 5078c2ecf20Sopenharmony_ci CLASSIC | FLAG_NO_DATA, 5088c2ecf20Sopenharmony_ci { }, 5098c2ecf20Sopenharmony_ci { { 0, 0xfffffffd } } 5108c2ecf20Sopenharmony_ci }, 5118c2ecf20Sopenharmony_ci { 5128c2ecf20Sopenharmony_ci "DIV_MOD_KX", 5138c2ecf20Sopenharmony_ci .u.insns = { 5148c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_IMM, 8), 5158c2ecf20Sopenharmony_ci BPF_STMT(BPF_ALU | BPF_DIV | BPF_K, 2), 5168c2ecf20Sopenharmony_ci BPF_STMT(BPF_MISC | BPF_TAX, 0), 5178c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_IMM, 0xffffffff), 5188c2ecf20Sopenharmony_ci BPF_STMT(BPF_ALU | BPF_DIV | BPF_X, 0), 5198c2ecf20Sopenharmony_ci BPF_STMT(BPF_MISC | BPF_TAX, 0), 5208c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_IMM, 0xffffffff), 5218c2ecf20Sopenharmony_ci BPF_STMT(BPF_ALU | BPF_DIV | BPF_K, 0x70000000), 5228c2ecf20Sopenharmony_ci BPF_STMT(BPF_MISC | BPF_TAX, 0), 5238c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_IMM, 0xffffffff), 5248c2ecf20Sopenharmony_ci BPF_STMT(BPF_ALU | BPF_MOD | BPF_X, 0), 5258c2ecf20Sopenharmony_ci BPF_STMT(BPF_MISC | BPF_TAX, 0), 5268c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_IMM, 0xffffffff), 5278c2ecf20Sopenharmony_ci BPF_STMT(BPF_ALU | BPF_MOD | BPF_K, 0x70000000), 5288c2ecf20Sopenharmony_ci BPF_STMT(BPF_ALU | BPF_ADD | BPF_X, 0), 5298c2ecf20Sopenharmony_ci BPF_STMT(BPF_RET | BPF_A, 0) 5308c2ecf20Sopenharmony_ci }, 5318c2ecf20Sopenharmony_ci CLASSIC | FLAG_NO_DATA, 5328c2ecf20Sopenharmony_ci { }, 5338c2ecf20Sopenharmony_ci { { 0, 0x20000000 } } 5348c2ecf20Sopenharmony_ci }, 5358c2ecf20Sopenharmony_ci { 5368c2ecf20Sopenharmony_ci "AND_OR_LSH_K", 5378c2ecf20Sopenharmony_ci .u.insns = { 5388c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_IMM, 0xff), 5398c2ecf20Sopenharmony_ci BPF_STMT(BPF_ALU | BPF_AND | BPF_K, 0xf0), 5408c2ecf20Sopenharmony_ci BPF_STMT(BPF_ALU | BPF_LSH | BPF_K, 27), 5418c2ecf20Sopenharmony_ci BPF_STMT(BPF_MISC | BPF_TAX, 0), 5428c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_IMM, 0xf), 5438c2ecf20Sopenharmony_ci BPF_STMT(BPF_ALU | BPF_OR | BPF_K, 0xf0), 5448c2ecf20Sopenharmony_ci BPF_STMT(BPF_ALU | BPF_ADD | BPF_X, 0), 5458c2ecf20Sopenharmony_ci BPF_STMT(BPF_RET | BPF_A, 0) 5468c2ecf20Sopenharmony_ci }, 5478c2ecf20Sopenharmony_ci CLASSIC | FLAG_NO_DATA, 5488c2ecf20Sopenharmony_ci { }, 5498c2ecf20Sopenharmony_ci { { 0, 0x800000ff }, { 1, 0x800000ff } }, 5508c2ecf20Sopenharmony_ci }, 5518c2ecf20Sopenharmony_ci { 5528c2ecf20Sopenharmony_ci "LD_IMM_0", 5538c2ecf20Sopenharmony_ci .u.insns = { 5548c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_IMM, 0), /* ld #0 */ 5558c2ecf20Sopenharmony_ci BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, 0, 1, 0), 5568c2ecf20Sopenharmony_ci BPF_STMT(BPF_RET | BPF_K, 0), 5578c2ecf20Sopenharmony_ci BPF_STMT(BPF_RET | BPF_K, 1), 5588c2ecf20Sopenharmony_ci }, 5598c2ecf20Sopenharmony_ci CLASSIC, 5608c2ecf20Sopenharmony_ci { }, 5618c2ecf20Sopenharmony_ci { { 1, 1 } }, 5628c2ecf20Sopenharmony_ci }, 5638c2ecf20Sopenharmony_ci { 5648c2ecf20Sopenharmony_ci "LD_IND", 5658c2ecf20Sopenharmony_ci .u.insns = { 5668c2ecf20Sopenharmony_ci BPF_STMT(BPF_LDX | BPF_LEN, 0), 5678c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_H | BPF_IND, MAX_K), 5688c2ecf20Sopenharmony_ci BPF_STMT(BPF_RET | BPF_K, 1) 5698c2ecf20Sopenharmony_ci }, 5708c2ecf20Sopenharmony_ci CLASSIC, 5718c2ecf20Sopenharmony_ci { }, 5728c2ecf20Sopenharmony_ci { { 1, 0 }, { 10, 0 }, { 60, 0 } }, 5738c2ecf20Sopenharmony_ci }, 5748c2ecf20Sopenharmony_ci { 5758c2ecf20Sopenharmony_ci "LD_ABS", 5768c2ecf20Sopenharmony_ci .u.insns = { 5778c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_W | BPF_ABS, 1000), 5788c2ecf20Sopenharmony_ci BPF_STMT(BPF_RET | BPF_K, 1) 5798c2ecf20Sopenharmony_ci }, 5808c2ecf20Sopenharmony_ci CLASSIC, 5818c2ecf20Sopenharmony_ci { }, 5828c2ecf20Sopenharmony_ci { { 1, 0 }, { 10, 0 }, { 60, 0 } }, 5838c2ecf20Sopenharmony_ci }, 5848c2ecf20Sopenharmony_ci { 5858c2ecf20Sopenharmony_ci "LD_ABS_LL", 5868c2ecf20Sopenharmony_ci .u.insns = { 5878c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_B | BPF_ABS, SKF_LL_OFF), 5888c2ecf20Sopenharmony_ci BPF_STMT(BPF_MISC | BPF_TAX, 0), 5898c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_B | BPF_ABS, SKF_LL_OFF + 1), 5908c2ecf20Sopenharmony_ci BPF_STMT(BPF_ALU | BPF_ADD | BPF_X, 0), 5918c2ecf20Sopenharmony_ci BPF_STMT(BPF_RET | BPF_A, 0) 5928c2ecf20Sopenharmony_ci }, 5938c2ecf20Sopenharmony_ci CLASSIC, 5948c2ecf20Sopenharmony_ci { 1, 2, 3 }, 5958c2ecf20Sopenharmony_ci { { 1, 0 }, { 2, 3 } }, 5968c2ecf20Sopenharmony_ci }, 5978c2ecf20Sopenharmony_ci { 5988c2ecf20Sopenharmony_ci "LD_IND_LL", 5998c2ecf20Sopenharmony_ci .u.insns = { 6008c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_IMM, SKF_LL_OFF - 1), 6018c2ecf20Sopenharmony_ci BPF_STMT(BPF_LDX | BPF_LEN, 0), 6028c2ecf20Sopenharmony_ci BPF_STMT(BPF_ALU | BPF_ADD | BPF_X, 0), 6038c2ecf20Sopenharmony_ci BPF_STMT(BPF_MISC | BPF_TAX, 0), 6048c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_B | BPF_IND, 0), 6058c2ecf20Sopenharmony_ci BPF_STMT(BPF_RET | BPF_A, 0) 6068c2ecf20Sopenharmony_ci }, 6078c2ecf20Sopenharmony_ci CLASSIC, 6088c2ecf20Sopenharmony_ci { 1, 2, 3, 0xff }, 6098c2ecf20Sopenharmony_ci { { 1, 1 }, { 3, 3 }, { 4, 0xff } }, 6108c2ecf20Sopenharmony_ci }, 6118c2ecf20Sopenharmony_ci { 6128c2ecf20Sopenharmony_ci "LD_ABS_NET", 6138c2ecf20Sopenharmony_ci .u.insns = { 6148c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_B | BPF_ABS, SKF_NET_OFF), 6158c2ecf20Sopenharmony_ci BPF_STMT(BPF_MISC | BPF_TAX, 0), 6168c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_B | BPF_ABS, SKF_NET_OFF + 1), 6178c2ecf20Sopenharmony_ci BPF_STMT(BPF_ALU | BPF_ADD | BPF_X, 0), 6188c2ecf20Sopenharmony_ci BPF_STMT(BPF_RET | BPF_A, 0) 6198c2ecf20Sopenharmony_ci }, 6208c2ecf20Sopenharmony_ci CLASSIC, 6218c2ecf20Sopenharmony_ci { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3 }, 6228c2ecf20Sopenharmony_ci { { 15, 0 }, { 16, 3 } }, 6238c2ecf20Sopenharmony_ci }, 6248c2ecf20Sopenharmony_ci { 6258c2ecf20Sopenharmony_ci "LD_IND_NET", 6268c2ecf20Sopenharmony_ci .u.insns = { 6278c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_IMM, SKF_NET_OFF - 15), 6288c2ecf20Sopenharmony_ci BPF_STMT(BPF_LDX | BPF_LEN, 0), 6298c2ecf20Sopenharmony_ci BPF_STMT(BPF_ALU | BPF_ADD | BPF_X, 0), 6308c2ecf20Sopenharmony_ci BPF_STMT(BPF_MISC | BPF_TAX, 0), 6318c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_B | BPF_IND, 0), 6328c2ecf20Sopenharmony_ci BPF_STMT(BPF_RET | BPF_A, 0) 6338c2ecf20Sopenharmony_ci }, 6348c2ecf20Sopenharmony_ci CLASSIC, 6358c2ecf20Sopenharmony_ci { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3 }, 6368c2ecf20Sopenharmony_ci { { 14, 0 }, { 15, 1 }, { 17, 3 } }, 6378c2ecf20Sopenharmony_ci }, 6388c2ecf20Sopenharmony_ci { 6398c2ecf20Sopenharmony_ci "LD_PKTTYPE", 6408c2ecf20Sopenharmony_ci .u.insns = { 6418c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_W | BPF_ABS, 6428c2ecf20Sopenharmony_ci SKF_AD_OFF + SKF_AD_PKTTYPE), 6438c2ecf20Sopenharmony_ci BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, SKB_TYPE, 1, 0), 6448c2ecf20Sopenharmony_ci BPF_STMT(BPF_RET | BPF_K, 1), 6458c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_W | BPF_ABS, 6468c2ecf20Sopenharmony_ci SKF_AD_OFF + SKF_AD_PKTTYPE), 6478c2ecf20Sopenharmony_ci BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, SKB_TYPE, 1, 0), 6488c2ecf20Sopenharmony_ci BPF_STMT(BPF_RET | BPF_K, 1), 6498c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_W | BPF_ABS, 6508c2ecf20Sopenharmony_ci SKF_AD_OFF + SKF_AD_PKTTYPE), 6518c2ecf20Sopenharmony_ci BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, SKB_TYPE, 1, 0), 6528c2ecf20Sopenharmony_ci BPF_STMT(BPF_RET | BPF_K, 1), 6538c2ecf20Sopenharmony_ci BPF_STMT(BPF_RET | BPF_A, 0) 6548c2ecf20Sopenharmony_ci }, 6558c2ecf20Sopenharmony_ci CLASSIC, 6568c2ecf20Sopenharmony_ci { }, 6578c2ecf20Sopenharmony_ci { { 1, 3 }, { 10, 3 } }, 6588c2ecf20Sopenharmony_ci }, 6598c2ecf20Sopenharmony_ci { 6608c2ecf20Sopenharmony_ci "LD_MARK", 6618c2ecf20Sopenharmony_ci .u.insns = { 6628c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_W | BPF_ABS, 6638c2ecf20Sopenharmony_ci SKF_AD_OFF + SKF_AD_MARK), 6648c2ecf20Sopenharmony_ci BPF_STMT(BPF_RET | BPF_A, 0) 6658c2ecf20Sopenharmony_ci }, 6668c2ecf20Sopenharmony_ci CLASSIC, 6678c2ecf20Sopenharmony_ci { }, 6688c2ecf20Sopenharmony_ci { { 1, SKB_MARK}, { 10, SKB_MARK} }, 6698c2ecf20Sopenharmony_ci }, 6708c2ecf20Sopenharmony_ci { 6718c2ecf20Sopenharmony_ci "LD_RXHASH", 6728c2ecf20Sopenharmony_ci .u.insns = { 6738c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_W | BPF_ABS, 6748c2ecf20Sopenharmony_ci SKF_AD_OFF + SKF_AD_RXHASH), 6758c2ecf20Sopenharmony_ci BPF_STMT(BPF_RET | BPF_A, 0) 6768c2ecf20Sopenharmony_ci }, 6778c2ecf20Sopenharmony_ci CLASSIC, 6788c2ecf20Sopenharmony_ci { }, 6798c2ecf20Sopenharmony_ci { { 1, SKB_HASH}, { 10, SKB_HASH} }, 6808c2ecf20Sopenharmony_ci }, 6818c2ecf20Sopenharmony_ci { 6828c2ecf20Sopenharmony_ci "LD_QUEUE", 6838c2ecf20Sopenharmony_ci .u.insns = { 6848c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_W | BPF_ABS, 6858c2ecf20Sopenharmony_ci SKF_AD_OFF + SKF_AD_QUEUE), 6868c2ecf20Sopenharmony_ci BPF_STMT(BPF_RET | BPF_A, 0) 6878c2ecf20Sopenharmony_ci }, 6888c2ecf20Sopenharmony_ci CLASSIC, 6898c2ecf20Sopenharmony_ci { }, 6908c2ecf20Sopenharmony_ci { { 1, SKB_QUEUE_MAP }, { 10, SKB_QUEUE_MAP } }, 6918c2ecf20Sopenharmony_ci }, 6928c2ecf20Sopenharmony_ci { 6938c2ecf20Sopenharmony_ci "LD_PROTOCOL", 6948c2ecf20Sopenharmony_ci .u.insns = { 6958c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_B | BPF_ABS, 1), 6968c2ecf20Sopenharmony_ci BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, 20, 1, 0), 6978c2ecf20Sopenharmony_ci BPF_STMT(BPF_RET | BPF_K, 0), 6988c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_W | BPF_ABS, 6998c2ecf20Sopenharmony_ci SKF_AD_OFF + SKF_AD_PROTOCOL), 7008c2ecf20Sopenharmony_ci BPF_STMT(BPF_MISC | BPF_TAX, 0), 7018c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_B | BPF_ABS, 2), 7028c2ecf20Sopenharmony_ci BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, 30, 1, 0), 7038c2ecf20Sopenharmony_ci BPF_STMT(BPF_RET | BPF_K, 0), 7048c2ecf20Sopenharmony_ci BPF_STMT(BPF_MISC | BPF_TXA, 0), 7058c2ecf20Sopenharmony_ci BPF_STMT(BPF_RET | BPF_A, 0) 7068c2ecf20Sopenharmony_ci }, 7078c2ecf20Sopenharmony_ci CLASSIC, 7088c2ecf20Sopenharmony_ci { 10, 20, 30 }, 7098c2ecf20Sopenharmony_ci { { 10, ETH_P_IP }, { 100, ETH_P_IP } }, 7108c2ecf20Sopenharmony_ci }, 7118c2ecf20Sopenharmony_ci { 7128c2ecf20Sopenharmony_ci "LD_VLAN_TAG", 7138c2ecf20Sopenharmony_ci .u.insns = { 7148c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_W | BPF_ABS, 7158c2ecf20Sopenharmony_ci SKF_AD_OFF + SKF_AD_VLAN_TAG), 7168c2ecf20Sopenharmony_ci BPF_STMT(BPF_RET | BPF_A, 0) 7178c2ecf20Sopenharmony_ci }, 7188c2ecf20Sopenharmony_ci CLASSIC, 7198c2ecf20Sopenharmony_ci { }, 7208c2ecf20Sopenharmony_ci { 7218c2ecf20Sopenharmony_ci { 1, SKB_VLAN_TCI }, 7228c2ecf20Sopenharmony_ci { 10, SKB_VLAN_TCI } 7238c2ecf20Sopenharmony_ci }, 7248c2ecf20Sopenharmony_ci }, 7258c2ecf20Sopenharmony_ci { 7268c2ecf20Sopenharmony_ci "LD_VLAN_TAG_PRESENT", 7278c2ecf20Sopenharmony_ci .u.insns = { 7288c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_W | BPF_ABS, 7298c2ecf20Sopenharmony_ci SKF_AD_OFF + SKF_AD_VLAN_TAG_PRESENT), 7308c2ecf20Sopenharmony_ci BPF_STMT(BPF_RET | BPF_A, 0) 7318c2ecf20Sopenharmony_ci }, 7328c2ecf20Sopenharmony_ci CLASSIC, 7338c2ecf20Sopenharmony_ci { }, 7348c2ecf20Sopenharmony_ci { 7358c2ecf20Sopenharmony_ci { 1, SKB_VLAN_PRESENT }, 7368c2ecf20Sopenharmony_ci { 10, SKB_VLAN_PRESENT } 7378c2ecf20Sopenharmony_ci }, 7388c2ecf20Sopenharmony_ci }, 7398c2ecf20Sopenharmony_ci { 7408c2ecf20Sopenharmony_ci "LD_IFINDEX", 7418c2ecf20Sopenharmony_ci .u.insns = { 7428c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_W | BPF_ABS, 7438c2ecf20Sopenharmony_ci SKF_AD_OFF + SKF_AD_IFINDEX), 7448c2ecf20Sopenharmony_ci BPF_STMT(BPF_RET | BPF_A, 0) 7458c2ecf20Sopenharmony_ci }, 7468c2ecf20Sopenharmony_ci CLASSIC, 7478c2ecf20Sopenharmony_ci { }, 7488c2ecf20Sopenharmony_ci { { 1, SKB_DEV_IFINDEX }, { 10, SKB_DEV_IFINDEX } }, 7498c2ecf20Sopenharmony_ci }, 7508c2ecf20Sopenharmony_ci { 7518c2ecf20Sopenharmony_ci "LD_HATYPE", 7528c2ecf20Sopenharmony_ci .u.insns = { 7538c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_W | BPF_ABS, 7548c2ecf20Sopenharmony_ci SKF_AD_OFF + SKF_AD_HATYPE), 7558c2ecf20Sopenharmony_ci BPF_STMT(BPF_RET | BPF_A, 0) 7568c2ecf20Sopenharmony_ci }, 7578c2ecf20Sopenharmony_ci CLASSIC, 7588c2ecf20Sopenharmony_ci { }, 7598c2ecf20Sopenharmony_ci { { 1, SKB_DEV_TYPE }, { 10, SKB_DEV_TYPE } }, 7608c2ecf20Sopenharmony_ci }, 7618c2ecf20Sopenharmony_ci { 7628c2ecf20Sopenharmony_ci "LD_CPU", 7638c2ecf20Sopenharmony_ci .u.insns = { 7648c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_W | BPF_ABS, 7658c2ecf20Sopenharmony_ci SKF_AD_OFF + SKF_AD_CPU), 7668c2ecf20Sopenharmony_ci BPF_STMT(BPF_MISC | BPF_TAX, 0), 7678c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_W | BPF_ABS, 7688c2ecf20Sopenharmony_ci SKF_AD_OFF + SKF_AD_CPU), 7698c2ecf20Sopenharmony_ci BPF_STMT(BPF_ALU | BPF_SUB | BPF_X, 0), 7708c2ecf20Sopenharmony_ci BPF_STMT(BPF_RET | BPF_A, 0) 7718c2ecf20Sopenharmony_ci }, 7728c2ecf20Sopenharmony_ci CLASSIC, 7738c2ecf20Sopenharmony_ci { }, 7748c2ecf20Sopenharmony_ci { { 1, 0 }, { 10, 0 } }, 7758c2ecf20Sopenharmony_ci }, 7768c2ecf20Sopenharmony_ci { 7778c2ecf20Sopenharmony_ci "LD_NLATTR", 7788c2ecf20Sopenharmony_ci .u.insns = { 7798c2ecf20Sopenharmony_ci BPF_STMT(BPF_LDX | BPF_IMM, 2), 7808c2ecf20Sopenharmony_ci BPF_STMT(BPF_MISC | BPF_TXA, 0), 7818c2ecf20Sopenharmony_ci BPF_STMT(BPF_LDX | BPF_IMM, 3), 7828c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_W | BPF_ABS, 7838c2ecf20Sopenharmony_ci SKF_AD_OFF + SKF_AD_NLATTR), 7848c2ecf20Sopenharmony_ci BPF_STMT(BPF_RET | BPF_A, 0) 7858c2ecf20Sopenharmony_ci }, 7868c2ecf20Sopenharmony_ci CLASSIC, 7878c2ecf20Sopenharmony_ci#ifdef __BIG_ENDIAN 7888c2ecf20Sopenharmony_ci { 0xff, 0xff, 0, 4, 0, 2, 0, 4, 0, 3 }, 7898c2ecf20Sopenharmony_ci#else 7908c2ecf20Sopenharmony_ci { 0xff, 0xff, 4, 0, 2, 0, 4, 0, 3, 0 }, 7918c2ecf20Sopenharmony_ci#endif 7928c2ecf20Sopenharmony_ci { { 4, 0 }, { 20, 6 } }, 7938c2ecf20Sopenharmony_ci }, 7948c2ecf20Sopenharmony_ci { 7958c2ecf20Sopenharmony_ci "LD_NLATTR_NEST", 7968c2ecf20Sopenharmony_ci .u.insns = { 7978c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_IMM, 2), 7988c2ecf20Sopenharmony_ci BPF_STMT(BPF_LDX | BPF_IMM, 3), 7998c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_W | BPF_ABS, 8008c2ecf20Sopenharmony_ci SKF_AD_OFF + SKF_AD_NLATTR_NEST), 8018c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_IMM, 2), 8028c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_W | BPF_ABS, 8038c2ecf20Sopenharmony_ci SKF_AD_OFF + SKF_AD_NLATTR_NEST), 8048c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_IMM, 2), 8058c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_W | BPF_ABS, 8068c2ecf20Sopenharmony_ci SKF_AD_OFF + SKF_AD_NLATTR_NEST), 8078c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_IMM, 2), 8088c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_W | BPF_ABS, 8098c2ecf20Sopenharmony_ci SKF_AD_OFF + SKF_AD_NLATTR_NEST), 8108c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_IMM, 2), 8118c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_W | BPF_ABS, 8128c2ecf20Sopenharmony_ci SKF_AD_OFF + SKF_AD_NLATTR_NEST), 8138c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_IMM, 2), 8148c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_W | BPF_ABS, 8158c2ecf20Sopenharmony_ci SKF_AD_OFF + SKF_AD_NLATTR_NEST), 8168c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_IMM, 2), 8178c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_W | BPF_ABS, 8188c2ecf20Sopenharmony_ci SKF_AD_OFF + SKF_AD_NLATTR_NEST), 8198c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_IMM, 2), 8208c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_W | BPF_ABS, 8218c2ecf20Sopenharmony_ci SKF_AD_OFF + SKF_AD_NLATTR_NEST), 8228c2ecf20Sopenharmony_ci BPF_STMT(BPF_RET | BPF_A, 0) 8238c2ecf20Sopenharmony_ci }, 8248c2ecf20Sopenharmony_ci CLASSIC, 8258c2ecf20Sopenharmony_ci#ifdef __BIG_ENDIAN 8268c2ecf20Sopenharmony_ci { 0xff, 0xff, 0, 12, 0, 1, 0, 4, 0, 2, 0, 4, 0, 3 }, 8278c2ecf20Sopenharmony_ci#else 8288c2ecf20Sopenharmony_ci { 0xff, 0xff, 12, 0, 1, 0, 4, 0, 2, 0, 4, 0, 3, 0 }, 8298c2ecf20Sopenharmony_ci#endif 8308c2ecf20Sopenharmony_ci { { 4, 0 }, { 20, 10 } }, 8318c2ecf20Sopenharmony_ci }, 8328c2ecf20Sopenharmony_ci { 8338c2ecf20Sopenharmony_ci "LD_PAYLOAD_OFF", 8348c2ecf20Sopenharmony_ci .u.insns = { 8358c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_W | BPF_ABS, 8368c2ecf20Sopenharmony_ci SKF_AD_OFF + SKF_AD_PAY_OFFSET), 8378c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_W | BPF_ABS, 8388c2ecf20Sopenharmony_ci SKF_AD_OFF + SKF_AD_PAY_OFFSET), 8398c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_W | BPF_ABS, 8408c2ecf20Sopenharmony_ci SKF_AD_OFF + SKF_AD_PAY_OFFSET), 8418c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_W | BPF_ABS, 8428c2ecf20Sopenharmony_ci SKF_AD_OFF + SKF_AD_PAY_OFFSET), 8438c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_W | BPF_ABS, 8448c2ecf20Sopenharmony_ci SKF_AD_OFF + SKF_AD_PAY_OFFSET), 8458c2ecf20Sopenharmony_ci BPF_STMT(BPF_RET | BPF_A, 0) 8468c2ecf20Sopenharmony_ci }, 8478c2ecf20Sopenharmony_ci CLASSIC, 8488c2ecf20Sopenharmony_ci /* 00:00:00:00:00:00 > 00:00:00:00:00:00, ethtype IPv4 (0x0800), 8498c2ecf20Sopenharmony_ci * length 98: 127.0.0.1 > 127.0.0.1: ICMP echo request, 8508c2ecf20Sopenharmony_ci * id 9737, seq 1, length 64 8518c2ecf20Sopenharmony_ci */ 8528c2ecf20Sopenharmony_ci { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 8538c2ecf20Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 8548c2ecf20Sopenharmony_ci 0x08, 0x00, 8558c2ecf20Sopenharmony_ci 0x45, 0x00, 0x00, 0x54, 0xac, 0x8b, 0x40, 0x00, 0x40, 8568c2ecf20Sopenharmony_ci 0x01, 0x90, 0x1b, 0x7f, 0x00, 0x00, 0x01 }, 8578c2ecf20Sopenharmony_ci { { 30, 0 }, { 100, 42 } }, 8588c2ecf20Sopenharmony_ci }, 8598c2ecf20Sopenharmony_ci { 8608c2ecf20Sopenharmony_ci "LD_ANC_XOR", 8618c2ecf20Sopenharmony_ci .u.insns = { 8628c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_IMM, 10), 8638c2ecf20Sopenharmony_ci BPF_STMT(BPF_LDX | BPF_IMM, 300), 8648c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_W | BPF_ABS, 8658c2ecf20Sopenharmony_ci SKF_AD_OFF + SKF_AD_ALU_XOR_X), 8668c2ecf20Sopenharmony_ci BPF_STMT(BPF_RET | BPF_A, 0) 8678c2ecf20Sopenharmony_ci }, 8688c2ecf20Sopenharmony_ci CLASSIC, 8698c2ecf20Sopenharmony_ci { }, 8708c2ecf20Sopenharmony_ci { { 4, 0xA ^ 300 }, { 20, 0xA ^ 300 } }, 8718c2ecf20Sopenharmony_ci }, 8728c2ecf20Sopenharmony_ci { 8738c2ecf20Sopenharmony_ci "SPILL_FILL", 8748c2ecf20Sopenharmony_ci .u.insns = { 8758c2ecf20Sopenharmony_ci BPF_STMT(BPF_LDX | BPF_LEN, 0), 8768c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_IMM, 2), 8778c2ecf20Sopenharmony_ci BPF_STMT(BPF_ALU | BPF_RSH, 1), 8788c2ecf20Sopenharmony_ci BPF_STMT(BPF_ALU | BPF_XOR | BPF_X, 0), 8798c2ecf20Sopenharmony_ci BPF_STMT(BPF_ST, 1), /* M1 = 1 ^ len */ 8808c2ecf20Sopenharmony_ci BPF_STMT(BPF_ALU | BPF_XOR | BPF_K, 0x80000000), 8818c2ecf20Sopenharmony_ci BPF_STMT(BPF_ST, 2), /* M2 = 1 ^ len ^ 0x80000000 */ 8828c2ecf20Sopenharmony_ci BPF_STMT(BPF_STX, 15), /* M3 = len */ 8838c2ecf20Sopenharmony_ci BPF_STMT(BPF_LDX | BPF_MEM, 1), 8848c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_MEM, 2), 8858c2ecf20Sopenharmony_ci BPF_STMT(BPF_ALU | BPF_XOR | BPF_X, 0), 8868c2ecf20Sopenharmony_ci BPF_STMT(BPF_LDX | BPF_MEM, 15), 8878c2ecf20Sopenharmony_ci BPF_STMT(BPF_ALU | BPF_XOR | BPF_X, 0), 8888c2ecf20Sopenharmony_ci BPF_STMT(BPF_RET | BPF_A, 0) 8898c2ecf20Sopenharmony_ci }, 8908c2ecf20Sopenharmony_ci CLASSIC, 8918c2ecf20Sopenharmony_ci { }, 8928c2ecf20Sopenharmony_ci { { 1, 0x80000001 }, { 2, 0x80000002 }, { 60, 0x80000000 ^ 60 } } 8938c2ecf20Sopenharmony_ci }, 8948c2ecf20Sopenharmony_ci { 8958c2ecf20Sopenharmony_ci "JEQ", 8968c2ecf20Sopenharmony_ci .u.insns = { 8978c2ecf20Sopenharmony_ci BPF_STMT(BPF_LDX | BPF_LEN, 0), 8988c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_B | BPF_ABS, 2), 8998c2ecf20Sopenharmony_ci BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_X, 0, 0, 1), 9008c2ecf20Sopenharmony_ci BPF_STMT(BPF_RET | BPF_K, 1), 9018c2ecf20Sopenharmony_ci BPF_STMT(BPF_RET | BPF_K, MAX_K) 9028c2ecf20Sopenharmony_ci }, 9038c2ecf20Sopenharmony_ci CLASSIC, 9048c2ecf20Sopenharmony_ci { 3, 3, 3, 3, 3 }, 9058c2ecf20Sopenharmony_ci { { 1, 0 }, { 3, 1 }, { 4, MAX_K } }, 9068c2ecf20Sopenharmony_ci }, 9078c2ecf20Sopenharmony_ci { 9088c2ecf20Sopenharmony_ci "JGT", 9098c2ecf20Sopenharmony_ci .u.insns = { 9108c2ecf20Sopenharmony_ci BPF_STMT(BPF_LDX | BPF_LEN, 0), 9118c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_B | BPF_ABS, 2), 9128c2ecf20Sopenharmony_ci BPF_JUMP(BPF_JMP | BPF_JGT | BPF_X, 0, 0, 1), 9138c2ecf20Sopenharmony_ci BPF_STMT(BPF_RET | BPF_K, 1), 9148c2ecf20Sopenharmony_ci BPF_STMT(BPF_RET | BPF_K, MAX_K) 9158c2ecf20Sopenharmony_ci }, 9168c2ecf20Sopenharmony_ci CLASSIC, 9178c2ecf20Sopenharmony_ci { 4, 4, 4, 3, 3 }, 9188c2ecf20Sopenharmony_ci { { 2, 0 }, { 3, 1 }, { 4, MAX_K } }, 9198c2ecf20Sopenharmony_ci }, 9208c2ecf20Sopenharmony_ci { 9218c2ecf20Sopenharmony_ci "JGE (jt 0), test 1", 9228c2ecf20Sopenharmony_ci .u.insns = { 9238c2ecf20Sopenharmony_ci BPF_STMT(BPF_LDX | BPF_LEN, 0), 9248c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_B | BPF_ABS, 2), 9258c2ecf20Sopenharmony_ci BPF_JUMP(BPF_JMP | BPF_JGE | BPF_X, 0, 0, 1), 9268c2ecf20Sopenharmony_ci BPF_STMT(BPF_RET | BPF_K, 1), 9278c2ecf20Sopenharmony_ci BPF_STMT(BPF_RET | BPF_K, MAX_K) 9288c2ecf20Sopenharmony_ci }, 9298c2ecf20Sopenharmony_ci CLASSIC, 9308c2ecf20Sopenharmony_ci { 4, 4, 4, 3, 3 }, 9318c2ecf20Sopenharmony_ci { { 2, 0 }, { 3, 1 }, { 4, 1 } }, 9328c2ecf20Sopenharmony_ci }, 9338c2ecf20Sopenharmony_ci { 9348c2ecf20Sopenharmony_ci "JGE (jt 0), test 2", 9358c2ecf20Sopenharmony_ci .u.insns = { 9368c2ecf20Sopenharmony_ci BPF_STMT(BPF_LDX | BPF_LEN, 0), 9378c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_B | BPF_ABS, 2), 9388c2ecf20Sopenharmony_ci BPF_JUMP(BPF_JMP | BPF_JGE | BPF_X, 0, 0, 1), 9398c2ecf20Sopenharmony_ci BPF_STMT(BPF_RET | BPF_K, 1), 9408c2ecf20Sopenharmony_ci BPF_STMT(BPF_RET | BPF_K, MAX_K) 9418c2ecf20Sopenharmony_ci }, 9428c2ecf20Sopenharmony_ci CLASSIC, 9438c2ecf20Sopenharmony_ci { 4, 4, 5, 3, 3 }, 9448c2ecf20Sopenharmony_ci { { 4, 1 }, { 5, 1 }, { 6, MAX_K } }, 9458c2ecf20Sopenharmony_ci }, 9468c2ecf20Sopenharmony_ci { 9478c2ecf20Sopenharmony_ci "JGE", 9488c2ecf20Sopenharmony_ci .u.insns = { 9498c2ecf20Sopenharmony_ci BPF_STMT(BPF_LDX | BPF_LEN, 0), 9508c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_B | BPF_IND, MAX_K), 9518c2ecf20Sopenharmony_ci BPF_JUMP(BPF_JMP | BPF_JGE | BPF_K, 1, 1, 0), 9528c2ecf20Sopenharmony_ci BPF_STMT(BPF_RET | BPF_K, 10), 9538c2ecf20Sopenharmony_ci BPF_JUMP(BPF_JMP | BPF_JGE | BPF_K, 2, 1, 0), 9548c2ecf20Sopenharmony_ci BPF_STMT(BPF_RET | BPF_K, 20), 9558c2ecf20Sopenharmony_ci BPF_JUMP(BPF_JMP | BPF_JGE | BPF_K, 3, 1, 0), 9568c2ecf20Sopenharmony_ci BPF_STMT(BPF_RET | BPF_K, 30), 9578c2ecf20Sopenharmony_ci BPF_JUMP(BPF_JMP | BPF_JGE | BPF_K, 4, 1, 0), 9588c2ecf20Sopenharmony_ci BPF_STMT(BPF_RET | BPF_K, 40), 9598c2ecf20Sopenharmony_ci BPF_STMT(BPF_RET | BPF_K, MAX_K) 9608c2ecf20Sopenharmony_ci }, 9618c2ecf20Sopenharmony_ci CLASSIC, 9628c2ecf20Sopenharmony_ci { 1, 2, 3, 4, 5 }, 9638c2ecf20Sopenharmony_ci { { 1, 20 }, { 3, 40 }, { 5, MAX_K } }, 9648c2ecf20Sopenharmony_ci }, 9658c2ecf20Sopenharmony_ci { 9668c2ecf20Sopenharmony_ci "JSET", 9678c2ecf20Sopenharmony_ci .u.insns = { 9688c2ecf20Sopenharmony_ci BPF_JUMP(BPF_JMP | BPF_JA, 0, 0, 0), 9698c2ecf20Sopenharmony_ci BPF_JUMP(BPF_JMP | BPF_JA, 1, 1, 1), 9708c2ecf20Sopenharmony_ci BPF_JUMP(BPF_JMP | BPF_JA, 0, 0, 0), 9718c2ecf20Sopenharmony_ci BPF_JUMP(BPF_JMP | BPF_JA, 0, 0, 0), 9728c2ecf20Sopenharmony_ci BPF_STMT(BPF_LDX | BPF_LEN, 0), 9738c2ecf20Sopenharmony_ci BPF_STMT(BPF_MISC | BPF_TXA, 0), 9748c2ecf20Sopenharmony_ci BPF_STMT(BPF_ALU | BPF_SUB | BPF_K, 4), 9758c2ecf20Sopenharmony_ci BPF_STMT(BPF_MISC | BPF_TAX, 0), 9768c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_W | BPF_IND, 0), 9778c2ecf20Sopenharmony_ci BPF_JUMP(BPF_JMP | BPF_JSET | BPF_K, 1, 0, 1), 9788c2ecf20Sopenharmony_ci BPF_STMT(BPF_RET | BPF_K, 10), 9798c2ecf20Sopenharmony_ci BPF_JUMP(BPF_JMP | BPF_JSET | BPF_K, 0x80000000, 0, 1), 9808c2ecf20Sopenharmony_ci BPF_STMT(BPF_RET | BPF_K, 20), 9818c2ecf20Sopenharmony_ci BPF_JUMP(BPF_JMP | BPF_JSET | BPF_K, 0xffffff, 1, 0), 9828c2ecf20Sopenharmony_ci BPF_STMT(BPF_RET | BPF_K, 30), 9838c2ecf20Sopenharmony_ci BPF_JUMP(BPF_JMP | BPF_JSET | BPF_K, 0xffffff, 1, 0), 9848c2ecf20Sopenharmony_ci BPF_STMT(BPF_RET | BPF_K, 30), 9858c2ecf20Sopenharmony_ci BPF_JUMP(BPF_JMP | BPF_JSET | BPF_K, 0xffffff, 1, 0), 9868c2ecf20Sopenharmony_ci BPF_STMT(BPF_RET | BPF_K, 30), 9878c2ecf20Sopenharmony_ci BPF_JUMP(BPF_JMP | BPF_JSET | BPF_K, 0xffffff, 1, 0), 9888c2ecf20Sopenharmony_ci BPF_STMT(BPF_RET | BPF_K, 30), 9898c2ecf20Sopenharmony_ci BPF_JUMP(BPF_JMP | BPF_JSET | BPF_K, 0xffffff, 1, 0), 9908c2ecf20Sopenharmony_ci BPF_STMT(BPF_RET | BPF_K, 30), 9918c2ecf20Sopenharmony_ci BPF_STMT(BPF_RET | BPF_K, MAX_K) 9928c2ecf20Sopenharmony_ci }, 9938c2ecf20Sopenharmony_ci CLASSIC, 9948c2ecf20Sopenharmony_ci { 0, 0xAA, 0x55, 1 }, 9958c2ecf20Sopenharmony_ci { { 4, 10 }, { 5, 20 }, { 6, MAX_K } }, 9968c2ecf20Sopenharmony_ci }, 9978c2ecf20Sopenharmony_ci { 9988c2ecf20Sopenharmony_ci "tcpdump port 22", 9998c2ecf20Sopenharmony_ci .u.insns = { 10008c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 12), 10018c2ecf20Sopenharmony_ci BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, 0x86dd, 0, 8), /* IPv6 */ 10028c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_B | BPF_ABS, 20), 10038c2ecf20Sopenharmony_ci BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, 0x84, 2, 0), 10048c2ecf20Sopenharmony_ci BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, 0x6, 1, 0), 10058c2ecf20Sopenharmony_ci BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, 0x11, 0, 17), 10068c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 54), 10078c2ecf20Sopenharmony_ci BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, 22, 14, 0), 10088c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 56), 10098c2ecf20Sopenharmony_ci BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, 22, 12, 13), 10108c2ecf20Sopenharmony_ci BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, 0x0800, 0, 12), /* IPv4 */ 10118c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_B | BPF_ABS, 23), 10128c2ecf20Sopenharmony_ci BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, 0x84, 2, 0), 10138c2ecf20Sopenharmony_ci BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, 0x6, 1, 0), 10148c2ecf20Sopenharmony_ci BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, 0x11, 0, 8), 10158c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 20), 10168c2ecf20Sopenharmony_ci BPF_JUMP(BPF_JMP | BPF_JSET | BPF_K, 0x1fff, 6, 0), 10178c2ecf20Sopenharmony_ci BPF_STMT(BPF_LDX | BPF_B | BPF_MSH, 14), 10188c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_H | BPF_IND, 14), 10198c2ecf20Sopenharmony_ci BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, 22, 2, 0), 10208c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_H | BPF_IND, 16), 10218c2ecf20Sopenharmony_ci BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, 22, 0, 1), 10228c2ecf20Sopenharmony_ci BPF_STMT(BPF_RET | BPF_K, 0xffff), 10238c2ecf20Sopenharmony_ci BPF_STMT(BPF_RET | BPF_K, 0), 10248c2ecf20Sopenharmony_ci }, 10258c2ecf20Sopenharmony_ci CLASSIC, 10268c2ecf20Sopenharmony_ci /* 3c:07:54:43:e5:76 > 10:bf:48:d6:43:d6, ethertype IPv4(0x0800) 10278c2ecf20Sopenharmony_ci * length 114: 10.1.1.149.49700 > 10.1.2.10.22: Flags [P.], 10288c2ecf20Sopenharmony_ci * seq 1305692979:1305693027, ack 3650467037, win 65535, 10298c2ecf20Sopenharmony_ci * options [nop,nop,TS val 2502645400 ecr 3971138], length 48 10308c2ecf20Sopenharmony_ci */ 10318c2ecf20Sopenharmony_ci { 0x10, 0xbf, 0x48, 0xd6, 0x43, 0xd6, 10328c2ecf20Sopenharmony_ci 0x3c, 0x07, 0x54, 0x43, 0xe5, 0x76, 10338c2ecf20Sopenharmony_ci 0x08, 0x00, 10348c2ecf20Sopenharmony_ci 0x45, 0x10, 0x00, 0x64, 0x75, 0xb5, 10358c2ecf20Sopenharmony_ci 0x40, 0x00, 0x40, 0x06, 0xad, 0x2e, /* IP header */ 10368c2ecf20Sopenharmony_ci 0x0a, 0x01, 0x01, 0x95, /* ip src */ 10378c2ecf20Sopenharmony_ci 0x0a, 0x01, 0x02, 0x0a, /* ip dst */ 10388c2ecf20Sopenharmony_ci 0xc2, 0x24, 10398c2ecf20Sopenharmony_ci 0x00, 0x16 /* dst port */ }, 10408c2ecf20Sopenharmony_ci { { 10, 0 }, { 30, 0 }, { 100, 65535 } }, 10418c2ecf20Sopenharmony_ci }, 10428c2ecf20Sopenharmony_ci { 10438c2ecf20Sopenharmony_ci "tcpdump complex", 10448c2ecf20Sopenharmony_ci .u.insns = { 10458c2ecf20Sopenharmony_ci /* tcpdump -nei eth0 'tcp port 22 and (((ip[2:2] - 10468c2ecf20Sopenharmony_ci * ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0) and 10478c2ecf20Sopenharmony_ci * (len > 115 or len < 30000000000)' -d 10488c2ecf20Sopenharmony_ci */ 10498c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 12), 10508c2ecf20Sopenharmony_ci BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, 0x86dd, 30, 0), 10518c2ecf20Sopenharmony_ci BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, 0x800, 0, 29), 10528c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_B | BPF_ABS, 23), 10538c2ecf20Sopenharmony_ci BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, 0x6, 0, 27), 10548c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 20), 10558c2ecf20Sopenharmony_ci BPF_JUMP(BPF_JMP | BPF_JSET | BPF_K, 0x1fff, 25, 0), 10568c2ecf20Sopenharmony_ci BPF_STMT(BPF_LDX | BPF_B | BPF_MSH, 14), 10578c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_H | BPF_IND, 14), 10588c2ecf20Sopenharmony_ci BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, 22, 2, 0), 10598c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_H | BPF_IND, 16), 10608c2ecf20Sopenharmony_ci BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, 22, 0, 20), 10618c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 16), 10628c2ecf20Sopenharmony_ci BPF_STMT(BPF_ST, 1), 10638c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_B | BPF_ABS, 14), 10648c2ecf20Sopenharmony_ci BPF_STMT(BPF_ALU | BPF_AND | BPF_K, 0xf), 10658c2ecf20Sopenharmony_ci BPF_STMT(BPF_ALU | BPF_LSH | BPF_K, 2), 10668c2ecf20Sopenharmony_ci BPF_STMT(BPF_MISC | BPF_TAX, 0x5), /* libpcap emits K on TAX */ 10678c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_MEM, 1), 10688c2ecf20Sopenharmony_ci BPF_STMT(BPF_ALU | BPF_SUB | BPF_X, 0), 10698c2ecf20Sopenharmony_ci BPF_STMT(BPF_ST, 5), 10708c2ecf20Sopenharmony_ci BPF_STMT(BPF_LDX | BPF_B | BPF_MSH, 14), 10718c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_B | BPF_IND, 26), 10728c2ecf20Sopenharmony_ci BPF_STMT(BPF_ALU | BPF_AND | BPF_K, 0xf0), 10738c2ecf20Sopenharmony_ci BPF_STMT(BPF_ALU | BPF_RSH | BPF_K, 2), 10748c2ecf20Sopenharmony_ci BPF_STMT(BPF_MISC | BPF_TAX, 0x9), /* libpcap emits K on TAX */ 10758c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_MEM, 5), 10768c2ecf20Sopenharmony_ci BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_X, 0, 4, 0), 10778c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_LEN, 0), 10788c2ecf20Sopenharmony_ci BPF_JUMP(BPF_JMP | BPF_JGT | BPF_K, 0x73, 1, 0), 10798c2ecf20Sopenharmony_ci BPF_JUMP(BPF_JMP | BPF_JGE | BPF_K, 0xfc23ac00, 1, 0), 10808c2ecf20Sopenharmony_ci BPF_STMT(BPF_RET | BPF_K, 0xffff), 10818c2ecf20Sopenharmony_ci BPF_STMT(BPF_RET | BPF_K, 0), 10828c2ecf20Sopenharmony_ci }, 10838c2ecf20Sopenharmony_ci CLASSIC, 10848c2ecf20Sopenharmony_ci { 0x10, 0xbf, 0x48, 0xd6, 0x43, 0xd6, 10858c2ecf20Sopenharmony_ci 0x3c, 0x07, 0x54, 0x43, 0xe5, 0x76, 10868c2ecf20Sopenharmony_ci 0x08, 0x00, 10878c2ecf20Sopenharmony_ci 0x45, 0x10, 0x00, 0x64, 0x75, 0xb5, 10888c2ecf20Sopenharmony_ci 0x40, 0x00, 0x40, 0x06, 0xad, 0x2e, /* IP header */ 10898c2ecf20Sopenharmony_ci 0x0a, 0x01, 0x01, 0x95, /* ip src */ 10908c2ecf20Sopenharmony_ci 0x0a, 0x01, 0x02, 0x0a, /* ip dst */ 10918c2ecf20Sopenharmony_ci 0xc2, 0x24, 10928c2ecf20Sopenharmony_ci 0x00, 0x16 /* dst port */ }, 10938c2ecf20Sopenharmony_ci { { 10, 0 }, { 30, 0 }, { 100, 65535 } }, 10948c2ecf20Sopenharmony_ci }, 10958c2ecf20Sopenharmony_ci { 10968c2ecf20Sopenharmony_ci "RET_A", 10978c2ecf20Sopenharmony_ci .u.insns = { 10988c2ecf20Sopenharmony_ci /* check that unitialized X and A contain zeros */ 10998c2ecf20Sopenharmony_ci BPF_STMT(BPF_MISC | BPF_TXA, 0), 11008c2ecf20Sopenharmony_ci BPF_STMT(BPF_RET | BPF_A, 0) 11018c2ecf20Sopenharmony_ci }, 11028c2ecf20Sopenharmony_ci CLASSIC, 11038c2ecf20Sopenharmony_ci { }, 11048c2ecf20Sopenharmony_ci { {1, 0}, {2, 0} }, 11058c2ecf20Sopenharmony_ci }, 11068c2ecf20Sopenharmony_ci { 11078c2ecf20Sopenharmony_ci "INT: ADD trivial", 11088c2ecf20Sopenharmony_ci .u.insns_int = { 11098c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_MOV, R1, 1), 11108c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_ADD, R1, 2), 11118c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_MOV, R2, 3), 11128c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_SUB, R1, R2), 11138c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_ADD, R1, -1), 11148c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_MUL, R1, 3), 11158c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_MOV, R0, R1), 11168c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 11178c2ecf20Sopenharmony_ci }, 11188c2ecf20Sopenharmony_ci INTERNAL, 11198c2ecf20Sopenharmony_ci { }, 11208c2ecf20Sopenharmony_ci { { 0, 0xfffffffd } } 11218c2ecf20Sopenharmony_ci }, 11228c2ecf20Sopenharmony_ci { 11238c2ecf20Sopenharmony_ci "INT: MUL_X", 11248c2ecf20Sopenharmony_ci .u.insns_int = { 11258c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_MOV, R0, -1), 11268c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_MOV, R1, -1), 11278c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_MOV, R2, 3), 11288c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_MUL, R1, R2), 11298c2ecf20Sopenharmony_ci BPF_JMP_IMM(BPF_JEQ, R1, 0xfffffffd, 1), 11308c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 11318c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_MOV, R0, 1), 11328c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 11338c2ecf20Sopenharmony_ci }, 11348c2ecf20Sopenharmony_ci INTERNAL, 11358c2ecf20Sopenharmony_ci { }, 11368c2ecf20Sopenharmony_ci { { 0, 1 } } 11378c2ecf20Sopenharmony_ci }, 11388c2ecf20Sopenharmony_ci { 11398c2ecf20Sopenharmony_ci "INT: MUL_X2", 11408c2ecf20Sopenharmony_ci .u.insns_int = { 11418c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R0, -1), 11428c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R1, -1), 11438c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R2, 3), 11448c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_MUL, R1, R2), 11458c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_RSH, R1, 8), 11468c2ecf20Sopenharmony_ci BPF_JMP_IMM(BPF_JEQ, R1, 0x2ffffff, 1), 11478c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 11488c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R0, 1), 11498c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 11508c2ecf20Sopenharmony_ci }, 11518c2ecf20Sopenharmony_ci INTERNAL, 11528c2ecf20Sopenharmony_ci { }, 11538c2ecf20Sopenharmony_ci { { 0, 1 } } 11548c2ecf20Sopenharmony_ci }, 11558c2ecf20Sopenharmony_ci { 11568c2ecf20Sopenharmony_ci "INT: MUL32_X", 11578c2ecf20Sopenharmony_ci .u.insns_int = { 11588c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R0, -1), 11598c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_MOV, R1, -1), 11608c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R2, 3), 11618c2ecf20Sopenharmony_ci BPF_ALU32_REG(BPF_MUL, R1, R2), 11628c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_RSH, R1, 8), 11638c2ecf20Sopenharmony_ci BPF_JMP_IMM(BPF_JEQ, R1, 0xffffff, 1), 11648c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 11658c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R0, 1), 11668c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 11678c2ecf20Sopenharmony_ci }, 11688c2ecf20Sopenharmony_ci INTERNAL, 11698c2ecf20Sopenharmony_ci { }, 11708c2ecf20Sopenharmony_ci { { 0, 1 } } 11718c2ecf20Sopenharmony_ci }, 11728c2ecf20Sopenharmony_ci { 11738c2ecf20Sopenharmony_ci /* Have to test all register combinations, since 11748c2ecf20Sopenharmony_ci * JITing of different registers will produce 11758c2ecf20Sopenharmony_ci * different asm code. 11768c2ecf20Sopenharmony_ci */ 11778c2ecf20Sopenharmony_ci "INT: ADD 64-bit", 11788c2ecf20Sopenharmony_ci .u.insns_int = { 11798c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_MOV, R0, 0), 11808c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_MOV, R1, 1), 11818c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_MOV, R2, 2), 11828c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_MOV, R3, 3), 11838c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_MOV, R4, 4), 11848c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_MOV, R5, 5), 11858c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_MOV, R6, 6), 11868c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_MOV, R7, 7), 11878c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_MOV, R8, 8), 11888c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_MOV, R9, 9), 11898c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_ADD, R0, 20), 11908c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_ADD, R1, 20), 11918c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_ADD, R2, 20), 11928c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_ADD, R3, 20), 11938c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_ADD, R4, 20), 11948c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_ADD, R5, 20), 11958c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_ADD, R6, 20), 11968c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_ADD, R7, 20), 11978c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_ADD, R8, 20), 11988c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_ADD, R9, 20), 11998c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_SUB, R0, 10), 12008c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_SUB, R1, 10), 12018c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_SUB, R2, 10), 12028c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_SUB, R3, 10), 12038c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_SUB, R4, 10), 12048c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_SUB, R5, 10), 12058c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_SUB, R6, 10), 12068c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_SUB, R7, 10), 12078c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_SUB, R8, 10), 12088c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_SUB, R9, 10), 12098c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_ADD, R0, R0), 12108c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_ADD, R0, R1), 12118c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_ADD, R0, R2), 12128c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_ADD, R0, R3), 12138c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_ADD, R0, R4), 12148c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_ADD, R0, R5), 12158c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_ADD, R0, R6), 12168c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_ADD, R0, R7), 12178c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_ADD, R0, R8), 12188c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_ADD, R0, R9), /* R0 == 155 */ 12198c2ecf20Sopenharmony_ci BPF_JMP_IMM(BPF_JEQ, R0, 155, 1), 12208c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 12218c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_ADD, R1, R0), 12228c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_ADD, R1, R1), 12238c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_ADD, R1, R2), 12248c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_ADD, R1, R3), 12258c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_ADD, R1, R4), 12268c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_ADD, R1, R5), 12278c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_ADD, R1, R6), 12288c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_ADD, R1, R7), 12298c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_ADD, R1, R8), 12308c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_ADD, R1, R9), /* R1 == 456 */ 12318c2ecf20Sopenharmony_ci BPF_JMP_IMM(BPF_JEQ, R1, 456, 1), 12328c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 12338c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_ADD, R2, R0), 12348c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_ADD, R2, R1), 12358c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_ADD, R2, R2), 12368c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_ADD, R2, R3), 12378c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_ADD, R2, R4), 12388c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_ADD, R2, R5), 12398c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_ADD, R2, R6), 12408c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_ADD, R2, R7), 12418c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_ADD, R2, R8), 12428c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_ADD, R2, R9), /* R2 == 1358 */ 12438c2ecf20Sopenharmony_ci BPF_JMP_IMM(BPF_JEQ, R2, 1358, 1), 12448c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 12458c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_ADD, R3, R0), 12468c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_ADD, R3, R1), 12478c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_ADD, R3, R2), 12488c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_ADD, R3, R3), 12498c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_ADD, R3, R4), 12508c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_ADD, R3, R5), 12518c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_ADD, R3, R6), 12528c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_ADD, R3, R7), 12538c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_ADD, R3, R8), 12548c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_ADD, R3, R9), /* R3 == 4063 */ 12558c2ecf20Sopenharmony_ci BPF_JMP_IMM(BPF_JEQ, R3, 4063, 1), 12568c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 12578c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_ADD, R4, R0), 12588c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_ADD, R4, R1), 12598c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_ADD, R4, R2), 12608c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_ADD, R4, R3), 12618c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_ADD, R4, R4), 12628c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_ADD, R4, R5), 12638c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_ADD, R4, R6), 12648c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_ADD, R4, R7), 12658c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_ADD, R4, R8), 12668c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_ADD, R4, R9), /* R4 == 12177 */ 12678c2ecf20Sopenharmony_ci BPF_JMP_IMM(BPF_JEQ, R4, 12177, 1), 12688c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 12698c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_ADD, R5, R0), 12708c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_ADD, R5, R1), 12718c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_ADD, R5, R2), 12728c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_ADD, R5, R3), 12738c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_ADD, R5, R4), 12748c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_ADD, R5, R5), 12758c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_ADD, R5, R6), 12768c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_ADD, R5, R7), 12778c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_ADD, R5, R8), 12788c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_ADD, R5, R9), /* R5 == 36518 */ 12798c2ecf20Sopenharmony_ci BPF_JMP_IMM(BPF_JEQ, R5, 36518, 1), 12808c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 12818c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_ADD, R6, R0), 12828c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_ADD, R6, R1), 12838c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_ADD, R6, R2), 12848c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_ADD, R6, R3), 12858c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_ADD, R6, R4), 12868c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_ADD, R6, R5), 12878c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_ADD, R6, R6), 12888c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_ADD, R6, R7), 12898c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_ADD, R6, R8), 12908c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_ADD, R6, R9), /* R6 == 109540 */ 12918c2ecf20Sopenharmony_ci BPF_JMP_IMM(BPF_JEQ, R6, 109540, 1), 12928c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 12938c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_ADD, R7, R0), 12948c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_ADD, R7, R1), 12958c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_ADD, R7, R2), 12968c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_ADD, R7, R3), 12978c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_ADD, R7, R4), 12988c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_ADD, R7, R5), 12998c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_ADD, R7, R6), 13008c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_ADD, R7, R7), 13018c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_ADD, R7, R8), 13028c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_ADD, R7, R9), /* R7 == 328605 */ 13038c2ecf20Sopenharmony_ci BPF_JMP_IMM(BPF_JEQ, R7, 328605, 1), 13048c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 13058c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_ADD, R8, R0), 13068c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_ADD, R8, R1), 13078c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_ADD, R8, R2), 13088c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_ADD, R8, R3), 13098c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_ADD, R8, R4), 13108c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_ADD, R8, R5), 13118c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_ADD, R8, R6), 13128c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_ADD, R8, R7), 13138c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_ADD, R8, R8), 13148c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_ADD, R8, R9), /* R8 == 985799 */ 13158c2ecf20Sopenharmony_ci BPF_JMP_IMM(BPF_JEQ, R8, 985799, 1), 13168c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 13178c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_ADD, R9, R0), 13188c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_ADD, R9, R1), 13198c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_ADD, R9, R2), 13208c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_ADD, R9, R3), 13218c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_ADD, R9, R4), 13228c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_ADD, R9, R5), 13238c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_ADD, R9, R6), 13248c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_ADD, R9, R7), 13258c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_ADD, R9, R8), 13268c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_ADD, R9, R9), /* R9 == 2957380 */ 13278c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_MOV, R0, R9), 13288c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 13298c2ecf20Sopenharmony_ci }, 13308c2ecf20Sopenharmony_ci INTERNAL, 13318c2ecf20Sopenharmony_ci { }, 13328c2ecf20Sopenharmony_ci { { 0, 2957380 } } 13338c2ecf20Sopenharmony_ci }, 13348c2ecf20Sopenharmony_ci { 13358c2ecf20Sopenharmony_ci "INT: ADD 32-bit", 13368c2ecf20Sopenharmony_ci .u.insns_int = { 13378c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R0, 20), 13388c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R1, 1), 13398c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R2, 2), 13408c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R3, 3), 13418c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R4, 4), 13428c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R5, 5), 13438c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R6, 6), 13448c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R7, 7), 13458c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R8, 8), 13468c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R9, 9), 13478c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_ADD, R1, 10), 13488c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_ADD, R2, 10), 13498c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_ADD, R3, 10), 13508c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_ADD, R4, 10), 13518c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_ADD, R5, 10), 13528c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_ADD, R6, 10), 13538c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_ADD, R7, 10), 13548c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_ADD, R8, 10), 13558c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_ADD, R9, 10), 13568c2ecf20Sopenharmony_ci BPF_ALU32_REG(BPF_ADD, R0, R1), 13578c2ecf20Sopenharmony_ci BPF_ALU32_REG(BPF_ADD, R0, R2), 13588c2ecf20Sopenharmony_ci BPF_ALU32_REG(BPF_ADD, R0, R3), 13598c2ecf20Sopenharmony_ci BPF_ALU32_REG(BPF_ADD, R0, R4), 13608c2ecf20Sopenharmony_ci BPF_ALU32_REG(BPF_ADD, R0, R5), 13618c2ecf20Sopenharmony_ci BPF_ALU32_REG(BPF_ADD, R0, R6), 13628c2ecf20Sopenharmony_ci BPF_ALU32_REG(BPF_ADD, R0, R7), 13638c2ecf20Sopenharmony_ci BPF_ALU32_REG(BPF_ADD, R0, R8), 13648c2ecf20Sopenharmony_ci BPF_ALU32_REG(BPF_ADD, R0, R9), /* R0 == 155 */ 13658c2ecf20Sopenharmony_ci BPF_JMP_IMM(BPF_JEQ, R0, 155, 1), 13668c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 13678c2ecf20Sopenharmony_ci BPF_ALU32_REG(BPF_ADD, R1, R0), 13688c2ecf20Sopenharmony_ci BPF_ALU32_REG(BPF_ADD, R1, R1), 13698c2ecf20Sopenharmony_ci BPF_ALU32_REG(BPF_ADD, R1, R2), 13708c2ecf20Sopenharmony_ci BPF_ALU32_REG(BPF_ADD, R1, R3), 13718c2ecf20Sopenharmony_ci BPF_ALU32_REG(BPF_ADD, R1, R4), 13728c2ecf20Sopenharmony_ci BPF_ALU32_REG(BPF_ADD, R1, R5), 13738c2ecf20Sopenharmony_ci BPF_ALU32_REG(BPF_ADD, R1, R6), 13748c2ecf20Sopenharmony_ci BPF_ALU32_REG(BPF_ADD, R1, R7), 13758c2ecf20Sopenharmony_ci BPF_ALU32_REG(BPF_ADD, R1, R8), 13768c2ecf20Sopenharmony_ci BPF_ALU32_REG(BPF_ADD, R1, R9), /* R1 == 456 */ 13778c2ecf20Sopenharmony_ci BPF_JMP_IMM(BPF_JEQ, R1, 456, 1), 13788c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 13798c2ecf20Sopenharmony_ci BPF_ALU32_REG(BPF_ADD, R2, R0), 13808c2ecf20Sopenharmony_ci BPF_ALU32_REG(BPF_ADD, R2, R1), 13818c2ecf20Sopenharmony_ci BPF_ALU32_REG(BPF_ADD, R2, R2), 13828c2ecf20Sopenharmony_ci BPF_ALU32_REG(BPF_ADD, R2, R3), 13838c2ecf20Sopenharmony_ci BPF_ALU32_REG(BPF_ADD, R2, R4), 13848c2ecf20Sopenharmony_ci BPF_ALU32_REG(BPF_ADD, R2, R5), 13858c2ecf20Sopenharmony_ci BPF_ALU32_REG(BPF_ADD, R2, R6), 13868c2ecf20Sopenharmony_ci BPF_ALU32_REG(BPF_ADD, R2, R7), 13878c2ecf20Sopenharmony_ci BPF_ALU32_REG(BPF_ADD, R2, R8), 13888c2ecf20Sopenharmony_ci BPF_ALU32_REG(BPF_ADD, R2, R9), /* R2 == 1358 */ 13898c2ecf20Sopenharmony_ci BPF_JMP_IMM(BPF_JEQ, R2, 1358, 1), 13908c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 13918c2ecf20Sopenharmony_ci BPF_ALU32_REG(BPF_ADD, R3, R0), 13928c2ecf20Sopenharmony_ci BPF_ALU32_REG(BPF_ADD, R3, R1), 13938c2ecf20Sopenharmony_ci BPF_ALU32_REG(BPF_ADD, R3, R2), 13948c2ecf20Sopenharmony_ci BPF_ALU32_REG(BPF_ADD, R3, R3), 13958c2ecf20Sopenharmony_ci BPF_ALU32_REG(BPF_ADD, R3, R4), 13968c2ecf20Sopenharmony_ci BPF_ALU32_REG(BPF_ADD, R3, R5), 13978c2ecf20Sopenharmony_ci BPF_ALU32_REG(BPF_ADD, R3, R6), 13988c2ecf20Sopenharmony_ci BPF_ALU32_REG(BPF_ADD, R3, R7), 13998c2ecf20Sopenharmony_ci BPF_ALU32_REG(BPF_ADD, R3, R8), 14008c2ecf20Sopenharmony_ci BPF_ALU32_REG(BPF_ADD, R3, R9), /* R3 == 4063 */ 14018c2ecf20Sopenharmony_ci BPF_JMP_IMM(BPF_JEQ, R3, 4063, 1), 14028c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 14038c2ecf20Sopenharmony_ci BPF_ALU32_REG(BPF_ADD, R4, R0), 14048c2ecf20Sopenharmony_ci BPF_ALU32_REG(BPF_ADD, R4, R1), 14058c2ecf20Sopenharmony_ci BPF_ALU32_REG(BPF_ADD, R4, R2), 14068c2ecf20Sopenharmony_ci BPF_ALU32_REG(BPF_ADD, R4, R3), 14078c2ecf20Sopenharmony_ci BPF_ALU32_REG(BPF_ADD, R4, R4), 14088c2ecf20Sopenharmony_ci BPF_ALU32_REG(BPF_ADD, R4, R5), 14098c2ecf20Sopenharmony_ci BPF_ALU32_REG(BPF_ADD, R4, R6), 14108c2ecf20Sopenharmony_ci BPF_ALU32_REG(BPF_ADD, R4, R7), 14118c2ecf20Sopenharmony_ci BPF_ALU32_REG(BPF_ADD, R4, R8), 14128c2ecf20Sopenharmony_ci BPF_ALU32_REG(BPF_ADD, R4, R9), /* R4 == 12177 */ 14138c2ecf20Sopenharmony_ci BPF_JMP_IMM(BPF_JEQ, R4, 12177, 1), 14148c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 14158c2ecf20Sopenharmony_ci BPF_ALU32_REG(BPF_ADD, R5, R0), 14168c2ecf20Sopenharmony_ci BPF_ALU32_REG(BPF_ADD, R5, R1), 14178c2ecf20Sopenharmony_ci BPF_ALU32_REG(BPF_ADD, R5, R2), 14188c2ecf20Sopenharmony_ci BPF_ALU32_REG(BPF_ADD, R5, R3), 14198c2ecf20Sopenharmony_ci BPF_ALU32_REG(BPF_ADD, R5, R4), 14208c2ecf20Sopenharmony_ci BPF_ALU32_REG(BPF_ADD, R5, R5), 14218c2ecf20Sopenharmony_ci BPF_ALU32_REG(BPF_ADD, R5, R6), 14228c2ecf20Sopenharmony_ci BPF_ALU32_REG(BPF_ADD, R5, R7), 14238c2ecf20Sopenharmony_ci BPF_ALU32_REG(BPF_ADD, R5, R8), 14248c2ecf20Sopenharmony_ci BPF_ALU32_REG(BPF_ADD, R5, R9), /* R5 == 36518 */ 14258c2ecf20Sopenharmony_ci BPF_JMP_IMM(BPF_JEQ, R5, 36518, 1), 14268c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 14278c2ecf20Sopenharmony_ci BPF_ALU32_REG(BPF_ADD, R6, R0), 14288c2ecf20Sopenharmony_ci BPF_ALU32_REG(BPF_ADD, R6, R1), 14298c2ecf20Sopenharmony_ci BPF_ALU32_REG(BPF_ADD, R6, R2), 14308c2ecf20Sopenharmony_ci BPF_ALU32_REG(BPF_ADD, R6, R3), 14318c2ecf20Sopenharmony_ci BPF_ALU32_REG(BPF_ADD, R6, R4), 14328c2ecf20Sopenharmony_ci BPF_ALU32_REG(BPF_ADD, R6, R5), 14338c2ecf20Sopenharmony_ci BPF_ALU32_REG(BPF_ADD, R6, R6), 14348c2ecf20Sopenharmony_ci BPF_ALU32_REG(BPF_ADD, R6, R7), 14358c2ecf20Sopenharmony_ci BPF_ALU32_REG(BPF_ADD, R6, R8), 14368c2ecf20Sopenharmony_ci BPF_ALU32_REG(BPF_ADD, R6, R9), /* R6 == 109540 */ 14378c2ecf20Sopenharmony_ci BPF_JMP_IMM(BPF_JEQ, R6, 109540, 1), 14388c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 14398c2ecf20Sopenharmony_ci BPF_ALU32_REG(BPF_ADD, R7, R0), 14408c2ecf20Sopenharmony_ci BPF_ALU32_REG(BPF_ADD, R7, R1), 14418c2ecf20Sopenharmony_ci BPF_ALU32_REG(BPF_ADD, R7, R2), 14428c2ecf20Sopenharmony_ci BPF_ALU32_REG(BPF_ADD, R7, R3), 14438c2ecf20Sopenharmony_ci BPF_ALU32_REG(BPF_ADD, R7, R4), 14448c2ecf20Sopenharmony_ci BPF_ALU32_REG(BPF_ADD, R7, R5), 14458c2ecf20Sopenharmony_ci BPF_ALU32_REG(BPF_ADD, R7, R6), 14468c2ecf20Sopenharmony_ci BPF_ALU32_REG(BPF_ADD, R7, R7), 14478c2ecf20Sopenharmony_ci BPF_ALU32_REG(BPF_ADD, R7, R8), 14488c2ecf20Sopenharmony_ci BPF_ALU32_REG(BPF_ADD, R7, R9), /* R7 == 328605 */ 14498c2ecf20Sopenharmony_ci BPF_JMP_IMM(BPF_JEQ, R7, 328605, 1), 14508c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 14518c2ecf20Sopenharmony_ci BPF_ALU32_REG(BPF_ADD, R8, R0), 14528c2ecf20Sopenharmony_ci BPF_ALU32_REG(BPF_ADD, R8, R1), 14538c2ecf20Sopenharmony_ci BPF_ALU32_REG(BPF_ADD, R8, R2), 14548c2ecf20Sopenharmony_ci BPF_ALU32_REG(BPF_ADD, R8, R3), 14558c2ecf20Sopenharmony_ci BPF_ALU32_REG(BPF_ADD, R8, R4), 14568c2ecf20Sopenharmony_ci BPF_ALU32_REG(BPF_ADD, R8, R5), 14578c2ecf20Sopenharmony_ci BPF_ALU32_REG(BPF_ADD, R8, R6), 14588c2ecf20Sopenharmony_ci BPF_ALU32_REG(BPF_ADD, R8, R7), 14598c2ecf20Sopenharmony_ci BPF_ALU32_REG(BPF_ADD, R8, R8), 14608c2ecf20Sopenharmony_ci BPF_ALU32_REG(BPF_ADD, R8, R9), /* R8 == 985799 */ 14618c2ecf20Sopenharmony_ci BPF_JMP_IMM(BPF_JEQ, R8, 985799, 1), 14628c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 14638c2ecf20Sopenharmony_ci BPF_ALU32_REG(BPF_ADD, R9, R0), 14648c2ecf20Sopenharmony_ci BPF_ALU32_REG(BPF_ADD, R9, R1), 14658c2ecf20Sopenharmony_ci BPF_ALU32_REG(BPF_ADD, R9, R2), 14668c2ecf20Sopenharmony_ci BPF_ALU32_REG(BPF_ADD, R9, R3), 14678c2ecf20Sopenharmony_ci BPF_ALU32_REG(BPF_ADD, R9, R4), 14688c2ecf20Sopenharmony_ci BPF_ALU32_REG(BPF_ADD, R9, R5), 14698c2ecf20Sopenharmony_ci BPF_ALU32_REG(BPF_ADD, R9, R6), 14708c2ecf20Sopenharmony_ci BPF_ALU32_REG(BPF_ADD, R9, R7), 14718c2ecf20Sopenharmony_ci BPF_ALU32_REG(BPF_ADD, R9, R8), 14728c2ecf20Sopenharmony_ci BPF_ALU32_REG(BPF_ADD, R9, R9), /* R9 == 2957380 */ 14738c2ecf20Sopenharmony_ci BPF_ALU32_REG(BPF_MOV, R0, R9), 14748c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 14758c2ecf20Sopenharmony_ci }, 14768c2ecf20Sopenharmony_ci INTERNAL, 14778c2ecf20Sopenharmony_ci { }, 14788c2ecf20Sopenharmony_ci { { 0, 2957380 } } 14798c2ecf20Sopenharmony_ci }, 14808c2ecf20Sopenharmony_ci { /* Mainly checking JIT here. */ 14818c2ecf20Sopenharmony_ci "INT: SUB", 14828c2ecf20Sopenharmony_ci .u.insns_int = { 14838c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_MOV, R0, 0), 14848c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_MOV, R1, 1), 14858c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_MOV, R2, 2), 14868c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_MOV, R3, 3), 14878c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_MOV, R4, 4), 14888c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_MOV, R5, 5), 14898c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_MOV, R6, 6), 14908c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_MOV, R7, 7), 14918c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_MOV, R8, 8), 14928c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_MOV, R9, 9), 14938c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_SUB, R0, R0), 14948c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_SUB, R0, R1), 14958c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_SUB, R0, R2), 14968c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_SUB, R0, R3), 14978c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_SUB, R0, R4), 14988c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_SUB, R0, R5), 14998c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_SUB, R0, R6), 15008c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_SUB, R0, R7), 15018c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_SUB, R0, R8), 15028c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_SUB, R0, R9), 15038c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_SUB, R0, 10), 15048c2ecf20Sopenharmony_ci BPF_JMP_IMM(BPF_JEQ, R0, -55, 1), 15058c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 15068c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_SUB, R1, R0), 15078c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_SUB, R1, R2), 15088c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_SUB, R1, R3), 15098c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_SUB, R1, R4), 15108c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_SUB, R1, R5), 15118c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_SUB, R1, R6), 15128c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_SUB, R1, R7), 15138c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_SUB, R1, R8), 15148c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_SUB, R1, R9), 15158c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_SUB, R1, 10), 15168c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_SUB, R2, R0), 15178c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_SUB, R2, R1), 15188c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_SUB, R2, R3), 15198c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_SUB, R2, R4), 15208c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_SUB, R2, R5), 15218c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_SUB, R2, R6), 15228c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_SUB, R2, R7), 15238c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_SUB, R2, R8), 15248c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_SUB, R2, R9), 15258c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_SUB, R2, 10), 15268c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_SUB, R3, R0), 15278c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_SUB, R3, R1), 15288c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_SUB, R3, R2), 15298c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_SUB, R3, R4), 15308c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_SUB, R3, R5), 15318c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_SUB, R3, R6), 15328c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_SUB, R3, R7), 15338c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_SUB, R3, R8), 15348c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_SUB, R3, R9), 15358c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_SUB, R3, 10), 15368c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_SUB, R4, R0), 15378c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_SUB, R4, R1), 15388c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_SUB, R4, R2), 15398c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_SUB, R4, R3), 15408c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_SUB, R4, R5), 15418c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_SUB, R4, R6), 15428c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_SUB, R4, R7), 15438c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_SUB, R4, R8), 15448c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_SUB, R4, R9), 15458c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_SUB, R4, 10), 15468c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_SUB, R5, R0), 15478c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_SUB, R5, R1), 15488c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_SUB, R5, R2), 15498c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_SUB, R5, R3), 15508c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_SUB, R5, R4), 15518c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_SUB, R5, R6), 15528c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_SUB, R5, R7), 15538c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_SUB, R5, R8), 15548c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_SUB, R5, R9), 15558c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_SUB, R5, 10), 15568c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_SUB, R6, R0), 15578c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_SUB, R6, R1), 15588c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_SUB, R6, R2), 15598c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_SUB, R6, R3), 15608c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_SUB, R6, R4), 15618c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_SUB, R6, R5), 15628c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_SUB, R6, R7), 15638c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_SUB, R6, R8), 15648c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_SUB, R6, R9), 15658c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_SUB, R6, 10), 15668c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_SUB, R7, R0), 15678c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_SUB, R7, R1), 15688c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_SUB, R7, R2), 15698c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_SUB, R7, R3), 15708c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_SUB, R7, R4), 15718c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_SUB, R7, R5), 15728c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_SUB, R7, R6), 15738c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_SUB, R7, R8), 15748c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_SUB, R7, R9), 15758c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_SUB, R7, 10), 15768c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_SUB, R8, R0), 15778c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_SUB, R8, R1), 15788c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_SUB, R8, R2), 15798c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_SUB, R8, R3), 15808c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_SUB, R8, R4), 15818c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_SUB, R8, R5), 15828c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_SUB, R8, R6), 15838c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_SUB, R8, R7), 15848c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_SUB, R8, R9), 15858c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_SUB, R8, 10), 15868c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_SUB, R9, R0), 15878c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_SUB, R9, R1), 15888c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_SUB, R9, R2), 15898c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_SUB, R9, R3), 15908c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_SUB, R9, R4), 15918c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_SUB, R9, R5), 15928c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_SUB, R9, R6), 15938c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_SUB, R9, R7), 15948c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_SUB, R9, R8), 15958c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_SUB, R9, 10), 15968c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_SUB, R0, 10), 15978c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_NEG, R0, 0), 15988c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_SUB, R0, R1), 15998c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_SUB, R0, R2), 16008c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_SUB, R0, R3), 16018c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_SUB, R0, R4), 16028c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_SUB, R0, R5), 16038c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_SUB, R0, R6), 16048c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_SUB, R0, R7), 16058c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_SUB, R0, R8), 16068c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_SUB, R0, R9), 16078c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 16088c2ecf20Sopenharmony_ci }, 16098c2ecf20Sopenharmony_ci INTERNAL, 16108c2ecf20Sopenharmony_ci { }, 16118c2ecf20Sopenharmony_ci { { 0, 11 } } 16128c2ecf20Sopenharmony_ci }, 16138c2ecf20Sopenharmony_ci { /* Mainly checking JIT here. */ 16148c2ecf20Sopenharmony_ci "INT: XOR", 16158c2ecf20Sopenharmony_ci .u.insns_int = { 16168c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_SUB, R0, R0), 16178c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_XOR, R1, R1), 16188c2ecf20Sopenharmony_ci BPF_JMP_REG(BPF_JEQ, R0, R1, 1), 16198c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 16208c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_MOV, R0, 10), 16218c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_MOV, R1, -1), 16228c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_SUB, R1, R1), 16238c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_XOR, R2, R2), 16248c2ecf20Sopenharmony_ci BPF_JMP_REG(BPF_JEQ, R1, R2, 1), 16258c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 16268c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_SUB, R2, R2), 16278c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_XOR, R3, R3), 16288c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_MOV, R0, 10), 16298c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_MOV, R1, -1), 16308c2ecf20Sopenharmony_ci BPF_JMP_REG(BPF_JEQ, R2, R3, 1), 16318c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 16328c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_SUB, R3, R3), 16338c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_XOR, R4, R4), 16348c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_MOV, R2, 1), 16358c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_MOV, R5, -1), 16368c2ecf20Sopenharmony_ci BPF_JMP_REG(BPF_JEQ, R3, R4, 1), 16378c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 16388c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_SUB, R4, R4), 16398c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_XOR, R5, R5), 16408c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_MOV, R3, 1), 16418c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_MOV, R7, -1), 16428c2ecf20Sopenharmony_ci BPF_JMP_REG(BPF_JEQ, R5, R4, 1), 16438c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 16448c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_MOV, R5, 1), 16458c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_SUB, R5, R5), 16468c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_XOR, R6, R6), 16478c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_MOV, R1, 1), 16488c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_MOV, R8, -1), 16498c2ecf20Sopenharmony_ci BPF_JMP_REG(BPF_JEQ, R5, R6, 1), 16508c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 16518c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_SUB, R6, R6), 16528c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_XOR, R7, R7), 16538c2ecf20Sopenharmony_ci BPF_JMP_REG(BPF_JEQ, R7, R6, 1), 16548c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 16558c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_SUB, R7, R7), 16568c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_XOR, R8, R8), 16578c2ecf20Sopenharmony_ci BPF_JMP_REG(BPF_JEQ, R7, R8, 1), 16588c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 16598c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_SUB, R8, R8), 16608c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_XOR, R9, R9), 16618c2ecf20Sopenharmony_ci BPF_JMP_REG(BPF_JEQ, R9, R8, 1), 16628c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 16638c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_SUB, R9, R9), 16648c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_XOR, R0, R0), 16658c2ecf20Sopenharmony_ci BPF_JMP_REG(BPF_JEQ, R9, R0, 1), 16668c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 16678c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_SUB, R1, R1), 16688c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_XOR, R0, R0), 16698c2ecf20Sopenharmony_ci BPF_JMP_REG(BPF_JEQ, R9, R0, 2), 16708c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_MOV, R0, 0), 16718c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 16728c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_MOV, R0, 1), 16738c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 16748c2ecf20Sopenharmony_ci }, 16758c2ecf20Sopenharmony_ci INTERNAL, 16768c2ecf20Sopenharmony_ci { }, 16778c2ecf20Sopenharmony_ci { { 0, 1 } } 16788c2ecf20Sopenharmony_ci }, 16798c2ecf20Sopenharmony_ci { /* Mainly checking JIT here. */ 16808c2ecf20Sopenharmony_ci "INT: MUL", 16818c2ecf20Sopenharmony_ci .u.insns_int = { 16828c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_MOV, R0, 11), 16838c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_MOV, R1, 1), 16848c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_MOV, R2, 2), 16858c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_MOV, R3, 3), 16868c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_MOV, R4, 4), 16878c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_MOV, R5, 5), 16888c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_MOV, R6, 6), 16898c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_MOV, R7, 7), 16908c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_MOV, R8, 8), 16918c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_MOV, R9, 9), 16928c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_MUL, R0, R0), 16938c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_MUL, R0, R1), 16948c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_MUL, R0, R2), 16958c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_MUL, R0, R3), 16968c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_MUL, R0, R4), 16978c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_MUL, R0, R5), 16988c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_MUL, R0, R6), 16998c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_MUL, R0, R7), 17008c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_MUL, R0, R8), 17018c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_MUL, R0, R9), 17028c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_MUL, R0, 10), 17038c2ecf20Sopenharmony_ci BPF_JMP_IMM(BPF_JEQ, R0, 439084800, 1), 17048c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 17058c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_MUL, R1, R0), 17068c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_MUL, R1, R2), 17078c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_MUL, R1, R3), 17088c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_MUL, R1, R4), 17098c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_MUL, R1, R5), 17108c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_MUL, R1, R6), 17118c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_MUL, R1, R7), 17128c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_MUL, R1, R8), 17138c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_MUL, R1, R9), 17148c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_MUL, R1, 10), 17158c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_MOV, R2, R1), 17168c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_RSH, R2, 32), 17178c2ecf20Sopenharmony_ci BPF_JMP_IMM(BPF_JEQ, R2, 0x5a924, 1), 17188c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 17198c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_LSH, R1, 32), 17208c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_ARSH, R1, 32), 17218c2ecf20Sopenharmony_ci BPF_JMP_IMM(BPF_JEQ, R1, 0xebb90000, 1), 17228c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 17238c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_MUL, R2, R0), 17248c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_MUL, R2, R1), 17258c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_MUL, R2, R3), 17268c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_MUL, R2, R4), 17278c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_MUL, R2, R5), 17288c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_MUL, R2, R6), 17298c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_MUL, R2, R7), 17308c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_MUL, R2, R8), 17318c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_MUL, R2, R9), 17328c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_MUL, R2, 10), 17338c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_RSH, R2, 32), 17348c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_MOV, R0, R2), 17358c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 17368c2ecf20Sopenharmony_ci }, 17378c2ecf20Sopenharmony_ci INTERNAL, 17388c2ecf20Sopenharmony_ci { }, 17398c2ecf20Sopenharmony_ci { { 0, 0x35d97ef2 } } 17408c2ecf20Sopenharmony_ci }, 17418c2ecf20Sopenharmony_ci { /* Mainly checking JIT here. */ 17428c2ecf20Sopenharmony_ci "MOV REG64", 17438c2ecf20Sopenharmony_ci .u.insns_int = { 17448c2ecf20Sopenharmony_ci BPF_LD_IMM64(R0, 0xffffffffffffffffLL), 17458c2ecf20Sopenharmony_ci BPF_MOV64_REG(R1, R0), 17468c2ecf20Sopenharmony_ci BPF_MOV64_REG(R2, R1), 17478c2ecf20Sopenharmony_ci BPF_MOV64_REG(R3, R2), 17488c2ecf20Sopenharmony_ci BPF_MOV64_REG(R4, R3), 17498c2ecf20Sopenharmony_ci BPF_MOV64_REG(R5, R4), 17508c2ecf20Sopenharmony_ci BPF_MOV64_REG(R6, R5), 17518c2ecf20Sopenharmony_ci BPF_MOV64_REG(R7, R6), 17528c2ecf20Sopenharmony_ci BPF_MOV64_REG(R8, R7), 17538c2ecf20Sopenharmony_ci BPF_MOV64_REG(R9, R8), 17548c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_MOV, R0, 0), 17558c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_MOV, R1, 0), 17568c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_MOV, R2, 0), 17578c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_MOV, R3, 0), 17588c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_MOV, R4, 0), 17598c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_MOV, R5, 0), 17608c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_MOV, R6, 0), 17618c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_MOV, R7, 0), 17628c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_MOV, R8, 0), 17638c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_MOV, R9, 0), 17648c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_ADD, R0, R0), 17658c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_ADD, R0, R1), 17668c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_ADD, R0, R2), 17678c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_ADD, R0, R3), 17688c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_ADD, R0, R4), 17698c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_ADD, R0, R5), 17708c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_ADD, R0, R6), 17718c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_ADD, R0, R7), 17728c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_ADD, R0, R8), 17738c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_ADD, R0, R9), 17748c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_ADD, R0, 0xfefe), 17758c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 17768c2ecf20Sopenharmony_ci }, 17778c2ecf20Sopenharmony_ci INTERNAL, 17788c2ecf20Sopenharmony_ci { }, 17798c2ecf20Sopenharmony_ci { { 0, 0xfefe } } 17808c2ecf20Sopenharmony_ci }, 17818c2ecf20Sopenharmony_ci { /* Mainly checking JIT here. */ 17828c2ecf20Sopenharmony_ci "MOV REG32", 17838c2ecf20Sopenharmony_ci .u.insns_int = { 17848c2ecf20Sopenharmony_ci BPF_LD_IMM64(R0, 0xffffffffffffffffLL), 17858c2ecf20Sopenharmony_ci BPF_MOV64_REG(R1, R0), 17868c2ecf20Sopenharmony_ci BPF_MOV64_REG(R2, R1), 17878c2ecf20Sopenharmony_ci BPF_MOV64_REG(R3, R2), 17888c2ecf20Sopenharmony_ci BPF_MOV64_REG(R4, R3), 17898c2ecf20Sopenharmony_ci BPF_MOV64_REG(R5, R4), 17908c2ecf20Sopenharmony_ci BPF_MOV64_REG(R6, R5), 17918c2ecf20Sopenharmony_ci BPF_MOV64_REG(R7, R6), 17928c2ecf20Sopenharmony_ci BPF_MOV64_REG(R8, R7), 17938c2ecf20Sopenharmony_ci BPF_MOV64_REG(R9, R8), 17948c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R0, 0), 17958c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R1, 0), 17968c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R2, 0), 17978c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R3, 0), 17988c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R4, 0), 17998c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R5, 0), 18008c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R6, 0), 18018c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R7, 0), 18028c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R8, 0), 18038c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R9, 0), 18048c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_ADD, R0, R0), 18058c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_ADD, R0, R1), 18068c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_ADD, R0, R2), 18078c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_ADD, R0, R3), 18088c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_ADD, R0, R4), 18098c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_ADD, R0, R5), 18108c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_ADD, R0, R6), 18118c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_ADD, R0, R7), 18128c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_ADD, R0, R8), 18138c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_ADD, R0, R9), 18148c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_ADD, R0, 0xfefe), 18158c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 18168c2ecf20Sopenharmony_ci }, 18178c2ecf20Sopenharmony_ci INTERNAL, 18188c2ecf20Sopenharmony_ci { }, 18198c2ecf20Sopenharmony_ci { { 0, 0xfefe } } 18208c2ecf20Sopenharmony_ci }, 18218c2ecf20Sopenharmony_ci { /* Mainly checking JIT here. */ 18228c2ecf20Sopenharmony_ci "LD IMM64", 18238c2ecf20Sopenharmony_ci .u.insns_int = { 18248c2ecf20Sopenharmony_ci BPF_LD_IMM64(R0, 0xffffffffffffffffLL), 18258c2ecf20Sopenharmony_ci BPF_MOV64_REG(R1, R0), 18268c2ecf20Sopenharmony_ci BPF_MOV64_REG(R2, R1), 18278c2ecf20Sopenharmony_ci BPF_MOV64_REG(R3, R2), 18288c2ecf20Sopenharmony_ci BPF_MOV64_REG(R4, R3), 18298c2ecf20Sopenharmony_ci BPF_MOV64_REG(R5, R4), 18308c2ecf20Sopenharmony_ci BPF_MOV64_REG(R6, R5), 18318c2ecf20Sopenharmony_ci BPF_MOV64_REG(R7, R6), 18328c2ecf20Sopenharmony_ci BPF_MOV64_REG(R8, R7), 18338c2ecf20Sopenharmony_ci BPF_MOV64_REG(R9, R8), 18348c2ecf20Sopenharmony_ci BPF_LD_IMM64(R0, 0x0LL), 18358c2ecf20Sopenharmony_ci BPF_LD_IMM64(R1, 0x0LL), 18368c2ecf20Sopenharmony_ci BPF_LD_IMM64(R2, 0x0LL), 18378c2ecf20Sopenharmony_ci BPF_LD_IMM64(R3, 0x0LL), 18388c2ecf20Sopenharmony_ci BPF_LD_IMM64(R4, 0x0LL), 18398c2ecf20Sopenharmony_ci BPF_LD_IMM64(R5, 0x0LL), 18408c2ecf20Sopenharmony_ci BPF_LD_IMM64(R6, 0x0LL), 18418c2ecf20Sopenharmony_ci BPF_LD_IMM64(R7, 0x0LL), 18428c2ecf20Sopenharmony_ci BPF_LD_IMM64(R8, 0x0LL), 18438c2ecf20Sopenharmony_ci BPF_LD_IMM64(R9, 0x0LL), 18448c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_ADD, R0, R0), 18458c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_ADD, R0, R1), 18468c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_ADD, R0, R2), 18478c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_ADD, R0, R3), 18488c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_ADD, R0, R4), 18498c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_ADD, R0, R5), 18508c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_ADD, R0, R6), 18518c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_ADD, R0, R7), 18528c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_ADD, R0, R8), 18538c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_ADD, R0, R9), 18548c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_ADD, R0, 0xfefe), 18558c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 18568c2ecf20Sopenharmony_ci }, 18578c2ecf20Sopenharmony_ci INTERNAL, 18588c2ecf20Sopenharmony_ci { }, 18598c2ecf20Sopenharmony_ci { { 0, 0xfefe } } 18608c2ecf20Sopenharmony_ci }, 18618c2ecf20Sopenharmony_ci { 18628c2ecf20Sopenharmony_ci "INT: ALU MIX", 18638c2ecf20Sopenharmony_ci .u.insns_int = { 18648c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_MOV, R0, 11), 18658c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_ADD, R0, -1), 18668c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_MOV, R2, 2), 18678c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_XOR, R2, 3), 18688c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_DIV, R0, R2), 18698c2ecf20Sopenharmony_ci BPF_JMP_IMM(BPF_JEQ, R0, 10, 1), 18708c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 18718c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_MOD, R0, 3), 18728c2ecf20Sopenharmony_ci BPF_JMP_IMM(BPF_JEQ, R0, 1, 1), 18738c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 18748c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_MOV, R0, -1), 18758c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 18768c2ecf20Sopenharmony_ci }, 18778c2ecf20Sopenharmony_ci INTERNAL, 18788c2ecf20Sopenharmony_ci { }, 18798c2ecf20Sopenharmony_ci { { 0, -1 } } 18808c2ecf20Sopenharmony_ci }, 18818c2ecf20Sopenharmony_ci { 18828c2ecf20Sopenharmony_ci "INT: shifts by register", 18838c2ecf20Sopenharmony_ci .u.insns_int = { 18848c2ecf20Sopenharmony_ci BPF_MOV64_IMM(R0, -1234), 18858c2ecf20Sopenharmony_ci BPF_MOV64_IMM(R1, 1), 18868c2ecf20Sopenharmony_ci BPF_ALU32_REG(BPF_RSH, R0, R1), 18878c2ecf20Sopenharmony_ci BPF_JMP_IMM(BPF_JEQ, R0, 0x7ffffd97, 1), 18888c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 18898c2ecf20Sopenharmony_ci BPF_MOV64_IMM(R2, 1), 18908c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_LSH, R0, R2), 18918c2ecf20Sopenharmony_ci BPF_MOV32_IMM(R4, -1234), 18928c2ecf20Sopenharmony_ci BPF_JMP_REG(BPF_JEQ, R0, R4, 1), 18938c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 18948c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_AND, R4, 63), 18958c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_LSH, R0, R4), /* R0 <= 46 */ 18968c2ecf20Sopenharmony_ci BPF_MOV64_IMM(R3, 47), 18978c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_ARSH, R0, R3), 18988c2ecf20Sopenharmony_ci BPF_JMP_IMM(BPF_JEQ, R0, -617, 1), 18998c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 19008c2ecf20Sopenharmony_ci BPF_MOV64_IMM(R2, 1), 19018c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_LSH, R4, R2), /* R4 = 46 << 1 */ 19028c2ecf20Sopenharmony_ci BPF_JMP_IMM(BPF_JEQ, R4, 92, 1), 19038c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 19048c2ecf20Sopenharmony_ci BPF_MOV64_IMM(R4, 4), 19058c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_LSH, R4, R4), /* R4 = 4 << 4 */ 19068c2ecf20Sopenharmony_ci BPF_JMP_IMM(BPF_JEQ, R4, 64, 1), 19078c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 19088c2ecf20Sopenharmony_ci BPF_MOV64_IMM(R4, 5), 19098c2ecf20Sopenharmony_ci BPF_ALU32_REG(BPF_LSH, R4, R4), /* R4 = 5 << 5 */ 19108c2ecf20Sopenharmony_ci BPF_JMP_IMM(BPF_JEQ, R4, 160, 1), 19118c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 19128c2ecf20Sopenharmony_ci BPF_MOV64_IMM(R0, -1), 19138c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 19148c2ecf20Sopenharmony_ci }, 19158c2ecf20Sopenharmony_ci INTERNAL, 19168c2ecf20Sopenharmony_ci { }, 19178c2ecf20Sopenharmony_ci { { 0, -1 } } 19188c2ecf20Sopenharmony_ci }, 19198c2ecf20Sopenharmony_ci { 19208c2ecf20Sopenharmony_ci "check: missing ret", 19218c2ecf20Sopenharmony_ci .u.insns = { 19228c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_IMM, 1), 19238c2ecf20Sopenharmony_ci }, 19248c2ecf20Sopenharmony_ci CLASSIC | FLAG_NO_DATA | FLAG_EXPECTED_FAIL, 19258c2ecf20Sopenharmony_ci { }, 19268c2ecf20Sopenharmony_ci { }, 19278c2ecf20Sopenharmony_ci .fill_helper = NULL, 19288c2ecf20Sopenharmony_ci .expected_errcode = -EINVAL, 19298c2ecf20Sopenharmony_ci }, 19308c2ecf20Sopenharmony_ci { 19318c2ecf20Sopenharmony_ci "check: div_k_0", 19328c2ecf20Sopenharmony_ci .u.insns = { 19338c2ecf20Sopenharmony_ci BPF_STMT(BPF_ALU | BPF_DIV | BPF_K, 0), 19348c2ecf20Sopenharmony_ci BPF_STMT(BPF_RET | BPF_K, 0) 19358c2ecf20Sopenharmony_ci }, 19368c2ecf20Sopenharmony_ci CLASSIC | FLAG_NO_DATA | FLAG_EXPECTED_FAIL, 19378c2ecf20Sopenharmony_ci { }, 19388c2ecf20Sopenharmony_ci { }, 19398c2ecf20Sopenharmony_ci .fill_helper = NULL, 19408c2ecf20Sopenharmony_ci .expected_errcode = -EINVAL, 19418c2ecf20Sopenharmony_ci }, 19428c2ecf20Sopenharmony_ci { 19438c2ecf20Sopenharmony_ci "check: unknown insn", 19448c2ecf20Sopenharmony_ci .u.insns = { 19458c2ecf20Sopenharmony_ci /* seccomp insn, rejected in socket filter */ 19468c2ecf20Sopenharmony_ci BPF_STMT(BPF_LDX | BPF_W | BPF_ABS, 0), 19478c2ecf20Sopenharmony_ci BPF_STMT(BPF_RET | BPF_K, 0) 19488c2ecf20Sopenharmony_ci }, 19498c2ecf20Sopenharmony_ci CLASSIC | FLAG_EXPECTED_FAIL, 19508c2ecf20Sopenharmony_ci { }, 19518c2ecf20Sopenharmony_ci { }, 19528c2ecf20Sopenharmony_ci .fill_helper = NULL, 19538c2ecf20Sopenharmony_ci .expected_errcode = -EINVAL, 19548c2ecf20Sopenharmony_ci }, 19558c2ecf20Sopenharmony_ci { 19568c2ecf20Sopenharmony_ci "check: out of range spill/fill", 19578c2ecf20Sopenharmony_ci .u.insns = { 19588c2ecf20Sopenharmony_ci BPF_STMT(BPF_STX, 16), 19598c2ecf20Sopenharmony_ci BPF_STMT(BPF_RET | BPF_K, 0) 19608c2ecf20Sopenharmony_ci }, 19618c2ecf20Sopenharmony_ci CLASSIC | FLAG_NO_DATA | FLAG_EXPECTED_FAIL, 19628c2ecf20Sopenharmony_ci { }, 19638c2ecf20Sopenharmony_ci { }, 19648c2ecf20Sopenharmony_ci .fill_helper = NULL, 19658c2ecf20Sopenharmony_ci .expected_errcode = -EINVAL, 19668c2ecf20Sopenharmony_ci }, 19678c2ecf20Sopenharmony_ci { 19688c2ecf20Sopenharmony_ci "JUMPS + HOLES", 19698c2ecf20Sopenharmony_ci .u.insns = { 19708c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0), 19718c2ecf20Sopenharmony_ci BPF_JUMP(BPF_JMP | BPF_JGE, 0, 13, 15), 19728c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0), 19738c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0), 19748c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0), 19758c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0), 19768c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0), 19778c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0), 19788c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0), 19798c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0), 19808c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0), 19818c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0), 19828c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0), 19838c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0), 19848c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0), 19858c2ecf20Sopenharmony_ci BPF_JUMP(BPF_JMP | BPF_JEQ, 0x90c2894d, 3, 4), 19868c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0), 19878c2ecf20Sopenharmony_ci BPF_JUMP(BPF_JMP | BPF_JEQ, 0x90c2894d, 1, 2), 19888c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0), 19898c2ecf20Sopenharmony_ci BPF_JUMP(BPF_JMP | BPF_JGE, 0, 14, 15), 19908c2ecf20Sopenharmony_ci BPF_JUMP(BPF_JMP | BPF_JGE, 0, 13, 14), 19918c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0), 19928c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0), 19938c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0), 19948c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0), 19958c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0), 19968c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0), 19978c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0), 19988c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0), 19998c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0), 20008c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0), 20018c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0), 20028c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0), 20038c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0), 20048c2ecf20Sopenharmony_ci BPF_JUMP(BPF_JMP | BPF_JEQ, 0x2ac28349, 2, 3), 20058c2ecf20Sopenharmony_ci BPF_JUMP(BPF_JMP | BPF_JEQ, 0x2ac28349, 1, 2), 20068c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0), 20078c2ecf20Sopenharmony_ci BPF_JUMP(BPF_JMP | BPF_JGE, 0, 14, 15), 20088c2ecf20Sopenharmony_ci BPF_JUMP(BPF_JMP | BPF_JGE, 0, 13, 14), 20098c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0), 20108c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0), 20118c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0), 20128c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0), 20138c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0), 20148c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0), 20158c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0), 20168c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0), 20178c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0), 20188c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0), 20198c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0), 20208c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0), 20218c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0), 20228c2ecf20Sopenharmony_ci BPF_JUMP(BPF_JMP | BPF_JEQ, 0x90d2ff41, 2, 3), 20238c2ecf20Sopenharmony_ci BPF_JUMP(BPF_JMP | BPF_JEQ, 0x90d2ff41, 1, 2), 20248c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0), 20258c2ecf20Sopenharmony_ci BPF_STMT(BPF_RET | BPF_A, 0), 20268c2ecf20Sopenharmony_ci BPF_STMT(BPF_RET | BPF_A, 0), 20278c2ecf20Sopenharmony_ci }, 20288c2ecf20Sopenharmony_ci CLASSIC, 20298c2ecf20Sopenharmony_ci { 0x00, 0x1b, 0x21, 0x3c, 0x9d, 0xf8, 20308c2ecf20Sopenharmony_ci 0x90, 0xe2, 0xba, 0x0a, 0x56, 0xb4, 20318c2ecf20Sopenharmony_ci 0x08, 0x00, 20328c2ecf20Sopenharmony_ci 0x45, 0x00, 0x00, 0x28, 0x00, 0x00, 20338c2ecf20Sopenharmony_ci 0x20, 0x00, 0x40, 0x11, 0x00, 0x00, /* IP header */ 20348c2ecf20Sopenharmony_ci 0xc0, 0xa8, 0x33, 0x01, 20358c2ecf20Sopenharmony_ci 0xc0, 0xa8, 0x33, 0x02, 20368c2ecf20Sopenharmony_ci 0xbb, 0xb6, 20378c2ecf20Sopenharmony_ci 0xa9, 0xfa, 20388c2ecf20Sopenharmony_ci 0x00, 0x14, 0x00, 0x00, 20398c2ecf20Sopenharmony_ci 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 20408c2ecf20Sopenharmony_ci 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 20418c2ecf20Sopenharmony_ci 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 20428c2ecf20Sopenharmony_ci 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 20438c2ecf20Sopenharmony_ci 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 20448c2ecf20Sopenharmony_ci 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 20458c2ecf20Sopenharmony_ci 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 20468c2ecf20Sopenharmony_ci 0xcc, 0xcc, 0xcc, 0xcc }, 20478c2ecf20Sopenharmony_ci { { 88, 0x001b } } 20488c2ecf20Sopenharmony_ci }, 20498c2ecf20Sopenharmony_ci { 20508c2ecf20Sopenharmony_ci "check: RET X", 20518c2ecf20Sopenharmony_ci .u.insns = { 20528c2ecf20Sopenharmony_ci BPF_STMT(BPF_RET | BPF_X, 0), 20538c2ecf20Sopenharmony_ci }, 20548c2ecf20Sopenharmony_ci CLASSIC | FLAG_NO_DATA | FLAG_EXPECTED_FAIL, 20558c2ecf20Sopenharmony_ci { }, 20568c2ecf20Sopenharmony_ci { }, 20578c2ecf20Sopenharmony_ci .fill_helper = NULL, 20588c2ecf20Sopenharmony_ci .expected_errcode = -EINVAL, 20598c2ecf20Sopenharmony_ci }, 20608c2ecf20Sopenharmony_ci { 20618c2ecf20Sopenharmony_ci "check: LDX + RET X", 20628c2ecf20Sopenharmony_ci .u.insns = { 20638c2ecf20Sopenharmony_ci BPF_STMT(BPF_LDX | BPF_IMM, 42), 20648c2ecf20Sopenharmony_ci BPF_STMT(BPF_RET | BPF_X, 0), 20658c2ecf20Sopenharmony_ci }, 20668c2ecf20Sopenharmony_ci CLASSIC | FLAG_NO_DATA | FLAG_EXPECTED_FAIL, 20678c2ecf20Sopenharmony_ci { }, 20688c2ecf20Sopenharmony_ci { }, 20698c2ecf20Sopenharmony_ci .fill_helper = NULL, 20708c2ecf20Sopenharmony_ci .expected_errcode = -EINVAL, 20718c2ecf20Sopenharmony_ci }, 20728c2ecf20Sopenharmony_ci { /* Mainly checking JIT here. */ 20738c2ecf20Sopenharmony_ci "M[]: alt STX + LDX", 20748c2ecf20Sopenharmony_ci .u.insns = { 20758c2ecf20Sopenharmony_ci BPF_STMT(BPF_LDX | BPF_IMM, 100), 20768c2ecf20Sopenharmony_ci BPF_STMT(BPF_STX, 0), 20778c2ecf20Sopenharmony_ci BPF_STMT(BPF_LDX | BPF_MEM, 0), 20788c2ecf20Sopenharmony_ci BPF_STMT(BPF_MISC | BPF_TXA, 0), 20798c2ecf20Sopenharmony_ci BPF_STMT(BPF_ALU | BPF_ADD | BPF_K, 1), 20808c2ecf20Sopenharmony_ci BPF_STMT(BPF_MISC | BPF_TAX, 0), 20818c2ecf20Sopenharmony_ci BPF_STMT(BPF_STX, 1), 20828c2ecf20Sopenharmony_ci BPF_STMT(BPF_LDX | BPF_MEM, 1), 20838c2ecf20Sopenharmony_ci BPF_STMT(BPF_MISC | BPF_TXA, 0), 20848c2ecf20Sopenharmony_ci BPF_STMT(BPF_ALU | BPF_ADD | BPF_K, 1), 20858c2ecf20Sopenharmony_ci BPF_STMT(BPF_MISC | BPF_TAX, 0), 20868c2ecf20Sopenharmony_ci BPF_STMT(BPF_STX, 2), 20878c2ecf20Sopenharmony_ci BPF_STMT(BPF_LDX | BPF_MEM, 2), 20888c2ecf20Sopenharmony_ci BPF_STMT(BPF_MISC | BPF_TXA, 0), 20898c2ecf20Sopenharmony_ci BPF_STMT(BPF_ALU | BPF_ADD | BPF_K, 1), 20908c2ecf20Sopenharmony_ci BPF_STMT(BPF_MISC | BPF_TAX, 0), 20918c2ecf20Sopenharmony_ci BPF_STMT(BPF_STX, 3), 20928c2ecf20Sopenharmony_ci BPF_STMT(BPF_LDX | BPF_MEM, 3), 20938c2ecf20Sopenharmony_ci BPF_STMT(BPF_MISC | BPF_TXA, 0), 20948c2ecf20Sopenharmony_ci BPF_STMT(BPF_ALU | BPF_ADD | BPF_K, 1), 20958c2ecf20Sopenharmony_ci BPF_STMT(BPF_MISC | BPF_TAX, 0), 20968c2ecf20Sopenharmony_ci BPF_STMT(BPF_STX, 4), 20978c2ecf20Sopenharmony_ci BPF_STMT(BPF_LDX | BPF_MEM, 4), 20988c2ecf20Sopenharmony_ci BPF_STMT(BPF_MISC | BPF_TXA, 0), 20998c2ecf20Sopenharmony_ci BPF_STMT(BPF_ALU | BPF_ADD | BPF_K, 1), 21008c2ecf20Sopenharmony_ci BPF_STMT(BPF_MISC | BPF_TAX, 0), 21018c2ecf20Sopenharmony_ci BPF_STMT(BPF_STX, 5), 21028c2ecf20Sopenharmony_ci BPF_STMT(BPF_LDX | BPF_MEM, 5), 21038c2ecf20Sopenharmony_ci BPF_STMT(BPF_MISC | BPF_TXA, 0), 21048c2ecf20Sopenharmony_ci BPF_STMT(BPF_ALU | BPF_ADD | BPF_K, 1), 21058c2ecf20Sopenharmony_ci BPF_STMT(BPF_MISC | BPF_TAX, 0), 21068c2ecf20Sopenharmony_ci BPF_STMT(BPF_STX, 6), 21078c2ecf20Sopenharmony_ci BPF_STMT(BPF_LDX | BPF_MEM, 6), 21088c2ecf20Sopenharmony_ci BPF_STMT(BPF_MISC | BPF_TXA, 0), 21098c2ecf20Sopenharmony_ci BPF_STMT(BPF_ALU | BPF_ADD | BPF_K, 1), 21108c2ecf20Sopenharmony_ci BPF_STMT(BPF_MISC | BPF_TAX, 0), 21118c2ecf20Sopenharmony_ci BPF_STMT(BPF_STX, 7), 21128c2ecf20Sopenharmony_ci BPF_STMT(BPF_LDX | BPF_MEM, 7), 21138c2ecf20Sopenharmony_ci BPF_STMT(BPF_MISC | BPF_TXA, 0), 21148c2ecf20Sopenharmony_ci BPF_STMT(BPF_ALU | BPF_ADD | BPF_K, 1), 21158c2ecf20Sopenharmony_ci BPF_STMT(BPF_MISC | BPF_TAX, 0), 21168c2ecf20Sopenharmony_ci BPF_STMT(BPF_STX, 8), 21178c2ecf20Sopenharmony_ci BPF_STMT(BPF_LDX | BPF_MEM, 8), 21188c2ecf20Sopenharmony_ci BPF_STMT(BPF_MISC | BPF_TXA, 0), 21198c2ecf20Sopenharmony_ci BPF_STMT(BPF_ALU | BPF_ADD | BPF_K, 1), 21208c2ecf20Sopenharmony_ci BPF_STMT(BPF_MISC | BPF_TAX, 0), 21218c2ecf20Sopenharmony_ci BPF_STMT(BPF_STX, 9), 21228c2ecf20Sopenharmony_ci BPF_STMT(BPF_LDX | BPF_MEM, 9), 21238c2ecf20Sopenharmony_ci BPF_STMT(BPF_MISC | BPF_TXA, 0), 21248c2ecf20Sopenharmony_ci BPF_STMT(BPF_ALU | BPF_ADD | BPF_K, 1), 21258c2ecf20Sopenharmony_ci BPF_STMT(BPF_MISC | BPF_TAX, 0), 21268c2ecf20Sopenharmony_ci BPF_STMT(BPF_STX, 10), 21278c2ecf20Sopenharmony_ci BPF_STMT(BPF_LDX | BPF_MEM, 10), 21288c2ecf20Sopenharmony_ci BPF_STMT(BPF_MISC | BPF_TXA, 0), 21298c2ecf20Sopenharmony_ci BPF_STMT(BPF_ALU | BPF_ADD | BPF_K, 1), 21308c2ecf20Sopenharmony_ci BPF_STMT(BPF_MISC | BPF_TAX, 0), 21318c2ecf20Sopenharmony_ci BPF_STMT(BPF_STX, 11), 21328c2ecf20Sopenharmony_ci BPF_STMT(BPF_LDX | BPF_MEM, 11), 21338c2ecf20Sopenharmony_ci BPF_STMT(BPF_MISC | BPF_TXA, 0), 21348c2ecf20Sopenharmony_ci BPF_STMT(BPF_ALU | BPF_ADD | BPF_K, 1), 21358c2ecf20Sopenharmony_ci BPF_STMT(BPF_MISC | BPF_TAX, 0), 21368c2ecf20Sopenharmony_ci BPF_STMT(BPF_STX, 12), 21378c2ecf20Sopenharmony_ci BPF_STMT(BPF_LDX | BPF_MEM, 12), 21388c2ecf20Sopenharmony_ci BPF_STMT(BPF_MISC | BPF_TXA, 0), 21398c2ecf20Sopenharmony_ci BPF_STMT(BPF_ALU | BPF_ADD | BPF_K, 1), 21408c2ecf20Sopenharmony_ci BPF_STMT(BPF_MISC | BPF_TAX, 0), 21418c2ecf20Sopenharmony_ci BPF_STMT(BPF_STX, 13), 21428c2ecf20Sopenharmony_ci BPF_STMT(BPF_LDX | BPF_MEM, 13), 21438c2ecf20Sopenharmony_ci BPF_STMT(BPF_MISC | BPF_TXA, 0), 21448c2ecf20Sopenharmony_ci BPF_STMT(BPF_ALU | BPF_ADD | BPF_K, 1), 21458c2ecf20Sopenharmony_ci BPF_STMT(BPF_MISC | BPF_TAX, 0), 21468c2ecf20Sopenharmony_ci BPF_STMT(BPF_STX, 14), 21478c2ecf20Sopenharmony_ci BPF_STMT(BPF_LDX | BPF_MEM, 14), 21488c2ecf20Sopenharmony_ci BPF_STMT(BPF_MISC | BPF_TXA, 0), 21498c2ecf20Sopenharmony_ci BPF_STMT(BPF_ALU | BPF_ADD | BPF_K, 1), 21508c2ecf20Sopenharmony_ci BPF_STMT(BPF_MISC | BPF_TAX, 0), 21518c2ecf20Sopenharmony_ci BPF_STMT(BPF_STX, 15), 21528c2ecf20Sopenharmony_ci BPF_STMT(BPF_LDX | BPF_MEM, 15), 21538c2ecf20Sopenharmony_ci BPF_STMT(BPF_MISC | BPF_TXA, 0), 21548c2ecf20Sopenharmony_ci BPF_STMT(BPF_ALU | BPF_ADD | BPF_K, 1), 21558c2ecf20Sopenharmony_ci BPF_STMT(BPF_MISC | BPF_TAX, 0), 21568c2ecf20Sopenharmony_ci BPF_STMT(BPF_RET | BPF_A, 0), 21578c2ecf20Sopenharmony_ci }, 21588c2ecf20Sopenharmony_ci CLASSIC | FLAG_NO_DATA, 21598c2ecf20Sopenharmony_ci { }, 21608c2ecf20Sopenharmony_ci { { 0, 116 } }, 21618c2ecf20Sopenharmony_ci }, 21628c2ecf20Sopenharmony_ci { /* Mainly checking JIT here. */ 21638c2ecf20Sopenharmony_ci "M[]: full STX + full LDX", 21648c2ecf20Sopenharmony_ci .u.insns = { 21658c2ecf20Sopenharmony_ci BPF_STMT(BPF_LDX | BPF_IMM, 0xbadfeedb), 21668c2ecf20Sopenharmony_ci BPF_STMT(BPF_STX, 0), 21678c2ecf20Sopenharmony_ci BPF_STMT(BPF_LDX | BPF_IMM, 0xecabedae), 21688c2ecf20Sopenharmony_ci BPF_STMT(BPF_STX, 1), 21698c2ecf20Sopenharmony_ci BPF_STMT(BPF_LDX | BPF_IMM, 0xafccfeaf), 21708c2ecf20Sopenharmony_ci BPF_STMT(BPF_STX, 2), 21718c2ecf20Sopenharmony_ci BPF_STMT(BPF_LDX | BPF_IMM, 0xbffdcedc), 21728c2ecf20Sopenharmony_ci BPF_STMT(BPF_STX, 3), 21738c2ecf20Sopenharmony_ci BPF_STMT(BPF_LDX | BPF_IMM, 0xfbbbdccb), 21748c2ecf20Sopenharmony_ci BPF_STMT(BPF_STX, 4), 21758c2ecf20Sopenharmony_ci BPF_STMT(BPF_LDX | BPF_IMM, 0xfbabcbda), 21768c2ecf20Sopenharmony_ci BPF_STMT(BPF_STX, 5), 21778c2ecf20Sopenharmony_ci BPF_STMT(BPF_LDX | BPF_IMM, 0xaedecbdb), 21788c2ecf20Sopenharmony_ci BPF_STMT(BPF_STX, 6), 21798c2ecf20Sopenharmony_ci BPF_STMT(BPF_LDX | BPF_IMM, 0xadebbade), 21808c2ecf20Sopenharmony_ci BPF_STMT(BPF_STX, 7), 21818c2ecf20Sopenharmony_ci BPF_STMT(BPF_LDX | BPF_IMM, 0xfcfcfaec), 21828c2ecf20Sopenharmony_ci BPF_STMT(BPF_STX, 8), 21838c2ecf20Sopenharmony_ci BPF_STMT(BPF_LDX | BPF_IMM, 0xbcdddbdc), 21848c2ecf20Sopenharmony_ci BPF_STMT(BPF_STX, 9), 21858c2ecf20Sopenharmony_ci BPF_STMT(BPF_LDX | BPF_IMM, 0xfeefdfac), 21868c2ecf20Sopenharmony_ci BPF_STMT(BPF_STX, 10), 21878c2ecf20Sopenharmony_ci BPF_STMT(BPF_LDX | BPF_IMM, 0xcddcdeea), 21888c2ecf20Sopenharmony_ci BPF_STMT(BPF_STX, 11), 21898c2ecf20Sopenharmony_ci BPF_STMT(BPF_LDX | BPF_IMM, 0xaccfaebb), 21908c2ecf20Sopenharmony_ci BPF_STMT(BPF_STX, 12), 21918c2ecf20Sopenharmony_ci BPF_STMT(BPF_LDX | BPF_IMM, 0xbdcccdcf), 21928c2ecf20Sopenharmony_ci BPF_STMT(BPF_STX, 13), 21938c2ecf20Sopenharmony_ci BPF_STMT(BPF_LDX | BPF_IMM, 0xaaedecde), 21948c2ecf20Sopenharmony_ci BPF_STMT(BPF_STX, 14), 21958c2ecf20Sopenharmony_ci BPF_STMT(BPF_LDX | BPF_IMM, 0xfaeacdad), 21968c2ecf20Sopenharmony_ci BPF_STMT(BPF_STX, 15), 21978c2ecf20Sopenharmony_ci BPF_STMT(BPF_LDX | BPF_MEM, 0), 21988c2ecf20Sopenharmony_ci BPF_STMT(BPF_MISC | BPF_TXA, 0), 21998c2ecf20Sopenharmony_ci BPF_STMT(BPF_LDX | BPF_MEM, 1), 22008c2ecf20Sopenharmony_ci BPF_STMT(BPF_ALU | BPF_ADD | BPF_X, 0), 22018c2ecf20Sopenharmony_ci BPF_STMT(BPF_LDX | BPF_MEM, 2), 22028c2ecf20Sopenharmony_ci BPF_STMT(BPF_ALU | BPF_ADD | BPF_X, 0), 22038c2ecf20Sopenharmony_ci BPF_STMT(BPF_LDX | BPF_MEM, 3), 22048c2ecf20Sopenharmony_ci BPF_STMT(BPF_ALU | BPF_ADD | BPF_X, 0), 22058c2ecf20Sopenharmony_ci BPF_STMT(BPF_LDX | BPF_MEM, 4), 22068c2ecf20Sopenharmony_ci BPF_STMT(BPF_ALU | BPF_ADD | BPF_X, 0), 22078c2ecf20Sopenharmony_ci BPF_STMT(BPF_LDX | BPF_MEM, 5), 22088c2ecf20Sopenharmony_ci BPF_STMT(BPF_ALU | BPF_ADD | BPF_X, 0), 22098c2ecf20Sopenharmony_ci BPF_STMT(BPF_LDX | BPF_MEM, 6), 22108c2ecf20Sopenharmony_ci BPF_STMT(BPF_ALU | BPF_ADD | BPF_X, 0), 22118c2ecf20Sopenharmony_ci BPF_STMT(BPF_LDX | BPF_MEM, 7), 22128c2ecf20Sopenharmony_ci BPF_STMT(BPF_ALU | BPF_ADD | BPF_X, 0), 22138c2ecf20Sopenharmony_ci BPF_STMT(BPF_LDX | BPF_MEM, 8), 22148c2ecf20Sopenharmony_ci BPF_STMT(BPF_ALU | BPF_ADD | BPF_X, 0), 22158c2ecf20Sopenharmony_ci BPF_STMT(BPF_LDX | BPF_MEM, 9), 22168c2ecf20Sopenharmony_ci BPF_STMT(BPF_ALU | BPF_ADD | BPF_X, 0), 22178c2ecf20Sopenharmony_ci BPF_STMT(BPF_LDX | BPF_MEM, 10), 22188c2ecf20Sopenharmony_ci BPF_STMT(BPF_ALU | BPF_ADD | BPF_X, 0), 22198c2ecf20Sopenharmony_ci BPF_STMT(BPF_LDX | BPF_MEM, 11), 22208c2ecf20Sopenharmony_ci BPF_STMT(BPF_ALU | BPF_ADD | BPF_X, 0), 22218c2ecf20Sopenharmony_ci BPF_STMT(BPF_LDX | BPF_MEM, 12), 22228c2ecf20Sopenharmony_ci BPF_STMT(BPF_ALU | BPF_ADD | BPF_X, 0), 22238c2ecf20Sopenharmony_ci BPF_STMT(BPF_LDX | BPF_MEM, 13), 22248c2ecf20Sopenharmony_ci BPF_STMT(BPF_ALU | BPF_ADD | BPF_X, 0), 22258c2ecf20Sopenharmony_ci BPF_STMT(BPF_LDX | BPF_MEM, 14), 22268c2ecf20Sopenharmony_ci BPF_STMT(BPF_ALU | BPF_ADD | BPF_X, 0), 22278c2ecf20Sopenharmony_ci BPF_STMT(BPF_LDX | BPF_MEM, 15), 22288c2ecf20Sopenharmony_ci BPF_STMT(BPF_ALU | BPF_ADD | BPF_X, 0), 22298c2ecf20Sopenharmony_ci BPF_STMT(BPF_RET | BPF_A, 0), 22308c2ecf20Sopenharmony_ci }, 22318c2ecf20Sopenharmony_ci CLASSIC | FLAG_NO_DATA, 22328c2ecf20Sopenharmony_ci { }, 22338c2ecf20Sopenharmony_ci { { 0, 0x2a5a5e5 } }, 22348c2ecf20Sopenharmony_ci }, 22358c2ecf20Sopenharmony_ci { 22368c2ecf20Sopenharmony_ci "check: SKF_AD_MAX", 22378c2ecf20Sopenharmony_ci .u.insns = { 22388c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_W | BPF_ABS, 22398c2ecf20Sopenharmony_ci SKF_AD_OFF + SKF_AD_MAX), 22408c2ecf20Sopenharmony_ci BPF_STMT(BPF_RET | BPF_A, 0), 22418c2ecf20Sopenharmony_ci }, 22428c2ecf20Sopenharmony_ci CLASSIC | FLAG_NO_DATA | FLAG_EXPECTED_FAIL, 22438c2ecf20Sopenharmony_ci { }, 22448c2ecf20Sopenharmony_ci { }, 22458c2ecf20Sopenharmony_ci .fill_helper = NULL, 22468c2ecf20Sopenharmony_ci .expected_errcode = -EINVAL, 22478c2ecf20Sopenharmony_ci }, 22488c2ecf20Sopenharmony_ci { /* Passes checker but fails during runtime. */ 22498c2ecf20Sopenharmony_ci "LD [SKF_AD_OFF-1]", 22508c2ecf20Sopenharmony_ci .u.insns = { 22518c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_W | BPF_ABS, 22528c2ecf20Sopenharmony_ci SKF_AD_OFF - 1), 22538c2ecf20Sopenharmony_ci BPF_STMT(BPF_RET | BPF_K, 1), 22548c2ecf20Sopenharmony_ci }, 22558c2ecf20Sopenharmony_ci CLASSIC, 22568c2ecf20Sopenharmony_ci { }, 22578c2ecf20Sopenharmony_ci { { 1, 0 } }, 22588c2ecf20Sopenharmony_ci }, 22598c2ecf20Sopenharmony_ci { 22608c2ecf20Sopenharmony_ci "load 64-bit immediate", 22618c2ecf20Sopenharmony_ci .u.insns_int = { 22628c2ecf20Sopenharmony_ci BPF_LD_IMM64(R1, 0x567800001234LL), 22638c2ecf20Sopenharmony_ci BPF_MOV64_REG(R2, R1), 22648c2ecf20Sopenharmony_ci BPF_MOV64_REG(R3, R2), 22658c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_RSH, R2, 32), 22668c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_LSH, R3, 32), 22678c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_RSH, R3, 32), 22688c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_MOV, R0, 0), 22698c2ecf20Sopenharmony_ci BPF_JMP_IMM(BPF_JEQ, R2, 0x5678, 1), 22708c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 22718c2ecf20Sopenharmony_ci BPF_JMP_IMM(BPF_JEQ, R3, 0x1234, 1), 22728c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 22738c2ecf20Sopenharmony_ci BPF_LD_IMM64(R0, 0x1ffffffffLL), 22748c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_RSH, R0, 32), /* R0 = 1 */ 22758c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 22768c2ecf20Sopenharmony_ci }, 22778c2ecf20Sopenharmony_ci INTERNAL, 22788c2ecf20Sopenharmony_ci { }, 22798c2ecf20Sopenharmony_ci { { 0, 1 } } 22808c2ecf20Sopenharmony_ci }, 22818c2ecf20Sopenharmony_ci /* BPF_ALU | BPF_MOV | BPF_X */ 22828c2ecf20Sopenharmony_ci { 22838c2ecf20Sopenharmony_ci "ALU_MOV_X: dst = 2", 22848c2ecf20Sopenharmony_ci .u.insns_int = { 22858c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R1, 2), 22868c2ecf20Sopenharmony_ci BPF_ALU32_REG(BPF_MOV, R0, R1), 22878c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 22888c2ecf20Sopenharmony_ci }, 22898c2ecf20Sopenharmony_ci INTERNAL, 22908c2ecf20Sopenharmony_ci { }, 22918c2ecf20Sopenharmony_ci { { 0, 2 } }, 22928c2ecf20Sopenharmony_ci }, 22938c2ecf20Sopenharmony_ci { 22948c2ecf20Sopenharmony_ci "ALU_MOV_X: dst = 4294967295", 22958c2ecf20Sopenharmony_ci .u.insns_int = { 22968c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R1, 4294967295U), 22978c2ecf20Sopenharmony_ci BPF_ALU32_REG(BPF_MOV, R0, R1), 22988c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 22998c2ecf20Sopenharmony_ci }, 23008c2ecf20Sopenharmony_ci INTERNAL, 23018c2ecf20Sopenharmony_ci { }, 23028c2ecf20Sopenharmony_ci { { 0, 4294967295U } }, 23038c2ecf20Sopenharmony_ci }, 23048c2ecf20Sopenharmony_ci { 23058c2ecf20Sopenharmony_ci "ALU64_MOV_X: dst = 2", 23068c2ecf20Sopenharmony_ci .u.insns_int = { 23078c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R1, 2), 23088c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_MOV, R0, R1), 23098c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 23108c2ecf20Sopenharmony_ci }, 23118c2ecf20Sopenharmony_ci INTERNAL, 23128c2ecf20Sopenharmony_ci { }, 23138c2ecf20Sopenharmony_ci { { 0, 2 } }, 23148c2ecf20Sopenharmony_ci }, 23158c2ecf20Sopenharmony_ci { 23168c2ecf20Sopenharmony_ci "ALU64_MOV_X: dst = 4294967295", 23178c2ecf20Sopenharmony_ci .u.insns_int = { 23188c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R1, 4294967295U), 23198c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_MOV, R0, R1), 23208c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 23218c2ecf20Sopenharmony_ci }, 23228c2ecf20Sopenharmony_ci INTERNAL, 23238c2ecf20Sopenharmony_ci { }, 23248c2ecf20Sopenharmony_ci { { 0, 4294967295U } }, 23258c2ecf20Sopenharmony_ci }, 23268c2ecf20Sopenharmony_ci /* BPF_ALU | BPF_MOV | BPF_K */ 23278c2ecf20Sopenharmony_ci { 23288c2ecf20Sopenharmony_ci "ALU_MOV_K: dst = 2", 23298c2ecf20Sopenharmony_ci .u.insns_int = { 23308c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R0, 2), 23318c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 23328c2ecf20Sopenharmony_ci }, 23338c2ecf20Sopenharmony_ci INTERNAL, 23348c2ecf20Sopenharmony_ci { }, 23358c2ecf20Sopenharmony_ci { { 0, 2 } }, 23368c2ecf20Sopenharmony_ci }, 23378c2ecf20Sopenharmony_ci { 23388c2ecf20Sopenharmony_ci "ALU_MOV_K: dst = 4294967295", 23398c2ecf20Sopenharmony_ci .u.insns_int = { 23408c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R0, 4294967295U), 23418c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 23428c2ecf20Sopenharmony_ci }, 23438c2ecf20Sopenharmony_ci INTERNAL, 23448c2ecf20Sopenharmony_ci { }, 23458c2ecf20Sopenharmony_ci { { 0, 4294967295U } }, 23468c2ecf20Sopenharmony_ci }, 23478c2ecf20Sopenharmony_ci { 23488c2ecf20Sopenharmony_ci "ALU_MOV_K: 0x0000ffffffff0000 = 0x00000000ffffffff", 23498c2ecf20Sopenharmony_ci .u.insns_int = { 23508c2ecf20Sopenharmony_ci BPF_LD_IMM64(R2, 0x0000ffffffff0000LL), 23518c2ecf20Sopenharmony_ci BPF_LD_IMM64(R3, 0x00000000ffffffffLL), 23528c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R2, 0xffffffff), 23538c2ecf20Sopenharmony_ci BPF_JMP_REG(BPF_JEQ, R2, R3, 2), 23548c2ecf20Sopenharmony_ci BPF_MOV32_IMM(R0, 2), 23558c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 23568c2ecf20Sopenharmony_ci BPF_MOV32_IMM(R0, 1), 23578c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 23588c2ecf20Sopenharmony_ci }, 23598c2ecf20Sopenharmony_ci INTERNAL, 23608c2ecf20Sopenharmony_ci { }, 23618c2ecf20Sopenharmony_ci { { 0, 0x1 } }, 23628c2ecf20Sopenharmony_ci }, 23638c2ecf20Sopenharmony_ci { 23648c2ecf20Sopenharmony_ci "ALU64_MOV_K: dst = 2", 23658c2ecf20Sopenharmony_ci .u.insns_int = { 23668c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_MOV, R0, 2), 23678c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 23688c2ecf20Sopenharmony_ci }, 23698c2ecf20Sopenharmony_ci INTERNAL, 23708c2ecf20Sopenharmony_ci { }, 23718c2ecf20Sopenharmony_ci { { 0, 2 } }, 23728c2ecf20Sopenharmony_ci }, 23738c2ecf20Sopenharmony_ci { 23748c2ecf20Sopenharmony_ci "ALU64_MOV_K: dst = 2147483647", 23758c2ecf20Sopenharmony_ci .u.insns_int = { 23768c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_MOV, R0, 2147483647), 23778c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 23788c2ecf20Sopenharmony_ci }, 23798c2ecf20Sopenharmony_ci INTERNAL, 23808c2ecf20Sopenharmony_ci { }, 23818c2ecf20Sopenharmony_ci { { 0, 2147483647 } }, 23828c2ecf20Sopenharmony_ci }, 23838c2ecf20Sopenharmony_ci { 23848c2ecf20Sopenharmony_ci "ALU64_OR_K: dst = 0x0", 23858c2ecf20Sopenharmony_ci .u.insns_int = { 23868c2ecf20Sopenharmony_ci BPF_LD_IMM64(R2, 0x0000ffffffff0000LL), 23878c2ecf20Sopenharmony_ci BPF_LD_IMM64(R3, 0x0), 23888c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_MOV, R2, 0x0), 23898c2ecf20Sopenharmony_ci BPF_JMP_REG(BPF_JEQ, R2, R3, 2), 23908c2ecf20Sopenharmony_ci BPF_MOV32_IMM(R0, 2), 23918c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 23928c2ecf20Sopenharmony_ci BPF_MOV32_IMM(R0, 1), 23938c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 23948c2ecf20Sopenharmony_ci }, 23958c2ecf20Sopenharmony_ci INTERNAL, 23968c2ecf20Sopenharmony_ci { }, 23978c2ecf20Sopenharmony_ci { { 0, 0x1 } }, 23988c2ecf20Sopenharmony_ci }, 23998c2ecf20Sopenharmony_ci { 24008c2ecf20Sopenharmony_ci "ALU64_MOV_K: dst = -1", 24018c2ecf20Sopenharmony_ci .u.insns_int = { 24028c2ecf20Sopenharmony_ci BPF_LD_IMM64(R2, 0x0000ffffffff0000LL), 24038c2ecf20Sopenharmony_ci BPF_LD_IMM64(R3, 0xffffffffffffffffLL), 24048c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_MOV, R2, 0xffffffff), 24058c2ecf20Sopenharmony_ci BPF_JMP_REG(BPF_JEQ, R2, R3, 2), 24068c2ecf20Sopenharmony_ci BPF_MOV32_IMM(R0, 2), 24078c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 24088c2ecf20Sopenharmony_ci BPF_MOV32_IMM(R0, 1), 24098c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 24108c2ecf20Sopenharmony_ci }, 24118c2ecf20Sopenharmony_ci INTERNAL, 24128c2ecf20Sopenharmony_ci { }, 24138c2ecf20Sopenharmony_ci { { 0, 0x1 } }, 24148c2ecf20Sopenharmony_ci }, 24158c2ecf20Sopenharmony_ci /* BPF_ALU | BPF_ADD | BPF_X */ 24168c2ecf20Sopenharmony_ci { 24178c2ecf20Sopenharmony_ci "ALU_ADD_X: 1 + 2 = 3", 24188c2ecf20Sopenharmony_ci .u.insns_int = { 24198c2ecf20Sopenharmony_ci BPF_LD_IMM64(R0, 1), 24208c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R1, 2), 24218c2ecf20Sopenharmony_ci BPF_ALU32_REG(BPF_ADD, R0, R1), 24228c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 24238c2ecf20Sopenharmony_ci }, 24248c2ecf20Sopenharmony_ci INTERNAL, 24258c2ecf20Sopenharmony_ci { }, 24268c2ecf20Sopenharmony_ci { { 0, 3 } }, 24278c2ecf20Sopenharmony_ci }, 24288c2ecf20Sopenharmony_ci { 24298c2ecf20Sopenharmony_ci "ALU_ADD_X: 1 + 4294967294 = 4294967295", 24308c2ecf20Sopenharmony_ci .u.insns_int = { 24318c2ecf20Sopenharmony_ci BPF_LD_IMM64(R0, 1), 24328c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R1, 4294967294U), 24338c2ecf20Sopenharmony_ci BPF_ALU32_REG(BPF_ADD, R0, R1), 24348c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 24358c2ecf20Sopenharmony_ci }, 24368c2ecf20Sopenharmony_ci INTERNAL, 24378c2ecf20Sopenharmony_ci { }, 24388c2ecf20Sopenharmony_ci { { 0, 4294967295U } }, 24398c2ecf20Sopenharmony_ci }, 24408c2ecf20Sopenharmony_ci { 24418c2ecf20Sopenharmony_ci "ALU_ADD_X: 2 + 4294967294 = 0", 24428c2ecf20Sopenharmony_ci .u.insns_int = { 24438c2ecf20Sopenharmony_ci BPF_LD_IMM64(R0, 2), 24448c2ecf20Sopenharmony_ci BPF_LD_IMM64(R1, 4294967294U), 24458c2ecf20Sopenharmony_ci BPF_ALU32_REG(BPF_ADD, R0, R1), 24468c2ecf20Sopenharmony_ci BPF_JMP_IMM(BPF_JEQ, R0, 0, 2), 24478c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R0, 0), 24488c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 24498c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R0, 1), 24508c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 24518c2ecf20Sopenharmony_ci }, 24528c2ecf20Sopenharmony_ci INTERNAL, 24538c2ecf20Sopenharmony_ci { }, 24548c2ecf20Sopenharmony_ci { { 0, 1 } }, 24558c2ecf20Sopenharmony_ci }, 24568c2ecf20Sopenharmony_ci { 24578c2ecf20Sopenharmony_ci "ALU64_ADD_X: 1 + 2 = 3", 24588c2ecf20Sopenharmony_ci .u.insns_int = { 24598c2ecf20Sopenharmony_ci BPF_LD_IMM64(R0, 1), 24608c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R1, 2), 24618c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_ADD, R0, R1), 24628c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 24638c2ecf20Sopenharmony_ci }, 24648c2ecf20Sopenharmony_ci INTERNAL, 24658c2ecf20Sopenharmony_ci { }, 24668c2ecf20Sopenharmony_ci { { 0, 3 } }, 24678c2ecf20Sopenharmony_ci }, 24688c2ecf20Sopenharmony_ci { 24698c2ecf20Sopenharmony_ci "ALU64_ADD_X: 1 + 4294967294 = 4294967295", 24708c2ecf20Sopenharmony_ci .u.insns_int = { 24718c2ecf20Sopenharmony_ci BPF_LD_IMM64(R0, 1), 24728c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R1, 4294967294U), 24738c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_ADD, R0, R1), 24748c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 24758c2ecf20Sopenharmony_ci }, 24768c2ecf20Sopenharmony_ci INTERNAL, 24778c2ecf20Sopenharmony_ci { }, 24788c2ecf20Sopenharmony_ci { { 0, 4294967295U } }, 24798c2ecf20Sopenharmony_ci }, 24808c2ecf20Sopenharmony_ci { 24818c2ecf20Sopenharmony_ci "ALU64_ADD_X: 2 + 4294967294 = 4294967296", 24828c2ecf20Sopenharmony_ci .u.insns_int = { 24838c2ecf20Sopenharmony_ci BPF_LD_IMM64(R0, 2), 24848c2ecf20Sopenharmony_ci BPF_LD_IMM64(R1, 4294967294U), 24858c2ecf20Sopenharmony_ci BPF_LD_IMM64(R2, 4294967296ULL), 24868c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_ADD, R0, R1), 24878c2ecf20Sopenharmony_ci BPF_JMP_REG(BPF_JEQ, R0, R2, 2), 24888c2ecf20Sopenharmony_ci BPF_MOV32_IMM(R0, 0), 24898c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 24908c2ecf20Sopenharmony_ci BPF_MOV32_IMM(R0, 1), 24918c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 24928c2ecf20Sopenharmony_ci }, 24938c2ecf20Sopenharmony_ci INTERNAL, 24948c2ecf20Sopenharmony_ci { }, 24958c2ecf20Sopenharmony_ci { { 0, 1 } }, 24968c2ecf20Sopenharmony_ci }, 24978c2ecf20Sopenharmony_ci /* BPF_ALU | BPF_ADD | BPF_K */ 24988c2ecf20Sopenharmony_ci { 24998c2ecf20Sopenharmony_ci "ALU_ADD_K: 1 + 2 = 3", 25008c2ecf20Sopenharmony_ci .u.insns_int = { 25018c2ecf20Sopenharmony_ci BPF_LD_IMM64(R0, 1), 25028c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_ADD, R0, 2), 25038c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 25048c2ecf20Sopenharmony_ci }, 25058c2ecf20Sopenharmony_ci INTERNAL, 25068c2ecf20Sopenharmony_ci { }, 25078c2ecf20Sopenharmony_ci { { 0, 3 } }, 25088c2ecf20Sopenharmony_ci }, 25098c2ecf20Sopenharmony_ci { 25108c2ecf20Sopenharmony_ci "ALU_ADD_K: 3 + 0 = 3", 25118c2ecf20Sopenharmony_ci .u.insns_int = { 25128c2ecf20Sopenharmony_ci BPF_LD_IMM64(R0, 3), 25138c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_ADD, R0, 0), 25148c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 25158c2ecf20Sopenharmony_ci }, 25168c2ecf20Sopenharmony_ci INTERNAL, 25178c2ecf20Sopenharmony_ci { }, 25188c2ecf20Sopenharmony_ci { { 0, 3 } }, 25198c2ecf20Sopenharmony_ci }, 25208c2ecf20Sopenharmony_ci { 25218c2ecf20Sopenharmony_ci "ALU_ADD_K: 1 + 4294967294 = 4294967295", 25228c2ecf20Sopenharmony_ci .u.insns_int = { 25238c2ecf20Sopenharmony_ci BPF_LD_IMM64(R0, 1), 25248c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_ADD, R0, 4294967294U), 25258c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 25268c2ecf20Sopenharmony_ci }, 25278c2ecf20Sopenharmony_ci INTERNAL, 25288c2ecf20Sopenharmony_ci { }, 25298c2ecf20Sopenharmony_ci { { 0, 4294967295U } }, 25308c2ecf20Sopenharmony_ci }, 25318c2ecf20Sopenharmony_ci { 25328c2ecf20Sopenharmony_ci "ALU_ADD_K: 4294967294 + 2 = 0", 25338c2ecf20Sopenharmony_ci .u.insns_int = { 25348c2ecf20Sopenharmony_ci BPF_LD_IMM64(R0, 4294967294U), 25358c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_ADD, R0, 2), 25368c2ecf20Sopenharmony_ci BPF_JMP_IMM(BPF_JEQ, R0, 0, 2), 25378c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R0, 0), 25388c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 25398c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R0, 1), 25408c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 25418c2ecf20Sopenharmony_ci }, 25428c2ecf20Sopenharmony_ci INTERNAL, 25438c2ecf20Sopenharmony_ci { }, 25448c2ecf20Sopenharmony_ci { { 0, 1 } }, 25458c2ecf20Sopenharmony_ci }, 25468c2ecf20Sopenharmony_ci { 25478c2ecf20Sopenharmony_ci "ALU_ADD_K: 0 + (-1) = 0x00000000ffffffff", 25488c2ecf20Sopenharmony_ci .u.insns_int = { 25498c2ecf20Sopenharmony_ci BPF_LD_IMM64(R2, 0x0), 25508c2ecf20Sopenharmony_ci BPF_LD_IMM64(R3, 0x00000000ffffffff), 25518c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_ADD, R2, 0xffffffff), 25528c2ecf20Sopenharmony_ci BPF_JMP_REG(BPF_JEQ, R2, R3, 2), 25538c2ecf20Sopenharmony_ci BPF_MOV32_IMM(R0, 2), 25548c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 25558c2ecf20Sopenharmony_ci BPF_MOV32_IMM(R0, 1), 25568c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 25578c2ecf20Sopenharmony_ci }, 25588c2ecf20Sopenharmony_ci INTERNAL, 25598c2ecf20Sopenharmony_ci { }, 25608c2ecf20Sopenharmony_ci { { 0, 0x1 } }, 25618c2ecf20Sopenharmony_ci }, 25628c2ecf20Sopenharmony_ci { 25638c2ecf20Sopenharmony_ci "ALU_ADD_K: 0 + 0xffff = 0xffff", 25648c2ecf20Sopenharmony_ci .u.insns_int = { 25658c2ecf20Sopenharmony_ci BPF_LD_IMM64(R2, 0x0), 25668c2ecf20Sopenharmony_ci BPF_LD_IMM64(R3, 0xffff), 25678c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_ADD, R2, 0xffff), 25688c2ecf20Sopenharmony_ci BPF_JMP_REG(BPF_JEQ, R2, R3, 2), 25698c2ecf20Sopenharmony_ci BPF_MOV32_IMM(R0, 2), 25708c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 25718c2ecf20Sopenharmony_ci BPF_MOV32_IMM(R0, 1), 25728c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 25738c2ecf20Sopenharmony_ci }, 25748c2ecf20Sopenharmony_ci INTERNAL, 25758c2ecf20Sopenharmony_ci { }, 25768c2ecf20Sopenharmony_ci { { 0, 0x1 } }, 25778c2ecf20Sopenharmony_ci }, 25788c2ecf20Sopenharmony_ci { 25798c2ecf20Sopenharmony_ci "ALU_ADD_K: 0 + 0x7fffffff = 0x7fffffff", 25808c2ecf20Sopenharmony_ci .u.insns_int = { 25818c2ecf20Sopenharmony_ci BPF_LD_IMM64(R2, 0x0), 25828c2ecf20Sopenharmony_ci BPF_LD_IMM64(R3, 0x7fffffff), 25838c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_ADD, R2, 0x7fffffff), 25848c2ecf20Sopenharmony_ci BPF_JMP_REG(BPF_JEQ, R2, R3, 2), 25858c2ecf20Sopenharmony_ci BPF_MOV32_IMM(R0, 2), 25868c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 25878c2ecf20Sopenharmony_ci BPF_MOV32_IMM(R0, 1), 25888c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 25898c2ecf20Sopenharmony_ci }, 25908c2ecf20Sopenharmony_ci INTERNAL, 25918c2ecf20Sopenharmony_ci { }, 25928c2ecf20Sopenharmony_ci { { 0, 0x1 } }, 25938c2ecf20Sopenharmony_ci }, 25948c2ecf20Sopenharmony_ci { 25958c2ecf20Sopenharmony_ci "ALU_ADD_K: 0 + 0x80000000 = 0x80000000", 25968c2ecf20Sopenharmony_ci .u.insns_int = { 25978c2ecf20Sopenharmony_ci BPF_LD_IMM64(R2, 0x0), 25988c2ecf20Sopenharmony_ci BPF_LD_IMM64(R3, 0x80000000), 25998c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_ADD, R2, 0x80000000), 26008c2ecf20Sopenharmony_ci BPF_JMP_REG(BPF_JEQ, R2, R3, 2), 26018c2ecf20Sopenharmony_ci BPF_MOV32_IMM(R0, 2), 26028c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 26038c2ecf20Sopenharmony_ci BPF_MOV32_IMM(R0, 1), 26048c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 26058c2ecf20Sopenharmony_ci }, 26068c2ecf20Sopenharmony_ci INTERNAL, 26078c2ecf20Sopenharmony_ci { }, 26088c2ecf20Sopenharmony_ci { { 0, 0x1 } }, 26098c2ecf20Sopenharmony_ci }, 26108c2ecf20Sopenharmony_ci { 26118c2ecf20Sopenharmony_ci "ALU_ADD_K: 0 + 0x80008000 = 0x80008000", 26128c2ecf20Sopenharmony_ci .u.insns_int = { 26138c2ecf20Sopenharmony_ci BPF_LD_IMM64(R2, 0x0), 26148c2ecf20Sopenharmony_ci BPF_LD_IMM64(R3, 0x80008000), 26158c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_ADD, R2, 0x80008000), 26168c2ecf20Sopenharmony_ci BPF_JMP_REG(BPF_JEQ, R2, R3, 2), 26178c2ecf20Sopenharmony_ci BPF_MOV32_IMM(R0, 2), 26188c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 26198c2ecf20Sopenharmony_ci BPF_MOV32_IMM(R0, 1), 26208c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 26218c2ecf20Sopenharmony_ci }, 26228c2ecf20Sopenharmony_ci INTERNAL, 26238c2ecf20Sopenharmony_ci { }, 26248c2ecf20Sopenharmony_ci { { 0, 0x1 } }, 26258c2ecf20Sopenharmony_ci }, 26268c2ecf20Sopenharmony_ci { 26278c2ecf20Sopenharmony_ci "ALU64_ADD_K: 1 + 2 = 3", 26288c2ecf20Sopenharmony_ci .u.insns_int = { 26298c2ecf20Sopenharmony_ci BPF_LD_IMM64(R0, 1), 26308c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_ADD, R0, 2), 26318c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 26328c2ecf20Sopenharmony_ci }, 26338c2ecf20Sopenharmony_ci INTERNAL, 26348c2ecf20Sopenharmony_ci { }, 26358c2ecf20Sopenharmony_ci { { 0, 3 } }, 26368c2ecf20Sopenharmony_ci }, 26378c2ecf20Sopenharmony_ci { 26388c2ecf20Sopenharmony_ci "ALU64_ADD_K: 3 + 0 = 3", 26398c2ecf20Sopenharmony_ci .u.insns_int = { 26408c2ecf20Sopenharmony_ci BPF_LD_IMM64(R0, 3), 26418c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_ADD, R0, 0), 26428c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 26438c2ecf20Sopenharmony_ci }, 26448c2ecf20Sopenharmony_ci INTERNAL, 26458c2ecf20Sopenharmony_ci { }, 26468c2ecf20Sopenharmony_ci { { 0, 3 } }, 26478c2ecf20Sopenharmony_ci }, 26488c2ecf20Sopenharmony_ci { 26498c2ecf20Sopenharmony_ci "ALU64_ADD_K: 1 + 2147483646 = 2147483647", 26508c2ecf20Sopenharmony_ci .u.insns_int = { 26518c2ecf20Sopenharmony_ci BPF_LD_IMM64(R0, 1), 26528c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_ADD, R0, 2147483646), 26538c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 26548c2ecf20Sopenharmony_ci }, 26558c2ecf20Sopenharmony_ci INTERNAL, 26568c2ecf20Sopenharmony_ci { }, 26578c2ecf20Sopenharmony_ci { { 0, 2147483647 } }, 26588c2ecf20Sopenharmony_ci }, 26598c2ecf20Sopenharmony_ci { 26608c2ecf20Sopenharmony_ci "ALU64_ADD_K: 4294967294 + 2 = 4294967296", 26618c2ecf20Sopenharmony_ci .u.insns_int = { 26628c2ecf20Sopenharmony_ci BPF_LD_IMM64(R0, 4294967294U), 26638c2ecf20Sopenharmony_ci BPF_LD_IMM64(R1, 4294967296ULL), 26648c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_ADD, R0, 2), 26658c2ecf20Sopenharmony_ci BPF_JMP_REG(BPF_JEQ, R0, R1, 2), 26668c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R0, 0), 26678c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 26688c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R0, 1), 26698c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 26708c2ecf20Sopenharmony_ci }, 26718c2ecf20Sopenharmony_ci INTERNAL, 26728c2ecf20Sopenharmony_ci { }, 26738c2ecf20Sopenharmony_ci { { 0, 1 } }, 26748c2ecf20Sopenharmony_ci }, 26758c2ecf20Sopenharmony_ci { 26768c2ecf20Sopenharmony_ci "ALU64_ADD_K: 2147483646 + -2147483647 = -1", 26778c2ecf20Sopenharmony_ci .u.insns_int = { 26788c2ecf20Sopenharmony_ci BPF_LD_IMM64(R0, 2147483646), 26798c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_ADD, R0, -2147483647), 26808c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 26818c2ecf20Sopenharmony_ci }, 26828c2ecf20Sopenharmony_ci INTERNAL, 26838c2ecf20Sopenharmony_ci { }, 26848c2ecf20Sopenharmony_ci { { 0, -1 } }, 26858c2ecf20Sopenharmony_ci }, 26868c2ecf20Sopenharmony_ci { 26878c2ecf20Sopenharmony_ci "ALU64_ADD_K: 1 + 0 = 1", 26888c2ecf20Sopenharmony_ci .u.insns_int = { 26898c2ecf20Sopenharmony_ci BPF_LD_IMM64(R2, 0x1), 26908c2ecf20Sopenharmony_ci BPF_LD_IMM64(R3, 0x1), 26918c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_ADD, R2, 0x0), 26928c2ecf20Sopenharmony_ci BPF_JMP_REG(BPF_JEQ, R2, R3, 2), 26938c2ecf20Sopenharmony_ci BPF_MOV32_IMM(R0, 2), 26948c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 26958c2ecf20Sopenharmony_ci BPF_MOV32_IMM(R0, 1), 26968c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 26978c2ecf20Sopenharmony_ci }, 26988c2ecf20Sopenharmony_ci INTERNAL, 26998c2ecf20Sopenharmony_ci { }, 27008c2ecf20Sopenharmony_ci { { 0, 0x1 } }, 27018c2ecf20Sopenharmony_ci }, 27028c2ecf20Sopenharmony_ci { 27038c2ecf20Sopenharmony_ci "ALU64_ADD_K: 0 + (-1) = 0xffffffffffffffff", 27048c2ecf20Sopenharmony_ci .u.insns_int = { 27058c2ecf20Sopenharmony_ci BPF_LD_IMM64(R2, 0x0), 27068c2ecf20Sopenharmony_ci BPF_LD_IMM64(R3, 0xffffffffffffffffLL), 27078c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_ADD, R2, 0xffffffff), 27088c2ecf20Sopenharmony_ci BPF_JMP_REG(BPF_JEQ, R2, R3, 2), 27098c2ecf20Sopenharmony_ci BPF_MOV32_IMM(R0, 2), 27108c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 27118c2ecf20Sopenharmony_ci BPF_MOV32_IMM(R0, 1), 27128c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 27138c2ecf20Sopenharmony_ci }, 27148c2ecf20Sopenharmony_ci INTERNAL, 27158c2ecf20Sopenharmony_ci { }, 27168c2ecf20Sopenharmony_ci { { 0, 0x1 } }, 27178c2ecf20Sopenharmony_ci }, 27188c2ecf20Sopenharmony_ci { 27198c2ecf20Sopenharmony_ci "ALU64_ADD_K: 0 + 0xffff = 0xffff", 27208c2ecf20Sopenharmony_ci .u.insns_int = { 27218c2ecf20Sopenharmony_ci BPF_LD_IMM64(R2, 0x0), 27228c2ecf20Sopenharmony_ci BPF_LD_IMM64(R3, 0xffff), 27238c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_ADD, R2, 0xffff), 27248c2ecf20Sopenharmony_ci BPF_JMP_REG(BPF_JEQ, R2, R3, 2), 27258c2ecf20Sopenharmony_ci BPF_MOV32_IMM(R0, 2), 27268c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 27278c2ecf20Sopenharmony_ci BPF_MOV32_IMM(R0, 1), 27288c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 27298c2ecf20Sopenharmony_ci }, 27308c2ecf20Sopenharmony_ci INTERNAL, 27318c2ecf20Sopenharmony_ci { }, 27328c2ecf20Sopenharmony_ci { { 0, 0x1 } }, 27338c2ecf20Sopenharmony_ci }, 27348c2ecf20Sopenharmony_ci { 27358c2ecf20Sopenharmony_ci "ALU64_ADD_K: 0 + 0x7fffffff = 0x7fffffff", 27368c2ecf20Sopenharmony_ci .u.insns_int = { 27378c2ecf20Sopenharmony_ci BPF_LD_IMM64(R2, 0x0), 27388c2ecf20Sopenharmony_ci BPF_LD_IMM64(R3, 0x7fffffff), 27398c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_ADD, R2, 0x7fffffff), 27408c2ecf20Sopenharmony_ci BPF_JMP_REG(BPF_JEQ, R2, R3, 2), 27418c2ecf20Sopenharmony_ci BPF_MOV32_IMM(R0, 2), 27428c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 27438c2ecf20Sopenharmony_ci BPF_MOV32_IMM(R0, 1), 27448c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 27458c2ecf20Sopenharmony_ci }, 27468c2ecf20Sopenharmony_ci INTERNAL, 27478c2ecf20Sopenharmony_ci { }, 27488c2ecf20Sopenharmony_ci { { 0, 0x1 } }, 27498c2ecf20Sopenharmony_ci }, 27508c2ecf20Sopenharmony_ci { 27518c2ecf20Sopenharmony_ci "ALU64_ADD_K: 0 + 0x80000000 = 0xffffffff80000000", 27528c2ecf20Sopenharmony_ci .u.insns_int = { 27538c2ecf20Sopenharmony_ci BPF_LD_IMM64(R2, 0x0), 27548c2ecf20Sopenharmony_ci BPF_LD_IMM64(R3, 0xffffffff80000000LL), 27558c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_ADD, R2, 0x80000000), 27568c2ecf20Sopenharmony_ci BPF_JMP_REG(BPF_JEQ, R2, R3, 2), 27578c2ecf20Sopenharmony_ci BPF_MOV32_IMM(R0, 2), 27588c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 27598c2ecf20Sopenharmony_ci BPF_MOV32_IMM(R0, 1), 27608c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 27618c2ecf20Sopenharmony_ci }, 27628c2ecf20Sopenharmony_ci INTERNAL, 27638c2ecf20Sopenharmony_ci { }, 27648c2ecf20Sopenharmony_ci { { 0, 0x1 } }, 27658c2ecf20Sopenharmony_ci }, 27668c2ecf20Sopenharmony_ci { 27678c2ecf20Sopenharmony_ci "ALU_ADD_K: 0 + 0x80008000 = 0xffffffff80008000", 27688c2ecf20Sopenharmony_ci .u.insns_int = { 27698c2ecf20Sopenharmony_ci BPF_LD_IMM64(R2, 0x0), 27708c2ecf20Sopenharmony_ci BPF_LD_IMM64(R3, 0xffffffff80008000LL), 27718c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_ADD, R2, 0x80008000), 27728c2ecf20Sopenharmony_ci BPF_JMP_REG(BPF_JEQ, R2, R3, 2), 27738c2ecf20Sopenharmony_ci BPF_MOV32_IMM(R0, 2), 27748c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 27758c2ecf20Sopenharmony_ci BPF_MOV32_IMM(R0, 1), 27768c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 27778c2ecf20Sopenharmony_ci }, 27788c2ecf20Sopenharmony_ci INTERNAL, 27798c2ecf20Sopenharmony_ci { }, 27808c2ecf20Sopenharmony_ci { { 0, 0x1 } }, 27818c2ecf20Sopenharmony_ci }, 27828c2ecf20Sopenharmony_ci /* BPF_ALU | BPF_SUB | BPF_X */ 27838c2ecf20Sopenharmony_ci { 27848c2ecf20Sopenharmony_ci "ALU_SUB_X: 3 - 1 = 2", 27858c2ecf20Sopenharmony_ci .u.insns_int = { 27868c2ecf20Sopenharmony_ci BPF_LD_IMM64(R0, 3), 27878c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R1, 1), 27888c2ecf20Sopenharmony_ci BPF_ALU32_REG(BPF_SUB, R0, R1), 27898c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 27908c2ecf20Sopenharmony_ci }, 27918c2ecf20Sopenharmony_ci INTERNAL, 27928c2ecf20Sopenharmony_ci { }, 27938c2ecf20Sopenharmony_ci { { 0, 2 } }, 27948c2ecf20Sopenharmony_ci }, 27958c2ecf20Sopenharmony_ci { 27968c2ecf20Sopenharmony_ci "ALU_SUB_X: 4294967295 - 4294967294 = 1", 27978c2ecf20Sopenharmony_ci .u.insns_int = { 27988c2ecf20Sopenharmony_ci BPF_LD_IMM64(R0, 4294967295U), 27998c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R1, 4294967294U), 28008c2ecf20Sopenharmony_ci BPF_ALU32_REG(BPF_SUB, R0, R1), 28018c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 28028c2ecf20Sopenharmony_ci }, 28038c2ecf20Sopenharmony_ci INTERNAL, 28048c2ecf20Sopenharmony_ci { }, 28058c2ecf20Sopenharmony_ci { { 0, 1 } }, 28068c2ecf20Sopenharmony_ci }, 28078c2ecf20Sopenharmony_ci { 28088c2ecf20Sopenharmony_ci "ALU64_SUB_X: 3 - 1 = 2", 28098c2ecf20Sopenharmony_ci .u.insns_int = { 28108c2ecf20Sopenharmony_ci BPF_LD_IMM64(R0, 3), 28118c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R1, 1), 28128c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_SUB, R0, R1), 28138c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 28148c2ecf20Sopenharmony_ci }, 28158c2ecf20Sopenharmony_ci INTERNAL, 28168c2ecf20Sopenharmony_ci { }, 28178c2ecf20Sopenharmony_ci { { 0, 2 } }, 28188c2ecf20Sopenharmony_ci }, 28198c2ecf20Sopenharmony_ci { 28208c2ecf20Sopenharmony_ci "ALU64_SUB_X: 4294967295 - 4294967294 = 1", 28218c2ecf20Sopenharmony_ci .u.insns_int = { 28228c2ecf20Sopenharmony_ci BPF_LD_IMM64(R0, 4294967295U), 28238c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R1, 4294967294U), 28248c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_SUB, R0, R1), 28258c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 28268c2ecf20Sopenharmony_ci }, 28278c2ecf20Sopenharmony_ci INTERNAL, 28288c2ecf20Sopenharmony_ci { }, 28298c2ecf20Sopenharmony_ci { { 0, 1 } }, 28308c2ecf20Sopenharmony_ci }, 28318c2ecf20Sopenharmony_ci /* BPF_ALU | BPF_SUB | BPF_K */ 28328c2ecf20Sopenharmony_ci { 28338c2ecf20Sopenharmony_ci "ALU_SUB_K: 3 - 1 = 2", 28348c2ecf20Sopenharmony_ci .u.insns_int = { 28358c2ecf20Sopenharmony_ci BPF_LD_IMM64(R0, 3), 28368c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_SUB, R0, 1), 28378c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 28388c2ecf20Sopenharmony_ci }, 28398c2ecf20Sopenharmony_ci INTERNAL, 28408c2ecf20Sopenharmony_ci { }, 28418c2ecf20Sopenharmony_ci { { 0, 2 } }, 28428c2ecf20Sopenharmony_ci }, 28438c2ecf20Sopenharmony_ci { 28448c2ecf20Sopenharmony_ci "ALU_SUB_K: 3 - 0 = 3", 28458c2ecf20Sopenharmony_ci .u.insns_int = { 28468c2ecf20Sopenharmony_ci BPF_LD_IMM64(R0, 3), 28478c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_SUB, R0, 0), 28488c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 28498c2ecf20Sopenharmony_ci }, 28508c2ecf20Sopenharmony_ci INTERNAL, 28518c2ecf20Sopenharmony_ci { }, 28528c2ecf20Sopenharmony_ci { { 0, 3 } }, 28538c2ecf20Sopenharmony_ci }, 28548c2ecf20Sopenharmony_ci { 28558c2ecf20Sopenharmony_ci "ALU_SUB_K: 4294967295 - 4294967294 = 1", 28568c2ecf20Sopenharmony_ci .u.insns_int = { 28578c2ecf20Sopenharmony_ci BPF_LD_IMM64(R0, 4294967295U), 28588c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_SUB, R0, 4294967294U), 28598c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 28608c2ecf20Sopenharmony_ci }, 28618c2ecf20Sopenharmony_ci INTERNAL, 28628c2ecf20Sopenharmony_ci { }, 28638c2ecf20Sopenharmony_ci { { 0, 1 } }, 28648c2ecf20Sopenharmony_ci }, 28658c2ecf20Sopenharmony_ci { 28668c2ecf20Sopenharmony_ci "ALU64_SUB_K: 3 - 1 = 2", 28678c2ecf20Sopenharmony_ci .u.insns_int = { 28688c2ecf20Sopenharmony_ci BPF_LD_IMM64(R0, 3), 28698c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_SUB, R0, 1), 28708c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 28718c2ecf20Sopenharmony_ci }, 28728c2ecf20Sopenharmony_ci INTERNAL, 28738c2ecf20Sopenharmony_ci { }, 28748c2ecf20Sopenharmony_ci { { 0, 2 } }, 28758c2ecf20Sopenharmony_ci }, 28768c2ecf20Sopenharmony_ci { 28778c2ecf20Sopenharmony_ci "ALU64_SUB_K: 3 - 0 = 3", 28788c2ecf20Sopenharmony_ci .u.insns_int = { 28798c2ecf20Sopenharmony_ci BPF_LD_IMM64(R0, 3), 28808c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_SUB, R0, 0), 28818c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 28828c2ecf20Sopenharmony_ci }, 28838c2ecf20Sopenharmony_ci INTERNAL, 28848c2ecf20Sopenharmony_ci { }, 28858c2ecf20Sopenharmony_ci { { 0, 3 } }, 28868c2ecf20Sopenharmony_ci }, 28878c2ecf20Sopenharmony_ci { 28888c2ecf20Sopenharmony_ci "ALU64_SUB_K: 4294967294 - 4294967295 = -1", 28898c2ecf20Sopenharmony_ci .u.insns_int = { 28908c2ecf20Sopenharmony_ci BPF_LD_IMM64(R0, 4294967294U), 28918c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_SUB, R0, 4294967295U), 28928c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 28938c2ecf20Sopenharmony_ci }, 28948c2ecf20Sopenharmony_ci INTERNAL, 28958c2ecf20Sopenharmony_ci { }, 28968c2ecf20Sopenharmony_ci { { 0, -1 } }, 28978c2ecf20Sopenharmony_ci }, 28988c2ecf20Sopenharmony_ci { 28998c2ecf20Sopenharmony_ci "ALU64_ADD_K: 2147483646 - 2147483647 = -1", 29008c2ecf20Sopenharmony_ci .u.insns_int = { 29018c2ecf20Sopenharmony_ci BPF_LD_IMM64(R0, 2147483646), 29028c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_SUB, R0, 2147483647), 29038c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 29048c2ecf20Sopenharmony_ci }, 29058c2ecf20Sopenharmony_ci INTERNAL, 29068c2ecf20Sopenharmony_ci { }, 29078c2ecf20Sopenharmony_ci { { 0, -1 } }, 29088c2ecf20Sopenharmony_ci }, 29098c2ecf20Sopenharmony_ci /* BPF_ALU | BPF_MUL | BPF_X */ 29108c2ecf20Sopenharmony_ci { 29118c2ecf20Sopenharmony_ci "ALU_MUL_X: 2 * 3 = 6", 29128c2ecf20Sopenharmony_ci .u.insns_int = { 29138c2ecf20Sopenharmony_ci BPF_LD_IMM64(R0, 2), 29148c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R1, 3), 29158c2ecf20Sopenharmony_ci BPF_ALU32_REG(BPF_MUL, R0, R1), 29168c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 29178c2ecf20Sopenharmony_ci }, 29188c2ecf20Sopenharmony_ci INTERNAL, 29198c2ecf20Sopenharmony_ci { }, 29208c2ecf20Sopenharmony_ci { { 0, 6 } }, 29218c2ecf20Sopenharmony_ci }, 29228c2ecf20Sopenharmony_ci { 29238c2ecf20Sopenharmony_ci "ALU_MUL_X: 2 * 0x7FFFFFF8 = 0xFFFFFFF0", 29248c2ecf20Sopenharmony_ci .u.insns_int = { 29258c2ecf20Sopenharmony_ci BPF_LD_IMM64(R0, 2), 29268c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R1, 0x7FFFFFF8), 29278c2ecf20Sopenharmony_ci BPF_ALU32_REG(BPF_MUL, R0, R1), 29288c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 29298c2ecf20Sopenharmony_ci }, 29308c2ecf20Sopenharmony_ci INTERNAL, 29318c2ecf20Sopenharmony_ci { }, 29328c2ecf20Sopenharmony_ci { { 0, 0xFFFFFFF0 } }, 29338c2ecf20Sopenharmony_ci }, 29348c2ecf20Sopenharmony_ci { 29358c2ecf20Sopenharmony_ci "ALU_MUL_X: -1 * -1 = 1", 29368c2ecf20Sopenharmony_ci .u.insns_int = { 29378c2ecf20Sopenharmony_ci BPF_LD_IMM64(R0, -1), 29388c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R1, -1), 29398c2ecf20Sopenharmony_ci BPF_ALU32_REG(BPF_MUL, R0, R1), 29408c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 29418c2ecf20Sopenharmony_ci }, 29428c2ecf20Sopenharmony_ci INTERNAL, 29438c2ecf20Sopenharmony_ci { }, 29448c2ecf20Sopenharmony_ci { { 0, 1 } }, 29458c2ecf20Sopenharmony_ci }, 29468c2ecf20Sopenharmony_ci { 29478c2ecf20Sopenharmony_ci "ALU64_MUL_X: 2 * 3 = 6", 29488c2ecf20Sopenharmony_ci .u.insns_int = { 29498c2ecf20Sopenharmony_ci BPF_LD_IMM64(R0, 2), 29508c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R1, 3), 29518c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_MUL, R0, R1), 29528c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 29538c2ecf20Sopenharmony_ci }, 29548c2ecf20Sopenharmony_ci INTERNAL, 29558c2ecf20Sopenharmony_ci { }, 29568c2ecf20Sopenharmony_ci { { 0, 6 } }, 29578c2ecf20Sopenharmony_ci }, 29588c2ecf20Sopenharmony_ci { 29598c2ecf20Sopenharmony_ci "ALU64_MUL_X: 1 * 2147483647 = 2147483647", 29608c2ecf20Sopenharmony_ci .u.insns_int = { 29618c2ecf20Sopenharmony_ci BPF_LD_IMM64(R0, 1), 29628c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R1, 2147483647), 29638c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_MUL, R0, R1), 29648c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 29658c2ecf20Sopenharmony_ci }, 29668c2ecf20Sopenharmony_ci INTERNAL, 29678c2ecf20Sopenharmony_ci { }, 29688c2ecf20Sopenharmony_ci { { 0, 2147483647 } }, 29698c2ecf20Sopenharmony_ci }, 29708c2ecf20Sopenharmony_ci /* BPF_ALU | BPF_MUL | BPF_K */ 29718c2ecf20Sopenharmony_ci { 29728c2ecf20Sopenharmony_ci "ALU_MUL_K: 2 * 3 = 6", 29738c2ecf20Sopenharmony_ci .u.insns_int = { 29748c2ecf20Sopenharmony_ci BPF_LD_IMM64(R0, 2), 29758c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MUL, R0, 3), 29768c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 29778c2ecf20Sopenharmony_ci }, 29788c2ecf20Sopenharmony_ci INTERNAL, 29798c2ecf20Sopenharmony_ci { }, 29808c2ecf20Sopenharmony_ci { { 0, 6 } }, 29818c2ecf20Sopenharmony_ci }, 29828c2ecf20Sopenharmony_ci { 29838c2ecf20Sopenharmony_ci "ALU_MUL_K: 3 * 1 = 3", 29848c2ecf20Sopenharmony_ci .u.insns_int = { 29858c2ecf20Sopenharmony_ci BPF_LD_IMM64(R0, 3), 29868c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MUL, R0, 1), 29878c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 29888c2ecf20Sopenharmony_ci }, 29898c2ecf20Sopenharmony_ci INTERNAL, 29908c2ecf20Sopenharmony_ci { }, 29918c2ecf20Sopenharmony_ci { { 0, 3 } }, 29928c2ecf20Sopenharmony_ci }, 29938c2ecf20Sopenharmony_ci { 29948c2ecf20Sopenharmony_ci "ALU_MUL_K: 2 * 0x7FFFFFF8 = 0xFFFFFFF0", 29958c2ecf20Sopenharmony_ci .u.insns_int = { 29968c2ecf20Sopenharmony_ci BPF_LD_IMM64(R0, 2), 29978c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MUL, R0, 0x7FFFFFF8), 29988c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 29998c2ecf20Sopenharmony_ci }, 30008c2ecf20Sopenharmony_ci INTERNAL, 30018c2ecf20Sopenharmony_ci { }, 30028c2ecf20Sopenharmony_ci { { 0, 0xFFFFFFF0 } }, 30038c2ecf20Sopenharmony_ci }, 30048c2ecf20Sopenharmony_ci { 30058c2ecf20Sopenharmony_ci "ALU_MUL_K: 1 * (-1) = 0x00000000ffffffff", 30068c2ecf20Sopenharmony_ci .u.insns_int = { 30078c2ecf20Sopenharmony_ci BPF_LD_IMM64(R2, 0x1), 30088c2ecf20Sopenharmony_ci BPF_LD_IMM64(R3, 0x00000000ffffffff), 30098c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MUL, R2, 0xffffffff), 30108c2ecf20Sopenharmony_ci BPF_JMP_REG(BPF_JEQ, R2, R3, 2), 30118c2ecf20Sopenharmony_ci BPF_MOV32_IMM(R0, 2), 30128c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 30138c2ecf20Sopenharmony_ci BPF_MOV32_IMM(R0, 1), 30148c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 30158c2ecf20Sopenharmony_ci }, 30168c2ecf20Sopenharmony_ci INTERNAL, 30178c2ecf20Sopenharmony_ci { }, 30188c2ecf20Sopenharmony_ci { { 0, 0x1 } }, 30198c2ecf20Sopenharmony_ci }, 30208c2ecf20Sopenharmony_ci { 30218c2ecf20Sopenharmony_ci "ALU64_MUL_K: 2 * 3 = 6", 30228c2ecf20Sopenharmony_ci .u.insns_int = { 30238c2ecf20Sopenharmony_ci BPF_LD_IMM64(R0, 2), 30248c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_MUL, R0, 3), 30258c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 30268c2ecf20Sopenharmony_ci }, 30278c2ecf20Sopenharmony_ci INTERNAL, 30288c2ecf20Sopenharmony_ci { }, 30298c2ecf20Sopenharmony_ci { { 0, 6 } }, 30308c2ecf20Sopenharmony_ci }, 30318c2ecf20Sopenharmony_ci { 30328c2ecf20Sopenharmony_ci "ALU64_MUL_K: 3 * 1 = 3", 30338c2ecf20Sopenharmony_ci .u.insns_int = { 30348c2ecf20Sopenharmony_ci BPF_LD_IMM64(R0, 3), 30358c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_MUL, R0, 1), 30368c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 30378c2ecf20Sopenharmony_ci }, 30388c2ecf20Sopenharmony_ci INTERNAL, 30398c2ecf20Sopenharmony_ci { }, 30408c2ecf20Sopenharmony_ci { { 0, 3 } }, 30418c2ecf20Sopenharmony_ci }, 30428c2ecf20Sopenharmony_ci { 30438c2ecf20Sopenharmony_ci "ALU64_MUL_K: 1 * 2147483647 = 2147483647", 30448c2ecf20Sopenharmony_ci .u.insns_int = { 30458c2ecf20Sopenharmony_ci BPF_LD_IMM64(R0, 1), 30468c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_MUL, R0, 2147483647), 30478c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 30488c2ecf20Sopenharmony_ci }, 30498c2ecf20Sopenharmony_ci INTERNAL, 30508c2ecf20Sopenharmony_ci { }, 30518c2ecf20Sopenharmony_ci { { 0, 2147483647 } }, 30528c2ecf20Sopenharmony_ci }, 30538c2ecf20Sopenharmony_ci { 30548c2ecf20Sopenharmony_ci "ALU64_MUL_K: 1 * -2147483647 = -2147483647", 30558c2ecf20Sopenharmony_ci .u.insns_int = { 30568c2ecf20Sopenharmony_ci BPF_LD_IMM64(R0, 1), 30578c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_MUL, R0, -2147483647), 30588c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 30598c2ecf20Sopenharmony_ci }, 30608c2ecf20Sopenharmony_ci INTERNAL, 30618c2ecf20Sopenharmony_ci { }, 30628c2ecf20Sopenharmony_ci { { 0, -2147483647 } }, 30638c2ecf20Sopenharmony_ci }, 30648c2ecf20Sopenharmony_ci { 30658c2ecf20Sopenharmony_ci "ALU64_MUL_K: 1 * (-1) = 0xffffffffffffffff", 30668c2ecf20Sopenharmony_ci .u.insns_int = { 30678c2ecf20Sopenharmony_ci BPF_LD_IMM64(R2, 0x1), 30688c2ecf20Sopenharmony_ci BPF_LD_IMM64(R3, 0xffffffffffffffffLL), 30698c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_MUL, R2, 0xffffffff), 30708c2ecf20Sopenharmony_ci BPF_JMP_REG(BPF_JEQ, R2, R3, 2), 30718c2ecf20Sopenharmony_ci BPF_MOV32_IMM(R0, 2), 30728c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 30738c2ecf20Sopenharmony_ci BPF_MOV32_IMM(R0, 1), 30748c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 30758c2ecf20Sopenharmony_ci }, 30768c2ecf20Sopenharmony_ci INTERNAL, 30778c2ecf20Sopenharmony_ci { }, 30788c2ecf20Sopenharmony_ci { { 0, 0x1 } }, 30798c2ecf20Sopenharmony_ci }, 30808c2ecf20Sopenharmony_ci /* BPF_ALU | BPF_DIV | BPF_X */ 30818c2ecf20Sopenharmony_ci { 30828c2ecf20Sopenharmony_ci "ALU_DIV_X: 6 / 2 = 3", 30838c2ecf20Sopenharmony_ci .u.insns_int = { 30848c2ecf20Sopenharmony_ci BPF_LD_IMM64(R0, 6), 30858c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R1, 2), 30868c2ecf20Sopenharmony_ci BPF_ALU32_REG(BPF_DIV, R0, R1), 30878c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 30888c2ecf20Sopenharmony_ci }, 30898c2ecf20Sopenharmony_ci INTERNAL, 30908c2ecf20Sopenharmony_ci { }, 30918c2ecf20Sopenharmony_ci { { 0, 3 } }, 30928c2ecf20Sopenharmony_ci }, 30938c2ecf20Sopenharmony_ci { 30948c2ecf20Sopenharmony_ci "ALU_DIV_X: 4294967295 / 4294967295 = 1", 30958c2ecf20Sopenharmony_ci .u.insns_int = { 30968c2ecf20Sopenharmony_ci BPF_LD_IMM64(R0, 4294967295U), 30978c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R1, 4294967295U), 30988c2ecf20Sopenharmony_ci BPF_ALU32_REG(BPF_DIV, R0, R1), 30998c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 31008c2ecf20Sopenharmony_ci }, 31018c2ecf20Sopenharmony_ci INTERNAL, 31028c2ecf20Sopenharmony_ci { }, 31038c2ecf20Sopenharmony_ci { { 0, 1 } }, 31048c2ecf20Sopenharmony_ci }, 31058c2ecf20Sopenharmony_ci { 31068c2ecf20Sopenharmony_ci "ALU64_DIV_X: 6 / 2 = 3", 31078c2ecf20Sopenharmony_ci .u.insns_int = { 31088c2ecf20Sopenharmony_ci BPF_LD_IMM64(R0, 6), 31098c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R1, 2), 31108c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_DIV, R0, R1), 31118c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 31128c2ecf20Sopenharmony_ci }, 31138c2ecf20Sopenharmony_ci INTERNAL, 31148c2ecf20Sopenharmony_ci { }, 31158c2ecf20Sopenharmony_ci { { 0, 3 } }, 31168c2ecf20Sopenharmony_ci }, 31178c2ecf20Sopenharmony_ci { 31188c2ecf20Sopenharmony_ci "ALU64_DIV_X: 2147483647 / 2147483647 = 1", 31198c2ecf20Sopenharmony_ci .u.insns_int = { 31208c2ecf20Sopenharmony_ci BPF_LD_IMM64(R0, 2147483647), 31218c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R1, 2147483647), 31228c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_DIV, R0, R1), 31238c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 31248c2ecf20Sopenharmony_ci }, 31258c2ecf20Sopenharmony_ci INTERNAL, 31268c2ecf20Sopenharmony_ci { }, 31278c2ecf20Sopenharmony_ci { { 0, 1 } }, 31288c2ecf20Sopenharmony_ci }, 31298c2ecf20Sopenharmony_ci { 31308c2ecf20Sopenharmony_ci "ALU64_DIV_X: 0xffffffffffffffff / (-1) = 0x0000000000000001", 31318c2ecf20Sopenharmony_ci .u.insns_int = { 31328c2ecf20Sopenharmony_ci BPF_LD_IMM64(R2, 0xffffffffffffffffLL), 31338c2ecf20Sopenharmony_ci BPF_LD_IMM64(R4, 0xffffffffffffffffLL), 31348c2ecf20Sopenharmony_ci BPF_LD_IMM64(R3, 0x0000000000000001LL), 31358c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_DIV, R2, R4), 31368c2ecf20Sopenharmony_ci BPF_JMP_REG(BPF_JEQ, R2, R3, 2), 31378c2ecf20Sopenharmony_ci BPF_MOV32_IMM(R0, 2), 31388c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 31398c2ecf20Sopenharmony_ci BPF_MOV32_IMM(R0, 1), 31408c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 31418c2ecf20Sopenharmony_ci }, 31428c2ecf20Sopenharmony_ci INTERNAL, 31438c2ecf20Sopenharmony_ci { }, 31448c2ecf20Sopenharmony_ci { { 0, 0x1 } }, 31458c2ecf20Sopenharmony_ci }, 31468c2ecf20Sopenharmony_ci /* BPF_ALU | BPF_DIV | BPF_K */ 31478c2ecf20Sopenharmony_ci { 31488c2ecf20Sopenharmony_ci "ALU_DIV_K: 6 / 2 = 3", 31498c2ecf20Sopenharmony_ci .u.insns_int = { 31508c2ecf20Sopenharmony_ci BPF_LD_IMM64(R0, 6), 31518c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_DIV, R0, 2), 31528c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 31538c2ecf20Sopenharmony_ci }, 31548c2ecf20Sopenharmony_ci INTERNAL, 31558c2ecf20Sopenharmony_ci { }, 31568c2ecf20Sopenharmony_ci { { 0, 3 } }, 31578c2ecf20Sopenharmony_ci }, 31588c2ecf20Sopenharmony_ci { 31598c2ecf20Sopenharmony_ci "ALU_DIV_K: 3 / 1 = 3", 31608c2ecf20Sopenharmony_ci .u.insns_int = { 31618c2ecf20Sopenharmony_ci BPF_LD_IMM64(R0, 3), 31628c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_DIV, R0, 1), 31638c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 31648c2ecf20Sopenharmony_ci }, 31658c2ecf20Sopenharmony_ci INTERNAL, 31668c2ecf20Sopenharmony_ci { }, 31678c2ecf20Sopenharmony_ci { { 0, 3 } }, 31688c2ecf20Sopenharmony_ci }, 31698c2ecf20Sopenharmony_ci { 31708c2ecf20Sopenharmony_ci "ALU_DIV_K: 4294967295 / 4294967295 = 1", 31718c2ecf20Sopenharmony_ci .u.insns_int = { 31728c2ecf20Sopenharmony_ci BPF_LD_IMM64(R0, 4294967295U), 31738c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_DIV, R0, 4294967295U), 31748c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 31758c2ecf20Sopenharmony_ci }, 31768c2ecf20Sopenharmony_ci INTERNAL, 31778c2ecf20Sopenharmony_ci { }, 31788c2ecf20Sopenharmony_ci { { 0, 1 } }, 31798c2ecf20Sopenharmony_ci }, 31808c2ecf20Sopenharmony_ci { 31818c2ecf20Sopenharmony_ci "ALU_DIV_K: 0xffffffffffffffff / (-1) = 0x1", 31828c2ecf20Sopenharmony_ci .u.insns_int = { 31838c2ecf20Sopenharmony_ci BPF_LD_IMM64(R2, 0xffffffffffffffffLL), 31848c2ecf20Sopenharmony_ci BPF_LD_IMM64(R3, 0x1UL), 31858c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_DIV, R2, 0xffffffff), 31868c2ecf20Sopenharmony_ci BPF_JMP_REG(BPF_JEQ, R2, R3, 2), 31878c2ecf20Sopenharmony_ci BPF_MOV32_IMM(R0, 2), 31888c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 31898c2ecf20Sopenharmony_ci BPF_MOV32_IMM(R0, 1), 31908c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 31918c2ecf20Sopenharmony_ci }, 31928c2ecf20Sopenharmony_ci INTERNAL, 31938c2ecf20Sopenharmony_ci { }, 31948c2ecf20Sopenharmony_ci { { 0, 0x1 } }, 31958c2ecf20Sopenharmony_ci }, 31968c2ecf20Sopenharmony_ci { 31978c2ecf20Sopenharmony_ci "ALU64_DIV_K: 6 / 2 = 3", 31988c2ecf20Sopenharmony_ci .u.insns_int = { 31998c2ecf20Sopenharmony_ci BPF_LD_IMM64(R0, 6), 32008c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_DIV, R0, 2), 32018c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 32028c2ecf20Sopenharmony_ci }, 32038c2ecf20Sopenharmony_ci INTERNAL, 32048c2ecf20Sopenharmony_ci { }, 32058c2ecf20Sopenharmony_ci { { 0, 3 } }, 32068c2ecf20Sopenharmony_ci }, 32078c2ecf20Sopenharmony_ci { 32088c2ecf20Sopenharmony_ci "ALU64_DIV_K: 3 / 1 = 3", 32098c2ecf20Sopenharmony_ci .u.insns_int = { 32108c2ecf20Sopenharmony_ci BPF_LD_IMM64(R0, 3), 32118c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_DIV, R0, 1), 32128c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 32138c2ecf20Sopenharmony_ci }, 32148c2ecf20Sopenharmony_ci INTERNAL, 32158c2ecf20Sopenharmony_ci { }, 32168c2ecf20Sopenharmony_ci { { 0, 3 } }, 32178c2ecf20Sopenharmony_ci }, 32188c2ecf20Sopenharmony_ci { 32198c2ecf20Sopenharmony_ci "ALU64_DIV_K: 2147483647 / 2147483647 = 1", 32208c2ecf20Sopenharmony_ci .u.insns_int = { 32218c2ecf20Sopenharmony_ci BPF_LD_IMM64(R0, 2147483647), 32228c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_DIV, R0, 2147483647), 32238c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 32248c2ecf20Sopenharmony_ci }, 32258c2ecf20Sopenharmony_ci INTERNAL, 32268c2ecf20Sopenharmony_ci { }, 32278c2ecf20Sopenharmony_ci { { 0, 1 } }, 32288c2ecf20Sopenharmony_ci }, 32298c2ecf20Sopenharmony_ci { 32308c2ecf20Sopenharmony_ci "ALU64_DIV_K: 0xffffffffffffffff / (-1) = 0x0000000000000001", 32318c2ecf20Sopenharmony_ci .u.insns_int = { 32328c2ecf20Sopenharmony_ci BPF_LD_IMM64(R2, 0xffffffffffffffffLL), 32338c2ecf20Sopenharmony_ci BPF_LD_IMM64(R3, 0x0000000000000001LL), 32348c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_DIV, R2, 0xffffffff), 32358c2ecf20Sopenharmony_ci BPF_JMP_REG(BPF_JEQ, R2, R3, 2), 32368c2ecf20Sopenharmony_ci BPF_MOV32_IMM(R0, 2), 32378c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 32388c2ecf20Sopenharmony_ci BPF_MOV32_IMM(R0, 1), 32398c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 32408c2ecf20Sopenharmony_ci }, 32418c2ecf20Sopenharmony_ci INTERNAL, 32428c2ecf20Sopenharmony_ci { }, 32438c2ecf20Sopenharmony_ci { { 0, 0x1 } }, 32448c2ecf20Sopenharmony_ci }, 32458c2ecf20Sopenharmony_ci /* BPF_ALU | BPF_MOD | BPF_X */ 32468c2ecf20Sopenharmony_ci { 32478c2ecf20Sopenharmony_ci "ALU_MOD_X: 3 % 2 = 1", 32488c2ecf20Sopenharmony_ci .u.insns_int = { 32498c2ecf20Sopenharmony_ci BPF_LD_IMM64(R0, 3), 32508c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R1, 2), 32518c2ecf20Sopenharmony_ci BPF_ALU32_REG(BPF_MOD, R0, R1), 32528c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 32538c2ecf20Sopenharmony_ci }, 32548c2ecf20Sopenharmony_ci INTERNAL, 32558c2ecf20Sopenharmony_ci { }, 32568c2ecf20Sopenharmony_ci { { 0, 1 } }, 32578c2ecf20Sopenharmony_ci }, 32588c2ecf20Sopenharmony_ci { 32598c2ecf20Sopenharmony_ci "ALU_MOD_X: 4294967295 % 4294967293 = 2", 32608c2ecf20Sopenharmony_ci .u.insns_int = { 32618c2ecf20Sopenharmony_ci BPF_LD_IMM64(R0, 4294967295U), 32628c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R1, 4294967293U), 32638c2ecf20Sopenharmony_ci BPF_ALU32_REG(BPF_MOD, R0, R1), 32648c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 32658c2ecf20Sopenharmony_ci }, 32668c2ecf20Sopenharmony_ci INTERNAL, 32678c2ecf20Sopenharmony_ci { }, 32688c2ecf20Sopenharmony_ci { { 0, 2 } }, 32698c2ecf20Sopenharmony_ci }, 32708c2ecf20Sopenharmony_ci { 32718c2ecf20Sopenharmony_ci "ALU64_MOD_X: 3 % 2 = 1", 32728c2ecf20Sopenharmony_ci .u.insns_int = { 32738c2ecf20Sopenharmony_ci BPF_LD_IMM64(R0, 3), 32748c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R1, 2), 32758c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_MOD, R0, R1), 32768c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 32778c2ecf20Sopenharmony_ci }, 32788c2ecf20Sopenharmony_ci INTERNAL, 32798c2ecf20Sopenharmony_ci { }, 32808c2ecf20Sopenharmony_ci { { 0, 1 } }, 32818c2ecf20Sopenharmony_ci }, 32828c2ecf20Sopenharmony_ci { 32838c2ecf20Sopenharmony_ci "ALU64_MOD_X: 2147483647 % 2147483645 = 2", 32848c2ecf20Sopenharmony_ci .u.insns_int = { 32858c2ecf20Sopenharmony_ci BPF_LD_IMM64(R0, 2147483647), 32868c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R1, 2147483645), 32878c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_MOD, R0, R1), 32888c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 32898c2ecf20Sopenharmony_ci }, 32908c2ecf20Sopenharmony_ci INTERNAL, 32918c2ecf20Sopenharmony_ci { }, 32928c2ecf20Sopenharmony_ci { { 0, 2 } }, 32938c2ecf20Sopenharmony_ci }, 32948c2ecf20Sopenharmony_ci /* BPF_ALU | BPF_MOD | BPF_K */ 32958c2ecf20Sopenharmony_ci { 32968c2ecf20Sopenharmony_ci "ALU_MOD_K: 3 % 2 = 1", 32978c2ecf20Sopenharmony_ci .u.insns_int = { 32988c2ecf20Sopenharmony_ci BPF_LD_IMM64(R0, 3), 32998c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOD, R0, 2), 33008c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 33018c2ecf20Sopenharmony_ci }, 33028c2ecf20Sopenharmony_ci INTERNAL, 33038c2ecf20Sopenharmony_ci { }, 33048c2ecf20Sopenharmony_ci { { 0, 1 } }, 33058c2ecf20Sopenharmony_ci }, 33068c2ecf20Sopenharmony_ci { 33078c2ecf20Sopenharmony_ci "ALU_MOD_K: 3 % 1 = 0", 33088c2ecf20Sopenharmony_ci .u.insns_int = { 33098c2ecf20Sopenharmony_ci BPF_LD_IMM64(R0, 3), 33108c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOD, R0, 1), 33118c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 33128c2ecf20Sopenharmony_ci }, 33138c2ecf20Sopenharmony_ci INTERNAL, 33148c2ecf20Sopenharmony_ci { }, 33158c2ecf20Sopenharmony_ci { { 0, 0 } }, 33168c2ecf20Sopenharmony_ci }, 33178c2ecf20Sopenharmony_ci { 33188c2ecf20Sopenharmony_ci "ALU_MOD_K: 4294967295 % 4294967293 = 2", 33198c2ecf20Sopenharmony_ci .u.insns_int = { 33208c2ecf20Sopenharmony_ci BPF_LD_IMM64(R0, 4294967295U), 33218c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOD, R0, 4294967293U), 33228c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 33238c2ecf20Sopenharmony_ci }, 33248c2ecf20Sopenharmony_ci INTERNAL, 33258c2ecf20Sopenharmony_ci { }, 33268c2ecf20Sopenharmony_ci { { 0, 2 } }, 33278c2ecf20Sopenharmony_ci }, 33288c2ecf20Sopenharmony_ci { 33298c2ecf20Sopenharmony_ci "ALU64_MOD_K: 3 % 2 = 1", 33308c2ecf20Sopenharmony_ci .u.insns_int = { 33318c2ecf20Sopenharmony_ci BPF_LD_IMM64(R0, 3), 33328c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_MOD, R0, 2), 33338c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 33348c2ecf20Sopenharmony_ci }, 33358c2ecf20Sopenharmony_ci INTERNAL, 33368c2ecf20Sopenharmony_ci { }, 33378c2ecf20Sopenharmony_ci { { 0, 1 } }, 33388c2ecf20Sopenharmony_ci }, 33398c2ecf20Sopenharmony_ci { 33408c2ecf20Sopenharmony_ci "ALU64_MOD_K: 3 % 1 = 0", 33418c2ecf20Sopenharmony_ci .u.insns_int = { 33428c2ecf20Sopenharmony_ci BPF_LD_IMM64(R0, 3), 33438c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_MOD, R0, 1), 33448c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 33458c2ecf20Sopenharmony_ci }, 33468c2ecf20Sopenharmony_ci INTERNAL, 33478c2ecf20Sopenharmony_ci { }, 33488c2ecf20Sopenharmony_ci { { 0, 0 } }, 33498c2ecf20Sopenharmony_ci }, 33508c2ecf20Sopenharmony_ci { 33518c2ecf20Sopenharmony_ci "ALU64_MOD_K: 2147483647 % 2147483645 = 2", 33528c2ecf20Sopenharmony_ci .u.insns_int = { 33538c2ecf20Sopenharmony_ci BPF_LD_IMM64(R0, 2147483647), 33548c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_MOD, R0, 2147483645), 33558c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 33568c2ecf20Sopenharmony_ci }, 33578c2ecf20Sopenharmony_ci INTERNAL, 33588c2ecf20Sopenharmony_ci { }, 33598c2ecf20Sopenharmony_ci { { 0, 2 } }, 33608c2ecf20Sopenharmony_ci }, 33618c2ecf20Sopenharmony_ci /* BPF_ALU | BPF_AND | BPF_X */ 33628c2ecf20Sopenharmony_ci { 33638c2ecf20Sopenharmony_ci "ALU_AND_X: 3 & 2 = 2", 33648c2ecf20Sopenharmony_ci .u.insns_int = { 33658c2ecf20Sopenharmony_ci BPF_LD_IMM64(R0, 3), 33668c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R1, 2), 33678c2ecf20Sopenharmony_ci BPF_ALU32_REG(BPF_AND, R0, R1), 33688c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 33698c2ecf20Sopenharmony_ci }, 33708c2ecf20Sopenharmony_ci INTERNAL, 33718c2ecf20Sopenharmony_ci { }, 33728c2ecf20Sopenharmony_ci { { 0, 2 } }, 33738c2ecf20Sopenharmony_ci }, 33748c2ecf20Sopenharmony_ci { 33758c2ecf20Sopenharmony_ci "ALU_AND_X: 0xffffffff & 0xffffffff = 0xffffffff", 33768c2ecf20Sopenharmony_ci .u.insns_int = { 33778c2ecf20Sopenharmony_ci BPF_LD_IMM64(R0, 0xffffffff), 33788c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R1, 0xffffffff), 33798c2ecf20Sopenharmony_ci BPF_ALU32_REG(BPF_AND, R0, R1), 33808c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 33818c2ecf20Sopenharmony_ci }, 33828c2ecf20Sopenharmony_ci INTERNAL, 33838c2ecf20Sopenharmony_ci { }, 33848c2ecf20Sopenharmony_ci { { 0, 0xffffffff } }, 33858c2ecf20Sopenharmony_ci }, 33868c2ecf20Sopenharmony_ci { 33878c2ecf20Sopenharmony_ci "ALU64_AND_X: 3 & 2 = 2", 33888c2ecf20Sopenharmony_ci .u.insns_int = { 33898c2ecf20Sopenharmony_ci BPF_LD_IMM64(R0, 3), 33908c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R1, 2), 33918c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_AND, R0, R1), 33928c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 33938c2ecf20Sopenharmony_ci }, 33948c2ecf20Sopenharmony_ci INTERNAL, 33958c2ecf20Sopenharmony_ci { }, 33968c2ecf20Sopenharmony_ci { { 0, 2 } }, 33978c2ecf20Sopenharmony_ci }, 33988c2ecf20Sopenharmony_ci { 33998c2ecf20Sopenharmony_ci "ALU64_AND_X: 0xffffffff & 0xffffffff = 0xffffffff", 34008c2ecf20Sopenharmony_ci .u.insns_int = { 34018c2ecf20Sopenharmony_ci BPF_LD_IMM64(R0, 0xffffffff), 34028c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R1, 0xffffffff), 34038c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_AND, R0, R1), 34048c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 34058c2ecf20Sopenharmony_ci }, 34068c2ecf20Sopenharmony_ci INTERNAL, 34078c2ecf20Sopenharmony_ci { }, 34088c2ecf20Sopenharmony_ci { { 0, 0xffffffff } }, 34098c2ecf20Sopenharmony_ci }, 34108c2ecf20Sopenharmony_ci /* BPF_ALU | BPF_AND | BPF_K */ 34118c2ecf20Sopenharmony_ci { 34128c2ecf20Sopenharmony_ci "ALU_AND_K: 3 & 2 = 2", 34138c2ecf20Sopenharmony_ci .u.insns_int = { 34148c2ecf20Sopenharmony_ci BPF_LD_IMM64(R0, 3), 34158c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_AND, R0, 2), 34168c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 34178c2ecf20Sopenharmony_ci }, 34188c2ecf20Sopenharmony_ci INTERNAL, 34198c2ecf20Sopenharmony_ci { }, 34208c2ecf20Sopenharmony_ci { { 0, 2 } }, 34218c2ecf20Sopenharmony_ci }, 34228c2ecf20Sopenharmony_ci { 34238c2ecf20Sopenharmony_ci "ALU_AND_K: 0xffffffff & 0xffffffff = 0xffffffff", 34248c2ecf20Sopenharmony_ci .u.insns_int = { 34258c2ecf20Sopenharmony_ci BPF_LD_IMM64(R0, 0xffffffff), 34268c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_AND, R0, 0xffffffff), 34278c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 34288c2ecf20Sopenharmony_ci }, 34298c2ecf20Sopenharmony_ci INTERNAL, 34308c2ecf20Sopenharmony_ci { }, 34318c2ecf20Sopenharmony_ci { { 0, 0xffffffff } }, 34328c2ecf20Sopenharmony_ci }, 34338c2ecf20Sopenharmony_ci { 34348c2ecf20Sopenharmony_ci "ALU64_AND_K: 3 & 2 = 2", 34358c2ecf20Sopenharmony_ci .u.insns_int = { 34368c2ecf20Sopenharmony_ci BPF_LD_IMM64(R0, 3), 34378c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_AND, R0, 2), 34388c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 34398c2ecf20Sopenharmony_ci }, 34408c2ecf20Sopenharmony_ci INTERNAL, 34418c2ecf20Sopenharmony_ci { }, 34428c2ecf20Sopenharmony_ci { { 0, 2 } }, 34438c2ecf20Sopenharmony_ci }, 34448c2ecf20Sopenharmony_ci { 34458c2ecf20Sopenharmony_ci "ALU64_AND_K: 0xffffffff & 0xffffffff = 0xffffffff", 34468c2ecf20Sopenharmony_ci .u.insns_int = { 34478c2ecf20Sopenharmony_ci BPF_LD_IMM64(R0, 0xffffffff), 34488c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_AND, R0, 0xffffffff), 34498c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 34508c2ecf20Sopenharmony_ci }, 34518c2ecf20Sopenharmony_ci INTERNAL, 34528c2ecf20Sopenharmony_ci { }, 34538c2ecf20Sopenharmony_ci { { 0, 0xffffffff } }, 34548c2ecf20Sopenharmony_ci }, 34558c2ecf20Sopenharmony_ci { 34568c2ecf20Sopenharmony_ci "ALU64_AND_K: 0x0000ffffffff0000 & 0x0 = 0x0000ffff00000000", 34578c2ecf20Sopenharmony_ci .u.insns_int = { 34588c2ecf20Sopenharmony_ci BPF_LD_IMM64(R2, 0x0000ffffffff0000LL), 34598c2ecf20Sopenharmony_ci BPF_LD_IMM64(R3, 0x0000000000000000LL), 34608c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_AND, R2, 0x0), 34618c2ecf20Sopenharmony_ci BPF_JMP_REG(BPF_JEQ, R2, R3, 2), 34628c2ecf20Sopenharmony_ci BPF_MOV32_IMM(R0, 2), 34638c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 34648c2ecf20Sopenharmony_ci BPF_MOV32_IMM(R0, 1), 34658c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 34668c2ecf20Sopenharmony_ci }, 34678c2ecf20Sopenharmony_ci INTERNAL, 34688c2ecf20Sopenharmony_ci { }, 34698c2ecf20Sopenharmony_ci { { 0, 0x1 } }, 34708c2ecf20Sopenharmony_ci }, 34718c2ecf20Sopenharmony_ci { 34728c2ecf20Sopenharmony_ci "ALU64_AND_K: 0x0000ffffffff0000 & -1 = 0x0000ffffffffffff", 34738c2ecf20Sopenharmony_ci .u.insns_int = { 34748c2ecf20Sopenharmony_ci BPF_LD_IMM64(R2, 0x0000ffffffff0000LL), 34758c2ecf20Sopenharmony_ci BPF_LD_IMM64(R3, 0x0000ffffffff0000LL), 34768c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_AND, R2, 0xffffffff), 34778c2ecf20Sopenharmony_ci BPF_JMP_REG(BPF_JEQ, R2, R3, 2), 34788c2ecf20Sopenharmony_ci BPF_MOV32_IMM(R0, 2), 34798c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 34808c2ecf20Sopenharmony_ci BPF_MOV32_IMM(R0, 1), 34818c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 34828c2ecf20Sopenharmony_ci }, 34838c2ecf20Sopenharmony_ci INTERNAL, 34848c2ecf20Sopenharmony_ci { }, 34858c2ecf20Sopenharmony_ci { { 0, 0x1 } }, 34868c2ecf20Sopenharmony_ci }, 34878c2ecf20Sopenharmony_ci { 34888c2ecf20Sopenharmony_ci "ALU64_AND_K: 0xffffffffffffffff & -1 = 0xffffffffffffffff", 34898c2ecf20Sopenharmony_ci .u.insns_int = { 34908c2ecf20Sopenharmony_ci BPF_LD_IMM64(R2, 0xffffffffffffffffLL), 34918c2ecf20Sopenharmony_ci BPF_LD_IMM64(R3, 0xffffffffffffffffLL), 34928c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_AND, R2, 0xffffffff), 34938c2ecf20Sopenharmony_ci BPF_JMP_REG(BPF_JEQ, R2, R3, 2), 34948c2ecf20Sopenharmony_ci BPF_MOV32_IMM(R0, 2), 34958c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 34968c2ecf20Sopenharmony_ci BPF_MOV32_IMM(R0, 1), 34978c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 34988c2ecf20Sopenharmony_ci }, 34998c2ecf20Sopenharmony_ci INTERNAL, 35008c2ecf20Sopenharmony_ci { }, 35018c2ecf20Sopenharmony_ci { { 0, 0x1 } }, 35028c2ecf20Sopenharmony_ci }, 35038c2ecf20Sopenharmony_ci /* BPF_ALU | BPF_OR | BPF_X */ 35048c2ecf20Sopenharmony_ci { 35058c2ecf20Sopenharmony_ci "ALU_OR_X: 1 | 2 = 3", 35068c2ecf20Sopenharmony_ci .u.insns_int = { 35078c2ecf20Sopenharmony_ci BPF_LD_IMM64(R0, 1), 35088c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R1, 2), 35098c2ecf20Sopenharmony_ci BPF_ALU32_REG(BPF_OR, R0, R1), 35108c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 35118c2ecf20Sopenharmony_ci }, 35128c2ecf20Sopenharmony_ci INTERNAL, 35138c2ecf20Sopenharmony_ci { }, 35148c2ecf20Sopenharmony_ci { { 0, 3 } }, 35158c2ecf20Sopenharmony_ci }, 35168c2ecf20Sopenharmony_ci { 35178c2ecf20Sopenharmony_ci "ALU_OR_X: 0x0 | 0xffffffff = 0xffffffff", 35188c2ecf20Sopenharmony_ci .u.insns_int = { 35198c2ecf20Sopenharmony_ci BPF_LD_IMM64(R0, 0), 35208c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R1, 0xffffffff), 35218c2ecf20Sopenharmony_ci BPF_ALU32_REG(BPF_OR, R0, R1), 35228c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 35238c2ecf20Sopenharmony_ci }, 35248c2ecf20Sopenharmony_ci INTERNAL, 35258c2ecf20Sopenharmony_ci { }, 35268c2ecf20Sopenharmony_ci { { 0, 0xffffffff } }, 35278c2ecf20Sopenharmony_ci }, 35288c2ecf20Sopenharmony_ci { 35298c2ecf20Sopenharmony_ci "ALU64_OR_X: 1 | 2 = 3", 35308c2ecf20Sopenharmony_ci .u.insns_int = { 35318c2ecf20Sopenharmony_ci BPF_LD_IMM64(R0, 1), 35328c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R1, 2), 35338c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_OR, R0, R1), 35348c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 35358c2ecf20Sopenharmony_ci }, 35368c2ecf20Sopenharmony_ci INTERNAL, 35378c2ecf20Sopenharmony_ci { }, 35388c2ecf20Sopenharmony_ci { { 0, 3 } }, 35398c2ecf20Sopenharmony_ci }, 35408c2ecf20Sopenharmony_ci { 35418c2ecf20Sopenharmony_ci "ALU64_OR_X: 0 | 0xffffffff = 0xffffffff", 35428c2ecf20Sopenharmony_ci .u.insns_int = { 35438c2ecf20Sopenharmony_ci BPF_LD_IMM64(R0, 0), 35448c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R1, 0xffffffff), 35458c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_OR, R0, R1), 35468c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 35478c2ecf20Sopenharmony_ci }, 35488c2ecf20Sopenharmony_ci INTERNAL, 35498c2ecf20Sopenharmony_ci { }, 35508c2ecf20Sopenharmony_ci { { 0, 0xffffffff } }, 35518c2ecf20Sopenharmony_ci }, 35528c2ecf20Sopenharmony_ci /* BPF_ALU | BPF_OR | BPF_K */ 35538c2ecf20Sopenharmony_ci { 35548c2ecf20Sopenharmony_ci "ALU_OR_K: 1 | 2 = 3", 35558c2ecf20Sopenharmony_ci .u.insns_int = { 35568c2ecf20Sopenharmony_ci BPF_LD_IMM64(R0, 1), 35578c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_OR, R0, 2), 35588c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 35598c2ecf20Sopenharmony_ci }, 35608c2ecf20Sopenharmony_ci INTERNAL, 35618c2ecf20Sopenharmony_ci { }, 35628c2ecf20Sopenharmony_ci { { 0, 3 } }, 35638c2ecf20Sopenharmony_ci }, 35648c2ecf20Sopenharmony_ci { 35658c2ecf20Sopenharmony_ci "ALU_OR_K: 0 & 0xffffffff = 0xffffffff", 35668c2ecf20Sopenharmony_ci .u.insns_int = { 35678c2ecf20Sopenharmony_ci BPF_LD_IMM64(R0, 0), 35688c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_OR, R0, 0xffffffff), 35698c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 35708c2ecf20Sopenharmony_ci }, 35718c2ecf20Sopenharmony_ci INTERNAL, 35728c2ecf20Sopenharmony_ci { }, 35738c2ecf20Sopenharmony_ci { { 0, 0xffffffff } }, 35748c2ecf20Sopenharmony_ci }, 35758c2ecf20Sopenharmony_ci { 35768c2ecf20Sopenharmony_ci "ALU64_OR_K: 1 | 2 = 3", 35778c2ecf20Sopenharmony_ci .u.insns_int = { 35788c2ecf20Sopenharmony_ci BPF_LD_IMM64(R0, 1), 35798c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_OR, R0, 2), 35808c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 35818c2ecf20Sopenharmony_ci }, 35828c2ecf20Sopenharmony_ci INTERNAL, 35838c2ecf20Sopenharmony_ci { }, 35848c2ecf20Sopenharmony_ci { { 0, 3 } }, 35858c2ecf20Sopenharmony_ci }, 35868c2ecf20Sopenharmony_ci { 35878c2ecf20Sopenharmony_ci "ALU64_OR_K: 0 & 0xffffffff = 0xffffffff", 35888c2ecf20Sopenharmony_ci .u.insns_int = { 35898c2ecf20Sopenharmony_ci BPF_LD_IMM64(R0, 0), 35908c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_OR, R0, 0xffffffff), 35918c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 35928c2ecf20Sopenharmony_ci }, 35938c2ecf20Sopenharmony_ci INTERNAL, 35948c2ecf20Sopenharmony_ci { }, 35958c2ecf20Sopenharmony_ci { { 0, 0xffffffff } }, 35968c2ecf20Sopenharmony_ci }, 35978c2ecf20Sopenharmony_ci { 35988c2ecf20Sopenharmony_ci "ALU64_OR_K: 0x0000ffffffff0000 | 0x0 = 0x0000ffff00000000", 35998c2ecf20Sopenharmony_ci .u.insns_int = { 36008c2ecf20Sopenharmony_ci BPF_LD_IMM64(R2, 0x0000ffffffff0000LL), 36018c2ecf20Sopenharmony_ci BPF_LD_IMM64(R3, 0x0000ffffffff0000LL), 36028c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_OR, R2, 0x0), 36038c2ecf20Sopenharmony_ci BPF_JMP_REG(BPF_JEQ, R2, R3, 2), 36048c2ecf20Sopenharmony_ci BPF_MOV32_IMM(R0, 2), 36058c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 36068c2ecf20Sopenharmony_ci BPF_MOV32_IMM(R0, 1), 36078c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 36088c2ecf20Sopenharmony_ci }, 36098c2ecf20Sopenharmony_ci INTERNAL, 36108c2ecf20Sopenharmony_ci { }, 36118c2ecf20Sopenharmony_ci { { 0, 0x1 } }, 36128c2ecf20Sopenharmony_ci }, 36138c2ecf20Sopenharmony_ci { 36148c2ecf20Sopenharmony_ci "ALU64_OR_K: 0x0000ffffffff0000 | -1 = 0xffffffffffffffff", 36158c2ecf20Sopenharmony_ci .u.insns_int = { 36168c2ecf20Sopenharmony_ci BPF_LD_IMM64(R2, 0x0000ffffffff0000LL), 36178c2ecf20Sopenharmony_ci BPF_LD_IMM64(R3, 0xffffffffffffffffLL), 36188c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_OR, R2, 0xffffffff), 36198c2ecf20Sopenharmony_ci BPF_JMP_REG(BPF_JEQ, R2, R3, 2), 36208c2ecf20Sopenharmony_ci BPF_MOV32_IMM(R0, 2), 36218c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 36228c2ecf20Sopenharmony_ci BPF_MOV32_IMM(R0, 1), 36238c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 36248c2ecf20Sopenharmony_ci }, 36258c2ecf20Sopenharmony_ci INTERNAL, 36268c2ecf20Sopenharmony_ci { }, 36278c2ecf20Sopenharmony_ci { { 0, 0x1 } }, 36288c2ecf20Sopenharmony_ci }, 36298c2ecf20Sopenharmony_ci { 36308c2ecf20Sopenharmony_ci "ALU64_OR_K: 0x000000000000000 | -1 = 0xffffffffffffffff", 36318c2ecf20Sopenharmony_ci .u.insns_int = { 36328c2ecf20Sopenharmony_ci BPF_LD_IMM64(R2, 0x0000000000000000LL), 36338c2ecf20Sopenharmony_ci BPF_LD_IMM64(R3, 0xffffffffffffffffLL), 36348c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_OR, R2, 0xffffffff), 36358c2ecf20Sopenharmony_ci BPF_JMP_REG(BPF_JEQ, R2, R3, 2), 36368c2ecf20Sopenharmony_ci BPF_MOV32_IMM(R0, 2), 36378c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 36388c2ecf20Sopenharmony_ci BPF_MOV32_IMM(R0, 1), 36398c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 36408c2ecf20Sopenharmony_ci }, 36418c2ecf20Sopenharmony_ci INTERNAL, 36428c2ecf20Sopenharmony_ci { }, 36438c2ecf20Sopenharmony_ci { { 0, 0x1 } }, 36448c2ecf20Sopenharmony_ci }, 36458c2ecf20Sopenharmony_ci /* BPF_ALU | BPF_XOR | BPF_X */ 36468c2ecf20Sopenharmony_ci { 36478c2ecf20Sopenharmony_ci "ALU_XOR_X: 5 ^ 6 = 3", 36488c2ecf20Sopenharmony_ci .u.insns_int = { 36498c2ecf20Sopenharmony_ci BPF_LD_IMM64(R0, 5), 36508c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R1, 6), 36518c2ecf20Sopenharmony_ci BPF_ALU32_REG(BPF_XOR, R0, R1), 36528c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 36538c2ecf20Sopenharmony_ci }, 36548c2ecf20Sopenharmony_ci INTERNAL, 36558c2ecf20Sopenharmony_ci { }, 36568c2ecf20Sopenharmony_ci { { 0, 3 } }, 36578c2ecf20Sopenharmony_ci }, 36588c2ecf20Sopenharmony_ci { 36598c2ecf20Sopenharmony_ci "ALU_XOR_X: 0x1 ^ 0xffffffff = 0xfffffffe", 36608c2ecf20Sopenharmony_ci .u.insns_int = { 36618c2ecf20Sopenharmony_ci BPF_LD_IMM64(R0, 1), 36628c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R1, 0xffffffff), 36638c2ecf20Sopenharmony_ci BPF_ALU32_REG(BPF_XOR, R0, R1), 36648c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 36658c2ecf20Sopenharmony_ci }, 36668c2ecf20Sopenharmony_ci INTERNAL, 36678c2ecf20Sopenharmony_ci { }, 36688c2ecf20Sopenharmony_ci { { 0, 0xfffffffe } }, 36698c2ecf20Sopenharmony_ci }, 36708c2ecf20Sopenharmony_ci { 36718c2ecf20Sopenharmony_ci "ALU64_XOR_X: 5 ^ 6 = 3", 36728c2ecf20Sopenharmony_ci .u.insns_int = { 36738c2ecf20Sopenharmony_ci BPF_LD_IMM64(R0, 5), 36748c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R1, 6), 36758c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_XOR, R0, R1), 36768c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 36778c2ecf20Sopenharmony_ci }, 36788c2ecf20Sopenharmony_ci INTERNAL, 36798c2ecf20Sopenharmony_ci { }, 36808c2ecf20Sopenharmony_ci { { 0, 3 } }, 36818c2ecf20Sopenharmony_ci }, 36828c2ecf20Sopenharmony_ci { 36838c2ecf20Sopenharmony_ci "ALU64_XOR_X: 1 ^ 0xffffffff = 0xfffffffe", 36848c2ecf20Sopenharmony_ci .u.insns_int = { 36858c2ecf20Sopenharmony_ci BPF_LD_IMM64(R0, 1), 36868c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R1, 0xffffffff), 36878c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_XOR, R0, R1), 36888c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 36898c2ecf20Sopenharmony_ci }, 36908c2ecf20Sopenharmony_ci INTERNAL, 36918c2ecf20Sopenharmony_ci { }, 36928c2ecf20Sopenharmony_ci { { 0, 0xfffffffe } }, 36938c2ecf20Sopenharmony_ci }, 36948c2ecf20Sopenharmony_ci /* BPF_ALU | BPF_XOR | BPF_K */ 36958c2ecf20Sopenharmony_ci { 36968c2ecf20Sopenharmony_ci "ALU_XOR_K: 5 ^ 6 = 3", 36978c2ecf20Sopenharmony_ci .u.insns_int = { 36988c2ecf20Sopenharmony_ci BPF_LD_IMM64(R0, 5), 36998c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_XOR, R0, 6), 37008c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 37018c2ecf20Sopenharmony_ci }, 37028c2ecf20Sopenharmony_ci INTERNAL, 37038c2ecf20Sopenharmony_ci { }, 37048c2ecf20Sopenharmony_ci { { 0, 3 } }, 37058c2ecf20Sopenharmony_ci }, 37068c2ecf20Sopenharmony_ci { 37078c2ecf20Sopenharmony_ci "ALU_XOR_K: 1 ^ 0xffffffff = 0xfffffffe", 37088c2ecf20Sopenharmony_ci .u.insns_int = { 37098c2ecf20Sopenharmony_ci BPF_LD_IMM64(R0, 1), 37108c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_XOR, R0, 0xffffffff), 37118c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 37128c2ecf20Sopenharmony_ci }, 37138c2ecf20Sopenharmony_ci INTERNAL, 37148c2ecf20Sopenharmony_ci { }, 37158c2ecf20Sopenharmony_ci { { 0, 0xfffffffe } }, 37168c2ecf20Sopenharmony_ci }, 37178c2ecf20Sopenharmony_ci { 37188c2ecf20Sopenharmony_ci "ALU64_XOR_K: 5 ^ 6 = 3", 37198c2ecf20Sopenharmony_ci .u.insns_int = { 37208c2ecf20Sopenharmony_ci BPF_LD_IMM64(R0, 5), 37218c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_XOR, R0, 6), 37228c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 37238c2ecf20Sopenharmony_ci }, 37248c2ecf20Sopenharmony_ci INTERNAL, 37258c2ecf20Sopenharmony_ci { }, 37268c2ecf20Sopenharmony_ci { { 0, 3 } }, 37278c2ecf20Sopenharmony_ci }, 37288c2ecf20Sopenharmony_ci { 37298c2ecf20Sopenharmony_ci "ALU64_XOR_K: 1 & 0xffffffff = 0xfffffffe", 37308c2ecf20Sopenharmony_ci .u.insns_int = { 37318c2ecf20Sopenharmony_ci BPF_LD_IMM64(R0, 1), 37328c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_XOR, R0, 0xffffffff), 37338c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 37348c2ecf20Sopenharmony_ci }, 37358c2ecf20Sopenharmony_ci INTERNAL, 37368c2ecf20Sopenharmony_ci { }, 37378c2ecf20Sopenharmony_ci { { 0, 0xfffffffe } }, 37388c2ecf20Sopenharmony_ci }, 37398c2ecf20Sopenharmony_ci { 37408c2ecf20Sopenharmony_ci "ALU64_XOR_K: 0x0000ffffffff0000 ^ 0x0 = 0x0000ffffffff0000", 37418c2ecf20Sopenharmony_ci .u.insns_int = { 37428c2ecf20Sopenharmony_ci BPF_LD_IMM64(R2, 0x0000ffffffff0000LL), 37438c2ecf20Sopenharmony_ci BPF_LD_IMM64(R3, 0x0000ffffffff0000LL), 37448c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_XOR, R2, 0x0), 37458c2ecf20Sopenharmony_ci BPF_JMP_REG(BPF_JEQ, R2, R3, 2), 37468c2ecf20Sopenharmony_ci BPF_MOV32_IMM(R0, 2), 37478c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 37488c2ecf20Sopenharmony_ci BPF_MOV32_IMM(R0, 1), 37498c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 37508c2ecf20Sopenharmony_ci }, 37518c2ecf20Sopenharmony_ci INTERNAL, 37528c2ecf20Sopenharmony_ci { }, 37538c2ecf20Sopenharmony_ci { { 0, 0x1 } }, 37548c2ecf20Sopenharmony_ci }, 37558c2ecf20Sopenharmony_ci { 37568c2ecf20Sopenharmony_ci "ALU64_XOR_K: 0x0000ffffffff0000 ^ -1 = 0xffff00000000ffff", 37578c2ecf20Sopenharmony_ci .u.insns_int = { 37588c2ecf20Sopenharmony_ci BPF_LD_IMM64(R2, 0x0000ffffffff0000LL), 37598c2ecf20Sopenharmony_ci BPF_LD_IMM64(R3, 0xffff00000000ffffLL), 37608c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_XOR, R2, 0xffffffff), 37618c2ecf20Sopenharmony_ci BPF_JMP_REG(BPF_JEQ, R2, R3, 2), 37628c2ecf20Sopenharmony_ci BPF_MOV32_IMM(R0, 2), 37638c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 37648c2ecf20Sopenharmony_ci BPF_MOV32_IMM(R0, 1), 37658c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 37668c2ecf20Sopenharmony_ci }, 37678c2ecf20Sopenharmony_ci INTERNAL, 37688c2ecf20Sopenharmony_ci { }, 37698c2ecf20Sopenharmony_ci { { 0, 0x1 } }, 37708c2ecf20Sopenharmony_ci }, 37718c2ecf20Sopenharmony_ci { 37728c2ecf20Sopenharmony_ci "ALU64_XOR_K: 0x000000000000000 ^ -1 = 0xffffffffffffffff", 37738c2ecf20Sopenharmony_ci .u.insns_int = { 37748c2ecf20Sopenharmony_ci BPF_LD_IMM64(R2, 0x0000000000000000LL), 37758c2ecf20Sopenharmony_ci BPF_LD_IMM64(R3, 0xffffffffffffffffLL), 37768c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_XOR, R2, 0xffffffff), 37778c2ecf20Sopenharmony_ci BPF_JMP_REG(BPF_JEQ, R2, R3, 2), 37788c2ecf20Sopenharmony_ci BPF_MOV32_IMM(R0, 2), 37798c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 37808c2ecf20Sopenharmony_ci BPF_MOV32_IMM(R0, 1), 37818c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 37828c2ecf20Sopenharmony_ci }, 37838c2ecf20Sopenharmony_ci INTERNAL, 37848c2ecf20Sopenharmony_ci { }, 37858c2ecf20Sopenharmony_ci { { 0, 0x1 } }, 37868c2ecf20Sopenharmony_ci }, 37878c2ecf20Sopenharmony_ci /* BPF_ALU | BPF_LSH | BPF_X */ 37888c2ecf20Sopenharmony_ci { 37898c2ecf20Sopenharmony_ci "ALU_LSH_X: 1 << 1 = 2", 37908c2ecf20Sopenharmony_ci .u.insns_int = { 37918c2ecf20Sopenharmony_ci BPF_LD_IMM64(R0, 1), 37928c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R1, 1), 37938c2ecf20Sopenharmony_ci BPF_ALU32_REG(BPF_LSH, R0, R1), 37948c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 37958c2ecf20Sopenharmony_ci }, 37968c2ecf20Sopenharmony_ci INTERNAL, 37978c2ecf20Sopenharmony_ci { }, 37988c2ecf20Sopenharmony_ci { { 0, 2 } }, 37998c2ecf20Sopenharmony_ci }, 38008c2ecf20Sopenharmony_ci { 38018c2ecf20Sopenharmony_ci "ALU_LSH_X: 1 << 31 = 0x80000000", 38028c2ecf20Sopenharmony_ci .u.insns_int = { 38038c2ecf20Sopenharmony_ci BPF_LD_IMM64(R0, 1), 38048c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R1, 31), 38058c2ecf20Sopenharmony_ci BPF_ALU32_REG(BPF_LSH, R0, R1), 38068c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 38078c2ecf20Sopenharmony_ci }, 38088c2ecf20Sopenharmony_ci INTERNAL, 38098c2ecf20Sopenharmony_ci { }, 38108c2ecf20Sopenharmony_ci { { 0, 0x80000000 } }, 38118c2ecf20Sopenharmony_ci }, 38128c2ecf20Sopenharmony_ci { 38138c2ecf20Sopenharmony_ci "ALU64_LSH_X: 1 << 1 = 2", 38148c2ecf20Sopenharmony_ci .u.insns_int = { 38158c2ecf20Sopenharmony_ci BPF_LD_IMM64(R0, 1), 38168c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R1, 1), 38178c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_LSH, R0, R1), 38188c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 38198c2ecf20Sopenharmony_ci }, 38208c2ecf20Sopenharmony_ci INTERNAL, 38218c2ecf20Sopenharmony_ci { }, 38228c2ecf20Sopenharmony_ci { { 0, 2 } }, 38238c2ecf20Sopenharmony_ci }, 38248c2ecf20Sopenharmony_ci { 38258c2ecf20Sopenharmony_ci "ALU64_LSH_X: 1 << 31 = 0x80000000", 38268c2ecf20Sopenharmony_ci .u.insns_int = { 38278c2ecf20Sopenharmony_ci BPF_LD_IMM64(R0, 1), 38288c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R1, 31), 38298c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_LSH, R0, R1), 38308c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 38318c2ecf20Sopenharmony_ci }, 38328c2ecf20Sopenharmony_ci INTERNAL, 38338c2ecf20Sopenharmony_ci { }, 38348c2ecf20Sopenharmony_ci { { 0, 0x80000000 } }, 38358c2ecf20Sopenharmony_ci }, 38368c2ecf20Sopenharmony_ci /* BPF_ALU | BPF_LSH | BPF_K */ 38378c2ecf20Sopenharmony_ci { 38388c2ecf20Sopenharmony_ci "ALU_LSH_K: 1 << 1 = 2", 38398c2ecf20Sopenharmony_ci .u.insns_int = { 38408c2ecf20Sopenharmony_ci BPF_LD_IMM64(R0, 1), 38418c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_LSH, R0, 1), 38428c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 38438c2ecf20Sopenharmony_ci }, 38448c2ecf20Sopenharmony_ci INTERNAL, 38458c2ecf20Sopenharmony_ci { }, 38468c2ecf20Sopenharmony_ci { { 0, 2 } }, 38478c2ecf20Sopenharmony_ci }, 38488c2ecf20Sopenharmony_ci { 38498c2ecf20Sopenharmony_ci "ALU_LSH_K: 1 << 31 = 0x80000000", 38508c2ecf20Sopenharmony_ci .u.insns_int = { 38518c2ecf20Sopenharmony_ci BPF_LD_IMM64(R0, 1), 38528c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_LSH, R0, 31), 38538c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 38548c2ecf20Sopenharmony_ci }, 38558c2ecf20Sopenharmony_ci INTERNAL, 38568c2ecf20Sopenharmony_ci { }, 38578c2ecf20Sopenharmony_ci { { 0, 0x80000000 } }, 38588c2ecf20Sopenharmony_ci }, 38598c2ecf20Sopenharmony_ci { 38608c2ecf20Sopenharmony_ci "ALU64_LSH_K: 1 << 1 = 2", 38618c2ecf20Sopenharmony_ci .u.insns_int = { 38628c2ecf20Sopenharmony_ci BPF_LD_IMM64(R0, 1), 38638c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_LSH, R0, 1), 38648c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 38658c2ecf20Sopenharmony_ci }, 38668c2ecf20Sopenharmony_ci INTERNAL, 38678c2ecf20Sopenharmony_ci { }, 38688c2ecf20Sopenharmony_ci { { 0, 2 } }, 38698c2ecf20Sopenharmony_ci }, 38708c2ecf20Sopenharmony_ci { 38718c2ecf20Sopenharmony_ci "ALU64_LSH_K: 1 << 31 = 0x80000000", 38728c2ecf20Sopenharmony_ci .u.insns_int = { 38738c2ecf20Sopenharmony_ci BPF_LD_IMM64(R0, 1), 38748c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_LSH, R0, 31), 38758c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 38768c2ecf20Sopenharmony_ci }, 38778c2ecf20Sopenharmony_ci INTERNAL, 38788c2ecf20Sopenharmony_ci { }, 38798c2ecf20Sopenharmony_ci { { 0, 0x80000000 } }, 38808c2ecf20Sopenharmony_ci }, 38818c2ecf20Sopenharmony_ci /* BPF_ALU | BPF_RSH | BPF_X */ 38828c2ecf20Sopenharmony_ci { 38838c2ecf20Sopenharmony_ci "ALU_RSH_X: 2 >> 1 = 1", 38848c2ecf20Sopenharmony_ci .u.insns_int = { 38858c2ecf20Sopenharmony_ci BPF_LD_IMM64(R0, 2), 38868c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R1, 1), 38878c2ecf20Sopenharmony_ci BPF_ALU32_REG(BPF_RSH, R0, R1), 38888c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 38898c2ecf20Sopenharmony_ci }, 38908c2ecf20Sopenharmony_ci INTERNAL, 38918c2ecf20Sopenharmony_ci { }, 38928c2ecf20Sopenharmony_ci { { 0, 1 } }, 38938c2ecf20Sopenharmony_ci }, 38948c2ecf20Sopenharmony_ci { 38958c2ecf20Sopenharmony_ci "ALU_RSH_X: 0x80000000 >> 31 = 1", 38968c2ecf20Sopenharmony_ci .u.insns_int = { 38978c2ecf20Sopenharmony_ci BPF_LD_IMM64(R0, 0x80000000), 38988c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R1, 31), 38998c2ecf20Sopenharmony_ci BPF_ALU32_REG(BPF_RSH, R0, R1), 39008c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 39018c2ecf20Sopenharmony_ci }, 39028c2ecf20Sopenharmony_ci INTERNAL, 39038c2ecf20Sopenharmony_ci { }, 39048c2ecf20Sopenharmony_ci { { 0, 1 } }, 39058c2ecf20Sopenharmony_ci }, 39068c2ecf20Sopenharmony_ci { 39078c2ecf20Sopenharmony_ci "ALU64_RSH_X: 2 >> 1 = 1", 39088c2ecf20Sopenharmony_ci .u.insns_int = { 39098c2ecf20Sopenharmony_ci BPF_LD_IMM64(R0, 2), 39108c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R1, 1), 39118c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_RSH, R0, R1), 39128c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 39138c2ecf20Sopenharmony_ci }, 39148c2ecf20Sopenharmony_ci INTERNAL, 39158c2ecf20Sopenharmony_ci { }, 39168c2ecf20Sopenharmony_ci { { 0, 1 } }, 39178c2ecf20Sopenharmony_ci }, 39188c2ecf20Sopenharmony_ci { 39198c2ecf20Sopenharmony_ci "ALU64_RSH_X: 0x80000000 >> 31 = 1", 39208c2ecf20Sopenharmony_ci .u.insns_int = { 39218c2ecf20Sopenharmony_ci BPF_LD_IMM64(R0, 0x80000000), 39228c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R1, 31), 39238c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_RSH, R0, R1), 39248c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 39258c2ecf20Sopenharmony_ci }, 39268c2ecf20Sopenharmony_ci INTERNAL, 39278c2ecf20Sopenharmony_ci { }, 39288c2ecf20Sopenharmony_ci { { 0, 1 } }, 39298c2ecf20Sopenharmony_ci }, 39308c2ecf20Sopenharmony_ci /* BPF_ALU | BPF_RSH | BPF_K */ 39318c2ecf20Sopenharmony_ci { 39328c2ecf20Sopenharmony_ci "ALU_RSH_K: 2 >> 1 = 1", 39338c2ecf20Sopenharmony_ci .u.insns_int = { 39348c2ecf20Sopenharmony_ci BPF_LD_IMM64(R0, 2), 39358c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_RSH, R0, 1), 39368c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 39378c2ecf20Sopenharmony_ci }, 39388c2ecf20Sopenharmony_ci INTERNAL, 39398c2ecf20Sopenharmony_ci { }, 39408c2ecf20Sopenharmony_ci { { 0, 1 } }, 39418c2ecf20Sopenharmony_ci }, 39428c2ecf20Sopenharmony_ci { 39438c2ecf20Sopenharmony_ci "ALU_RSH_K: 0x80000000 >> 31 = 1", 39448c2ecf20Sopenharmony_ci .u.insns_int = { 39458c2ecf20Sopenharmony_ci BPF_LD_IMM64(R0, 0x80000000), 39468c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_RSH, R0, 31), 39478c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 39488c2ecf20Sopenharmony_ci }, 39498c2ecf20Sopenharmony_ci INTERNAL, 39508c2ecf20Sopenharmony_ci { }, 39518c2ecf20Sopenharmony_ci { { 0, 1 } }, 39528c2ecf20Sopenharmony_ci }, 39538c2ecf20Sopenharmony_ci { 39548c2ecf20Sopenharmony_ci "ALU64_RSH_K: 2 >> 1 = 1", 39558c2ecf20Sopenharmony_ci .u.insns_int = { 39568c2ecf20Sopenharmony_ci BPF_LD_IMM64(R0, 2), 39578c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_RSH, R0, 1), 39588c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 39598c2ecf20Sopenharmony_ci }, 39608c2ecf20Sopenharmony_ci INTERNAL, 39618c2ecf20Sopenharmony_ci { }, 39628c2ecf20Sopenharmony_ci { { 0, 1 } }, 39638c2ecf20Sopenharmony_ci }, 39648c2ecf20Sopenharmony_ci { 39658c2ecf20Sopenharmony_ci "ALU64_RSH_K: 0x80000000 >> 31 = 1", 39668c2ecf20Sopenharmony_ci .u.insns_int = { 39678c2ecf20Sopenharmony_ci BPF_LD_IMM64(R0, 0x80000000), 39688c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_RSH, R0, 31), 39698c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 39708c2ecf20Sopenharmony_ci }, 39718c2ecf20Sopenharmony_ci INTERNAL, 39728c2ecf20Sopenharmony_ci { }, 39738c2ecf20Sopenharmony_ci { { 0, 1 } }, 39748c2ecf20Sopenharmony_ci }, 39758c2ecf20Sopenharmony_ci /* BPF_ALU | BPF_ARSH | BPF_X */ 39768c2ecf20Sopenharmony_ci { 39778c2ecf20Sopenharmony_ci "ALU_ARSH_X: 0xff00ff0000000000 >> 40 = 0xffffffffffff00ff", 39788c2ecf20Sopenharmony_ci .u.insns_int = { 39798c2ecf20Sopenharmony_ci BPF_LD_IMM64(R0, 0xff00ff0000000000LL), 39808c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R1, 40), 39818c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_ARSH, R0, R1), 39828c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 39838c2ecf20Sopenharmony_ci }, 39848c2ecf20Sopenharmony_ci INTERNAL, 39858c2ecf20Sopenharmony_ci { }, 39868c2ecf20Sopenharmony_ci { { 0, 0xffff00ff } }, 39878c2ecf20Sopenharmony_ci }, 39888c2ecf20Sopenharmony_ci /* BPF_ALU | BPF_ARSH | BPF_K */ 39898c2ecf20Sopenharmony_ci { 39908c2ecf20Sopenharmony_ci "ALU_ARSH_K: 0xff00ff0000000000 >> 40 = 0xffffffffffff00ff", 39918c2ecf20Sopenharmony_ci .u.insns_int = { 39928c2ecf20Sopenharmony_ci BPF_LD_IMM64(R0, 0xff00ff0000000000LL), 39938c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_ARSH, R0, 40), 39948c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 39958c2ecf20Sopenharmony_ci }, 39968c2ecf20Sopenharmony_ci INTERNAL, 39978c2ecf20Sopenharmony_ci { }, 39988c2ecf20Sopenharmony_ci { { 0, 0xffff00ff } }, 39998c2ecf20Sopenharmony_ci }, 40008c2ecf20Sopenharmony_ci /* BPF_ALU | BPF_NEG */ 40018c2ecf20Sopenharmony_ci { 40028c2ecf20Sopenharmony_ci "ALU_NEG: -(3) = -3", 40038c2ecf20Sopenharmony_ci .u.insns_int = { 40048c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R0, 3), 40058c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_NEG, R0, 0), 40068c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 40078c2ecf20Sopenharmony_ci }, 40088c2ecf20Sopenharmony_ci INTERNAL, 40098c2ecf20Sopenharmony_ci { }, 40108c2ecf20Sopenharmony_ci { { 0, -3 } }, 40118c2ecf20Sopenharmony_ci }, 40128c2ecf20Sopenharmony_ci { 40138c2ecf20Sopenharmony_ci "ALU_NEG: -(-3) = 3", 40148c2ecf20Sopenharmony_ci .u.insns_int = { 40158c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R0, -3), 40168c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_NEG, R0, 0), 40178c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 40188c2ecf20Sopenharmony_ci }, 40198c2ecf20Sopenharmony_ci INTERNAL, 40208c2ecf20Sopenharmony_ci { }, 40218c2ecf20Sopenharmony_ci { { 0, 3 } }, 40228c2ecf20Sopenharmony_ci }, 40238c2ecf20Sopenharmony_ci { 40248c2ecf20Sopenharmony_ci "ALU64_NEG: -(3) = -3", 40258c2ecf20Sopenharmony_ci .u.insns_int = { 40268c2ecf20Sopenharmony_ci BPF_LD_IMM64(R0, 3), 40278c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_NEG, R0, 0), 40288c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 40298c2ecf20Sopenharmony_ci }, 40308c2ecf20Sopenharmony_ci INTERNAL, 40318c2ecf20Sopenharmony_ci { }, 40328c2ecf20Sopenharmony_ci { { 0, -3 } }, 40338c2ecf20Sopenharmony_ci }, 40348c2ecf20Sopenharmony_ci { 40358c2ecf20Sopenharmony_ci "ALU64_NEG: -(-3) = 3", 40368c2ecf20Sopenharmony_ci .u.insns_int = { 40378c2ecf20Sopenharmony_ci BPF_LD_IMM64(R0, -3), 40388c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_NEG, R0, 0), 40398c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 40408c2ecf20Sopenharmony_ci }, 40418c2ecf20Sopenharmony_ci INTERNAL, 40428c2ecf20Sopenharmony_ci { }, 40438c2ecf20Sopenharmony_ci { { 0, 3 } }, 40448c2ecf20Sopenharmony_ci }, 40458c2ecf20Sopenharmony_ci /* BPF_ALU | BPF_END | BPF_FROM_BE */ 40468c2ecf20Sopenharmony_ci { 40478c2ecf20Sopenharmony_ci "ALU_END_FROM_BE 16: 0x0123456789abcdef -> 0xcdef", 40488c2ecf20Sopenharmony_ci .u.insns_int = { 40498c2ecf20Sopenharmony_ci BPF_LD_IMM64(R0, 0x0123456789abcdefLL), 40508c2ecf20Sopenharmony_ci BPF_ENDIAN(BPF_FROM_BE, R0, 16), 40518c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 40528c2ecf20Sopenharmony_ci }, 40538c2ecf20Sopenharmony_ci INTERNAL, 40548c2ecf20Sopenharmony_ci { }, 40558c2ecf20Sopenharmony_ci { { 0, cpu_to_be16(0xcdef) } }, 40568c2ecf20Sopenharmony_ci }, 40578c2ecf20Sopenharmony_ci { 40588c2ecf20Sopenharmony_ci "ALU_END_FROM_BE 32: 0x0123456789abcdef -> 0x89abcdef", 40598c2ecf20Sopenharmony_ci .u.insns_int = { 40608c2ecf20Sopenharmony_ci BPF_LD_IMM64(R0, 0x0123456789abcdefLL), 40618c2ecf20Sopenharmony_ci BPF_ENDIAN(BPF_FROM_BE, R0, 32), 40628c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_MOV, R1, R0), 40638c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_RSH, R1, 32), 40648c2ecf20Sopenharmony_ci BPF_ALU32_REG(BPF_ADD, R0, R1), /* R1 = 0 */ 40658c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 40668c2ecf20Sopenharmony_ci }, 40678c2ecf20Sopenharmony_ci INTERNAL, 40688c2ecf20Sopenharmony_ci { }, 40698c2ecf20Sopenharmony_ci { { 0, cpu_to_be32(0x89abcdef) } }, 40708c2ecf20Sopenharmony_ci }, 40718c2ecf20Sopenharmony_ci { 40728c2ecf20Sopenharmony_ci "ALU_END_FROM_BE 64: 0x0123456789abcdef -> 0x89abcdef", 40738c2ecf20Sopenharmony_ci .u.insns_int = { 40748c2ecf20Sopenharmony_ci BPF_LD_IMM64(R0, 0x0123456789abcdefLL), 40758c2ecf20Sopenharmony_ci BPF_ENDIAN(BPF_FROM_BE, R0, 64), 40768c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 40778c2ecf20Sopenharmony_ci }, 40788c2ecf20Sopenharmony_ci INTERNAL, 40798c2ecf20Sopenharmony_ci { }, 40808c2ecf20Sopenharmony_ci { { 0, (u32) cpu_to_be64(0x0123456789abcdefLL) } }, 40818c2ecf20Sopenharmony_ci }, 40828c2ecf20Sopenharmony_ci /* BPF_ALU | BPF_END | BPF_FROM_LE */ 40838c2ecf20Sopenharmony_ci { 40848c2ecf20Sopenharmony_ci "ALU_END_FROM_LE 16: 0x0123456789abcdef -> 0xefcd", 40858c2ecf20Sopenharmony_ci .u.insns_int = { 40868c2ecf20Sopenharmony_ci BPF_LD_IMM64(R0, 0x0123456789abcdefLL), 40878c2ecf20Sopenharmony_ci BPF_ENDIAN(BPF_FROM_LE, R0, 16), 40888c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 40898c2ecf20Sopenharmony_ci }, 40908c2ecf20Sopenharmony_ci INTERNAL, 40918c2ecf20Sopenharmony_ci { }, 40928c2ecf20Sopenharmony_ci { { 0, cpu_to_le16(0xcdef) } }, 40938c2ecf20Sopenharmony_ci }, 40948c2ecf20Sopenharmony_ci { 40958c2ecf20Sopenharmony_ci "ALU_END_FROM_LE 32: 0x0123456789abcdef -> 0xefcdab89", 40968c2ecf20Sopenharmony_ci .u.insns_int = { 40978c2ecf20Sopenharmony_ci BPF_LD_IMM64(R0, 0x0123456789abcdefLL), 40988c2ecf20Sopenharmony_ci BPF_ENDIAN(BPF_FROM_LE, R0, 32), 40998c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_MOV, R1, R0), 41008c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_RSH, R1, 32), 41018c2ecf20Sopenharmony_ci BPF_ALU32_REG(BPF_ADD, R0, R1), /* R1 = 0 */ 41028c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 41038c2ecf20Sopenharmony_ci }, 41048c2ecf20Sopenharmony_ci INTERNAL, 41058c2ecf20Sopenharmony_ci { }, 41068c2ecf20Sopenharmony_ci { { 0, cpu_to_le32(0x89abcdef) } }, 41078c2ecf20Sopenharmony_ci }, 41088c2ecf20Sopenharmony_ci { 41098c2ecf20Sopenharmony_ci "ALU_END_FROM_LE 64: 0x0123456789abcdef -> 0x67452301", 41108c2ecf20Sopenharmony_ci .u.insns_int = { 41118c2ecf20Sopenharmony_ci BPF_LD_IMM64(R0, 0x0123456789abcdefLL), 41128c2ecf20Sopenharmony_ci BPF_ENDIAN(BPF_FROM_LE, R0, 64), 41138c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 41148c2ecf20Sopenharmony_ci }, 41158c2ecf20Sopenharmony_ci INTERNAL, 41168c2ecf20Sopenharmony_ci { }, 41178c2ecf20Sopenharmony_ci { { 0, (u32) cpu_to_le64(0x0123456789abcdefLL) } }, 41188c2ecf20Sopenharmony_ci }, 41198c2ecf20Sopenharmony_ci /* BPF_ST(X) | BPF_MEM | BPF_B/H/W/DW */ 41208c2ecf20Sopenharmony_ci { 41218c2ecf20Sopenharmony_ci "ST_MEM_B: Store/Load byte: max negative", 41228c2ecf20Sopenharmony_ci .u.insns_int = { 41238c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R0, 1), 41248c2ecf20Sopenharmony_ci BPF_ST_MEM(BPF_B, R10, -40, 0xff), 41258c2ecf20Sopenharmony_ci BPF_LDX_MEM(BPF_B, R0, R10, -40), 41268c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 41278c2ecf20Sopenharmony_ci }, 41288c2ecf20Sopenharmony_ci INTERNAL, 41298c2ecf20Sopenharmony_ci { }, 41308c2ecf20Sopenharmony_ci { { 0, 0xff } }, 41318c2ecf20Sopenharmony_ci .stack_depth = 40, 41328c2ecf20Sopenharmony_ci }, 41338c2ecf20Sopenharmony_ci { 41348c2ecf20Sopenharmony_ci "ST_MEM_B: Store/Load byte: max positive", 41358c2ecf20Sopenharmony_ci .u.insns_int = { 41368c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R0, 1), 41378c2ecf20Sopenharmony_ci BPF_ST_MEM(BPF_H, R10, -40, 0x7f), 41388c2ecf20Sopenharmony_ci BPF_LDX_MEM(BPF_H, R0, R10, -40), 41398c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 41408c2ecf20Sopenharmony_ci }, 41418c2ecf20Sopenharmony_ci INTERNAL, 41428c2ecf20Sopenharmony_ci { }, 41438c2ecf20Sopenharmony_ci { { 0, 0x7f } }, 41448c2ecf20Sopenharmony_ci .stack_depth = 40, 41458c2ecf20Sopenharmony_ci }, 41468c2ecf20Sopenharmony_ci { 41478c2ecf20Sopenharmony_ci "STX_MEM_B: Store/Load byte: max negative", 41488c2ecf20Sopenharmony_ci .u.insns_int = { 41498c2ecf20Sopenharmony_ci BPF_LD_IMM64(R0, 0), 41508c2ecf20Sopenharmony_ci BPF_LD_IMM64(R1, 0xffLL), 41518c2ecf20Sopenharmony_ci BPF_STX_MEM(BPF_B, R10, R1, -40), 41528c2ecf20Sopenharmony_ci BPF_LDX_MEM(BPF_B, R0, R10, -40), 41538c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 41548c2ecf20Sopenharmony_ci }, 41558c2ecf20Sopenharmony_ci INTERNAL, 41568c2ecf20Sopenharmony_ci { }, 41578c2ecf20Sopenharmony_ci { { 0, 0xff } }, 41588c2ecf20Sopenharmony_ci .stack_depth = 40, 41598c2ecf20Sopenharmony_ci }, 41608c2ecf20Sopenharmony_ci { 41618c2ecf20Sopenharmony_ci "ST_MEM_H: Store/Load half word: max negative", 41628c2ecf20Sopenharmony_ci .u.insns_int = { 41638c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R0, 1), 41648c2ecf20Sopenharmony_ci BPF_ST_MEM(BPF_H, R10, -40, 0xffff), 41658c2ecf20Sopenharmony_ci BPF_LDX_MEM(BPF_H, R0, R10, -40), 41668c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 41678c2ecf20Sopenharmony_ci }, 41688c2ecf20Sopenharmony_ci INTERNAL, 41698c2ecf20Sopenharmony_ci { }, 41708c2ecf20Sopenharmony_ci { { 0, 0xffff } }, 41718c2ecf20Sopenharmony_ci .stack_depth = 40, 41728c2ecf20Sopenharmony_ci }, 41738c2ecf20Sopenharmony_ci { 41748c2ecf20Sopenharmony_ci "ST_MEM_H: Store/Load half word: max positive", 41758c2ecf20Sopenharmony_ci .u.insns_int = { 41768c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R0, 1), 41778c2ecf20Sopenharmony_ci BPF_ST_MEM(BPF_H, R10, -40, 0x7fff), 41788c2ecf20Sopenharmony_ci BPF_LDX_MEM(BPF_H, R0, R10, -40), 41798c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 41808c2ecf20Sopenharmony_ci }, 41818c2ecf20Sopenharmony_ci INTERNAL, 41828c2ecf20Sopenharmony_ci { }, 41838c2ecf20Sopenharmony_ci { { 0, 0x7fff } }, 41848c2ecf20Sopenharmony_ci .stack_depth = 40, 41858c2ecf20Sopenharmony_ci }, 41868c2ecf20Sopenharmony_ci { 41878c2ecf20Sopenharmony_ci "STX_MEM_H: Store/Load half word: max negative", 41888c2ecf20Sopenharmony_ci .u.insns_int = { 41898c2ecf20Sopenharmony_ci BPF_LD_IMM64(R0, 0), 41908c2ecf20Sopenharmony_ci BPF_LD_IMM64(R1, 0xffffLL), 41918c2ecf20Sopenharmony_ci BPF_STX_MEM(BPF_H, R10, R1, -40), 41928c2ecf20Sopenharmony_ci BPF_LDX_MEM(BPF_H, R0, R10, -40), 41938c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 41948c2ecf20Sopenharmony_ci }, 41958c2ecf20Sopenharmony_ci INTERNAL, 41968c2ecf20Sopenharmony_ci { }, 41978c2ecf20Sopenharmony_ci { { 0, 0xffff } }, 41988c2ecf20Sopenharmony_ci .stack_depth = 40, 41998c2ecf20Sopenharmony_ci }, 42008c2ecf20Sopenharmony_ci { 42018c2ecf20Sopenharmony_ci "ST_MEM_W: Store/Load word: max negative", 42028c2ecf20Sopenharmony_ci .u.insns_int = { 42038c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R0, 1), 42048c2ecf20Sopenharmony_ci BPF_ST_MEM(BPF_W, R10, -40, 0xffffffff), 42058c2ecf20Sopenharmony_ci BPF_LDX_MEM(BPF_W, R0, R10, -40), 42068c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 42078c2ecf20Sopenharmony_ci }, 42088c2ecf20Sopenharmony_ci INTERNAL, 42098c2ecf20Sopenharmony_ci { }, 42108c2ecf20Sopenharmony_ci { { 0, 0xffffffff } }, 42118c2ecf20Sopenharmony_ci .stack_depth = 40, 42128c2ecf20Sopenharmony_ci }, 42138c2ecf20Sopenharmony_ci { 42148c2ecf20Sopenharmony_ci "ST_MEM_W: Store/Load word: max positive", 42158c2ecf20Sopenharmony_ci .u.insns_int = { 42168c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R0, 1), 42178c2ecf20Sopenharmony_ci BPF_ST_MEM(BPF_W, R10, -40, 0x7fffffff), 42188c2ecf20Sopenharmony_ci BPF_LDX_MEM(BPF_W, R0, R10, -40), 42198c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 42208c2ecf20Sopenharmony_ci }, 42218c2ecf20Sopenharmony_ci INTERNAL, 42228c2ecf20Sopenharmony_ci { }, 42238c2ecf20Sopenharmony_ci { { 0, 0x7fffffff } }, 42248c2ecf20Sopenharmony_ci .stack_depth = 40, 42258c2ecf20Sopenharmony_ci }, 42268c2ecf20Sopenharmony_ci { 42278c2ecf20Sopenharmony_ci "STX_MEM_W: Store/Load word: max negative", 42288c2ecf20Sopenharmony_ci .u.insns_int = { 42298c2ecf20Sopenharmony_ci BPF_LD_IMM64(R0, 0), 42308c2ecf20Sopenharmony_ci BPF_LD_IMM64(R1, 0xffffffffLL), 42318c2ecf20Sopenharmony_ci BPF_STX_MEM(BPF_W, R10, R1, -40), 42328c2ecf20Sopenharmony_ci BPF_LDX_MEM(BPF_W, R0, R10, -40), 42338c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 42348c2ecf20Sopenharmony_ci }, 42358c2ecf20Sopenharmony_ci INTERNAL, 42368c2ecf20Sopenharmony_ci { }, 42378c2ecf20Sopenharmony_ci { { 0, 0xffffffff } }, 42388c2ecf20Sopenharmony_ci .stack_depth = 40, 42398c2ecf20Sopenharmony_ci }, 42408c2ecf20Sopenharmony_ci { 42418c2ecf20Sopenharmony_ci "ST_MEM_DW: Store/Load double word: max negative", 42428c2ecf20Sopenharmony_ci .u.insns_int = { 42438c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R0, 1), 42448c2ecf20Sopenharmony_ci BPF_ST_MEM(BPF_DW, R10, -40, 0xffffffff), 42458c2ecf20Sopenharmony_ci BPF_LDX_MEM(BPF_DW, R0, R10, -40), 42468c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 42478c2ecf20Sopenharmony_ci }, 42488c2ecf20Sopenharmony_ci INTERNAL, 42498c2ecf20Sopenharmony_ci { }, 42508c2ecf20Sopenharmony_ci { { 0, 0xffffffff } }, 42518c2ecf20Sopenharmony_ci .stack_depth = 40, 42528c2ecf20Sopenharmony_ci }, 42538c2ecf20Sopenharmony_ci { 42548c2ecf20Sopenharmony_ci "ST_MEM_DW: Store/Load double word: max negative 2", 42558c2ecf20Sopenharmony_ci .u.insns_int = { 42568c2ecf20Sopenharmony_ci BPF_LD_IMM64(R2, 0xffff00000000ffffLL), 42578c2ecf20Sopenharmony_ci BPF_LD_IMM64(R3, 0xffffffffffffffffLL), 42588c2ecf20Sopenharmony_ci BPF_ST_MEM(BPF_DW, R10, -40, 0xffffffff), 42598c2ecf20Sopenharmony_ci BPF_LDX_MEM(BPF_DW, R2, R10, -40), 42608c2ecf20Sopenharmony_ci BPF_JMP_REG(BPF_JEQ, R2, R3, 2), 42618c2ecf20Sopenharmony_ci BPF_MOV32_IMM(R0, 2), 42628c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 42638c2ecf20Sopenharmony_ci BPF_MOV32_IMM(R0, 1), 42648c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 42658c2ecf20Sopenharmony_ci }, 42668c2ecf20Sopenharmony_ci INTERNAL, 42678c2ecf20Sopenharmony_ci { }, 42688c2ecf20Sopenharmony_ci { { 0, 0x1 } }, 42698c2ecf20Sopenharmony_ci .stack_depth = 40, 42708c2ecf20Sopenharmony_ci }, 42718c2ecf20Sopenharmony_ci { 42728c2ecf20Sopenharmony_ci "ST_MEM_DW: Store/Load double word: max positive", 42738c2ecf20Sopenharmony_ci .u.insns_int = { 42748c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R0, 1), 42758c2ecf20Sopenharmony_ci BPF_ST_MEM(BPF_DW, R10, -40, 0x7fffffff), 42768c2ecf20Sopenharmony_ci BPF_LDX_MEM(BPF_DW, R0, R10, -40), 42778c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 42788c2ecf20Sopenharmony_ci }, 42798c2ecf20Sopenharmony_ci INTERNAL, 42808c2ecf20Sopenharmony_ci { }, 42818c2ecf20Sopenharmony_ci { { 0, 0x7fffffff } }, 42828c2ecf20Sopenharmony_ci .stack_depth = 40, 42838c2ecf20Sopenharmony_ci }, 42848c2ecf20Sopenharmony_ci { 42858c2ecf20Sopenharmony_ci "STX_MEM_DW: Store/Load double word: max negative", 42868c2ecf20Sopenharmony_ci .u.insns_int = { 42878c2ecf20Sopenharmony_ci BPF_LD_IMM64(R0, 0), 42888c2ecf20Sopenharmony_ci BPF_LD_IMM64(R1, 0xffffffffffffffffLL), 42898c2ecf20Sopenharmony_ci BPF_STX_MEM(BPF_DW, R10, R1, -40), 42908c2ecf20Sopenharmony_ci BPF_LDX_MEM(BPF_DW, R0, R10, -40), 42918c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 42928c2ecf20Sopenharmony_ci }, 42938c2ecf20Sopenharmony_ci INTERNAL, 42948c2ecf20Sopenharmony_ci { }, 42958c2ecf20Sopenharmony_ci { { 0, 0xffffffff } }, 42968c2ecf20Sopenharmony_ci .stack_depth = 40, 42978c2ecf20Sopenharmony_ci }, 42988c2ecf20Sopenharmony_ci /* BPF_STX | BPF_XADD | BPF_W/DW */ 42998c2ecf20Sopenharmony_ci { 43008c2ecf20Sopenharmony_ci "STX_XADD_W: Test: 0x12 + 0x10 = 0x22", 43018c2ecf20Sopenharmony_ci .u.insns_int = { 43028c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R0, 0x12), 43038c2ecf20Sopenharmony_ci BPF_ST_MEM(BPF_W, R10, -40, 0x10), 43048c2ecf20Sopenharmony_ci BPF_STX_XADD(BPF_W, R10, R0, -40), 43058c2ecf20Sopenharmony_ci BPF_LDX_MEM(BPF_W, R0, R10, -40), 43068c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 43078c2ecf20Sopenharmony_ci }, 43088c2ecf20Sopenharmony_ci INTERNAL, 43098c2ecf20Sopenharmony_ci { }, 43108c2ecf20Sopenharmony_ci { { 0, 0x22 } }, 43118c2ecf20Sopenharmony_ci .stack_depth = 40, 43128c2ecf20Sopenharmony_ci }, 43138c2ecf20Sopenharmony_ci { 43148c2ecf20Sopenharmony_ci "STX_XADD_W: Test side-effects, r10: 0x12 + 0x10 = 0x22", 43158c2ecf20Sopenharmony_ci .u.insns_int = { 43168c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_MOV, R1, R10), 43178c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R0, 0x12), 43188c2ecf20Sopenharmony_ci BPF_ST_MEM(BPF_W, R10, -40, 0x10), 43198c2ecf20Sopenharmony_ci BPF_STX_XADD(BPF_W, R10, R0, -40), 43208c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_MOV, R0, R10), 43218c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_SUB, R0, R1), 43228c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 43238c2ecf20Sopenharmony_ci }, 43248c2ecf20Sopenharmony_ci INTERNAL, 43258c2ecf20Sopenharmony_ci { }, 43268c2ecf20Sopenharmony_ci { { 0, 0 } }, 43278c2ecf20Sopenharmony_ci .stack_depth = 40, 43288c2ecf20Sopenharmony_ci }, 43298c2ecf20Sopenharmony_ci { 43308c2ecf20Sopenharmony_ci "STX_XADD_W: Test side-effects, r0: 0x12 + 0x10 = 0x22", 43318c2ecf20Sopenharmony_ci .u.insns_int = { 43328c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R0, 0x12), 43338c2ecf20Sopenharmony_ci BPF_ST_MEM(BPF_W, R10, -40, 0x10), 43348c2ecf20Sopenharmony_ci BPF_STX_XADD(BPF_W, R10, R0, -40), 43358c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 43368c2ecf20Sopenharmony_ci }, 43378c2ecf20Sopenharmony_ci INTERNAL, 43388c2ecf20Sopenharmony_ci { }, 43398c2ecf20Sopenharmony_ci { { 0, 0x12 } }, 43408c2ecf20Sopenharmony_ci .stack_depth = 40, 43418c2ecf20Sopenharmony_ci }, 43428c2ecf20Sopenharmony_ci { 43438c2ecf20Sopenharmony_ci "STX_XADD_W: X + 1 + 1 + 1 + ...", 43448c2ecf20Sopenharmony_ci { }, 43458c2ecf20Sopenharmony_ci INTERNAL, 43468c2ecf20Sopenharmony_ci { }, 43478c2ecf20Sopenharmony_ci { { 0, 4134 } }, 43488c2ecf20Sopenharmony_ci .fill_helper = bpf_fill_stxw, 43498c2ecf20Sopenharmony_ci }, 43508c2ecf20Sopenharmony_ci { 43518c2ecf20Sopenharmony_ci "STX_XADD_DW: Test: 0x12 + 0x10 = 0x22", 43528c2ecf20Sopenharmony_ci .u.insns_int = { 43538c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R0, 0x12), 43548c2ecf20Sopenharmony_ci BPF_ST_MEM(BPF_DW, R10, -40, 0x10), 43558c2ecf20Sopenharmony_ci BPF_STX_XADD(BPF_DW, R10, R0, -40), 43568c2ecf20Sopenharmony_ci BPF_LDX_MEM(BPF_DW, R0, R10, -40), 43578c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 43588c2ecf20Sopenharmony_ci }, 43598c2ecf20Sopenharmony_ci INTERNAL, 43608c2ecf20Sopenharmony_ci { }, 43618c2ecf20Sopenharmony_ci { { 0, 0x22 } }, 43628c2ecf20Sopenharmony_ci .stack_depth = 40, 43638c2ecf20Sopenharmony_ci }, 43648c2ecf20Sopenharmony_ci { 43658c2ecf20Sopenharmony_ci "STX_XADD_DW: Test side-effects, r10: 0x12 + 0x10 = 0x22", 43668c2ecf20Sopenharmony_ci .u.insns_int = { 43678c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_MOV, R1, R10), 43688c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R0, 0x12), 43698c2ecf20Sopenharmony_ci BPF_ST_MEM(BPF_DW, R10, -40, 0x10), 43708c2ecf20Sopenharmony_ci BPF_STX_XADD(BPF_DW, R10, R0, -40), 43718c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_MOV, R0, R10), 43728c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_SUB, R0, R1), 43738c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 43748c2ecf20Sopenharmony_ci }, 43758c2ecf20Sopenharmony_ci INTERNAL, 43768c2ecf20Sopenharmony_ci { }, 43778c2ecf20Sopenharmony_ci { { 0, 0 } }, 43788c2ecf20Sopenharmony_ci .stack_depth = 40, 43798c2ecf20Sopenharmony_ci }, 43808c2ecf20Sopenharmony_ci { 43818c2ecf20Sopenharmony_ci "STX_XADD_DW: Test side-effects, r0: 0x12 + 0x10 = 0x22", 43828c2ecf20Sopenharmony_ci .u.insns_int = { 43838c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R0, 0x12), 43848c2ecf20Sopenharmony_ci BPF_ST_MEM(BPF_DW, R10, -40, 0x10), 43858c2ecf20Sopenharmony_ci BPF_STX_XADD(BPF_DW, R10, R0, -40), 43868c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 43878c2ecf20Sopenharmony_ci }, 43888c2ecf20Sopenharmony_ci INTERNAL, 43898c2ecf20Sopenharmony_ci { }, 43908c2ecf20Sopenharmony_ci { { 0, 0x12 } }, 43918c2ecf20Sopenharmony_ci .stack_depth = 40, 43928c2ecf20Sopenharmony_ci }, 43938c2ecf20Sopenharmony_ci { 43948c2ecf20Sopenharmony_ci "STX_XADD_DW: X + 1 + 1 + 1 + ...", 43958c2ecf20Sopenharmony_ci { }, 43968c2ecf20Sopenharmony_ci INTERNAL, 43978c2ecf20Sopenharmony_ci { }, 43988c2ecf20Sopenharmony_ci { { 0, 4134 } }, 43998c2ecf20Sopenharmony_ci .fill_helper = bpf_fill_stxdw, 44008c2ecf20Sopenharmony_ci }, 44018c2ecf20Sopenharmony_ci /* BPF_JMP | BPF_EXIT */ 44028c2ecf20Sopenharmony_ci { 44038c2ecf20Sopenharmony_ci "JMP_EXIT", 44048c2ecf20Sopenharmony_ci .u.insns_int = { 44058c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R0, 0x4711), 44068c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 44078c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R0, 0x4712), 44088c2ecf20Sopenharmony_ci }, 44098c2ecf20Sopenharmony_ci INTERNAL, 44108c2ecf20Sopenharmony_ci { }, 44118c2ecf20Sopenharmony_ci { { 0, 0x4711 } }, 44128c2ecf20Sopenharmony_ci }, 44138c2ecf20Sopenharmony_ci /* BPF_JMP | BPF_JA */ 44148c2ecf20Sopenharmony_ci { 44158c2ecf20Sopenharmony_ci "JMP_JA: Unconditional jump: if (true) return 1", 44168c2ecf20Sopenharmony_ci .u.insns_int = { 44178c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R0, 0), 44188c2ecf20Sopenharmony_ci BPF_JMP_IMM(BPF_JA, 0, 0, 1), 44198c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 44208c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R0, 1), 44218c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 44228c2ecf20Sopenharmony_ci }, 44238c2ecf20Sopenharmony_ci INTERNAL, 44248c2ecf20Sopenharmony_ci { }, 44258c2ecf20Sopenharmony_ci { { 0, 1 } }, 44268c2ecf20Sopenharmony_ci }, 44278c2ecf20Sopenharmony_ci /* BPF_JMP | BPF_JSLT | BPF_K */ 44288c2ecf20Sopenharmony_ci { 44298c2ecf20Sopenharmony_ci "JMP_JSLT_K: Signed jump: if (-2 < -1) return 1", 44308c2ecf20Sopenharmony_ci .u.insns_int = { 44318c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R0, 0), 44328c2ecf20Sopenharmony_ci BPF_LD_IMM64(R1, 0xfffffffffffffffeLL), 44338c2ecf20Sopenharmony_ci BPF_JMP_IMM(BPF_JSLT, R1, -1, 1), 44348c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 44358c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R0, 1), 44368c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 44378c2ecf20Sopenharmony_ci }, 44388c2ecf20Sopenharmony_ci INTERNAL, 44398c2ecf20Sopenharmony_ci { }, 44408c2ecf20Sopenharmony_ci { { 0, 1 } }, 44418c2ecf20Sopenharmony_ci }, 44428c2ecf20Sopenharmony_ci { 44438c2ecf20Sopenharmony_ci "JMP_JSLT_K: Signed jump: if (-1 < -1) return 0", 44448c2ecf20Sopenharmony_ci .u.insns_int = { 44458c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R0, 1), 44468c2ecf20Sopenharmony_ci BPF_LD_IMM64(R1, 0xffffffffffffffffLL), 44478c2ecf20Sopenharmony_ci BPF_JMP_IMM(BPF_JSLT, R1, -1, 1), 44488c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 44498c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R0, 0), 44508c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 44518c2ecf20Sopenharmony_ci }, 44528c2ecf20Sopenharmony_ci INTERNAL, 44538c2ecf20Sopenharmony_ci { }, 44548c2ecf20Sopenharmony_ci { { 0, 1 } }, 44558c2ecf20Sopenharmony_ci }, 44568c2ecf20Sopenharmony_ci /* BPF_JMP | BPF_JSGT | BPF_K */ 44578c2ecf20Sopenharmony_ci { 44588c2ecf20Sopenharmony_ci "JMP_JSGT_K: Signed jump: if (-1 > -2) return 1", 44598c2ecf20Sopenharmony_ci .u.insns_int = { 44608c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R0, 0), 44618c2ecf20Sopenharmony_ci BPF_LD_IMM64(R1, 0xffffffffffffffffLL), 44628c2ecf20Sopenharmony_ci BPF_JMP_IMM(BPF_JSGT, R1, -2, 1), 44638c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 44648c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R0, 1), 44658c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 44668c2ecf20Sopenharmony_ci }, 44678c2ecf20Sopenharmony_ci INTERNAL, 44688c2ecf20Sopenharmony_ci { }, 44698c2ecf20Sopenharmony_ci { { 0, 1 } }, 44708c2ecf20Sopenharmony_ci }, 44718c2ecf20Sopenharmony_ci { 44728c2ecf20Sopenharmony_ci "JMP_JSGT_K: Signed jump: if (-1 > -1) return 0", 44738c2ecf20Sopenharmony_ci .u.insns_int = { 44748c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R0, 1), 44758c2ecf20Sopenharmony_ci BPF_LD_IMM64(R1, 0xffffffffffffffffLL), 44768c2ecf20Sopenharmony_ci BPF_JMP_IMM(BPF_JSGT, R1, -1, 1), 44778c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 44788c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R0, 0), 44798c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 44808c2ecf20Sopenharmony_ci }, 44818c2ecf20Sopenharmony_ci INTERNAL, 44828c2ecf20Sopenharmony_ci { }, 44838c2ecf20Sopenharmony_ci { { 0, 1 } }, 44848c2ecf20Sopenharmony_ci }, 44858c2ecf20Sopenharmony_ci /* BPF_JMP | BPF_JSLE | BPF_K */ 44868c2ecf20Sopenharmony_ci { 44878c2ecf20Sopenharmony_ci "JMP_JSLE_K: Signed jump: if (-2 <= -1) return 1", 44888c2ecf20Sopenharmony_ci .u.insns_int = { 44898c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R0, 0), 44908c2ecf20Sopenharmony_ci BPF_LD_IMM64(R1, 0xfffffffffffffffeLL), 44918c2ecf20Sopenharmony_ci BPF_JMP_IMM(BPF_JSLE, R1, -1, 1), 44928c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 44938c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R0, 1), 44948c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 44958c2ecf20Sopenharmony_ci }, 44968c2ecf20Sopenharmony_ci INTERNAL, 44978c2ecf20Sopenharmony_ci { }, 44988c2ecf20Sopenharmony_ci { { 0, 1 } }, 44998c2ecf20Sopenharmony_ci }, 45008c2ecf20Sopenharmony_ci { 45018c2ecf20Sopenharmony_ci "JMP_JSLE_K: Signed jump: if (-1 <= -1) return 1", 45028c2ecf20Sopenharmony_ci .u.insns_int = { 45038c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R0, 0), 45048c2ecf20Sopenharmony_ci BPF_LD_IMM64(R1, 0xffffffffffffffffLL), 45058c2ecf20Sopenharmony_ci BPF_JMP_IMM(BPF_JSLE, R1, -1, 1), 45068c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 45078c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R0, 1), 45088c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 45098c2ecf20Sopenharmony_ci }, 45108c2ecf20Sopenharmony_ci INTERNAL, 45118c2ecf20Sopenharmony_ci { }, 45128c2ecf20Sopenharmony_ci { { 0, 1 } }, 45138c2ecf20Sopenharmony_ci }, 45148c2ecf20Sopenharmony_ci { 45158c2ecf20Sopenharmony_ci "JMP_JSLE_K: Signed jump: value walk 1", 45168c2ecf20Sopenharmony_ci .u.insns_int = { 45178c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R0, 0), 45188c2ecf20Sopenharmony_ci BPF_LD_IMM64(R1, 3), 45198c2ecf20Sopenharmony_ci BPF_JMP_IMM(BPF_JSLE, R1, 0, 6), 45208c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_SUB, R1, 1), 45218c2ecf20Sopenharmony_ci BPF_JMP_IMM(BPF_JSLE, R1, 0, 4), 45228c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_SUB, R1, 1), 45238c2ecf20Sopenharmony_ci BPF_JMP_IMM(BPF_JSLE, R1, 0, 2), 45248c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_SUB, R1, 1), 45258c2ecf20Sopenharmony_ci BPF_JMP_IMM(BPF_JSLE, R1, 0, 1), 45268c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), /* bad exit */ 45278c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R0, 1), /* good exit */ 45288c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 45298c2ecf20Sopenharmony_ci }, 45308c2ecf20Sopenharmony_ci INTERNAL, 45318c2ecf20Sopenharmony_ci { }, 45328c2ecf20Sopenharmony_ci { { 0, 1 } }, 45338c2ecf20Sopenharmony_ci }, 45348c2ecf20Sopenharmony_ci { 45358c2ecf20Sopenharmony_ci "JMP_JSLE_K: Signed jump: value walk 2", 45368c2ecf20Sopenharmony_ci .u.insns_int = { 45378c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R0, 0), 45388c2ecf20Sopenharmony_ci BPF_LD_IMM64(R1, 3), 45398c2ecf20Sopenharmony_ci BPF_JMP_IMM(BPF_JSLE, R1, 0, 4), 45408c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_SUB, R1, 2), 45418c2ecf20Sopenharmony_ci BPF_JMP_IMM(BPF_JSLE, R1, 0, 2), 45428c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_SUB, R1, 2), 45438c2ecf20Sopenharmony_ci BPF_JMP_IMM(BPF_JSLE, R1, 0, 1), 45448c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), /* bad exit */ 45458c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R0, 1), /* good exit */ 45468c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 45478c2ecf20Sopenharmony_ci }, 45488c2ecf20Sopenharmony_ci INTERNAL, 45498c2ecf20Sopenharmony_ci { }, 45508c2ecf20Sopenharmony_ci { { 0, 1 } }, 45518c2ecf20Sopenharmony_ci }, 45528c2ecf20Sopenharmony_ci /* BPF_JMP | BPF_JSGE | BPF_K */ 45538c2ecf20Sopenharmony_ci { 45548c2ecf20Sopenharmony_ci "JMP_JSGE_K: Signed jump: if (-1 >= -2) return 1", 45558c2ecf20Sopenharmony_ci .u.insns_int = { 45568c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R0, 0), 45578c2ecf20Sopenharmony_ci BPF_LD_IMM64(R1, 0xffffffffffffffffLL), 45588c2ecf20Sopenharmony_ci BPF_JMP_IMM(BPF_JSGE, R1, -2, 1), 45598c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 45608c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R0, 1), 45618c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 45628c2ecf20Sopenharmony_ci }, 45638c2ecf20Sopenharmony_ci INTERNAL, 45648c2ecf20Sopenharmony_ci { }, 45658c2ecf20Sopenharmony_ci { { 0, 1 } }, 45668c2ecf20Sopenharmony_ci }, 45678c2ecf20Sopenharmony_ci { 45688c2ecf20Sopenharmony_ci "JMP_JSGE_K: Signed jump: if (-1 >= -1) return 1", 45698c2ecf20Sopenharmony_ci .u.insns_int = { 45708c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R0, 0), 45718c2ecf20Sopenharmony_ci BPF_LD_IMM64(R1, 0xffffffffffffffffLL), 45728c2ecf20Sopenharmony_ci BPF_JMP_IMM(BPF_JSGE, R1, -1, 1), 45738c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 45748c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R0, 1), 45758c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 45768c2ecf20Sopenharmony_ci }, 45778c2ecf20Sopenharmony_ci INTERNAL, 45788c2ecf20Sopenharmony_ci { }, 45798c2ecf20Sopenharmony_ci { { 0, 1 } }, 45808c2ecf20Sopenharmony_ci }, 45818c2ecf20Sopenharmony_ci { 45828c2ecf20Sopenharmony_ci "JMP_JSGE_K: Signed jump: value walk 1", 45838c2ecf20Sopenharmony_ci .u.insns_int = { 45848c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R0, 0), 45858c2ecf20Sopenharmony_ci BPF_LD_IMM64(R1, -3), 45868c2ecf20Sopenharmony_ci BPF_JMP_IMM(BPF_JSGE, R1, 0, 6), 45878c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_ADD, R1, 1), 45888c2ecf20Sopenharmony_ci BPF_JMP_IMM(BPF_JSGE, R1, 0, 4), 45898c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_ADD, R1, 1), 45908c2ecf20Sopenharmony_ci BPF_JMP_IMM(BPF_JSGE, R1, 0, 2), 45918c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_ADD, R1, 1), 45928c2ecf20Sopenharmony_ci BPF_JMP_IMM(BPF_JSGE, R1, 0, 1), 45938c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), /* bad exit */ 45948c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R0, 1), /* good exit */ 45958c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 45968c2ecf20Sopenharmony_ci }, 45978c2ecf20Sopenharmony_ci INTERNAL, 45988c2ecf20Sopenharmony_ci { }, 45998c2ecf20Sopenharmony_ci { { 0, 1 } }, 46008c2ecf20Sopenharmony_ci }, 46018c2ecf20Sopenharmony_ci { 46028c2ecf20Sopenharmony_ci "JMP_JSGE_K: Signed jump: value walk 2", 46038c2ecf20Sopenharmony_ci .u.insns_int = { 46048c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R0, 0), 46058c2ecf20Sopenharmony_ci BPF_LD_IMM64(R1, -3), 46068c2ecf20Sopenharmony_ci BPF_JMP_IMM(BPF_JSGE, R1, 0, 4), 46078c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_ADD, R1, 2), 46088c2ecf20Sopenharmony_ci BPF_JMP_IMM(BPF_JSGE, R1, 0, 2), 46098c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_ADD, R1, 2), 46108c2ecf20Sopenharmony_ci BPF_JMP_IMM(BPF_JSGE, R1, 0, 1), 46118c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), /* bad exit */ 46128c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R0, 1), /* good exit */ 46138c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 46148c2ecf20Sopenharmony_ci }, 46158c2ecf20Sopenharmony_ci INTERNAL, 46168c2ecf20Sopenharmony_ci { }, 46178c2ecf20Sopenharmony_ci { { 0, 1 } }, 46188c2ecf20Sopenharmony_ci }, 46198c2ecf20Sopenharmony_ci /* BPF_JMP | BPF_JGT | BPF_K */ 46208c2ecf20Sopenharmony_ci { 46218c2ecf20Sopenharmony_ci "JMP_JGT_K: if (3 > 2) return 1", 46228c2ecf20Sopenharmony_ci .u.insns_int = { 46238c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R0, 0), 46248c2ecf20Sopenharmony_ci BPF_LD_IMM64(R1, 3), 46258c2ecf20Sopenharmony_ci BPF_JMP_IMM(BPF_JGT, R1, 2, 1), 46268c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 46278c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R0, 1), 46288c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 46298c2ecf20Sopenharmony_ci }, 46308c2ecf20Sopenharmony_ci INTERNAL, 46318c2ecf20Sopenharmony_ci { }, 46328c2ecf20Sopenharmony_ci { { 0, 1 } }, 46338c2ecf20Sopenharmony_ci }, 46348c2ecf20Sopenharmony_ci { 46358c2ecf20Sopenharmony_ci "JMP_JGT_K: Unsigned jump: if (-1 > 1) return 1", 46368c2ecf20Sopenharmony_ci .u.insns_int = { 46378c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R0, 0), 46388c2ecf20Sopenharmony_ci BPF_LD_IMM64(R1, -1), 46398c2ecf20Sopenharmony_ci BPF_JMP_IMM(BPF_JGT, R1, 1, 1), 46408c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 46418c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R0, 1), 46428c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 46438c2ecf20Sopenharmony_ci }, 46448c2ecf20Sopenharmony_ci INTERNAL, 46458c2ecf20Sopenharmony_ci { }, 46468c2ecf20Sopenharmony_ci { { 0, 1 } }, 46478c2ecf20Sopenharmony_ci }, 46488c2ecf20Sopenharmony_ci /* BPF_JMP | BPF_JLT | BPF_K */ 46498c2ecf20Sopenharmony_ci { 46508c2ecf20Sopenharmony_ci "JMP_JLT_K: if (2 < 3) return 1", 46518c2ecf20Sopenharmony_ci .u.insns_int = { 46528c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R0, 0), 46538c2ecf20Sopenharmony_ci BPF_LD_IMM64(R1, 2), 46548c2ecf20Sopenharmony_ci BPF_JMP_IMM(BPF_JLT, R1, 3, 1), 46558c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 46568c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R0, 1), 46578c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 46588c2ecf20Sopenharmony_ci }, 46598c2ecf20Sopenharmony_ci INTERNAL, 46608c2ecf20Sopenharmony_ci { }, 46618c2ecf20Sopenharmony_ci { { 0, 1 } }, 46628c2ecf20Sopenharmony_ci }, 46638c2ecf20Sopenharmony_ci { 46648c2ecf20Sopenharmony_ci "JMP_JGT_K: Unsigned jump: if (1 < -1) return 1", 46658c2ecf20Sopenharmony_ci .u.insns_int = { 46668c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R0, 0), 46678c2ecf20Sopenharmony_ci BPF_LD_IMM64(R1, 1), 46688c2ecf20Sopenharmony_ci BPF_JMP_IMM(BPF_JLT, R1, -1, 1), 46698c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 46708c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R0, 1), 46718c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 46728c2ecf20Sopenharmony_ci }, 46738c2ecf20Sopenharmony_ci INTERNAL, 46748c2ecf20Sopenharmony_ci { }, 46758c2ecf20Sopenharmony_ci { { 0, 1 } }, 46768c2ecf20Sopenharmony_ci }, 46778c2ecf20Sopenharmony_ci /* BPF_JMP | BPF_JGE | BPF_K */ 46788c2ecf20Sopenharmony_ci { 46798c2ecf20Sopenharmony_ci "JMP_JGE_K: if (3 >= 2) return 1", 46808c2ecf20Sopenharmony_ci .u.insns_int = { 46818c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R0, 0), 46828c2ecf20Sopenharmony_ci BPF_LD_IMM64(R1, 3), 46838c2ecf20Sopenharmony_ci BPF_JMP_IMM(BPF_JGE, R1, 2, 1), 46848c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 46858c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R0, 1), 46868c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 46878c2ecf20Sopenharmony_ci }, 46888c2ecf20Sopenharmony_ci INTERNAL, 46898c2ecf20Sopenharmony_ci { }, 46908c2ecf20Sopenharmony_ci { { 0, 1 } }, 46918c2ecf20Sopenharmony_ci }, 46928c2ecf20Sopenharmony_ci /* BPF_JMP | BPF_JLE | BPF_K */ 46938c2ecf20Sopenharmony_ci { 46948c2ecf20Sopenharmony_ci "JMP_JLE_K: if (2 <= 3) return 1", 46958c2ecf20Sopenharmony_ci .u.insns_int = { 46968c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R0, 0), 46978c2ecf20Sopenharmony_ci BPF_LD_IMM64(R1, 2), 46988c2ecf20Sopenharmony_ci BPF_JMP_IMM(BPF_JLE, R1, 3, 1), 46998c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 47008c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R0, 1), 47018c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 47028c2ecf20Sopenharmony_ci }, 47038c2ecf20Sopenharmony_ci INTERNAL, 47048c2ecf20Sopenharmony_ci { }, 47058c2ecf20Sopenharmony_ci { { 0, 1 } }, 47068c2ecf20Sopenharmony_ci }, 47078c2ecf20Sopenharmony_ci /* BPF_JMP | BPF_JGT | BPF_K jump backwards */ 47088c2ecf20Sopenharmony_ci { 47098c2ecf20Sopenharmony_ci "JMP_JGT_K: if (3 > 2) return 1 (jump backwards)", 47108c2ecf20Sopenharmony_ci .u.insns_int = { 47118c2ecf20Sopenharmony_ci BPF_JMP_IMM(BPF_JA, 0, 0, 2), /* goto start */ 47128c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R0, 1), /* out: */ 47138c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 47148c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R0, 0), /* start: */ 47158c2ecf20Sopenharmony_ci BPF_LD_IMM64(R1, 3), /* note: this takes 2 insns */ 47168c2ecf20Sopenharmony_ci BPF_JMP_IMM(BPF_JGT, R1, 2, -6), /* goto out */ 47178c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 47188c2ecf20Sopenharmony_ci }, 47198c2ecf20Sopenharmony_ci INTERNAL, 47208c2ecf20Sopenharmony_ci { }, 47218c2ecf20Sopenharmony_ci { { 0, 1 } }, 47228c2ecf20Sopenharmony_ci }, 47238c2ecf20Sopenharmony_ci { 47248c2ecf20Sopenharmony_ci "JMP_JGE_K: if (3 >= 3) return 1", 47258c2ecf20Sopenharmony_ci .u.insns_int = { 47268c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R0, 0), 47278c2ecf20Sopenharmony_ci BPF_LD_IMM64(R1, 3), 47288c2ecf20Sopenharmony_ci BPF_JMP_IMM(BPF_JGE, R1, 3, 1), 47298c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 47308c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R0, 1), 47318c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 47328c2ecf20Sopenharmony_ci }, 47338c2ecf20Sopenharmony_ci INTERNAL, 47348c2ecf20Sopenharmony_ci { }, 47358c2ecf20Sopenharmony_ci { { 0, 1 } }, 47368c2ecf20Sopenharmony_ci }, 47378c2ecf20Sopenharmony_ci /* BPF_JMP | BPF_JLT | BPF_K jump backwards */ 47388c2ecf20Sopenharmony_ci { 47398c2ecf20Sopenharmony_ci "JMP_JGT_K: if (2 < 3) return 1 (jump backwards)", 47408c2ecf20Sopenharmony_ci .u.insns_int = { 47418c2ecf20Sopenharmony_ci BPF_JMP_IMM(BPF_JA, 0, 0, 2), /* goto start */ 47428c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R0, 1), /* out: */ 47438c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 47448c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R0, 0), /* start: */ 47458c2ecf20Sopenharmony_ci BPF_LD_IMM64(R1, 2), /* note: this takes 2 insns */ 47468c2ecf20Sopenharmony_ci BPF_JMP_IMM(BPF_JLT, R1, 3, -6), /* goto out */ 47478c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 47488c2ecf20Sopenharmony_ci }, 47498c2ecf20Sopenharmony_ci INTERNAL, 47508c2ecf20Sopenharmony_ci { }, 47518c2ecf20Sopenharmony_ci { { 0, 1 } }, 47528c2ecf20Sopenharmony_ci }, 47538c2ecf20Sopenharmony_ci { 47548c2ecf20Sopenharmony_ci "JMP_JLE_K: if (3 <= 3) return 1", 47558c2ecf20Sopenharmony_ci .u.insns_int = { 47568c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R0, 0), 47578c2ecf20Sopenharmony_ci BPF_LD_IMM64(R1, 3), 47588c2ecf20Sopenharmony_ci BPF_JMP_IMM(BPF_JLE, R1, 3, 1), 47598c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 47608c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R0, 1), 47618c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 47628c2ecf20Sopenharmony_ci }, 47638c2ecf20Sopenharmony_ci INTERNAL, 47648c2ecf20Sopenharmony_ci { }, 47658c2ecf20Sopenharmony_ci { { 0, 1 } }, 47668c2ecf20Sopenharmony_ci }, 47678c2ecf20Sopenharmony_ci /* BPF_JMP | BPF_JNE | BPF_K */ 47688c2ecf20Sopenharmony_ci { 47698c2ecf20Sopenharmony_ci "JMP_JNE_K: if (3 != 2) return 1", 47708c2ecf20Sopenharmony_ci .u.insns_int = { 47718c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R0, 0), 47728c2ecf20Sopenharmony_ci BPF_LD_IMM64(R1, 3), 47738c2ecf20Sopenharmony_ci BPF_JMP_IMM(BPF_JNE, R1, 2, 1), 47748c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 47758c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R0, 1), 47768c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 47778c2ecf20Sopenharmony_ci }, 47788c2ecf20Sopenharmony_ci INTERNAL, 47798c2ecf20Sopenharmony_ci { }, 47808c2ecf20Sopenharmony_ci { { 0, 1 } }, 47818c2ecf20Sopenharmony_ci }, 47828c2ecf20Sopenharmony_ci /* BPF_JMP | BPF_JEQ | BPF_K */ 47838c2ecf20Sopenharmony_ci { 47848c2ecf20Sopenharmony_ci "JMP_JEQ_K: if (3 == 3) return 1", 47858c2ecf20Sopenharmony_ci .u.insns_int = { 47868c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R0, 0), 47878c2ecf20Sopenharmony_ci BPF_LD_IMM64(R1, 3), 47888c2ecf20Sopenharmony_ci BPF_JMP_IMM(BPF_JEQ, R1, 3, 1), 47898c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 47908c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R0, 1), 47918c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 47928c2ecf20Sopenharmony_ci }, 47938c2ecf20Sopenharmony_ci INTERNAL, 47948c2ecf20Sopenharmony_ci { }, 47958c2ecf20Sopenharmony_ci { { 0, 1 } }, 47968c2ecf20Sopenharmony_ci }, 47978c2ecf20Sopenharmony_ci /* BPF_JMP | BPF_JSET | BPF_K */ 47988c2ecf20Sopenharmony_ci { 47998c2ecf20Sopenharmony_ci "JMP_JSET_K: if (0x3 & 0x2) return 1", 48008c2ecf20Sopenharmony_ci .u.insns_int = { 48018c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R0, 0), 48028c2ecf20Sopenharmony_ci BPF_LD_IMM64(R1, 3), 48038c2ecf20Sopenharmony_ci BPF_JMP_IMM(BPF_JSET, R1, 2, 1), 48048c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 48058c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R0, 1), 48068c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 48078c2ecf20Sopenharmony_ci }, 48088c2ecf20Sopenharmony_ci INTERNAL, 48098c2ecf20Sopenharmony_ci { }, 48108c2ecf20Sopenharmony_ci { { 0, 1 } }, 48118c2ecf20Sopenharmony_ci }, 48128c2ecf20Sopenharmony_ci { 48138c2ecf20Sopenharmony_ci "JMP_JSET_K: if (0x3 & 0xffffffff) return 1", 48148c2ecf20Sopenharmony_ci .u.insns_int = { 48158c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R0, 0), 48168c2ecf20Sopenharmony_ci BPF_LD_IMM64(R1, 3), 48178c2ecf20Sopenharmony_ci BPF_JMP_IMM(BPF_JSET, R1, 0xffffffff, 1), 48188c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 48198c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R0, 1), 48208c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 48218c2ecf20Sopenharmony_ci }, 48228c2ecf20Sopenharmony_ci INTERNAL, 48238c2ecf20Sopenharmony_ci { }, 48248c2ecf20Sopenharmony_ci { { 0, 1 } }, 48258c2ecf20Sopenharmony_ci }, 48268c2ecf20Sopenharmony_ci /* BPF_JMP | BPF_JSGT | BPF_X */ 48278c2ecf20Sopenharmony_ci { 48288c2ecf20Sopenharmony_ci "JMP_JSGT_X: Signed jump: if (-1 > -2) return 1", 48298c2ecf20Sopenharmony_ci .u.insns_int = { 48308c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R0, 0), 48318c2ecf20Sopenharmony_ci BPF_LD_IMM64(R1, -1), 48328c2ecf20Sopenharmony_ci BPF_LD_IMM64(R2, -2), 48338c2ecf20Sopenharmony_ci BPF_JMP_REG(BPF_JSGT, R1, R2, 1), 48348c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 48358c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R0, 1), 48368c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 48378c2ecf20Sopenharmony_ci }, 48388c2ecf20Sopenharmony_ci INTERNAL, 48398c2ecf20Sopenharmony_ci { }, 48408c2ecf20Sopenharmony_ci { { 0, 1 } }, 48418c2ecf20Sopenharmony_ci }, 48428c2ecf20Sopenharmony_ci { 48438c2ecf20Sopenharmony_ci "JMP_JSGT_X: Signed jump: if (-1 > -1) return 0", 48448c2ecf20Sopenharmony_ci .u.insns_int = { 48458c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R0, 1), 48468c2ecf20Sopenharmony_ci BPF_LD_IMM64(R1, -1), 48478c2ecf20Sopenharmony_ci BPF_LD_IMM64(R2, -1), 48488c2ecf20Sopenharmony_ci BPF_JMP_REG(BPF_JSGT, R1, R2, 1), 48498c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 48508c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R0, 0), 48518c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 48528c2ecf20Sopenharmony_ci }, 48538c2ecf20Sopenharmony_ci INTERNAL, 48548c2ecf20Sopenharmony_ci { }, 48558c2ecf20Sopenharmony_ci { { 0, 1 } }, 48568c2ecf20Sopenharmony_ci }, 48578c2ecf20Sopenharmony_ci /* BPF_JMP | BPF_JSLT | BPF_X */ 48588c2ecf20Sopenharmony_ci { 48598c2ecf20Sopenharmony_ci "JMP_JSLT_X: Signed jump: if (-2 < -1) return 1", 48608c2ecf20Sopenharmony_ci .u.insns_int = { 48618c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R0, 0), 48628c2ecf20Sopenharmony_ci BPF_LD_IMM64(R1, -1), 48638c2ecf20Sopenharmony_ci BPF_LD_IMM64(R2, -2), 48648c2ecf20Sopenharmony_ci BPF_JMP_REG(BPF_JSLT, R2, R1, 1), 48658c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 48668c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R0, 1), 48678c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 48688c2ecf20Sopenharmony_ci }, 48698c2ecf20Sopenharmony_ci INTERNAL, 48708c2ecf20Sopenharmony_ci { }, 48718c2ecf20Sopenharmony_ci { { 0, 1 } }, 48728c2ecf20Sopenharmony_ci }, 48738c2ecf20Sopenharmony_ci { 48748c2ecf20Sopenharmony_ci "JMP_JSLT_X: Signed jump: if (-1 < -1) return 0", 48758c2ecf20Sopenharmony_ci .u.insns_int = { 48768c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R0, 1), 48778c2ecf20Sopenharmony_ci BPF_LD_IMM64(R1, -1), 48788c2ecf20Sopenharmony_ci BPF_LD_IMM64(R2, -1), 48798c2ecf20Sopenharmony_ci BPF_JMP_REG(BPF_JSLT, R1, R2, 1), 48808c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 48818c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R0, 0), 48828c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 48838c2ecf20Sopenharmony_ci }, 48848c2ecf20Sopenharmony_ci INTERNAL, 48858c2ecf20Sopenharmony_ci { }, 48868c2ecf20Sopenharmony_ci { { 0, 1 } }, 48878c2ecf20Sopenharmony_ci }, 48888c2ecf20Sopenharmony_ci /* BPF_JMP | BPF_JSGE | BPF_X */ 48898c2ecf20Sopenharmony_ci { 48908c2ecf20Sopenharmony_ci "JMP_JSGE_X: Signed jump: if (-1 >= -2) return 1", 48918c2ecf20Sopenharmony_ci .u.insns_int = { 48928c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R0, 0), 48938c2ecf20Sopenharmony_ci BPF_LD_IMM64(R1, -1), 48948c2ecf20Sopenharmony_ci BPF_LD_IMM64(R2, -2), 48958c2ecf20Sopenharmony_ci BPF_JMP_REG(BPF_JSGE, R1, R2, 1), 48968c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 48978c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R0, 1), 48988c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 48998c2ecf20Sopenharmony_ci }, 49008c2ecf20Sopenharmony_ci INTERNAL, 49018c2ecf20Sopenharmony_ci { }, 49028c2ecf20Sopenharmony_ci { { 0, 1 } }, 49038c2ecf20Sopenharmony_ci }, 49048c2ecf20Sopenharmony_ci { 49058c2ecf20Sopenharmony_ci "JMP_JSGE_X: Signed jump: if (-1 >= -1) return 1", 49068c2ecf20Sopenharmony_ci .u.insns_int = { 49078c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R0, 0), 49088c2ecf20Sopenharmony_ci BPF_LD_IMM64(R1, -1), 49098c2ecf20Sopenharmony_ci BPF_LD_IMM64(R2, -1), 49108c2ecf20Sopenharmony_ci BPF_JMP_REG(BPF_JSGE, R1, R2, 1), 49118c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 49128c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R0, 1), 49138c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 49148c2ecf20Sopenharmony_ci }, 49158c2ecf20Sopenharmony_ci INTERNAL, 49168c2ecf20Sopenharmony_ci { }, 49178c2ecf20Sopenharmony_ci { { 0, 1 } }, 49188c2ecf20Sopenharmony_ci }, 49198c2ecf20Sopenharmony_ci /* BPF_JMP | BPF_JSLE | BPF_X */ 49208c2ecf20Sopenharmony_ci { 49218c2ecf20Sopenharmony_ci "JMP_JSLE_X: Signed jump: if (-2 <= -1) return 1", 49228c2ecf20Sopenharmony_ci .u.insns_int = { 49238c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R0, 0), 49248c2ecf20Sopenharmony_ci BPF_LD_IMM64(R1, -1), 49258c2ecf20Sopenharmony_ci BPF_LD_IMM64(R2, -2), 49268c2ecf20Sopenharmony_ci BPF_JMP_REG(BPF_JSLE, R2, R1, 1), 49278c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 49288c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R0, 1), 49298c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 49308c2ecf20Sopenharmony_ci }, 49318c2ecf20Sopenharmony_ci INTERNAL, 49328c2ecf20Sopenharmony_ci { }, 49338c2ecf20Sopenharmony_ci { { 0, 1 } }, 49348c2ecf20Sopenharmony_ci }, 49358c2ecf20Sopenharmony_ci { 49368c2ecf20Sopenharmony_ci "JMP_JSLE_X: Signed jump: if (-1 <= -1) return 1", 49378c2ecf20Sopenharmony_ci .u.insns_int = { 49388c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R0, 0), 49398c2ecf20Sopenharmony_ci BPF_LD_IMM64(R1, -1), 49408c2ecf20Sopenharmony_ci BPF_LD_IMM64(R2, -1), 49418c2ecf20Sopenharmony_ci BPF_JMP_REG(BPF_JSLE, R1, R2, 1), 49428c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 49438c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R0, 1), 49448c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 49458c2ecf20Sopenharmony_ci }, 49468c2ecf20Sopenharmony_ci INTERNAL, 49478c2ecf20Sopenharmony_ci { }, 49488c2ecf20Sopenharmony_ci { { 0, 1 } }, 49498c2ecf20Sopenharmony_ci }, 49508c2ecf20Sopenharmony_ci /* BPF_JMP | BPF_JGT | BPF_X */ 49518c2ecf20Sopenharmony_ci { 49528c2ecf20Sopenharmony_ci "JMP_JGT_X: if (3 > 2) return 1", 49538c2ecf20Sopenharmony_ci .u.insns_int = { 49548c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R0, 0), 49558c2ecf20Sopenharmony_ci BPF_LD_IMM64(R1, 3), 49568c2ecf20Sopenharmony_ci BPF_LD_IMM64(R2, 2), 49578c2ecf20Sopenharmony_ci BPF_JMP_REG(BPF_JGT, R1, R2, 1), 49588c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 49598c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R0, 1), 49608c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 49618c2ecf20Sopenharmony_ci }, 49628c2ecf20Sopenharmony_ci INTERNAL, 49638c2ecf20Sopenharmony_ci { }, 49648c2ecf20Sopenharmony_ci { { 0, 1 } }, 49658c2ecf20Sopenharmony_ci }, 49668c2ecf20Sopenharmony_ci { 49678c2ecf20Sopenharmony_ci "JMP_JGT_X: Unsigned jump: if (-1 > 1) return 1", 49688c2ecf20Sopenharmony_ci .u.insns_int = { 49698c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R0, 0), 49708c2ecf20Sopenharmony_ci BPF_LD_IMM64(R1, -1), 49718c2ecf20Sopenharmony_ci BPF_LD_IMM64(R2, 1), 49728c2ecf20Sopenharmony_ci BPF_JMP_REG(BPF_JGT, R1, R2, 1), 49738c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 49748c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R0, 1), 49758c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 49768c2ecf20Sopenharmony_ci }, 49778c2ecf20Sopenharmony_ci INTERNAL, 49788c2ecf20Sopenharmony_ci { }, 49798c2ecf20Sopenharmony_ci { { 0, 1 } }, 49808c2ecf20Sopenharmony_ci }, 49818c2ecf20Sopenharmony_ci /* BPF_JMP | BPF_JLT | BPF_X */ 49828c2ecf20Sopenharmony_ci { 49838c2ecf20Sopenharmony_ci "JMP_JLT_X: if (2 < 3) return 1", 49848c2ecf20Sopenharmony_ci .u.insns_int = { 49858c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R0, 0), 49868c2ecf20Sopenharmony_ci BPF_LD_IMM64(R1, 3), 49878c2ecf20Sopenharmony_ci BPF_LD_IMM64(R2, 2), 49888c2ecf20Sopenharmony_ci BPF_JMP_REG(BPF_JLT, R2, R1, 1), 49898c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 49908c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R0, 1), 49918c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 49928c2ecf20Sopenharmony_ci }, 49938c2ecf20Sopenharmony_ci INTERNAL, 49948c2ecf20Sopenharmony_ci { }, 49958c2ecf20Sopenharmony_ci { { 0, 1 } }, 49968c2ecf20Sopenharmony_ci }, 49978c2ecf20Sopenharmony_ci { 49988c2ecf20Sopenharmony_ci "JMP_JLT_X: Unsigned jump: if (1 < -1) return 1", 49998c2ecf20Sopenharmony_ci .u.insns_int = { 50008c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R0, 0), 50018c2ecf20Sopenharmony_ci BPF_LD_IMM64(R1, -1), 50028c2ecf20Sopenharmony_ci BPF_LD_IMM64(R2, 1), 50038c2ecf20Sopenharmony_ci BPF_JMP_REG(BPF_JLT, R2, R1, 1), 50048c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 50058c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R0, 1), 50068c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 50078c2ecf20Sopenharmony_ci }, 50088c2ecf20Sopenharmony_ci INTERNAL, 50098c2ecf20Sopenharmony_ci { }, 50108c2ecf20Sopenharmony_ci { { 0, 1 } }, 50118c2ecf20Sopenharmony_ci }, 50128c2ecf20Sopenharmony_ci /* BPF_JMP | BPF_JGE | BPF_X */ 50138c2ecf20Sopenharmony_ci { 50148c2ecf20Sopenharmony_ci "JMP_JGE_X: if (3 >= 2) return 1", 50158c2ecf20Sopenharmony_ci .u.insns_int = { 50168c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R0, 0), 50178c2ecf20Sopenharmony_ci BPF_LD_IMM64(R1, 3), 50188c2ecf20Sopenharmony_ci BPF_LD_IMM64(R2, 2), 50198c2ecf20Sopenharmony_ci BPF_JMP_REG(BPF_JGE, R1, R2, 1), 50208c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 50218c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R0, 1), 50228c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 50238c2ecf20Sopenharmony_ci }, 50248c2ecf20Sopenharmony_ci INTERNAL, 50258c2ecf20Sopenharmony_ci { }, 50268c2ecf20Sopenharmony_ci { { 0, 1 } }, 50278c2ecf20Sopenharmony_ci }, 50288c2ecf20Sopenharmony_ci { 50298c2ecf20Sopenharmony_ci "JMP_JGE_X: if (3 >= 3) return 1", 50308c2ecf20Sopenharmony_ci .u.insns_int = { 50318c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R0, 0), 50328c2ecf20Sopenharmony_ci BPF_LD_IMM64(R1, 3), 50338c2ecf20Sopenharmony_ci BPF_LD_IMM64(R2, 3), 50348c2ecf20Sopenharmony_ci BPF_JMP_REG(BPF_JGE, R1, R2, 1), 50358c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 50368c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R0, 1), 50378c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 50388c2ecf20Sopenharmony_ci }, 50398c2ecf20Sopenharmony_ci INTERNAL, 50408c2ecf20Sopenharmony_ci { }, 50418c2ecf20Sopenharmony_ci { { 0, 1 } }, 50428c2ecf20Sopenharmony_ci }, 50438c2ecf20Sopenharmony_ci /* BPF_JMP | BPF_JLE | BPF_X */ 50448c2ecf20Sopenharmony_ci { 50458c2ecf20Sopenharmony_ci "JMP_JLE_X: if (2 <= 3) return 1", 50468c2ecf20Sopenharmony_ci .u.insns_int = { 50478c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R0, 0), 50488c2ecf20Sopenharmony_ci BPF_LD_IMM64(R1, 3), 50498c2ecf20Sopenharmony_ci BPF_LD_IMM64(R2, 2), 50508c2ecf20Sopenharmony_ci BPF_JMP_REG(BPF_JLE, R2, R1, 1), 50518c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 50528c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R0, 1), 50538c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 50548c2ecf20Sopenharmony_ci }, 50558c2ecf20Sopenharmony_ci INTERNAL, 50568c2ecf20Sopenharmony_ci { }, 50578c2ecf20Sopenharmony_ci { { 0, 1 } }, 50588c2ecf20Sopenharmony_ci }, 50598c2ecf20Sopenharmony_ci { 50608c2ecf20Sopenharmony_ci "JMP_JLE_X: if (3 <= 3) return 1", 50618c2ecf20Sopenharmony_ci .u.insns_int = { 50628c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R0, 0), 50638c2ecf20Sopenharmony_ci BPF_LD_IMM64(R1, 3), 50648c2ecf20Sopenharmony_ci BPF_LD_IMM64(R2, 3), 50658c2ecf20Sopenharmony_ci BPF_JMP_REG(BPF_JLE, R1, R2, 1), 50668c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 50678c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R0, 1), 50688c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 50698c2ecf20Sopenharmony_ci }, 50708c2ecf20Sopenharmony_ci INTERNAL, 50718c2ecf20Sopenharmony_ci { }, 50728c2ecf20Sopenharmony_ci { { 0, 1 } }, 50738c2ecf20Sopenharmony_ci }, 50748c2ecf20Sopenharmony_ci { 50758c2ecf20Sopenharmony_ci /* Mainly testing JIT + imm64 here. */ 50768c2ecf20Sopenharmony_ci "JMP_JGE_X: ldimm64 test 1", 50778c2ecf20Sopenharmony_ci .u.insns_int = { 50788c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R0, 0), 50798c2ecf20Sopenharmony_ci BPF_LD_IMM64(R1, 3), 50808c2ecf20Sopenharmony_ci BPF_LD_IMM64(R2, 2), 50818c2ecf20Sopenharmony_ci BPF_JMP_REG(BPF_JGE, R1, R2, 2), 50828c2ecf20Sopenharmony_ci BPF_LD_IMM64(R0, 0xffffffffffffffffULL), 50838c2ecf20Sopenharmony_ci BPF_LD_IMM64(R0, 0xeeeeeeeeeeeeeeeeULL), 50848c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 50858c2ecf20Sopenharmony_ci }, 50868c2ecf20Sopenharmony_ci INTERNAL, 50878c2ecf20Sopenharmony_ci { }, 50888c2ecf20Sopenharmony_ci { { 0, 0xeeeeeeeeU } }, 50898c2ecf20Sopenharmony_ci }, 50908c2ecf20Sopenharmony_ci { 50918c2ecf20Sopenharmony_ci "JMP_JGE_X: ldimm64 test 2", 50928c2ecf20Sopenharmony_ci .u.insns_int = { 50938c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R0, 0), 50948c2ecf20Sopenharmony_ci BPF_LD_IMM64(R1, 3), 50958c2ecf20Sopenharmony_ci BPF_LD_IMM64(R2, 2), 50968c2ecf20Sopenharmony_ci BPF_JMP_REG(BPF_JGE, R1, R2, 0), 50978c2ecf20Sopenharmony_ci BPF_LD_IMM64(R0, 0xffffffffffffffffULL), 50988c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 50998c2ecf20Sopenharmony_ci }, 51008c2ecf20Sopenharmony_ci INTERNAL, 51018c2ecf20Sopenharmony_ci { }, 51028c2ecf20Sopenharmony_ci { { 0, 0xffffffffU } }, 51038c2ecf20Sopenharmony_ci }, 51048c2ecf20Sopenharmony_ci { 51058c2ecf20Sopenharmony_ci "JMP_JGE_X: ldimm64 test 3", 51068c2ecf20Sopenharmony_ci .u.insns_int = { 51078c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R0, 1), 51088c2ecf20Sopenharmony_ci BPF_LD_IMM64(R1, 3), 51098c2ecf20Sopenharmony_ci BPF_LD_IMM64(R2, 2), 51108c2ecf20Sopenharmony_ci BPF_JMP_REG(BPF_JGE, R1, R2, 4), 51118c2ecf20Sopenharmony_ci BPF_LD_IMM64(R0, 0xffffffffffffffffULL), 51128c2ecf20Sopenharmony_ci BPF_LD_IMM64(R0, 0xeeeeeeeeeeeeeeeeULL), 51138c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 51148c2ecf20Sopenharmony_ci }, 51158c2ecf20Sopenharmony_ci INTERNAL, 51168c2ecf20Sopenharmony_ci { }, 51178c2ecf20Sopenharmony_ci { { 0, 1 } }, 51188c2ecf20Sopenharmony_ci }, 51198c2ecf20Sopenharmony_ci { 51208c2ecf20Sopenharmony_ci "JMP_JLE_X: ldimm64 test 1", 51218c2ecf20Sopenharmony_ci .u.insns_int = { 51228c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R0, 0), 51238c2ecf20Sopenharmony_ci BPF_LD_IMM64(R1, 3), 51248c2ecf20Sopenharmony_ci BPF_LD_IMM64(R2, 2), 51258c2ecf20Sopenharmony_ci BPF_JMP_REG(BPF_JLE, R2, R1, 2), 51268c2ecf20Sopenharmony_ci BPF_LD_IMM64(R0, 0xffffffffffffffffULL), 51278c2ecf20Sopenharmony_ci BPF_LD_IMM64(R0, 0xeeeeeeeeeeeeeeeeULL), 51288c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 51298c2ecf20Sopenharmony_ci }, 51308c2ecf20Sopenharmony_ci INTERNAL, 51318c2ecf20Sopenharmony_ci { }, 51328c2ecf20Sopenharmony_ci { { 0, 0xeeeeeeeeU } }, 51338c2ecf20Sopenharmony_ci }, 51348c2ecf20Sopenharmony_ci { 51358c2ecf20Sopenharmony_ci "JMP_JLE_X: ldimm64 test 2", 51368c2ecf20Sopenharmony_ci .u.insns_int = { 51378c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R0, 0), 51388c2ecf20Sopenharmony_ci BPF_LD_IMM64(R1, 3), 51398c2ecf20Sopenharmony_ci BPF_LD_IMM64(R2, 2), 51408c2ecf20Sopenharmony_ci BPF_JMP_REG(BPF_JLE, R2, R1, 0), 51418c2ecf20Sopenharmony_ci BPF_LD_IMM64(R0, 0xffffffffffffffffULL), 51428c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 51438c2ecf20Sopenharmony_ci }, 51448c2ecf20Sopenharmony_ci INTERNAL, 51458c2ecf20Sopenharmony_ci { }, 51468c2ecf20Sopenharmony_ci { { 0, 0xffffffffU } }, 51478c2ecf20Sopenharmony_ci }, 51488c2ecf20Sopenharmony_ci { 51498c2ecf20Sopenharmony_ci "JMP_JLE_X: ldimm64 test 3", 51508c2ecf20Sopenharmony_ci .u.insns_int = { 51518c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R0, 1), 51528c2ecf20Sopenharmony_ci BPF_LD_IMM64(R1, 3), 51538c2ecf20Sopenharmony_ci BPF_LD_IMM64(R2, 2), 51548c2ecf20Sopenharmony_ci BPF_JMP_REG(BPF_JLE, R2, R1, 4), 51558c2ecf20Sopenharmony_ci BPF_LD_IMM64(R0, 0xffffffffffffffffULL), 51568c2ecf20Sopenharmony_ci BPF_LD_IMM64(R0, 0xeeeeeeeeeeeeeeeeULL), 51578c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 51588c2ecf20Sopenharmony_ci }, 51598c2ecf20Sopenharmony_ci INTERNAL, 51608c2ecf20Sopenharmony_ci { }, 51618c2ecf20Sopenharmony_ci { { 0, 1 } }, 51628c2ecf20Sopenharmony_ci }, 51638c2ecf20Sopenharmony_ci /* BPF_JMP | BPF_JNE | BPF_X */ 51648c2ecf20Sopenharmony_ci { 51658c2ecf20Sopenharmony_ci "JMP_JNE_X: if (3 != 2) return 1", 51668c2ecf20Sopenharmony_ci .u.insns_int = { 51678c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R0, 0), 51688c2ecf20Sopenharmony_ci BPF_LD_IMM64(R1, 3), 51698c2ecf20Sopenharmony_ci BPF_LD_IMM64(R2, 2), 51708c2ecf20Sopenharmony_ci BPF_JMP_REG(BPF_JNE, R1, R2, 1), 51718c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 51728c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R0, 1), 51738c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 51748c2ecf20Sopenharmony_ci }, 51758c2ecf20Sopenharmony_ci INTERNAL, 51768c2ecf20Sopenharmony_ci { }, 51778c2ecf20Sopenharmony_ci { { 0, 1 } }, 51788c2ecf20Sopenharmony_ci }, 51798c2ecf20Sopenharmony_ci /* BPF_JMP | BPF_JEQ | BPF_X */ 51808c2ecf20Sopenharmony_ci { 51818c2ecf20Sopenharmony_ci "JMP_JEQ_X: if (3 == 3) return 1", 51828c2ecf20Sopenharmony_ci .u.insns_int = { 51838c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R0, 0), 51848c2ecf20Sopenharmony_ci BPF_LD_IMM64(R1, 3), 51858c2ecf20Sopenharmony_ci BPF_LD_IMM64(R2, 3), 51868c2ecf20Sopenharmony_ci BPF_JMP_REG(BPF_JEQ, R1, R2, 1), 51878c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 51888c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R0, 1), 51898c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 51908c2ecf20Sopenharmony_ci }, 51918c2ecf20Sopenharmony_ci INTERNAL, 51928c2ecf20Sopenharmony_ci { }, 51938c2ecf20Sopenharmony_ci { { 0, 1 } }, 51948c2ecf20Sopenharmony_ci }, 51958c2ecf20Sopenharmony_ci /* BPF_JMP | BPF_JSET | BPF_X */ 51968c2ecf20Sopenharmony_ci { 51978c2ecf20Sopenharmony_ci "JMP_JSET_X: if (0x3 & 0x2) return 1", 51988c2ecf20Sopenharmony_ci .u.insns_int = { 51998c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R0, 0), 52008c2ecf20Sopenharmony_ci BPF_LD_IMM64(R1, 3), 52018c2ecf20Sopenharmony_ci BPF_LD_IMM64(R2, 2), 52028c2ecf20Sopenharmony_ci BPF_JMP_REG(BPF_JSET, R1, R2, 1), 52038c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 52048c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R0, 1), 52058c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 52068c2ecf20Sopenharmony_ci }, 52078c2ecf20Sopenharmony_ci INTERNAL, 52088c2ecf20Sopenharmony_ci { }, 52098c2ecf20Sopenharmony_ci { { 0, 1 } }, 52108c2ecf20Sopenharmony_ci }, 52118c2ecf20Sopenharmony_ci { 52128c2ecf20Sopenharmony_ci "JMP_JSET_X: if (0x3 & 0xffffffff) return 1", 52138c2ecf20Sopenharmony_ci .u.insns_int = { 52148c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R0, 0), 52158c2ecf20Sopenharmony_ci BPF_LD_IMM64(R1, 3), 52168c2ecf20Sopenharmony_ci BPF_LD_IMM64(R2, 0xffffffff), 52178c2ecf20Sopenharmony_ci BPF_JMP_REG(BPF_JSET, R1, R2, 1), 52188c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 52198c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R0, 1), 52208c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 52218c2ecf20Sopenharmony_ci }, 52228c2ecf20Sopenharmony_ci INTERNAL, 52238c2ecf20Sopenharmony_ci { }, 52248c2ecf20Sopenharmony_ci { { 0, 1 } }, 52258c2ecf20Sopenharmony_ci }, 52268c2ecf20Sopenharmony_ci { 52278c2ecf20Sopenharmony_ci "JMP_JA: Jump, gap, jump, ...", 52288c2ecf20Sopenharmony_ci { }, 52298c2ecf20Sopenharmony_ci CLASSIC | FLAG_NO_DATA, 52308c2ecf20Sopenharmony_ci { }, 52318c2ecf20Sopenharmony_ci { { 0, 0xababcbac } }, 52328c2ecf20Sopenharmony_ci .fill_helper = bpf_fill_ja, 52338c2ecf20Sopenharmony_ci }, 52348c2ecf20Sopenharmony_ci { /* Mainly checking JIT here. */ 52358c2ecf20Sopenharmony_ci "BPF_MAXINSNS: Maximum possible literals", 52368c2ecf20Sopenharmony_ci { }, 52378c2ecf20Sopenharmony_ci CLASSIC | FLAG_NO_DATA, 52388c2ecf20Sopenharmony_ci { }, 52398c2ecf20Sopenharmony_ci { { 0, 0xffffffff } }, 52408c2ecf20Sopenharmony_ci .fill_helper = bpf_fill_maxinsns1, 52418c2ecf20Sopenharmony_ci }, 52428c2ecf20Sopenharmony_ci { /* Mainly checking JIT here. */ 52438c2ecf20Sopenharmony_ci "BPF_MAXINSNS: Single literal", 52448c2ecf20Sopenharmony_ci { }, 52458c2ecf20Sopenharmony_ci CLASSIC | FLAG_NO_DATA, 52468c2ecf20Sopenharmony_ci { }, 52478c2ecf20Sopenharmony_ci { { 0, 0xfefefefe } }, 52488c2ecf20Sopenharmony_ci .fill_helper = bpf_fill_maxinsns2, 52498c2ecf20Sopenharmony_ci }, 52508c2ecf20Sopenharmony_ci { /* Mainly checking JIT here. */ 52518c2ecf20Sopenharmony_ci "BPF_MAXINSNS: Run/add until end", 52528c2ecf20Sopenharmony_ci { }, 52538c2ecf20Sopenharmony_ci CLASSIC | FLAG_NO_DATA, 52548c2ecf20Sopenharmony_ci { }, 52558c2ecf20Sopenharmony_ci { { 0, 0x947bf368 } }, 52568c2ecf20Sopenharmony_ci .fill_helper = bpf_fill_maxinsns3, 52578c2ecf20Sopenharmony_ci }, 52588c2ecf20Sopenharmony_ci { 52598c2ecf20Sopenharmony_ci "BPF_MAXINSNS: Too many instructions", 52608c2ecf20Sopenharmony_ci { }, 52618c2ecf20Sopenharmony_ci CLASSIC | FLAG_NO_DATA | FLAG_EXPECTED_FAIL, 52628c2ecf20Sopenharmony_ci { }, 52638c2ecf20Sopenharmony_ci { }, 52648c2ecf20Sopenharmony_ci .fill_helper = bpf_fill_maxinsns4, 52658c2ecf20Sopenharmony_ci .expected_errcode = -EINVAL, 52668c2ecf20Sopenharmony_ci }, 52678c2ecf20Sopenharmony_ci { /* Mainly checking JIT here. */ 52688c2ecf20Sopenharmony_ci "BPF_MAXINSNS: Very long jump", 52698c2ecf20Sopenharmony_ci { }, 52708c2ecf20Sopenharmony_ci CLASSIC | FLAG_NO_DATA, 52718c2ecf20Sopenharmony_ci { }, 52728c2ecf20Sopenharmony_ci { { 0, 0xabababab } }, 52738c2ecf20Sopenharmony_ci .fill_helper = bpf_fill_maxinsns5, 52748c2ecf20Sopenharmony_ci }, 52758c2ecf20Sopenharmony_ci { /* Mainly checking JIT here. */ 52768c2ecf20Sopenharmony_ci "BPF_MAXINSNS: Ctx heavy transformations", 52778c2ecf20Sopenharmony_ci { }, 52788c2ecf20Sopenharmony_ci CLASSIC, 52798c2ecf20Sopenharmony_ci { }, 52808c2ecf20Sopenharmony_ci { 52818c2ecf20Sopenharmony_ci { 1, SKB_VLAN_PRESENT }, 52828c2ecf20Sopenharmony_ci { 10, SKB_VLAN_PRESENT } 52838c2ecf20Sopenharmony_ci }, 52848c2ecf20Sopenharmony_ci .fill_helper = bpf_fill_maxinsns6, 52858c2ecf20Sopenharmony_ci }, 52868c2ecf20Sopenharmony_ci { /* Mainly checking JIT here. */ 52878c2ecf20Sopenharmony_ci "BPF_MAXINSNS: Call heavy transformations", 52888c2ecf20Sopenharmony_ci { }, 52898c2ecf20Sopenharmony_ci CLASSIC | FLAG_NO_DATA, 52908c2ecf20Sopenharmony_ci { }, 52918c2ecf20Sopenharmony_ci { { 1, 0 }, { 10, 0 } }, 52928c2ecf20Sopenharmony_ci .fill_helper = bpf_fill_maxinsns7, 52938c2ecf20Sopenharmony_ci }, 52948c2ecf20Sopenharmony_ci { /* Mainly checking JIT here. */ 52958c2ecf20Sopenharmony_ci "BPF_MAXINSNS: Jump heavy test", 52968c2ecf20Sopenharmony_ci { }, 52978c2ecf20Sopenharmony_ci CLASSIC | FLAG_NO_DATA, 52988c2ecf20Sopenharmony_ci { }, 52998c2ecf20Sopenharmony_ci { { 0, 0xffffffff } }, 53008c2ecf20Sopenharmony_ci .fill_helper = bpf_fill_maxinsns8, 53018c2ecf20Sopenharmony_ci }, 53028c2ecf20Sopenharmony_ci { /* Mainly checking JIT here. */ 53038c2ecf20Sopenharmony_ci "BPF_MAXINSNS: Very long jump backwards", 53048c2ecf20Sopenharmony_ci { }, 53058c2ecf20Sopenharmony_ci INTERNAL | FLAG_NO_DATA, 53068c2ecf20Sopenharmony_ci { }, 53078c2ecf20Sopenharmony_ci { { 0, 0xcbababab } }, 53088c2ecf20Sopenharmony_ci .fill_helper = bpf_fill_maxinsns9, 53098c2ecf20Sopenharmony_ci }, 53108c2ecf20Sopenharmony_ci { /* Mainly checking JIT here. */ 53118c2ecf20Sopenharmony_ci "BPF_MAXINSNS: Edge hopping nuthouse", 53128c2ecf20Sopenharmony_ci { }, 53138c2ecf20Sopenharmony_ci INTERNAL | FLAG_NO_DATA, 53148c2ecf20Sopenharmony_ci { }, 53158c2ecf20Sopenharmony_ci { { 0, 0xabababac } }, 53168c2ecf20Sopenharmony_ci .fill_helper = bpf_fill_maxinsns10, 53178c2ecf20Sopenharmony_ci }, 53188c2ecf20Sopenharmony_ci { 53198c2ecf20Sopenharmony_ci "BPF_MAXINSNS: Jump, gap, jump, ...", 53208c2ecf20Sopenharmony_ci { }, 53218c2ecf20Sopenharmony_ci#if defined(CONFIG_BPF_JIT_ALWAYS_ON) && defined(CONFIG_X86) 53228c2ecf20Sopenharmony_ci CLASSIC | FLAG_NO_DATA | FLAG_EXPECTED_FAIL, 53238c2ecf20Sopenharmony_ci#else 53248c2ecf20Sopenharmony_ci CLASSIC | FLAG_NO_DATA, 53258c2ecf20Sopenharmony_ci#endif 53268c2ecf20Sopenharmony_ci { }, 53278c2ecf20Sopenharmony_ci { { 0, 0xababcbac } }, 53288c2ecf20Sopenharmony_ci .fill_helper = bpf_fill_maxinsns11, 53298c2ecf20Sopenharmony_ci .expected_errcode = -ENOTSUPP, 53308c2ecf20Sopenharmony_ci }, 53318c2ecf20Sopenharmony_ci { 53328c2ecf20Sopenharmony_ci "BPF_MAXINSNS: jump over MSH", 53338c2ecf20Sopenharmony_ci { }, 53348c2ecf20Sopenharmony_ci CLASSIC | FLAG_EXPECTED_FAIL, 53358c2ecf20Sopenharmony_ci { 0xfa, 0xfb, 0xfc, 0xfd, }, 53368c2ecf20Sopenharmony_ci { { 4, 0xabababab } }, 53378c2ecf20Sopenharmony_ci .fill_helper = bpf_fill_maxinsns12, 53388c2ecf20Sopenharmony_ci .expected_errcode = -EINVAL, 53398c2ecf20Sopenharmony_ci }, 53408c2ecf20Sopenharmony_ci { 53418c2ecf20Sopenharmony_ci "BPF_MAXINSNS: exec all MSH", 53428c2ecf20Sopenharmony_ci { }, 53438c2ecf20Sopenharmony_ci CLASSIC, 53448c2ecf20Sopenharmony_ci { 0xfa, 0xfb, 0xfc, 0xfd, }, 53458c2ecf20Sopenharmony_ci { { 4, 0xababab83 } }, 53468c2ecf20Sopenharmony_ci .fill_helper = bpf_fill_maxinsns13, 53478c2ecf20Sopenharmony_ci }, 53488c2ecf20Sopenharmony_ci { 53498c2ecf20Sopenharmony_ci "BPF_MAXINSNS: ld_abs+get_processor_id", 53508c2ecf20Sopenharmony_ci { }, 53518c2ecf20Sopenharmony_ci CLASSIC, 53528c2ecf20Sopenharmony_ci { }, 53538c2ecf20Sopenharmony_ci { { 1, 0xbee } }, 53548c2ecf20Sopenharmony_ci .fill_helper = bpf_fill_ld_abs_get_processor_id, 53558c2ecf20Sopenharmony_ci }, 53568c2ecf20Sopenharmony_ci /* 53578c2ecf20Sopenharmony_ci * LD_IND / LD_ABS on fragmented SKBs 53588c2ecf20Sopenharmony_ci */ 53598c2ecf20Sopenharmony_ci { 53608c2ecf20Sopenharmony_ci "LD_IND byte frag", 53618c2ecf20Sopenharmony_ci .u.insns = { 53628c2ecf20Sopenharmony_ci BPF_STMT(BPF_LDX | BPF_IMM, 0x40), 53638c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_IND | BPF_B, 0x0), 53648c2ecf20Sopenharmony_ci BPF_STMT(BPF_RET | BPF_A, 0x0), 53658c2ecf20Sopenharmony_ci }, 53668c2ecf20Sopenharmony_ci CLASSIC | FLAG_SKB_FRAG, 53678c2ecf20Sopenharmony_ci { }, 53688c2ecf20Sopenharmony_ci { {0x40, 0x42} }, 53698c2ecf20Sopenharmony_ci .frag_data = { 53708c2ecf20Sopenharmony_ci 0x42, 0x00, 0x00, 0x00, 53718c2ecf20Sopenharmony_ci 0x43, 0x44, 0x00, 0x00, 53728c2ecf20Sopenharmony_ci 0x21, 0x07, 0x19, 0x83, 53738c2ecf20Sopenharmony_ci }, 53748c2ecf20Sopenharmony_ci }, 53758c2ecf20Sopenharmony_ci { 53768c2ecf20Sopenharmony_ci "LD_IND halfword frag", 53778c2ecf20Sopenharmony_ci .u.insns = { 53788c2ecf20Sopenharmony_ci BPF_STMT(BPF_LDX | BPF_IMM, 0x40), 53798c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_IND | BPF_H, 0x4), 53808c2ecf20Sopenharmony_ci BPF_STMT(BPF_RET | BPF_A, 0x0), 53818c2ecf20Sopenharmony_ci }, 53828c2ecf20Sopenharmony_ci CLASSIC | FLAG_SKB_FRAG, 53838c2ecf20Sopenharmony_ci { }, 53848c2ecf20Sopenharmony_ci { {0x40, 0x4344} }, 53858c2ecf20Sopenharmony_ci .frag_data = { 53868c2ecf20Sopenharmony_ci 0x42, 0x00, 0x00, 0x00, 53878c2ecf20Sopenharmony_ci 0x43, 0x44, 0x00, 0x00, 53888c2ecf20Sopenharmony_ci 0x21, 0x07, 0x19, 0x83, 53898c2ecf20Sopenharmony_ci }, 53908c2ecf20Sopenharmony_ci }, 53918c2ecf20Sopenharmony_ci { 53928c2ecf20Sopenharmony_ci "LD_IND word frag", 53938c2ecf20Sopenharmony_ci .u.insns = { 53948c2ecf20Sopenharmony_ci BPF_STMT(BPF_LDX | BPF_IMM, 0x40), 53958c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_IND | BPF_W, 0x8), 53968c2ecf20Sopenharmony_ci BPF_STMT(BPF_RET | BPF_A, 0x0), 53978c2ecf20Sopenharmony_ci }, 53988c2ecf20Sopenharmony_ci CLASSIC | FLAG_SKB_FRAG, 53998c2ecf20Sopenharmony_ci { }, 54008c2ecf20Sopenharmony_ci { {0x40, 0x21071983} }, 54018c2ecf20Sopenharmony_ci .frag_data = { 54028c2ecf20Sopenharmony_ci 0x42, 0x00, 0x00, 0x00, 54038c2ecf20Sopenharmony_ci 0x43, 0x44, 0x00, 0x00, 54048c2ecf20Sopenharmony_ci 0x21, 0x07, 0x19, 0x83, 54058c2ecf20Sopenharmony_ci }, 54068c2ecf20Sopenharmony_ci }, 54078c2ecf20Sopenharmony_ci { 54088c2ecf20Sopenharmony_ci "LD_IND halfword mixed head/frag", 54098c2ecf20Sopenharmony_ci .u.insns = { 54108c2ecf20Sopenharmony_ci BPF_STMT(BPF_LDX | BPF_IMM, 0x40), 54118c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_IND | BPF_H, -0x1), 54128c2ecf20Sopenharmony_ci BPF_STMT(BPF_RET | BPF_A, 0x0), 54138c2ecf20Sopenharmony_ci }, 54148c2ecf20Sopenharmony_ci CLASSIC | FLAG_SKB_FRAG, 54158c2ecf20Sopenharmony_ci { [0x3e] = 0x25, [0x3f] = 0x05, }, 54168c2ecf20Sopenharmony_ci { {0x40, 0x0519} }, 54178c2ecf20Sopenharmony_ci .frag_data = { 0x19, 0x82 }, 54188c2ecf20Sopenharmony_ci }, 54198c2ecf20Sopenharmony_ci { 54208c2ecf20Sopenharmony_ci "LD_IND word mixed head/frag", 54218c2ecf20Sopenharmony_ci .u.insns = { 54228c2ecf20Sopenharmony_ci BPF_STMT(BPF_LDX | BPF_IMM, 0x40), 54238c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_IND | BPF_W, -0x2), 54248c2ecf20Sopenharmony_ci BPF_STMT(BPF_RET | BPF_A, 0x0), 54258c2ecf20Sopenharmony_ci }, 54268c2ecf20Sopenharmony_ci CLASSIC | FLAG_SKB_FRAG, 54278c2ecf20Sopenharmony_ci { [0x3e] = 0x25, [0x3f] = 0x05, }, 54288c2ecf20Sopenharmony_ci { {0x40, 0x25051982} }, 54298c2ecf20Sopenharmony_ci .frag_data = { 0x19, 0x82 }, 54308c2ecf20Sopenharmony_ci }, 54318c2ecf20Sopenharmony_ci { 54328c2ecf20Sopenharmony_ci "LD_ABS byte frag", 54338c2ecf20Sopenharmony_ci .u.insns = { 54348c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_ABS | BPF_B, 0x40), 54358c2ecf20Sopenharmony_ci BPF_STMT(BPF_RET | BPF_A, 0x0), 54368c2ecf20Sopenharmony_ci }, 54378c2ecf20Sopenharmony_ci CLASSIC | FLAG_SKB_FRAG, 54388c2ecf20Sopenharmony_ci { }, 54398c2ecf20Sopenharmony_ci { {0x40, 0x42} }, 54408c2ecf20Sopenharmony_ci .frag_data = { 54418c2ecf20Sopenharmony_ci 0x42, 0x00, 0x00, 0x00, 54428c2ecf20Sopenharmony_ci 0x43, 0x44, 0x00, 0x00, 54438c2ecf20Sopenharmony_ci 0x21, 0x07, 0x19, 0x83, 54448c2ecf20Sopenharmony_ci }, 54458c2ecf20Sopenharmony_ci }, 54468c2ecf20Sopenharmony_ci { 54478c2ecf20Sopenharmony_ci "LD_ABS halfword frag", 54488c2ecf20Sopenharmony_ci .u.insns = { 54498c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_ABS | BPF_H, 0x44), 54508c2ecf20Sopenharmony_ci BPF_STMT(BPF_RET | BPF_A, 0x0), 54518c2ecf20Sopenharmony_ci }, 54528c2ecf20Sopenharmony_ci CLASSIC | FLAG_SKB_FRAG, 54538c2ecf20Sopenharmony_ci { }, 54548c2ecf20Sopenharmony_ci { {0x40, 0x4344} }, 54558c2ecf20Sopenharmony_ci .frag_data = { 54568c2ecf20Sopenharmony_ci 0x42, 0x00, 0x00, 0x00, 54578c2ecf20Sopenharmony_ci 0x43, 0x44, 0x00, 0x00, 54588c2ecf20Sopenharmony_ci 0x21, 0x07, 0x19, 0x83, 54598c2ecf20Sopenharmony_ci }, 54608c2ecf20Sopenharmony_ci }, 54618c2ecf20Sopenharmony_ci { 54628c2ecf20Sopenharmony_ci "LD_ABS word frag", 54638c2ecf20Sopenharmony_ci .u.insns = { 54648c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_ABS | BPF_W, 0x48), 54658c2ecf20Sopenharmony_ci BPF_STMT(BPF_RET | BPF_A, 0x0), 54668c2ecf20Sopenharmony_ci }, 54678c2ecf20Sopenharmony_ci CLASSIC | FLAG_SKB_FRAG, 54688c2ecf20Sopenharmony_ci { }, 54698c2ecf20Sopenharmony_ci { {0x40, 0x21071983} }, 54708c2ecf20Sopenharmony_ci .frag_data = { 54718c2ecf20Sopenharmony_ci 0x42, 0x00, 0x00, 0x00, 54728c2ecf20Sopenharmony_ci 0x43, 0x44, 0x00, 0x00, 54738c2ecf20Sopenharmony_ci 0x21, 0x07, 0x19, 0x83, 54748c2ecf20Sopenharmony_ci }, 54758c2ecf20Sopenharmony_ci }, 54768c2ecf20Sopenharmony_ci { 54778c2ecf20Sopenharmony_ci "LD_ABS halfword mixed head/frag", 54788c2ecf20Sopenharmony_ci .u.insns = { 54798c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_ABS | BPF_H, 0x3f), 54808c2ecf20Sopenharmony_ci BPF_STMT(BPF_RET | BPF_A, 0x0), 54818c2ecf20Sopenharmony_ci }, 54828c2ecf20Sopenharmony_ci CLASSIC | FLAG_SKB_FRAG, 54838c2ecf20Sopenharmony_ci { [0x3e] = 0x25, [0x3f] = 0x05, }, 54848c2ecf20Sopenharmony_ci { {0x40, 0x0519} }, 54858c2ecf20Sopenharmony_ci .frag_data = { 0x19, 0x82 }, 54868c2ecf20Sopenharmony_ci }, 54878c2ecf20Sopenharmony_ci { 54888c2ecf20Sopenharmony_ci "LD_ABS word mixed head/frag", 54898c2ecf20Sopenharmony_ci .u.insns = { 54908c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_ABS | BPF_W, 0x3e), 54918c2ecf20Sopenharmony_ci BPF_STMT(BPF_RET | BPF_A, 0x0), 54928c2ecf20Sopenharmony_ci }, 54938c2ecf20Sopenharmony_ci CLASSIC | FLAG_SKB_FRAG, 54948c2ecf20Sopenharmony_ci { [0x3e] = 0x25, [0x3f] = 0x05, }, 54958c2ecf20Sopenharmony_ci { {0x40, 0x25051982} }, 54968c2ecf20Sopenharmony_ci .frag_data = { 0x19, 0x82 }, 54978c2ecf20Sopenharmony_ci }, 54988c2ecf20Sopenharmony_ci /* 54998c2ecf20Sopenharmony_ci * LD_IND / LD_ABS on non fragmented SKBs 55008c2ecf20Sopenharmony_ci */ 55018c2ecf20Sopenharmony_ci { 55028c2ecf20Sopenharmony_ci /* 55038c2ecf20Sopenharmony_ci * this tests that the JIT/interpreter correctly resets X 55048c2ecf20Sopenharmony_ci * before using it in an LD_IND instruction. 55058c2ecf20Sopenharmony_ci */ 55068c2ecf20Sopenharmony_ci "LD_IND byte default X", 55078c2ecf20Sopenharmony_ci .u.insns = { 55088c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_IND | BPF_B, 0x1), 55098c2ecf20Sopenharmony_ci BPF_STMT(BPF_RET | BPF_A, 0x0), 55108c2ecf20Sopenharmony_ci }, 55118c2ecf20Sopenharmony_ci CLASSIC, 55128c2ecf20Sopenharmony_ci { [0x1] = 0x42 }, 55138c2ecf20Sopenharmony_ci { {0x40, 0x42 } }, 55148c2ecf20Sopenharmony_ci }, 55158c2ecf20Sopenharmony_ci { 55168c2ecf20Sopenharmony_ci "LD_IND byte positive offset", 55178c2ecf20Sopenharmony_ci .u.insns = { 55188c2ecf20Sopenharmony_ci BPF_STMT(BPF_LDX | BPF_IMM, 0x3e), 55198c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_IND | BPF_B, 0x1), 55208c2ecf20Sopenharmony_ci BPF_STMT(BPF_RET | BPF_A, 0x0), 55218c2ecf20Sopenharmony_ci }, 55228c2ecf20Sopenharmony_ci CLASSIC, 55238c2ecf20Sopenharmony_ci { [0x3c] = 0x25, [0x3d] = 0x05, [0x3e] = 0x19, [0x3f] = 0x82 }, 55248c2ecf20Sopenharmony_ci { {0x40, 0x82 } }, 55258c2ecf20Sopenharmony_ci }, 55268c2ecf20Sopenharmony_ci { 55278c2ecf20Sopenharmony_ci "LD_IND byte negative offset", 55288c2ecf20Sopenharmony_ci .u.insns = { 55298c2ecf20Sopenharmony_ci BPF_STMT(BPF_LDX | BPF_IMM, 0x3e), 55308c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_IND | BPF_B, -0x1), 55318c2ecf20Sopenharmony_ci BPF_STMT(BPF_RET | BPF_A, 0x0), 55328c2ecf20Sopenharmony_ci }, 55338c2ecf20Sopenharmony_ci CLASSIC, 55348c2ecf20Sopenharmony_ci { [0x3c] = 0x25, [0x3d] = 0x05, [0x3e] = 0x19, [0x3f] = 0x82 }, 55358c2ecf20Sopenharmony_ci { {0x40, 0x05 } }, 55368c2ecf20Sopenharmony_ci }, 55378c2ecf20Sopenharmony_ci { 55388c2ecf20Sopenharmony_ci "LD_IND byte positive offset, all ff", 55398c2ecf20Sopenharmony_ci .u.insns = { 55408c2ecf20Sopenharmony_ci BPF_STMT(BPF_LDX | BPF_IMM, 0x3e), 55418c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_IND | BPF_B, 0x1), 55428c2ecf20Sopenharmony_ci BPF_STMT(BPF_RET | BPF_A, 0x0), 55438c2ecf20Sopenharmony_ci }, 55448c2ecf20Sopenharmony_ci CLASSIC, 55458c2ecf20Sopenharmony_ci { [0x3c] = 0xff, [0x3d] = 0xff, [0x3e] = 0xff, [0x3f] = 0xff }, 55468c2ecf20Sopenharmony_ci { {0x40, 0xff } }, 55478c2ecf20Sopenharmony_ci }, 55488c2ecf20Sopenharmony_ci { 55498c2ecf20Sopenharmony_ci "LD_IND byte positive offset, out of bounds", 55508c2ecf20Sopenharmony_ci .u.insns = { 55518c2ecf20Sopenharmony_ci BPF_STMT(BPF_LDX | BPF_IMM, 0x3e), 55528c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_IND | BPF_B, 0x1), 55538c2ecf20Sopenharmony_ci BPF_STMT(BPF_RET | BPF_A, 0x0), 55548c2ecf20Sopenharmony_ci }, 55558c2ecf20Sopenharmony_ci CLASSIC, 55568c2ecf20Sopenharmony_ci { [0x3c] = 0x25, [0x3d] = 0x05, [0x3e] = 0x19, [0x3f] = 0x82 }, 55578c2ecf20Sopenharmony_ci { {0x3f, 0 }, }, 55588c2ecf20Sopenharmony_ci }, 55598c2ecf20Sopenharmony_ci { 55608c2ecf20Sopenharmony_ci "LD_IND byte negative offset, out of bounds", 55618c2ecf20Sopenharmony_ci .u.insns = { 55628c2ecf20Sopenharmony_ci BPF_STMT(BPF_LDX | BPF_IMM, 0x3e), 55638c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_IND | BPF_B, -0x3f), 55648c2ecf20Sopenharmony_ci BPF_STMT(BPF_RET | BPF_A, 0x0), 55658c2ecf20Sopenharmony_ci }, 55668c2ecf20Sopenharmony_ci CLASSIC, 55678c2ecf20Sopenharmony_ci { [0x3c] = 0x25, [0x3d] = 0x05, [0x3e] = 0x19, [0x3f] = 0x82 }, 55688c2ecf20Sopenharmony_ci { {0x3f, 0 } }, 55698c2ecf20Sopenharmony_ci }, 55708c2ecf20Sopenharmony_ci { 55718c2ecf20Sopenharmony_ci "LD_IND byte negative offset, multiple calls", 55728c2ecf20Sopenharmony_ci .u.insns = { 55738c2ecf20Sopenharmony_ci BPF_STMT(BPF_LDX | BPF_IMM, 0x3b), 55748c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_IND | BPF_B, SKF_LL_OFF + 1), 55758c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_IND | BPF_B, SKF_LL_OFF + 2), 55768c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_IND | BPF_B, SKF_LL_OFF + 3), 55778c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_IND | BPF_B, SKF_LL_OFF + 4), 55788c2ecf20Sopenharmony_ci BPF_STMT(BPF_RET | BPF_A, 0x0), 55798c2ecf20Sopenharmony_ci }, 55808c2ecf20Sopenharmony_ci CLASSIC, 55818c2ecf20Sopenharmony_ci { [0x3c] = 0x25, [0x3d] = 0x05, [0x3e] = 0x19, [0x3f] = 0x82 }, 55828c2ecf20Sopenharmony_ci { {0x40, 0x82 }, }, 55838c2ecf20Sopenharmony_ci }, 55848c2ecf20Sopenharmony_ci { 55858c2ecf20Sopenharmony_ci "LD_IND halfword positive offset", 55868c2ecf20Sopenharmony_ci .u.insns = { 55878c2ecf20Sopenharmony_ci BPF_STMT(BPF_LDX | BPF_IMM, 0x20), 55888c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_IND | BPF_H, 0x2), 55898c2ecf20Sopenharmony_ci BPF_STMT(BPF_RET | BPF_A, 0x0), 55908c2ecf20Sopenharmony_ci }, 55918c2ecf20Sopenharmony_ci CLASSIC, 55928c2ecf20Sopenharmony_ci { 55938c2ecf20Sopenharmony_ci [0x1c] = 0xaa, [0x1d] = 0x55, 55948c2ecf20Sopenharmony_ci [0x1e] = 0xbb, [0x1f] = 0x66, 55958c2ecf20Sopenharmony_ci [0x20] = 0xcc, [0x21] = 0x77, 55968c2ecf20Sopenharmony_ci [0x22] = 0xdd, [0x23] = 0x88, 55978c2ecf20Sopenharmony_ci }, 55988c2ecf20Sopenharmony_ci { {0x40, 0xdd88 } }, 55998c2ecf20Sopenharmony_ci }, 56008c2ecf20Sopenharmony_ci { 56018c2ecf20Sopenharmony_ci "LD_IND halfword negative offset", 56028c2ecf20Sopenharmony_ci .u.insns = { 56038c2ecf20Sopenharmony_ci BPF_STMT(BPF_LDX | BPF_IMM, 0x20), 56048c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_IND | BPF_H, -0x2), 56058c2ecf20Sopenharmony_ci BPF_STMT(BPF_RET | BPF_A, 0x0), 56068c2ecf20Sopenharmony_ci }, 56078c2ecf20Sopenharmony_ci CLASSIC, 56088c2ecf20Sopenharmony_ci { 56098c2ecf20Sopenharmony_ci [0x1c] = 0xaa, [0x1d] = 0x55, 56108c2ecf20Sopenharmony_ci [0x1e] = 0xbb, [0x1f] = 0x66, 56118c2ecf20Sopenharmony_ci [0x20] = 0xcc, [0x21] = 0x77, 56128c2ecf20Sopenharmony_ci [0x22] = 0xdd, [0x23] = 0x88, 56138c2ecf20Sopenharmony_ci }, 56148c2ecf20Sopenharmony_ci { {0x40, 0xbb66 } }, 56158c2ecf20Sopenharmony_ci }, 56168c2ecf20Sopenharmony_ci { 56178c2ecf20Sopenharmony_ci "LD_IND halfword unaligned", 56188c2ecf20Sopenharmony_ci .u.insns = { 56198c2ecf20Sopenharmony_ci BPF_STMT(BPF_LDX | BPF_IMM, 0x20), 56208c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_IND | BPF_H, -0x1), 56218c2ecf20Sopenharmony_ci BPF_STMT(BPF_RET | BPF_A, 0x0), 56228c2ecf20Sopenharmony_ci }, 56238c2ecf20Sopenharmony_ci CLASSIC, 56248c2ecf20Sopenharmony_ci { 56258c2ecf20Sopenharmony_ci [0x1c] = 0xaa, [0x1d] = 0x55, 56268c2ecf20Sopenharmony_ci [0x1e] = 0xbb, [0x1f] = 0x66, 56278c2ecf20Sopenharmony_ci [0x20] = 0xcc, [0x21] = 0x77, 56288c2ecf20Sopenharmony_ci [0x22] = 0xdd, [0x23] = 0x88, 56298c2ecf20Sopenharmony_ci }, 56308c2ecf20Sopenharmony_ci { {0x40, 0x66cc } }, 56318c2ecf20Sopenharmony_ci }, 56328c2ecf20Sopenharmony_ci { 56338c2ecf20Sopenharmony_ci "LD_IND halfword positive offset, all ff", 56348c2ecf20Sopenharmony_ci .u.insns = { 56358c2ecf20Sopenharmony_ci BPF_STMT(BPF_LDX | BPF_IMM, 0x3d), 56368c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_IND | BPF_H, 0x1), 56378c2ecf20Sopenharmony_ci BPF_STMT(BPF_RET | BPF_A, 0x0), 56388c2ecf20Sopenharmony_ci }, 56398c2ecf20Sopenharmony_ci CLASSIC, 56408c2ecf20Sopenharmony_ci { [0x3c] = 0xff, [0x3d] = 0xff, [0x3e] = 0xff, [0x3f] = 0xff }, 56418c2ecf20Sopenharmony_ci { {0x40, 0xffff } }, 56428c2ecf20Sopenharmony_ci }, 56438c2ecf20Sopenharmony_ci { 56448c2ecf20Sopenharmony_ci "LD_IND halfword positive offset, out of bounds", 56458c2ecf20Sopenharmony_ci .u.insns = { 56468c2ecf20Sopenharmony_ci BPF_STMT(BPF_LDX | BPF_IMM, 0x3e), 56478c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_IND | BPF_H, 0x1), 56488c2ecf20Sopenharmony_ci BPF_STMT(BPF_RET | BPF_A, 0x0), 56498c2ecf20Sopenharmony_ci }, 56508c2ecf20Sopenharmony_ci CLASSIC, 56518c2ecf20Sopenharmony_ci { [0x3c] = 0x25, [0x3d] = 0x05, [0x3e] = 0x19, [0x3f] = 0x82 }, 56528c2ecf20Sopenharmony_ci { {0x3f, 0 }, }, 56538c2ecf20Sopenharmony_ci }, 56548c2ecf20Sopenharmony_ci { 56558c2ecf20Sopenharmony_ci "LD_IND halfword negative offset, out of bounds", 56568c2ecf20Sopenharmony_ci .u.insns = { 56578c2ecf20Sopenharmony_ci BPF_STMT(BPF_LDX | BPF_IMM, 0x3e), 56588c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_IND | BPF_H, -0x3f), 56598c2ecf20Sopenharmony_ci BPF_STMT(BPF_RET | BPF_A, 0x0), 56608c2ecf20Sopenharmony_ci }, 56618c2ecf20Sopenharmony_ci CLASSIC, 56628c2ecf20Sopenharmony_ci { [0x3c] = 0x25, [0x3d] = 0x05, [0x3e] = 0x19, [0x3f] = 0x82 }, 56638c2ecf20Sopenharmony_ci { {0x3f, 0 } }, 56648c2ecf20Sopenharmony_ci }, 56658c2ecf20Sopenharmony_ci { 56668c2ecf20Sopenharmony_ci "LD_IND word positive offset", 56678c2ecf20Sopenharmony_ci .u.insns = { 56688c2ecf20Sopenharmony_ci BPF_STMT(BPF_LDX | BPF_IMM, 0x20), 56698c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_IND | BPF_W, 0x4), 56708c2ecf20Sopenharmony_ci BPF_STMT(BPF_RET | BPF_A, 0x0), 56718c2ecf20Sopenharmony_ci }, 56728c2ecf20Sopenharmony_ci CLASSIC, 56738c2ecf20Sopenharmony_ci { 56748c2ecf20Sopenharmony_ci [0x1c] = 0xaa, [0x1d] = 0x55, 56758c2ecf20Sopenharmony_ci [0x1e] = 0xbb, [0x1f] = 0x66, 56768c2ecf20Sopenharmony_ci [0x20] = 0xcc, [0x21] = 0x77, 56778c2ecf20Sopenharmony_ci [0x22] = 0xdd, [0x23] = 0x88, 56788c2ecf20Sopenharmony_ci [0x24] = 0xee, [0x25] = 0x99, 56798c2ecf20Sopenharmony_ci [0x26] = 0xff, [0x27] = 0xaa, 56808c2ecf20Sopenharmony_ci }, 56818c2ecf20Sopenharmony_ci { {0x40, 0xee99ffaa } }, 56828c2ecf20Sopenharmony_ci }, 56838c2ecf20Sopenharmony_ci { 56848c2ecf20Sopenharmony_ci "LD_IND word negative offset", 56858c2ecf20Sopenharmony_ci .u.insns = { 56868c2ecf20Sopenharmony_ci BPF_STMT(BPF_LDX | BPF_IMM, 0x20), 56878c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_IND | BPF_W, -0x4), 56888c2ecf20Sopenharmony_ci BPF_STMT(BPF_RET | BPF_A, 0x0), 56898c2ecf20Sopenharmony_ci }, 56908c2ecf20Sopenharmony_ci CLASSIC, 56918c2ecf20Sopenharmony_ci { 56928c2ecf20Sopenharmony_ci [0x1c] = 0xaa, [0x1d] = 0x55, 56938c2ecf20Sopenharmony_ci [0x1e] = 0xbb, [0x1f] = 0x66, 56948c2ecf20Sopenharmony_ci [0x20] = 0xcc, [0x21] = 0x77, 56958c2ecf20Sopenharmony_ci [0x22] = 0xdd, [0x23] = 0x88, 56968c2ecf20Sopenharmony_ci [0x24] = 0xee, [0x25] = 0x99, 56978c2ecf20Sopenharmony_ci [0x26] = 0xff, [0x27] = 0xaa, 56988c2ecf20Sopenharmony_ci }, 56998c2ecf20Sopenharmony_ci { {0x40, 0xaa55bb66 } }, 57008c2ecf20Sopenharmony_ci }, 57018c2ecf20Sopenharmony_ci { 57028c2ecf20Sopenharmony_ci "LD_IND word unaligned (addr & 3 == 2)", 57038c2ecf20Sopenharmony_ci .u.insns = { 57048c2ecf20Sopenharmony_ci BPF_STMT(BPF_LDX | BPF_IMM, 0x20), 57058c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_IND | BPF_W, -0x2), 57068c2ecf20Sopenharmony_ci BPF_STMT(BPF_RET | BPF_A, 0x0), 57078c2ecf20Sopenharmony_ci }, 57088c2ecf20Sopenharmony_ci CLASSIC, 57098c2ecf20Sopenharmony_ci { 57108c2ecf20Sopenharmony_ci [0x1c] = 0xaa, [0x1d] = 0x55, 57118c2ecf20Sopenharmony_ci [0x1e] = 0xbb, [0x1f] = 0x66, 57128c2ecf20Sopenharmony_ci [0x20] = 0xcc, [0x21] = 0x77, 57138c2ecf20Sopenharmony_ci [0x22] = 0xdd, [0x23] = 0x88, 57148c2ecf20Sopenharmony_ci [0x24] = 0xee, [0x25] = 0x99, 57158c2ecf20Sopenharmony_ci [0x26] = 0xff, [0x27] = 0xaa, 57168c2ecf20Sopenharmony_ci }, 57178c2ecf20Sopenharmony_ci { {0x40, 0xbb66cc77 } }, 57188c2ecf20Sopenharmony_ci }, 57198c2ecf20Sopenharmony_ci { 57208c2ecf20Sopenharmony_ci "LD_IND word unaligned (addr & 3 == 1)", 57218c2ecf20Sopenharmony_ci .u.insns = { 57228c2ecf20Sopenharmony_ci BPF_STMT(BPF_LDX | BPF_IMM, 0x20), 57238c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_IND | BPF_W, -0x3), 57248c2ecf20Sopenharmony_ci BPF_STMT(BPF_RET | BPF_A, 0x0), 57258c2ecf20Sopenharmony_ci }, 57268c2ecf20Sopenharmony_ci CLASSIC, 57278c2ecf20Sopenharmony_ci { 57288c2ecf20Sopenharmony_ci [0x1c] = 0xaa, [0x1d] = 0x55, 57298c2ecf20Sopenharmony_ci [0x1e] = 0xbb, [0x1f] = 0x66, 57308c2ecf20Sopenharmony_ci [0x20] = 0xcc, [0x21] = 0x77, 57318c2ecf20Sopenharmony_ci [0x22] = 0xdd, [0x23] = 0x88, 57328c2ecf20Sopenharmony_ci [0x24] = 0xee, [0x25] = 0x99, 57338c2ecf20Sopenharmony_ci [0x26] = 0xff, [0x27] = 0xaa, 57348c2ecf20Sopenharmony_ci }, 57358c2ecf20Sopenharmony_ci { {0x40, 0x55bb66cc } }, 57368c2ecf20Sopenharmony_ci }, 57378c2ecf20Sopenharmony_ci { 57388c2ecf20Sopenharmony_ci "LD_IND word unaligned (addr & 3 == 3)", 57398c2ecf20Sopenharmony_ci .u.insns = { 57408c2ecf20Sopenharmony_ci BPF_STMT(BPF_LDX | BPF_IMM, 0x20), 57418c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_IND | BPF_W, -0x1), 57428c2ecf20Sopenharmony_ci BPF_STMT(BPF_RET | BPF_A, 0x0), 57438c2ecf20Sopenharmony_ci }, 57448c2ecf20Sopenharmony_ci CLASSIC, 57458c2ecf20Sopenharmony_ci { 57468c2ecf20Sopenharmony_ci [0x1c] = 0xaa, [0x1d] = 0x55, 57478c2ecf20Sopenharmony_ci [0x1e] = 0xbb, [0x1f] = 0x66, 57488c2ecf20Sopenharmony_ci [0x20] = 0xcc, [0x21] = 0x77, 57498c2ecf20Sopenharmony_ci [0x22] = 0xdd, [0x23] = 0x88, 57508c2ecf20Sopenharmony_ci [0x24] = 0xee, [0x25] = 0x99, 57518c2ecf20Sopenharmony_ci [0x26] = 0xff, [0x27] = 0xaa, 57528c2ecf20Sopenharmony_ci }, 57538c2ecf20Sopenharmony_ci { {0x40, 0x66cc77dd } }, 57548c2ecf20Sopenharmony_ci }, 57558c2ecf20Sopenharmony_ci { 57568c2ecf20Sopenharmony_ci "LD_IND word positive offset, all ff", 57578c2ecf20Sopenharmony_ci .u.insns = { 57588c2ecf20Sopenharmony_ci BPF_STMT(BPF_LDX | BPF_IMM, 0x3b), 57598c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_IND | BPF_W, 0x1), 57608c2ecf20Sopenharmony_ci BPF_STMT(BPF_RET | BPF_A, 0x0), 57618c2ecf20Sopenharmony_ci }, 57628c2ecf20Sopenharmony_ci CLASSIC, 57638c2ecf20Sopenharmony_ci { [0x3c] = 0xff, [0x3d] = 0xff, [0x3e] = 0xff, [0x3f] = 0xff }, 57648c2ecf20Sopenharmony_ci { {0x40, 0xffffffff } }, 57658c2ecf20Sopenharmony_ci }, 57668c2ecf20Sopenharmony_ci { 57678c2ecf20Sopenharmony_ci "LD_IND word positive offset, out of bounds", 57688c2ecf20Sopenharmony_ci .u.insns = { 57698c2ecf20Sopenharmony_ci BPF_STMT(BPF_LDX | BPF_IMM, 0x3e), 57708c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_IND | BPF_W, 0x1), 57718c2ecf20Sopenharmony_ci BPF_STMT(BPF_RET | BPF_A, 0x0), 57728c2ecf20Sopenharmony_ci }, 57738c2ecf20Sopenharmony_ci CLASSIC, 57748c2ecf20Sopenharmony_ci { [0x3c] = 0x25, [0x3d] = 0x05, [0x3e] = 0x19, [0x3f] = 0x82 }, 57758c2ecf20Sopenharmony_ci { {0x3f, 0 }, }, 57768c2ecf20Sopenharmony_ci }, 57778c2ecf20Sopenharmony_ci { 57788c2ecf20Sopenharmony_ci "LD_IND word negative offset, out of bounds", 57798c2ecf20Sopenharmony_ci .u.insns = { 57808c2ecf20Sopenharmony_ci BPF_STMT(BPF_LDX | BPF_IMM, 0x3e), 57818c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_IND | BPF_W, -0x3f), 57828c2ecf20Sopenharmony_ci BPF_STMT(BPF_RET | BPF_A, 0x0), 57838c2ecf20Sopenharmony_ci }, 57848c2ecf20Sopenharmony_ci CLASSIC, 57858c2ecf20Sopenharmony_ci { [0x3c] = 0x25, [0x3d] = 0x05, [0x3e] = 0x19, [0x3f] = 0x82 }, 57868c2ecf20Sopenharmony_ci { {0x3f, 0 } }, 57878c2ecf20Sopenharmony_ci }, 57888c2ecf20Sopenharmony_ci { 57898c2ecf20Sopenharmony_ci "LD_ABS byte", 57908c2ecf20Sopenharmony_ci .u.insns = { 57918c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_ABS | BPF_B, 0x20), 57928c2ecf20Sopenharmony_ci BPF_STMT(BPF_RET | BPF_A, 0x0), 57938c2ecf20Sopenharmony_ci }, 57948c2ecf20Sopenharmony_ci CLASSIC, 57958c2ecf20Sopenharmony_ci { 57968c2ecf20Sopenharmony_ci [0x1c] = 0xaa, [0x1d] = 0x55, 57978c2ecf20Sopenharmony_ci [0x1e] = 0xbb, [0x1f] = 0x66, 57988c2ecf20Sopenharmony_ci [0x20] = 0xcc, [0x21] = 0x77, 57998c2ecf20Sopenharmony_ci [0x22] = 0xdd, [0x23] = 0x88, 58008c2ecf20Sopenharmony_ci [0x24] = 0xee, [0x25] = 0x99, 58018c2ecf20Sopenharmony_ci [0x26] = 0xff, [0x27] = 0xaa, 58028c2ecf20Sopenharmony_ci }, 58038c2ecf20Sopenharmony_ci { {0x40, 0xcc } }, 58048c2ecf20Sopenharmony_ci }, 58058c2ecf20Sopenharmony_ci { 58068c2ecf20Sopenharmony_ci "LD_ABS byte positive offset, all ff", 58078c2ecf20Sopenharmony_ci .u.insns = { 58088c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_ABS | BPF_B, 0x3f), 58098c2ecf20Sopenharmony_ci BPF_STMT(BPF_RET | BPF_A, 0x0), 58108c2ecf20Sopenharmony_ci }, 58118c2ecf20Sopenharmony_ci CLASSIC, 58128c2ecf20Sopenharmony_ci { [0x3c] = 0xff, [0x3d] = 0xff, [0x3e] = 0xff, [0x3f] = 0xff }, 58138c2ecf20Sopenharmony_ci { {0x40, 0xff } }, 58148c2ecf20Sopenharmony_ci }, 58158c2ecf20Sopenharmony_ci { 58168c2ecf20Sopenharmony_ci "LD_ABS byte positive offset, out of bounds", 58178c2ecf20Sopenharmony_ci .u.insns = { 58188c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_ABS | BPF_B, 0x3f), 58198c2ecf20Sopenharmony_ci BPF_STMT(BPF_RET | BPF_A, 0x0), 58208c2ecf20Sopenharmony_ci }, 58218c2ecf20Sopenharmony_ci CLASSIC, 58228c2ecf20Sopenharmony_ci { [0x3c] = 0x25, [0x3d] = 0x05, [0x3e] = 0x19, [0x3f] = 0x82 }, 58238c2ecf20Sopenharmony_ci { {0x3f, 0 }, }, 58248c2ecf20Sopenharmony_ci }, 58258c2ecf20Sopenharmony_ci { 58268c2ecf20Sopenharmony_ci "LD_ABS byte negative offset, out of bounds load", 58278c2ecf20Sopenharmony_ci .u.insns = { 58288c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_ABS | BPF_B, -1), 58298c2ecf20Sopenharmony_ci BPF_STMT(BPF_RET | BPF_A, 0x0), 58308c2ecf20Sopenharmony_ci }, 58318c2ecf20Sopenharmony_ci CLASSIC | FLAG_EXPECTED_FAIL, 58328c2ecf20Sopenharmony_ci .expected_errcode = -EINVAL, 58338c2ecf20Sopenharmony_ci }, 58348c2ecf20Sopenharmony_ci { 58358c2ecf20Sopenharmony_ci "LD_ABS byte negative offset, in bounds", 58368c2ecf20Sopenharmony_ci .u.insns = { 58378c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_ABS | BPF_B, SKF_LL_OFF + 0x3f), 58388c2ecf20Sopenharmony_ci BPF_STMT(BPF_RET | BPF_A, 0x0), 58398c2ecf20Sopenharmony_ci }, 58408c2ecf20Sopenharmony_ci CLASSIC, 58418c2ecf20Sopenharmony_ci { [0x3c] = 0x25, [0x3d] = 0x05, [0x3e] = 0x19, [0x3f] = 0x82 }, 58428c2ecf20Sopenharmony_ci { {0x40, 0x82 }, }, 58438c2ecf20Sopenharmony_ci }, 58448c2ecf20Sopenharmony_ci { 58458c2ecf20Sopenharmony_ci "LD_ABS byte negative offset, out of bounds", 58468c2ecf20Sopenharmony_ci .u.insns = { 58478c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_ABS | BPF_B, SKF_LL_OFF + 0x3f), 58488c2ecf20Sopenharmony_ci BPF_STMT(BPF_RET | BPF_A, 0x0), 58498c2ecf20Sopenharmony_ci }, 58508c2ecf20Sopenharmony_ci CLASSIC, 58518c2ecf20Sopenharmony_ci { [0x3c] = 0x25, [0x3d] = 0x05, [0x3e] = 0x19, [0x3f] = 0x82 }, 58528c2ecf20Sopenharmony_ci { {0x3f, 0 }, }, 58538c2ecf20Sopenharmony_ci }, 58548c2ecf20Sopenharmony_ci { 58558c2ecf20Sopenharmony_ci "LD_ABS byte negative offset, multiple calls", 58568c2ecf20Sopenharmony_ci .u.insns = { 58578c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_ABS | BPF_B, SKF_LL_OFF + 0x3c), 58588c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_ABS | BPF_B, SKF_LL_OFF + 0x3d), 58598c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_ABS | BPF_B, SKF_LL_OFF + 0x3e), 58608c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_ABS | BPF_B, SKF_LL_OFF + 0x3f), 58618c2ecf20Sopenharmony_ci BPF_STMT(BPF_RET | BPF_A, 0x0), 58628c2ecf20Sopenharmony_ci }, 58638c2ecf20Sopenharmony_ci CLASSIC, 58648c2ecf20Sopenharmony_ci { [0x3c] = 0x25, [0x3d] = 0x05, [0x3e] = 0x19, [0x3f] = 0x82 }, 58658c2ecf20Sopenharmony_ci { {0x40, 0x82 }, }, 58668c2ecf20Sopenharmony_ci }, 58678c2ecf20Sopenharmony_ci { 58688c2ecf20Sopenharmony_ci "LD_ABS halfword", 58698c2ecf20Sopenharmony_ci .u.insns = { 58708c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_ABS | BPF_H, 0x22), 58718c2ecf20Sopenharmony_ci BPF_STMT(BPF_RET | BPF_A, 0x0), 58728c2ecf20Sopenharmony_ci }, 58738c2ecf20Sopenharmony_ci CLASSIC, 58748c2ecf20Sopenharmony_ci { 58758c2ecf20Sopenharmony_ci [0x1c] = 0xaa, [0x1d] = 0x55, 58768c2ecf20Sopenharmony_ci [0x1e] = 0xbb, [0x1f] = 0x66, 58778c2ecf20Sopenharmony_ci [0x20] = 0xcc, [0x21] = 0x77, 58788c2ecf20Sopenharmony_ci [0x22] = 0xdd, [0x23] = 0x88, 58798c2ecf20Sopenharmony_ci [0x24] = 0xee, [0x25] = 0x99, 58808c2ecf20Sopenharmony_ci [0x26] = 0xff, [0x27] = 0xaa, 58818c2ecf20Sopenharmony_ci }, 58828c2ecf20Sopenharmony_ci { {0x40, 0xdd88 } }, 58838c2ecf20Sopenharmony_ci }, 58848c2ecf20Sopenharmony_ci { 58858c2ecf20Sopenharmony_ci "LD_ABS halfword unaligned", 58868c2ecf20Sopenharmony_ci .u.insns = { 58878c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_ABS | BPF_H, 0x25), 58888c2ecf20Sopenharmony_ci BPF_STMT(BPF_RET | BPF_A, 0x0), 58898c2ecf20Sopenharmony_ci }, 58908c2ecf20Sopenharmony_ci CLASSIC, 58918c2ecf20Sopenharmony_ci { 58928c2ecf20Sopenharmony_ci [0x1c] = 0xaa, [0x1d] = 0x55, 58938c2ecf20Sopenharmony_ci [0x1e] = 0xbb, [0x1f] = 0x66, 58948c2ecf20Sopenharmony_ci [0x20] = 0xcc, [0x21] = 0x77, 58958c2ecf20Sopenharmony_ci [0x22] = 0xdd, [0x23] = 0x88, 58968c2ecf20Sopenharmony_ci [0x24] = 0xee, [0x25] = 0x99, 58978c2ecf20Sopenharmony_ci [0x26] = 0xff, [0x27] = 0xaa, 58988c2ecf20Sopenharmony_ci }, 58998c2ecf20Sopenharmony_ci { {0x40, 0x99ff } }, 59008c2ecf20Sopenharmony_ci }, 59018c2ecf20Sopenharmony_ci { 59028c2ecf20Sopenharmony_ci "LD_ABS halfword positive offset, all ff", 59038c2ecf20Sopenharmony_ci .u.insns = { 59048c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_ABS | BPF_H, 0x3e), 59058c2ecf20Sopenharmony_ci BPF_STMT(BPF_RET | BPF_A, 0x0), 59068c2ecf20Sopenharmony_ci }, 59078c2ecf20Sopenharmony_ci CLASSIC, 59088c2ecf20Sopenharmony_ci { [0x3c] = 0xff, [0x3d] = 0xff, [0x3e] = 0xff, [0x3f] = 0xff }, 59098c2ecf20Sopenharmony_ci { {0x40, 0xffff } }, 59108c2ecf20Sopenharmony_ci }, 59118c2ecf20Sopenharmony_ci { 59128c2ecf20Sopenharmony_ci "LD_ABS halfword positive offset, out of bounds", 59138c2ecf20Sopenharmony_ci .u.insns = { 59148c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_ABS | BPF_H, 0x3f), 59158c2ecf20Sopenharmony_ci BPF_STMT(BPF_RET | BPF_A, 0x0), 59168c2ecf20Sopenharmony_ci }, 59178c2ecf20Sopenharmony_ci CLASSIC, 59188c2ecf20Sopenharmony_ci { [0x3c] = 0x25, [0x3d] = 0x05, [0x3e] = 0x19, [0x3f] = 0x82 }, 59198c2ecf20Sopenharmony_ci { {0x3f, 0 }, }, 59208c2ecf20Sopenharmony_ci }, 59218c2ecf20Sopenharmony_ci { 59228c2ecf20Sopenharmony_ci "LD_ABS halfword negative offset, out of bounds load", 59238c2ecf20Sopenharmony_ci .u.insns = { 59248c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_ABS | BPF_H, -1), 59258c2ecf20Sopenharmony_ci BPF_STMT(BPF_RET | BPF_A, 0x0), 59268c2ecf20Sopenharmony_ci }, 59278c2ecf20Sopenharmony_ci CLASSIC | FLAG_EXPECTED_FAIL, 59288c2ecf20Sopenharmony_ci .expected_errcode = -EINVAL, 59298c2ecf20Sopenharmony_ci }, 59308c2ecf20Sopenharmony_ci { 59318c2ecf20Sopenharmony_ci "LD_ABS halfword negative offset, in bounds", 59328c2ecf20Sopenharmony_ci .u.insns = { 59338c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_ABS | BPF_H, SKF_LL_OFF + 0x3e), 59348c2ecf20Sopenharmony_ci BPF_STMT(BPF_RET | BPF_A, 0x0), 59358c2ecf20Sopenharmony_ci }, 59368c2ecf20Sopenharmony_ci CLASSIC, 59378c2ecf20Sopenharmony_ci { [0x3c] = 0x25, [0x3d] = 0x05, [0x3e] = 0x19, [0x3f] = 0x82 }, 59388c2ecf20Sopenharmony_ci { {0x40, 0x1982 }, }, 59398c2ecf20Sopenharmony_ci }, 59408c2ecf20Sopenharmony_ci { 59418c2ecf20Sopenharmony_ci "LD_ABS halfword negative offset, out of bounds", 59428c2ecf20Sopenharmony_ci .u.insns = { 59438c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_ABS | BPF_H, SKF_LL_OFF + 0x3e), 59448c2ecf20Sopenharmony_ci BPF_STMT(BPF_RET | BPF_A, 0x0), 59458c2ecf20Sopenharmony_ci }, 59468c2ecf20Sopenharmony_ci CLASSIC, 59478c2ecf20Sopenharmony_ci { [0x3c] = 0x25, [0x3d] = 0x05, [0x3e] = 0x19, [0x3f] = 0x82 }, 59488c2ecf20Sopenharmony_ci { {0x3f, 0 }, }, 59498c2ecf20Sopenharmony_ci }, 59508c2ecf20Sopenharmony_ci { 59518c2ecf20Sopenharmony_ci "LD_ABS word", 59528c2ecf20Sopenharmony_ci .u.insns = { 59538c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_ABS | BPF_W, 0x1c), 59548c2ecf20Sopenharmony_ci BPF_STMT(BPF_RET | BPF_A, 0x0), 59558c2ecf20Sopenharmony_ci }, 59568c2ecf20Sopenharmony_ci CLASSIC, 59578c2ecf20Sopenharmony_ci { 59588c2ecf20Sopenharmony_ci [0x1c] = 0xaa, [0x1d] = 0x55, 59598c2ecf20Sopenharmony_ci [0x1e] = 0xbb, [0x1f] = 0x66, 59608c2ecf20Sopenharmony_ci [0x20] = 0xcc, [0x21] = 0x77, 59618c2ecf20Sopenharmony_ci [0x22] = 0xdd, [0x23] = 0x88, 59628c2ecf20Sopenharmony_ci [0x24] = 0xee, [0x25] = 0x99, 59638c2ecf20Sopenharmony_ci [0x26] = 0xff, [0x27] = 0xaa, 59648c2ecf20Sopenharmony_ci }, 59658c2ecf20Sopenharmony_ci { {0x40, 0xaa55bb66 } }, 59668c2ecf20Sopenharmony_ci }, 59678c2ecf20Sopenharmony_ci { 59688c2ecf20Sopenharmony_ci "LD_ABS word unaligned (addr & 3 == 2)", 59698c2ecf20Sopenharmony_ci .u.insns = { 59708c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_ABS | BPF_W, 0x22), 59718c2ecf20Sopenharmony_ci BPF_STMT(BPF_RET | BPF_A, 0x0), 59728c2ecf20Sopenharmony_ci }, 59738c2ecf20Sopenharmony_ci CLASSIC, 59748c2ecf20Sopenharmony_ci { 59758c2ecf20Sopenharmony_ci [0x1c] = 0xaa, [0x1d] = 0x55, 59768c2ecf20Sopenharmony_ci [0x1e] = 0xbb, [0x1f] = 0x66, 59778c2ecf20Sopenharmony_ci [0x20] = 0xcc, [0x21] = 0x77, 59788c2ecf20Sopenharmony_ci [0x22] = 0xdd, [0x23] = 0x88, 59798c2ecf20Sopenharmony_ci [0x24] = 0xee, [0x25] = 0x99, 59808c2ecf20Sopenharmony_ci [0x26] = 0xff, [0x27] = 0xaa, 59818c2ecf20Sopenharmony_ci }, 59828c2ecf20Sopenharmony_ci { {0x40, 0xdd88ee99 } }, 59838c2ecf20Sopenharmony_ci }, 59848c2ecf20Sopenharmony_ci { 59858c2ecf20Sopenharmony_ci "LD_ABS word unaligned (addr & 3 == 1)", 59868c2ecf20Sopenharmony_ci .u.insns = { 59878c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_ABS | BPF_W, 0x21), 59888c2ecf20Sopenharmony_ci BPF_STMT(BPF_RET | BPF_A, 0x0), 59898c2ecf20Sopenharmony_ci }, 59908c2ecf20Sopenharmony_ci CLASSIC, 59918c2ecf20Sopenharmony_ci { 59928c2ecf20Sopenharmony_ci [0x1c] = 0xaa, [0x1d] = 0x55, 59938c2ecf20Sopenharmony_ci [0x1e] = 0xbb, [0x1f] = 0x66, 59948c2ecf20Sopenharmony_ci [0x20] = 0xcc, [0x21] = 0x77, 59958c2ecf20Sopenharmony_ci [0x22] = 0xdd, [0x23] = 0x88, 59968c2ecf20Sopenharmony_ci [0x24] = 0xee, [0x25] = 0x99, 59978c2ecf20Sopenharmony_ci [0x26] = 0xff, [0x27] = 0xaa, 59988c2ecf20Sopenharmony_ci }, 59998c2ecf20Sopenharmony_ci { {0x40, 0x77dd88ee } }, 60008c2ecf20Sopenharmony_ci }, 60018c2ecf20Sopenharmony_ci { 60028c2ecf20Sopenharmony_ci "LD_ABS word unaligned (addr & 3 == 3)", 60038c2ecf20Sopenharmony_ci .u.insns = { 60048c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_ABS | BPF_W, 0x23), 60058c2ecf20Sopenharmony_ci BPF_STMT(BPF_RET | BPF_A, 0x0), 60068c2ecf20Sopenharmony_ci }, 60078c2ecf20Sopenharmony_ci CLASSIC, 60088c2ecf20Sopenharmony_ci { 60098c2ecf20Sopenharmony_ci [0x1c] = 0xaa, [0x1d] = 0x55, 60108c2ecf20Sopenharmony_ci [0x1e] = 0xbb, [0x1f] = 0x66, 60118c2ecf20Sopenharmony_ci [0x20] = 0xcc, [0x21] = 0x77, 60128c2ecf20Sopenharmony_ci [0x22] = 0xdd, [0x23] = 0x88, 60138c2ecf20Sopenharmony_ci [0x24] = 0xee, [0x25] = 0x99, 60148c2ecf20Sopenharmony_ci [0x26] = 0xff, [0x27] = 0xaa, 60158c2ecf20Sopenharmony_ci }, 60168c2ecf20Sopenharmony_ci { {0x40, 0x88ee99ff } }, 60178c2ecf20Sopenharmony_ci }, 60188c2ecf20Sopenharmony_ci { 60198c2ecf20Sopenharmony_ci "LD_ABS word positive offset, all ff", 60208c2ecf20Sopenharmony_ci .u.insns = { 60218c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_ABS | BPF_W, 0x3c), 60228c2ecf20Sopenharmony_ci BPF_STMT(BPF_RET | BPF_A, 0x0), 60238c2ecf20Sopenharmony_ci }, 60248c2ecf20Sopenharmony_ci CLASSIC, 60258c2ecf20Sopenharmony_ci { [0x3c] = 0xff, [0x3d] = 0xff, [0x3e] = 0xff, [0x3f] = 0xff }, 60268c2ecf20Sopenharmony_ci { {0x40, 0xffffffff } }, 60278c2ecf20Sopenharmony_ci }, 60288c2ecf20Sopenharmony_ci { 60298c2ecf20Sopenharmony_ci "LD_ABS word positive offset, out of bounds", 60308c2ecf20Sopenharmony_ci .u.insns = { 60318c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_ABS | BPF_W, 0x3f), 60328c2ecf20Sopenharmony_ci BPF_STMT(BPF_RET | BPF_A, 0x0), 60338c2ecf20Sopenharmony_ci }, 60348c2ecf20Sopenharmony_ci CLASSIC, 60358c2ecf20Sopenharmony_ci { [0x3c] = 0x25, [0x3d] = 0x05, [0x3e] = 0x19, [0x3f] = 0x82 }, 60368c2ecf20Sopenharmony_ci { {0x3f, 0 }, }, 60378c2ecf20Sopenharmony_ci }, 60388c2ecf20Sopenharmony_ci { 60398c2ecf20Sopenharmony_ci "LD_ABS word negative offset, out of bounds load", 60408c2ecf20Sopenharmony_ci .u.insns = { 60418c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_ABS | BPF_W, -1), 60428c2ecf20Sopenharmony_ci BPF_STMT(BPF_RET | BPF_A, 0x0), 60438c2ecf20Sopenharmony_ci }, 60448c2ecf20Sopenharmony_ci CLASSIC | FLAG_EXPECTED_FAIL, 60458c2ecf20Sopenharmony_ci .expected_errcode = -EINVAL, 60468c2ecf20Sopenharmony_ci }, 60478c2ecf20Sopenharmony_ci { 60488c2ecf20Sopenharmony_ci "LD_ABS word negative offset, in bounds", 60498c2ecf20Sopenharmony_ci .u.insns = { 60508c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_ABS | BPF_W, SKF_LL_OFF + 0x3c), 60518c2ecf20Sopenharmony_ci BPF_STMT(BPF_RET | BPF_A, 0x0), 60528c2ecf20Sopenharmony_ci }, 60538c2ecf20Sopenharmony_ci CLASSIC, 60548c2ecf20Sopenharmony_ci { [0x3c] = 0x25, [0x3d] = 0x05, [0x3e] = 0x19, [0x3f] = 0x82 }, 60558c2ecf20Sopenharmony_ci { {0x40, 0x25051982 }, }, 60568c2ecf20Sopenharmony_ci }, 60578c2ecf20Sopenharmony_ci { 60588c2ecf20Sopenharmony_ci "LD_ABS word negative offset, out of bounds", 60598c2ecf20Sopenharmony_ci .u.insns = { 60608c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_ABS | BPF_W, SKF_LL_OFF + 0x3c), 60618c2ecf20Sopenharmony_ci BPF_STMT(BPF_RET | BPF_A, 0x0), 60628c2ecf20Sopenharmony_ci }, 60638c2ecf20Sopenharmony_ci CLASSIC, 60648c2ecf20Sopenharmony_ci { [0x3c] = 0x25, [0x3d] = 0x05, [0x3e] = 0x19, [0x3f] = 0x82 }, 60658c2ecf20Sopenharmony_ci { {0x3f, 0 }, }, 60668c2ecf20Sopenharmony_ci }, 60678c2ecf20Sopenharmony_ci { 60688c2ecf20Sopenharmony_ci "LDX_MSH standalone, preserved A", 60698c2ecf20Sopenharmony_ci .u.insns = { 60708c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_IMM, 0xffeebbaa), 60718c2ecf20Sopenharmony_ci BPF_STMT(BPF_LDX | BPF_B | BPF_MSH, 0x3c), 60728c2ecf20Sopenharmony_ci BPF_STMT(BPF_RET | BPF_A, 0x0), 60738c2ecf20Sopenharmony_ci }, 60748c2ecf20Sopenharmony_ci CLASSIC, 60758c2ecf20Sopenharmony_ci { [0x3c] = 0x25, [0x3d] = 0x05, [0x3e] = 0x19, [0x3f] = 0x82 }, 60768c2ecf20Sopenharmony_ci { {0x40, 0xffeebbaa }, }, 60778c2ecf20Sopenharmony_ci }, 60788c2ecf20Sopenharmony_ci { 60798c2ecf20Sopenharmony_ci "LDX_MSH standalone, preserved A 2", 60808c2ecf20Sopenharmony_ci .u.insns = { 60818c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_IMM, 0x175e9d63), 60828c2ecf20Sopenharmony_ci BPF_STMT(BPF_LDX | BPF_B | BPF_MSH, 0x3c), 60838c2ecf20Sopenharmony_ci BPF_STMT(BPF_LDX | BPF_B | BPF_MSH, 0x3d), 60848c2ecf20Sopenharmony_ci BPF_STMT(BPF_LDX | BPF_B | BPF_MSH, 0x3e), 60858c2ecf20Sopenharmony_ci BPF_STMT(BPF_LDX | BPF_B | BPF_MSH, 0x3f), 60868c2ecf20Sopenharmony_ci BPF_STMT(BPF_RET | BPF_A, 0x0), 60878c2ecf20Sopenharmony_ci }, 60888c2ecf20Sopenharmony_ci CLASSIC, 60898c2ecf20Sopenharmony_ci { [0x3c] = 0x25, [0x3d] = 0x05, [0x3e] = 0x19, [0x3f] = 0x82 }, 60908c2ecf20Sopenharmony_ci { {0x40, 0x175e9d63 }, }, 60918c2ecf20Sopenharmony_ci }, 60928c2ecf20Sopenharmony_ci { 60938c2ecf20Sopenharmony_ci "LDX_MSH standalone, test result 1", 60948c2ecf20Sopenharmony_ci .u.insns = { 60958c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_IMM, 0xffeebbaa), 60968c2ecf20Sopenharmony_ci BPF_STMT(BPF_LDX | BPF_B | BPF_MSH, 0x3c), 60978c2ecf20Sopenharmony_ci BPF_STMT(BPF_MISC | BPF_TXA, 0), 60988c2ecf20Sopenharmony_ci BPF_STMT(BPF_RET | BPF_A, 0x0), 60998c2ecf20Sopenharmony_ci }, 61008c2ecf20Sopenharmony_ci CLASSIC, 61018c2ecf20Sopenharmony_ci { [0x3c] = 0x25, [0x3d] = 0x05, [0x3e] = 0x19, [0x3f] = 0x82 }, 61028c2ecf20Sopenharmony_ci { {0x40, 0x14 }, }, 61038c2ecf20Sopenharmony_ci }, 61048c2ecf20Sopenharmony_ci { 61058c2ecf20Sopenharmony_ci "LDX_MSH standalone, test result 2", 61068c2ecf20Sopenharmony_ci .u.insns = { 61078c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_IMM, 0xffeebbaa), 61088c2ecf20Sopenharmony_ci BPF_STMT(BPF_LDX | BPF_B | BPF_MSH, 0x3e), 61098c2ecf20Sopenharmony_ci BPF_STMT(BPF_MISC | BPF_TXA, 0), 61108c2ecf20Sopenharmony_ci BPF_STMT(BPF_RET | BPF_A, 0x0), 61118c2ecf20Sopenharmony_ci }, 61128c2ecf20Sopenharmony_ci CLASSIC, 61138c2ecf20Sopenharmony_ci { [0x3c] = 0x25, [0x3d] = 0x05, [0x3e] = 0x19, [0x3f] = 0x82 }, 61148c2ecf20Sopenharmony_ci { {0x40, 0x24 }, }, 61158c2ecf20Sopenharmony_ci }, 61168c2ecf20Sopenharmony_ci { 61178c2ecf20Sopenharmony_ci "LDX_MSH standalone, negative offset", 61188c2ecf20Sopenharmony_ci .u.insns = { 61198c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_IMM, 0xffeebbaa), 61208c2ecf20Sopenharmony_ci BPF_STMT(BPF_LDX | BPF_B | BPF_MSH, -1), 61218c2ecf20Sopenharmony_ci BPF_STMT(BPF_MISC | BPF_TXA, 0), 61228c2ecf20Sopenharmony_ci BPF_STMT(BPF_RET | BPF_A, 0x0), 61238c2ecf20Sopenharmony_ci }, 61248c2ecf20Sopenharmony_ci CLASSIC, 61258c2ecf20Sopenharmony_ci { [0x3c] = 0x25, [0x3d] = 0x05, [0x3e] = 0x19, [0x3f] = 0x82 }, 61268c2ecf20Sopenharmony_ci { {0x40, 0 }, }, 61278c2ecf20Sopenharmony_ci }, 61288c2ecf20Sopenharmony_ci { 61298c2ecf20Sopenharmony_ci "LDX_MSH standalone, negative offset 2", 61308c2ecf20Sopenharmony_ci .u.insns = { 61318c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_IMM, 0xffeebbaa), 61328c2ecf20Sopenharmony_ci BPF_STMT(BPF_LDX | BPF_B | BPF_MSH, SKF_LL_OFF + 0x3e), 61338c2ecf20Sopenharmony_ci BPF_STMT(BPF_MISC | BPF_TXA, 0), 61348c2ecf20Sopenharmony_ci BPF_STMT(BPF_RET | BPF_A, 0x0), 61358c2ecf20Sopenharmony_ci }, 61368c2ecf20Sopenharmony_ci CLASSIC, 61378c2ecf20Sopenharmony_ci { [0x3c] = 0x25, [0x3d] = 0x05, [0x3e] = 0x19, [0x3f] = 0x82 }, 61388c2ecf20Sopenharmony_ci { {0x40, 0x24 }, }, 61398c2ecf20Sopenharmony_ci }, 61408c2ecf20Sopenharmony_ci { 61418c2ecf20Sopenharmony_ci "LDX_MSH standalone, out of bounds", 61428c2ecf20Sopenharmony_ci .u.insns = { 61438c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_IMM, 0xffeebbaa), 61448c2ecf20Sopenharmony_ci BPF_STMT(BPF_LDX | BPF_B | BPF_MSH, 0x40), 61458c2ecf20Sopenharmony_ci BPF_STMT(BPF_MISC | BPF_TXA, 0), 61468c2ecf20Sopenharmony_ci BPF_STMT(BPF_RET | BPF_A, 0x0), 61478c2ecf20Sopenharmony_ci }, 61488c2ecf20Sopenharmony_ci CLASSIC, 61498c2ecf20Sopenharmony_ci { [0x3c] = 0x25, [0x3d] = 0x05, [0x3e] = 0x19, [0x3f] = 0x82 }, 61508c2ecf20Sopenharmony_ci { {0x40, 0 }, }, 61518c2ecf20Sopenharmony_ci }, 61528c2ecf20Sopenharmony_ci /* 61538c2ecf20Sopenharmony_ci * verify that the interpreter or JIT correctly sets A and X 61548c2ecf20Sopenharmony_ci * to 0. 61558c2ecf20Sopenharmony_ci */ 61568c2ecf20Sopenharmony_ci { 61578c2ecf20Sopenharmony_ci "ADD default X", 61588c2ecf20Sopenharmony_ci .u.insns = { 61598c2ecf20Sopenharmony_ci /* 61608c2ecf20Sopenharmony_ci * A = 0x42 61618c2ecf20Sopenharmony_ci * A = A + X 61628c2ecf20Sopenharmony_ci * ret A 61638c2ecf20Sopenharmony_ci */ 61648c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_IMM, 0x42), 61658c2ecf20Sopenharmony_ci BPF_STMT(BPF_ALU | BPF_ADD | BPF_X, 0), 61668c2ecf20Sopenharmony_ci BPF_STMT(BPF_RET | BPF_A, 0x0), 61678c2ecf20Sopenharmony_ci }, 61688c2ecf20Sopenharmony_ci CLASSIC | FLAG_NO_DATA, 61698c2ecf20Sopenharmony_ci {}, 61708c2ecf20Sopenharmony_ci { {0x1, 0x42 } }, 61718c2ecf20Sopenharmony_ci }, 61728c2ecf20Sopenharmony_ci { 61738c2ecf20Sopenharmony_ci "ADD default A", 61748c2ecf20Sopenharmony_ci .u.insns = { 61758c2ecf20Sopenharmony_ci /* 61768c2ecf20Sopenharmony_ci * A = A + 0x42 61778c2ecf20Sopenharmony_ci * ret A 61788c2ecf20Sopenharmony_ci */ 61798c2ecf20Sopenharmony_ci BPF_STMT(BPF_ALU | BPF_ADD | BPF_K, 0x42), 61808c2ecf20Sopenharmony_ci BPF_STMT(BPF_RET | BPF_A, 0x0), 61818c2ecf20Sopenharmony_ci }, 61828c2ecf20Sopenharmony_ci CLASSIC | FLAG_NO_DATA, 61838c2ecf20Sopenharmony_ci {}, 61848c2ecf20Sopenharmony_ci { {0x1, 0x42 } }, 61858c2ecf20Sopenharmony_ci }, 61868c2ecf20Sopenharmony_ci { 61878c2ecf20Sopenharmony_ci "SUB default X", 61888c2ecf20Sopenharmony_ci .u.insns = { 61898c2ecf20Sopenharmony_ci /* 61908c2ecf20Sopenharmony_ci * A = 0x66 61918c2ecf20Sopenharmony_ci * A = A - X 61928c2ecf20Sopenharmony_ci * ret A 61938c2ecf20Sopenharmony_ci */ 61948c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_IMM, 0x66), 61958c2ecf20Sopenharmony_ci BPF_STMT(BPF_ALU | BPF_SUB | BPF_X, 0), 61968c2ecf20Sopenharmony_ci BPF_STMT(BPF_RET | BPF_A, 0x0), 61978c2ecf20Sopenharmony_ci }, 61988c2ecf20Sopenharmony_ci CLASSIC | FLAG_NO_DATA, 61998c2ecf20Sopenharmony_ci {}, 62008c2ecf20Sopenharmony_ci { {0x1, 0x66 } }, 62018c2ecf20Sopenharmony_ci }, 62028c2ecf20Sopenharmony_ci { 62038c2ecf20Sopenharmony_ci "SUB default A", 62048c2ecf20Sopenharmony_ci .u.insns = { 62058c2ecf20Sopenharmony_ci /* 62068c2ecf20Sopenharmony_ci * A = A - -0x66 62078c2ecf20Sopenharmony_ci * ret A 62088c2ecf20Sopenharmony_ci */ 62098c2ecf20Sopenharmony_ci BPF_STMT(BPF_ALU | BPF_SUB | BPF_K, -0x66), 62108c2ecf20Sopenharmony_ci BPF_STMT(BPF_RET | BPF_A, 0x0), 62118c2ecf20Sopenharmony_ci }, 62128c2ecf20Sopenharmony_ci CLASSIC | FLAG_NO_DATA, 62138c2ecf20Sopenharmony_ci {}, 62148c2ecf20Sopenharmony_ci { {0x1, 0x66 } }, 62158c2ecf20Sopenharmony_ci }, 62168c2ecf20Sopenharmony_ci { 62178c2ecf20Sopenharmony_ci "MUL default X", 62188c2ecf20Sopenharmony_ci .u.insns = { 62198c2ecf20Sopenharmony_ci /* 62208c2ecf20Sopenharmony_ci * A = 0x42 62218c2ecf20Sopenharmony_ci * A = A * X 62228c2ecf20Sopenharmony_ci * ret A 62238c2ecf20Sopenharmony_ci */ 62248c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_IMM, 0x42), 62258c2ecf20Sopenharmony_ci BPF_STMT(BPF_ALU | BPF_MUL | BPF_X, 0), 62268c2ecf20Sopenharmony_ci BPF_STMT(BPF_RET | BPF_A, 0x0), 62278c2ecf20Sopenharmony_ci }, 62288c2ecf20Sopenharmony_ci CLASSIC | FLAG_NO_DATA, 62298c2ecf20Sopenharmony_ci {}, 62308c2ecf20Sopenharmony_ci { {0x1, 0x0 } }, 62318c2ecf20Sopenharmony_ci }, 62328c2ecf20Sopenharmony_ci { 62338c2ecf20Sopenharmony_ci "MUL default A", 62348c2ecf20Sopenharmony_ci .u.insns = { 62358c2ecf20Sopenharmony_ci /* 62368c2ecf20Sopenharmony_ci * A = A * 0x66 62378c2ecf20Sopenharmony_ci * ret A 62388c2ecf20Sopenharmony_ci */ 62398c2ecf20Sopenharmony_ci BPF_STMT(BPF_ALU | BPF_MUL | BPF_K, 0x66), 62408c2ecf20Sopenharmony_ci BPF_STMT(BPF_RET | BPF_A, 0x0), 62418c2ecf20Sopenharmony_ci }, 62428c2ecf20Sopenharmony_ci CLASSIC | FLAG_NO_DATA, 62438c2ecf20Sopenharmony_ci {}, 62448c2ecf20Sopenharmony_ci { {0x1, 0x0 } }, 62458c2ecf20Sopenharmony_ci }, 62468c2ecf20Sopenharmony_ci { 62478c2ecf20Sopenharmony_ci "DIV default X", 62488c2ecf20Sopenharmony_ci .u.insns = { 62498c2ecf20Sopenharmony_ci /* 62508c2ecf20Sopenharmony_ci * A = 0x42 62518c2ecf20Sopenharmony_ci * A = A / X ; this halt the filter execution if X is 0 62528c2ecf20Sopenharmony_ci * ret 0x42 62538c2ecf20Sopenharmony_ci */ 62548c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_IMM, 0x42), 62558c2ecf20Sopenharmony_ci BPF_STMT(BPF_ALU | BPF_DIV | BPF_X, 0), 62568c2ecf20Sopenharmony_ci BPF_STMT(BPF_RET | BPF_K, 0x42), 62578c2ecf20Sopenharmony_ci }, 62588c2ecf20Sopenharmony_ci CLASSIC | FLAG_NO_DATA, 62598c2ecf20Sopenharmony_ci {}, 62608c2ecf20Sopenharmony_ci { {0x1, 0x0 } }, 62618c2ecf20Sopenharmony_ci }, 62628c2ecf20Sopenharmony_ci { 62638c2ecf20Sopenharmony_ci "DIV default A", 62648c2ecf20Sopenharmony_ci .u.insns = { 62658c2ecf20Sopenharmony_ci /* 62668c2ecf20Sopenharmony_ci * A = A / 1 62678c2ecf20Sopenharmony_ci * ret A 62688c2ecf20Sopenharmony_ci */ 62698c2ecf20Sopenharmony_ci BPF_STMT(BPF_ALU | BPF_DIV | BPF_K, 0x1), 62708c2ecf20Sopenharmony_ci BPF_STMT(BPF_RET | BPF_A, 0x0), 62718c2ecf20Sopenharmony_ci }, 62728c2ecf20Sopenharmony_ci CLASSIC | FLAG_NO_DATA, 62738c2ecf20Sopenharmony_ci {}, 62748c2ecf20Sopenharmony_ci { {0x1, 0x0 } }, 62758c2ecf20Sopenharmony_ci }, 62768c2ecf20Sopenharmony_ci { 62778c2ecf20Sopenharmony_ci "MOD default X", 62788c2ecf20Sopenharmony_ci .u.insns = { 62798c2ecf20Sopenharmony_ci /* 62808c2ecf20Sopenharmony_ci * A = 0x42 62818c2ecf20Sopenharmony_ci * A = A mod X ; this halt the filter execution if X is 0 62828c2ecf20Sopenharmony_ci * ret 0x42 62838c2ecf20Sopenharmony_ci */ 62848c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_IMM, 0x42), 62858c2ecf20Sopenharmony_ci BPF_STMT(BPF_ALU | BPF_MOD | BPF_X, 0), 62868c2ecf20Sopenharmony_ci BPF_STMT(BPF_RET | BPF_K, 0x42), 62878c2ecf20Sopenharmony_ci }, 62888c2ecf20Sopenharmony_ci CLASSIC | FLAG_NO_DATA, 62898c2ecf20Sopenharmony_ci {}, 62908c2ecf20Sopenharmony_ci { {0x1, 0x0 } }, 62918c2ecf20Sopenharmony_ci }, 62928c2ecf20Sopenharmony_ci { 62938c2ecf20Sopenharmony_ci "MOD default A", 62948c2ecf20Sopenharmony_ci .u.insns = { 62958c2ecf20Sopenharmony_ci /* 62968c2ecf20Sopenharmony_ci * A = A mod 1 62978c2ecf20Sopenharmony_ci * ret A 62988c2ecf20Sopenharmony_ci */ 62998c2ecf20Sopenharmony_ci BPF_STMT(BPF_ALU | BPF_MOD | BPF_K, 0x1), 63008c2ecf20Sopenharmony_ci BPF_STMT(BPF_RET | BPF_A, 0x0), 63018c2ecf20Sopenharmony_ci }, 63028c2ecf20Sopenharmony_ci CLASSIC | FLAG_NO_DATA, 63038c2ecf20Sopenharmony_ci {}, 63048c2ecf20Sopenharmony_ci { {0x1, 0x0 } }, 63058c2ecf20Sopenharmony_ci }, 63068c2ecf20Sopenharmony_ci { 63078c2ecf20Sopenharmony_ci "JMP EQ default A", 63088c2ecf20Sopenharmony_ci .u.insns = { 63098c2ecf20Sopenharmony_ci /* 63108c2ecf20Sopenharmony_ci * cmp A, 0x0, 0, 1 63118c2ecf20Sopenharmony_ci * ret 0x42 63128c2ecf20Sopenharmony_ci * ret 0x66 63138c2ecf20Sopenharmony_ci */ 63148c2ecf20Sopenharmony_ci BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, 0x0, 0, 1), 63158c2ecf20Sopenharmony_ci BPF_STMT(BPF_RET | BPF_K, 0x42), 63168c2ecf20Sopenharmony_ci BPF_STMT(BPF_RET | BPF_K, 0x66), 63178c2ecf20Sopenharmony_ci }, 63188c2ecf20Sopenharmony_ci CLASSIC | FLAG_NO_DATA, 63198c2ecf20Sopenharmony_ci {}, 63208c2ecf20Sopenharmony_ci { {0x1, 0x42 } }, 63218c2ecf20Sopenharmony_ci }, 63228c2ecf20Sopenharmony_ci { 63238c2ecf20Sopenharmony_ci "JMP EQ default X", 63248c2ecf20Sopenharmony_ci .u.insns = { 63258c2ecf20Sopenharmony_ci /* 63268c2ecf20Sopenharmony_ci * A = 0x0 63278c2ecf20Sopenharmony_ci * cmp A, X, 0, 1 63288c2ecf20Sopenharmony_ci * ret 0x42 63298c2ecf20Sopenharmony_ci * ret 0x66 63308c2ecf20Sopenharmony_ci */ 63318c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_IMM, 0x0), 63328c2ecf20Sopenharmony_ci BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_X, 0x0, 0, 1), 63338c2ecf20Sopenharmony_ci BPF_STMT(BPF_RET | BPF_K, 0x42), 63348c2ecf20Sopenharmony_ci BPF_STMT(BPF_RET | BPF_K, 0x66), 63358c2ecf20Sopenharmony_ci }, 63368c2ecf20Sopenharmony_ci CLASSIC | FLAG_NO_DATA, 63378c2ecf20Sopenharmony_ci {}, 63388c2ecf20Sopenharmony_ci { {0x1, 0x42 } }, 63398c2ecf20Sopenharmony_ci }, 63408c2ecf20Sopenharmony_ci /* Checking interpreter vs JIT wrt signed extended imms. */ 63418c2ecf20Sopenharmony_ci { 63428c2ecf20Sopenharmony_ci "JNE signed compare, test 1", 63438c2ecf20Sopenharmony_ci .u.insns_int = { 63448c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R1, 0xfefbbc12), 63458c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R3, 0xffff0000), 63468c2ecf20Sopenharmony_ci BPF_MOV64_REG(R2, R1), 63478c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_AND, R2, R3), 63488c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R0, 1), 63498c2ecf20Sopenharmony_ci BPF_JMP_IMM(BPF_JNE, R2, -17104896, 1), 63508c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R0, 2), 63518c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 63528c2ecf20Sopenharmony_ci }, 63538c2ecf20Sopenharmony_ci INTERNAL, 63548c2ecf20Sopenharmony_ci { }, 63558c2ecf20Sopenharmony_ci { { 0, 1 } }, 63568c2ecf20Sopenharmony_ci }, 63578c2ecf20Sopenharmony_ci { 63588c2ecf20Sopenharmony_ci "JNE signed compare, test 2", 63598c2ecf20Sopenharmony_ci .u.insns_int = { 63608c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R1, 0xfefbbc12), 63618c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R3, 0xffff0000), 63628c2ecf20Sopenharmony_ci BPF_MOV64_REG(R2, R1), 63638c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_AND, R2, R3), 63648c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R0, 1), 63658c2ecf20Sopenharmony_ci BPF_JMP_IMM(BPF_JNE, R2, 0xfefb0000, 1), 63668c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R0, 2), 63678c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 63688c2ecf20Sopenharmony_ci }, 63698c2ecf20Sopenharmony_ci INTERNAL, 63708c2ecf20Sopenharmony_ci { }, 63718c2ecf20Sopenharmony_ci { { 0, 1 } }, 63728c2ecf20Sopenharmony_ci }, 63738c2ecf20Sopenharmony_ci { 63748c2ecf20Sopenharmony_ci "JNE signed compare, test 3", 63758c2ecf20Sopenharmony_ci .u.insns_int = { 63768c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R1, 0xfefbbc12), 63778c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R3, 0xffff0000), 63788c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R4, 0xfefb0000), 63798c2ecf20Sopenharmony_ci BPF_MOV64_REG(R2, R1), 63808c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_AND, R2, R3), 63818c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R0, 1), 63828c2ecf20Sopenharmony_ci BPF_JMP_REG(BPF_JNE, R2, R4, 1), 63838c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R0, 2), 63848c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 63858c2ecf20Sopenharmony_ci }, 63868c2ecf20Sopenharmony_ci INTERNAL, 63878c2ecf20Sopenharmony_ci { }, 63888c2ecf20Sopenharmony_ci { { 0, 2 } }, 63898c2ecf20Sopenharmony_ci }, 63908c2ecf20Sopenharmony_ci { 63918c2ecf20Sopenharmony_ci "JNE signed compare, test 4", 63928c2ecf20Sopenharmony_ci .u.insns_int = { 63938c2ecf20Sopenharmony_ci BPF_LD_IMM64(R1, -17104896), 63948c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R0, 1), 63958c2ecf20Sopenharmony_ci BPF_JMP_IMM(BPF_JNE, R1, -17104896, 1), 63968c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R0, 2), 63978c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 63988c2ecf20Sopenharmony_ci }, 63998c2ecf20Sopenharmony_ci INTERNAL, 64008c2ecf20Sopenharmony_ci { }, 64018c2ecf20Sopenharmony_ci { { 0, 2 } }, 64028c2ecf20Sopenharmony_ci }, 64038c2ecf20Sopenharmony_ci { 64048c2ecf20Sopenharmony_ci "JNE signed compare, test 5", 64058c2ecf20Sopenharmony_ci .u.insns_int = { 64068c2ecf20Sopenharmony_ci BPF_LD_IMM64(R1, 0xfefb0000), 64078c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R0, 1), 64088c2ecf20Sopenharmony_ci BPF_JMP_IMM(BPF_JNE, R1, 0xfefb0000, 1), 64098c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R0, 2), 64108c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 64118c2ecf20Sopenharmony_ci }, 64128c2ecf20Sopenharmony_ci INTERNAL, 64138c2ecf20Sopenharmony_ci { }, 64148c2ecf20Sopenharmony_ci { { 0, 1 } }, 64158c2ecf20Sopenharmony_ci }, 64168c2ecf20Sopenharmony_ci { 64178c2ecf20Sopenharmony_ci "JNE signed compare, test 6", 64188c2ecf20Sopenharmony_ci .u.insns_int = { 64198c2ecf20Sopenharmony_ci BPF_LD_IMM64(R1, 0x7efb0000), 64208c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R0, 1), 64218c2ecf20Sopenharmony_ci BPF_JMP_IMM(BPF_JNE, R1, 0x7efb0000, 1), 64228c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOV, R0, 2), 64238c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 64248c2ecf20Sopenharmony_ci }, 64258c2ecf20Sopenharmony_ci INTERNAL, 64268c2ecf20Sopenharmony_ci { }, 64278c2ecf20Sopenharmony_ci { { 0, 2 } }, 64288c2ecf20Sopenharmony_ci }, 64298c2ecf20Sopenharmony_ci { 64308c2ecf20Sopenharmony_ci "JNE signed compare, test 7", 64318c2ecf20Sopenharmony_ci .u.insns = { 64328c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_IMM, 0xffff0000), 64338c2ecf20Sopenharmony_ci BPF_STMT(BPF_MISC | BPF_TAX, 0), 64348c2ecf20Sopenharmony_ci BPF_STMT(BPF_LD | BPF_IMM, 0xfefbbc12), 64358c2ecf20Sopenharmony_ci BPF_STMT(BPF_ALU | BPF_AND | BPF_X, 0), 64368c2ecf20Sopenharmony_ci BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, 0xfefb0000, 1, 0), 64378c2ecf20Sopenharmony_ci BPF_STMT(BPF_RET | BPF_K, 1), 64388c2ecf20Sopenharmony_ci BPF_STMT(BPF_RET | BPF_K, 2), 64398c2ecf20Sopenharmony_ci }, 64408c2ecf20Sopenharmony_ci CLASSIC | FLAG_NO_DATA, 64418c2ecf20Sopenharmony_ci {}, 64428c2ecf20Sopenharmony_ci { { 0, 2 } }, 64438c2ecf20Sopenharmony_ci }, 64448c2ecf20Sopenharmony_ci}; 64458c2ecf20Sopenharmony_ci 64468c2ecf20Sopenharmony_cistatic struct net_device dev; 64478c2ecf20Sopenharmony_ci 64488c2ecf20Sopenharmony_cistatic struct sk_buff *populate_skb(char *buf, int size) 64498c2ecf20Sopenharmony_ci{ 64508c2ecf20Sopenharmony_ci struct sk_buff *skb; 64518c2ecf20Sopenharmony_ci 64528c2ecf20Sopenharmony_ci if (size >= MAX_DATA) 64538c2ecf20Sopenharmony_ci return NULL; 64548c2ecf20Sopenharmony_ci 64558c2ecf20Sopenharmony_ci skb = alloc_skb(MAX_DATA, GFP_KERNEL); 64568c2ecf20Sopenharmony_ci if (!skb) 64578c2ecf20Sopenharmony_ci return NULL; 64588c2ecf20Sopenharmony_ci 64598c2ecf20Sopenharmony_ci __skb_put_data(skb, buf, size); 64608c2ecf20Sopenharmony_ci 64618c2ecf20Sopenharmony_ci /* Initialize a fake skb with test pattern. */ 64628c2ecf20Sopenharmony_ci skb_reset_mac_header(skb); 64638c2ecf20Sopenharmony_ci skb->protocol = htons(ETH_P_IP); 64648c2ecf20Sopenharmony_ci skb->pkt_type = SKB_TYPE; 64658c2ecf20Sopenharmony_ci skb->mark = SKB_MARK; 64668c2ecf20Sopenharmony_ci skb->hash = SKB_HASH; 64678c2ecf20Sopenharmony_ci skb->queue_mapping = SKB_QUEUE_MAP; 64688c2ecf20Sopenharmony_ci skb->vlan_tci = SKB_VLAN_TCI; 64698c2ecf20Sopenharmony_ci skb->vlan_present = SKB_VLAN_PRESENT; 64708c2ecf20Sopenharmony_ci skb->vlan_proto = htons(ETH_P_IP); 64718c2ecf20Sopenharmony_ci dev_net_set(&dev, &init_net); 64728c2ecf20Sopenharmony_ci skb->dev = &dev; 64738c2ecf20Sopenharmony_ci skb->dev->ifindex = SKB_DEV_IFINDEX; 64748c2ecf20Sopenharmony_ci skb->dev->type = SKB_DEV_TYPE; 64758c2ecf20Sopenharmony_ci skb_set_network_header(skb, min(size, ETH_HLEN)); 64768c2ecf20Sopenharmony_ci 64778c2ecf20Sopenharmony_ci return skb; 64788c2ecf20Sopenharmony_ci} 64798c2ecf20Sopenharmony_ci 64808c2ecf20Sopenharmony_cistatic void *generate_test_data(struct bpf_test *test, int sub) 64818c2ecf20Sopenharmony_ci{ 64828c2ecf20Sopenharmony_ci struct sk_buff *skb; 64838c2ecf20Sopenharmony_ci struct page *page; 64848c2ecf20Sopenharmony_ci 64858c2ecf20Sopenharmony_ci if (test->aux & FLAG_NO_DATA) 64868c2ecf20Sopenharmony_ci return NULL; 64878c2ecf20Sopenharmony_ci 64888c2ecf20Sopenharmony_ci /* Test case expects an skb, so populate one. Various 64898c2ecf20Sopenharmony_ci * subtests generate skbs of different sizes based on 64908c2ecf20Sopenharmony_ci * the same data. 64918c2ecf20Sopenharmony_ci */ 64928c2ecf20Sopenharmony_ci skb = populate_skb(test->data, test->test[sub].data_size); 64938c2ecf20Sopenharmony_ci if (!skb) 64948c2ecf20Sopenharmony_ci return NULL; 64958c2ecf20Sopenharmony_ci 64968c2ecf20Sopenharmony_ci if (test->aux & FLAG_SKB_FRAG) { 64978c2ecf20Sopenharmony_ci /* 64988c2ecf20Sopenharmony_ci * when the test requires a fragmented skb, add a 64998c2ecf20Sopenharmony_ci * single fragment to the skb, filled with 65008c2ecf20Sopenharmony_ci * test->frag_data. 65018c2ecf20Sopenharmony_ci */ 65028c2ecf20Sopenharmony_ci void *ptr; 65038c2ecf20Sopenharmony_ci 65048c2ecf20Sopenharmony_ci page = alloc_page(GFP_KERNEL); 65058c2ecf20Sopenharmony_ci 65068c2ecf20Sopenharmony_ci if (!page) 65078c2ecf20Sopenharmony_ci goto err_kfree_skb; 65088c2ecf20Sopenharmony_ci 65098c2ecf20Sopenharmony_ci ptr = kmap(page); 65108c2ecf20Sopenharmony_ci if (!ptr) 65118c2ecf20Sopenharmony_ci goto err_free_page; 65128c2ecf20Sopenharmony_ci memcpy(ptr, test->frag_data, MAX_DATA); 65138c2ecf20Sopenharmony_ci kunmap(page); 65148c2ecf20Sopenharmony_ci skb_add_rx_frag(skb, 0, page, 0, MAX_DATA, MAX_DATA); 65158c2ecf20Sopenharmony_ci } 65168c2ecf20Sopenharmony_ci 65178c2ecf20Sopenharmony_ci return skb; 65188c2ecf20Sopenharmony_ci 65198c2ecf20Sopenharmony_cierr_free_page: 65208c2ecf20Sopenharmony_ci __free_page(page); 65218c2ecf20Sopenharmony_cierr_kfree_skb: 65228c2ecf20Sopenharmony_ci kfree_skb(skb); 65238c2ecf20Sopenharmony_ci return NULL; 65248c2ecf20Sopenharmony_ci} 65258c2ecf20Sopenharmony_ci 65268c2ecf20Sopenharmony_cistatic void release_test_data(const struct bpf_test *test, void *data) 65278c2ecf20Sopenharmony_ci{ 65288c2ecf20Sopenharmony_ci if (test->aux & FLAG_NO_DATA) 65298c2ecf20Sopenharmony_ci return; 65308c2ecf20Sopenharmony_ci 65318c2ecf20Sopenharmony_ci kfree_skb(data); 65328c2ecf20Sopenharmony_ci} 65338c2ecf20Sopenharmony_ci 65348c2ecf20Sopenharmony_cistatic int filter_length(int which) 65358c2ecf20Sopenharmony_ci{ 65368c2ecf20Sopenharmony_ci struct sock_filter *fp; 65378c2ecf20Sopenharmony_ci int len; 65388c2ecf20Sopenharmony_ci 65398c2ecf20Sopenharmony_ci if (tests[which].fill_helper) 65408c2ecf20Sopenharmony_ci return tests[which].u.ptr.len; 65418c2ecf20Sopenharmony_ci 65428c2ecf20Sopenharmony_ci fp = tests[which].u.insns; 65438c2ecf20Sopenharmony_ci for (len = MAX_INSNS - 1; len > 0; --len) 65448c2ecf20Sopenharmony_ci if (fp[len].code != 0 || fp[len].k != 0) 65458c2ecf20Sopenharmony_ci break; 65468c2ecf20Sopenharmony_ci 65478c2ecf20Sopenharmony_ci return len + 1; 65488c2ecf20Sopenharmony_ci} 65498c2ecf20Sopenharmony_ci 65508c2ecf20Sopenharmony_cistatic void *filter_pointer(int which) 65518c2ecf20Sopenharmony_ci{ 65528c2ecf20Sopenharmony_ci if (tests[which].fill_helper) 65538c2ecf20Sopenharmony_ci return tests[which].u.ptr.insns; 65548c2ecf20Sopenharmony_ci else 65558c2ecf20Sopenharmony_ci return tests[which].u.insns; 65568c2ecf20Sopenharmony_ci} 65578c2ecf20Sopenharmony_ci 65588c2ecf20Sopenharmony_cistatic struct bpf_prog *generate_filter(int which, int *err) 65598c2ecf20Sopenharmony_ci{ 65608c2ecf20Sopenharmony_ci __u8 test_type = tests[which].aux & TEST_TYPE_MASK; 65618c2ecf20Sopenharmony_ci unsigned int flen = filter_length(which); 65628c2ecf20Sopenharmony_ci void *fptr = filter_pointer(which); 65638c2ecf20Sopenharmony_ci struct sock_fprog_kern fprog; 65648c2ecf20Sopenharmony_ci struct bpf_prog *fp; 65658c2ecf20Sopenharmony_ci 65668c2ecf20Sopenharmony_ci switch (test_type) { 65678c2ecf20Sopenharmony_ci case CLASSIC: 65688c2ecf20Sopenharmony_ci fprog.filter = fptr; 65698c2ecf20Sopenharmony_ci fprog.len = flen; 65708c2ecf20Sopenharmony_ci 65718c2ecf20Sopenharmony_ci *err = bpf_prog_create(&fp, &fprog); 65728c2ecf20Sopenharmony_ci if (tests[which].aux & FLAG_EXPECTED_FAIL) { 65738c2ecf20Sopenharmony_ci if (*err == tests[which].expected_errcode) { 65748c2ecf20Sopenharmony_ci pr_cont("PASS\n"); 65758c2ecf20Sopenharmony_ci /* Verifier rejected filter as expected. */ 65768c2ecf20Sopenharmony_ci *err = 0; 65778c2ecf20Sopenharmony_ci return NULL; 65788c2ecf20Sopenharmony_ci } else { 65798c2ecf20Sopenharmony_ci pr_cont("UNEXPECTED_PASS\n"); 65808c2ecf20Sopenharmony_ci /* Verifier didn't reject the test that's 65818c2ecf20Sopenharmony_ci * bad enough, just return! 65828c2ecf20Sopenharmony_ci */ 65838c2ecf20Sopenharmony_ci *err = -EINVAL; 65848c2ecf20Sopenharmony_ci return NULL; 65858c2ecf20Sopenharmony_ci } 65868c2ecf20Sopenharmony_ci } 65878c2ecf20Sopenharmony_ci if (*err) { 65888c2ecf20Sopenharmony_ci pr_cont("FAIL to prog_create err=%d len=%d\n", 65898c2ecf20Sopenharmony_ci *err, fprog.len); 65908c2ecf20Sopenharmony_ci return NULL; 65918c2ecf20Sopenharmony_ci } 65928c2ecf20Sopenharmony_ci break; 65938c2ecf20Sopenharmony_ci 65948c2ecf20Sopenharmony_ci case INTERNAL: 65958c2ecf20Sopenharmony_ci fp = bpf_prog_alloc(bpf_prog_size(flen), 0); 65968c2ecf20Sopenharmony_ci if (fp == NULL) { 65978c2ecf20Sopenharmony_ci pr_cont("UNEXPECTED_FAIL no memory left\n"); 65988c2ecf20Sopenharmony_ci *err = -ENOMEM; 65998c2ecf20Sopenharmony_ci return NULL; 66008c2ecf20Sopenharmony_ci } 66018c2ecf20Sopenharmony_ci 66028c2ecf20Sopenharmony_ci fp->len = flen; 66038c2ecf20Sopenharmony_ci /* Type doesn't really matter here as long as it's not unspec. */ 66048c2ecf20Sopenharmony_ci fp->type = BPF_PROG_TYPE_SOCKET_FILTER; 66058c2ecf20Sopenharmony_ci memcpy(fp->insnsi, fptr, fp->len * sizeof(struct bpf_insn)); 66068c2ecf20Sopenharmony_ci fp->aux->stack_depth = tests[which].stack_depth; 66078c2ecf20Sopenharmony_ci 66088c2ecf20Sopenharmony_ci /* We cannot error here as we don't need type compatibility 66098c2ecf20Sopenharmony_ci * checks. 66108c2ecf20Sopenharmony_ci */ 66118c2ecf20Sopenharmony_ci fp = bpf_prog_select_runtime(fp, err); 66128c2ecf20Sopenharmony_ci if (*err) { 66138c2ecf20Sopenharmony_ci pr_cont("FAIL to select_runtime err=%d\n", *err); 66148c2ecf20Sopenharmony_ci return NULL; 66158c2ecf20Sopenharmony_ci } 66168c2ecf20Sopenharmony_ci break; 66178c2ecf20Sopenharmony_ci } 66188c2ecf20Sopenharmony_ci 66198c2ecf20Sopenharmony_ci *err = 0; 66208c2ecf20Sopenharmony_ci return fp; 66218c2ecf20Sopenharmony_ci} 66228c2ecf20Sopenharmony_ci 66238c2ecf20Sopenharmony_cistatic void release_filter(struct bpf_prog *fp, int which) 66248c2ecf20Sopenharmony_ci{ 66258c2ecf20Sopenharmony_ci __u8 test_type = tests[which].aux & TEST_TYPE_MASK; 66268c2ecf20Sopenharmony_ci 66278c2ecf20Sopenharmony_ci switch (test_type) { 66288c2ecf20Sopenharmony_ci case CLASSIC: 66298c2ecf20Sopenharmony_ci bpf_prog_destroy(fp); 66308c2ecf20Sopenharmony_ci break; 66318c2ecf20Sopenharmony_ci case INTERNAL: 66328c2ecf20Sopenharmony_ci bpf_prog_free(fp); 66338c2ecf20Sopenharmony_ci break; 66348c2ecf20Sopenharmony_ci } 66358c2ecf20Sopenharmony_ci} 66368c2ecf20Sopenharmony_ci 66378c2ecf20Sopenharmony_cistatic int __run_one(const struct bpf_prog *fp, const void *data, 66388c2ecf20Sopenharmony_ci int runs, u64 *duration) 66398c2ecf20Sopenharmony_ci{ 66408c2ecf20Sopenharmony_ci u64 start, finish; 66418c2ecf20Sopenharmony_ci int ret = 0, i; 66428c2ecf20Sopenharmony_ci 66438c2ecf20Sopenharmony_ci migrate_disable(); 66448c2ecf20Sopenharmony_ci start = ktime_get_ns(); 66458c2ecf20Sopenharmony_ci 66468c2ecf20Sopenharmony_ci for (i = 0; i < runs; i++) 66478c2ecf20Sopenharmony_ci ret = BPF_PROG_RUN(fp, data); 66488c2ecf20Sopenharmony_ci 66498c2ecf20Sopenharmony_ci finish = ktime_get_ns(); 66508c2ecf20Sopenharmony_ci migrate_enable(); 66518c2ecf20Sopenharmony_ci 66528c2ecf20Sopenharmony_ci *duration = finish - start; 66538c2ecf20Sopenharmony_ci do_div(*duration, runs); 66548c2ecf20Sopenharmony_ci 66558c2ecf20Sopenharmony_ci return ret; 66568c2ecf20Sopenharmony_ci} 66578c2ecf20Sopenharmony_ci 66588c2ecf20Sopenharmony_cistatic int run_one(const struct bpf_prog *fp, struct bpf_test *test) 66598c2ecf20Sopenharmony_ci{ 66608c2ecf20Sopenharmony_ci int err_cnt = 0, i, runs = MAX_TESTRUNS; 66618c2ecf20Sopenharmony_ci 66628c2ecf20Sopenharmony_ci for (i = 0; i < MAX_SUBTESTS; i++) { 66638c2ecf20Sopenharmony_ci void *data; 66648c2ecf20Sopenharmony_ci u64 duration; 66658c2ecf20Sopenharmony_ci u32 ret; 66668c2ecf20Sopenharmony_ci 66678c2ecf20Sopenharmony_ci /* 66688c2ecf20Sopenharmony_ci * NOTE: Several sub-tests may be present, in which case 66698c2ecf20Sopenharmony_ci * a zero {data_size, result} tuple indicates the end of 66708c2ecf20Sopenharmony_ci * the sub-test array. The first test is always run, 66718c2ecf20Sopenharmony_ci * even if both data_size and result happen to be zero. 66728c2ecf20Sopenharmony_ci */ 66738c2ecf20Sopenharmony_ci if (i > 0 && 66748c2ecf20Sopenharmony_ci test->test[i].data_size == 0 && 66758c2ecf20Sopenharmony_ci test->test[i].result == 0) 66768c2ecf20Sopenharmony_ci break; 66778c2ecf20Sopenharmony_ci 66788c2ecf20Sopenharmony_ci data = generate_test_data(test, i); 66798c2ecf20Sopenharmony_ci if (!data && !(test->aux & FLAG_NO_DATA)) { 66808c2ecf20Sopenharmony_ci pr_cont("data generation failed "); 66818c2ecf20Sopenharmony_ci err_cnt++; 66828c2ecf20Sopenharmony_ci break; 66838c2ecf20Sopenharmony_ci } 66848c2ecf20Sopenharmony_ci ret = __run_one(fp, data, runs, &duration); 66858c2ecf20Sopenharmony_ci release_test_data(test, data); 66868c2ecf20Sopenharmony_ci 66878c2ecf20Sopenharmony_ci if (ret == test->test[i].result) { 66888c2ecf20Sopenharmony_ci pr_cont("%lld ", duration); 66898c2ecf20Sopenharmony_ci } else { 66908c2ecf20Sopenharmony_ci pr_cont("ret %d != %d ", ret, 66918c2ecf20Sopenharmony_ci test->test[i].result); 66928c2ecf20Sopenharmony_ci err_cnt++; 66938c2ecf20Sopenharmony_ci } 66948c2ecf20Sopenharmony_ci } 66958c2ecf20Sopenharmony_ci 66968c2ecf20Sopenharmony_ci return err_cnt; 66978c2ecf20Sopenharmony_ci} 66988c2ecf20Sopenharmony_ci 66998c2ecf20Sopenharmony_cistatic char test_name[64]; 67008c2ecf20Sopenharmony_cimodule_param_string(test_name, test_name, sizeof(test_name), 0); 67018c2ecf20Sopenharmony_ci 67028c2ecf20Sopenharmony_cistatic int test_id = -1; 67038c2ecf20Sopenharmony_cimodule_param(test_id, int, 0); 67048c2ecf20Sopenharmony_ci 67058c2ecf20Sopenharmony_cistatic int test_range[2] = { 0, ARRAY_SIZE(tests) - 1 }; 67068c2ecf20Sopenharmony_cimodule_param_array(test_range, int, NULL, 0); 67078c2ecf20Sopenharmony_ci 67088c2ecf20Sopenharmony_cistatic __init int find_test_index(const char *test_name) 67098c2ecf20Sopenharmony_ci{ 67108c2ecf20Sopenharmony_ci int i; 67118c2ecf20Sopenharmony_ci 67128c2ecf20Sopenharmony_ci for (i = 0; i < ARRAY_SIZE(tests); i++) { 67138c2ecf20Sopenharmony_ci if (!strcmp(tests[i].descr, test_name)) 67148c2ecf20Sopenharmony_ci return i; 67158c2ecf20Sopenharmony_ci } 67168c2ecf20Sopenharmony_ci return -1; 67178c2ecf20Sopenharmony_ci} 67188c2ecf20Sopenharmony_ci 67198c2ecf20Sopenharmony_cistatic __init int prepare_bpf_tests(void) 67208c2ecf20Sopenharmony_ci{ 67218c2ecf20Sopenharmony_ci int i; 67228c2ecf20Sopenharmony_ci 67238c2ecf20Sopenharmony_ci if (test_id >= 0) { 67248c2ecf20Sopenharmony_ci /* 67258c2ecf20Sopenharmony_ci * if a test_id was specified, use test_range to 67268c2ecf20Sopenharmony_ci * cover only that test. 67278c2ecf20Sopenharmony_ci */ 67288c2ecf20Sopenharmony_ci if (test_id >= ARRAY_SIZE(tests)) { 67298c2ecf20Sopenharmony_ci pr_err("test_bpf: invalid test_id specified.\n"); 67308c2ecf20Sopenharmony_ci return -EINVAL; 67318c2ecf20Sopenharmony_ci } 67328c2ecf20Sopenharmony_ci 67338c2ecf20Sopenharmony_ci test_range[0] = test_id; 67348c2ecf20Sopenharmony_ci test_range[1] = test_id; 67358c2ecf20Sopenharmony_ci } else if (*test_name) { 67368c2ecf20Sopenharmony_ci /* 67378c2ecf20Sopenharmony_ci * if a test_name was specified, find it and setup 67388c2ecf20Sopenharmony_ci * test_range to cover only that test. 67398c2ecf20Sopenharmony_ci */ 67408c2ecf20Sopenharmony_ci int idx = find_test_index(test_name); 67418c2ecf20Sopenharmony_ci 67428c2ecf20Sopenharmony_ci if (idx < 0) { 67438c2ecf20Sopenharmony_ci pr_err("test_bpf: no test named '%s' found.\n", 67448c2ecf20Sopenharmony_ci test_name); 67458c2ecf20Sopenharmony_ci return -EINVAL; 67468c2ecf20Sopenharmony_ci } 67478c2ecf20Sopenharmony_ci test_range[0] = idx; 67488c2ecf20Sopenharmony_ci test_range[1] = idx; 67498c2ecf20Sopenharmony_ci } else { 67508c2ecf20Sopenharmony_ci /* 67518c2ecf20Sopenharmony_ci * check that the supplied test_range is valid. 67528c2ecf20Sopenharmony_ci */ 67538c2ecf20Sopenharmony_ci if (test_range[0] >= ARRAY_SIZE(tests) || 67548c2ecf20Sopenharmony_ci test_range[1] >= ARRAY_SIZE(tests) || 67558c2ecf20Sopenharmony_ci test_range[0] < 0 || test_range[1] < 0) { 67568c2ecf20Sopenharmony_ci pr_err("test_bpf: test_range is out of bound.\n"); 67578c2ecf20Sopenharmony_ci return -EINVAL; 67588c2ecf20Sopenharmony_ci } 67598c2ecf20Sopenharmony_ci 67608c2ecf20Sopenharmony_ci if (test_range[1] < test_range[0]) { 67618c2ecf20Sopenharmony_ci pr_err("test_bpf: test_range is ending before it starts.\n"); 67628c2ecf20Sopenharmony_ci return -EINVAL; 67638c2ecf20Sopenharmony_ci } 67648c2ecf20Sopenharmony_ci } 67658c2ecf20Sopenharmony_ci 67668c2ecf20Sopenharmony_ci for (i = 0; i < ARRAY_SIZE(tests); i++) { 67678c2ecf20Sopenharmony_ci if (tests[i].fill_helper && 67688c2ecf20Sopenharmony_ci tests[i].fill_helper(&tests[i]) < 0) 67698c2ecf20Sopenharmony_ci return -ENOMEM; 67708c2ecf20Sopenharmony_ci } 67718c2ecf20Sopenharmony_ci 67728c2ecf20Sopenharmony_ci return 0; 67738c2ecf20Sopenharmony_ci} 67748c2ecf20Sopenharmony_ci 67758c2ecf20Sopenharmony_cistatic __init void destroy_bpf_tests(void) 67768c2ecf20Sopenharmony_ci{ 67778c2ecf20Sopenharmony_ci int i; 67788c2ecf20Sopenharmony_ci 67798c2ecf20Sopenharmony_ci for (i = 0; i < ARRAY_SIZE(tests); i++) { 67808c2ecf20Sopenharmony_ci if (tests[i].fill_helper) 67818c2ecf20Sopenharmony_ci kfree(tests[i].u.ptr.insns); 67828c2ecf20Sopenharmony_ci } 67838c2ecf20Sopenharmony_ci} 67848c2ecf20Sopenharmony_ci 67858c2ecf20Sopenharmony_cistatic bool exclude_test(int test_id) 67868c2ecf20Sopenharmony_ci{ 67878c2ecf20Sopenharmony_ci return test_id < test_range[0] || test_id > test_range[1]; 67888c2ecf20Sopenharmony_ci} 67898c2ecf20Sopenharmony_ci 67908c2ecf20Sopenharmony_cistatic __init struct sk_buff *build_test_skb(void) 67918c2ecf20Sopenharmony_ci{ 67928c2ecf20Sopenharmony_ci u32 headroom = NET_SKB_PAD + NET_IP_ALIGN + ETH_HLEN; 67938c2ecf20Sopenharmony_ci struct sk_buff *skb[2]; 67948c2ecf20Sopenharmony_ci struct page *page[2]; 67958c2ecf20Sopenharmony_ci int i, data_size = 8; 67968c2ecf20Sopenharmony_ci 67978c2ecf20Sopenharmony_ci for (i = 0; i < 2; i++) { 67988c2ecf20Sopenharmony_ci page[i] = alloc_page(GFP_KERNEL); 67998c2ecf20Sopenharmony_ci if (!page[i]) { 68008c2ecf20Sopenharmony_ci if (i == 0) 68018c2ecf20Sopenharmony_ci goto err_page0; 68028c2ecf20Sopenharmony_ci else 68038c2ecf20Sopenharmony_ci goto err_page1; 68048c2ecf20Sopenharmony_ci } 68058c2ecf20Sopenharmony_ci 68068c2ecf20Sopenharmony_ci /* this will set skb[i]->head_frag */ 68078c2ecf20Sopenharmony_ci skb[i] = dev_alloc_skb(headroom + data_size); 68088c2ecf20Sopenharmony_ci if (!skb[i]) { 68098c2ecf20Sopenharmony_ci if (i == 0) 68108c2ecf20Sopenharmony_ci goto err_skb0; 68118c2ecf20Sopenharmony_ci else 68128c2ecf20Sopenharmony_ci goto err_skb1; 68138c2ecf20Sopenharmony_ci } 68148c2ecf20Sopenharmony_ci 68158c2ecf20Sopenharmony_ci skb_reserve(skb[i], headroom); 68168c2ecf20Sopenharmony_ci skb_put(skb[i], data_size); 68178c2ecf20Sopenharmony_ci skb[i]->protocol = htons(ETH_P_IP); 68188c2ecf20Sopenharmony_ci skb_reset_network_header(skb[i]); 68198c2ecf20Sopenharmony_ci skb_set_mac_header(skb[i], -ETH_HLEN); 68208c2ecf20Sopenharmony_ci 68218c2ecf20Sopenharmony_ci skb_add_rx_frag(skb[i], 0, page[i], 0, 64, 64); 68228c2ecf20Sopenharmony_ci // skb_headlen(skb[i]): 8, skb[i]->head_frag = 1 68238c2ecf20Sopenharmony_ci } 68248c2ecf20Sopenharmony_ci 68258c2ecf20Sopenharmony_ci /* setup shinfo */ 68268c2ecf20Sopenharmony_ci skb_shinfo(skb[0])->gso_size = 1448; 68278c2ecf20Sopenharmony_ci skb_shinfo(skb[0])->gso_type = SKB_GSO_TCPV4; 68288c2ecf20Sopenharmony_ci skb_shinfo(skb[0])->gso_type |= SKB_GSO_DODGY; 68298c2ecf20Sopenharmony_ci skb_shinfo(skb[0])->gso_segs = 0; 68308c2ecf20Sopenharmony_ci skb_shinfo(skb[0])->frag_list = skb[1]; 68318c2ecf20Sopenharmony_ci 68328c2ecf20Sopenharmony_ci /* adjust skb[0]'s len */ 68338c2ecf20Sopenharmony_ci skb[0]->len += skb[1]->len; 68348c2ecf20Sopenharmony_ci skb[0]->data_len += skb[1]->data_len; 68358c2ecf20Sopenharmony_ci skb[0]->truesize += skb[1]->truesize; 68368c2ecf20Sopenharmony_ci 68378c2ecf20Sopenharmony_ci return skb[0]; 68388c2ecf20Sopenharmony_ci 68398c2ecf20Sopenharmony_cierr_skb1: 68408c2ecf20Sopenharmony_ci __free_page(page[1]); 68418c2ecf20Sopenharmony_cierr_page1: 68428c2ecf20Sopenharmony_ci kfree_skb(skb[0]); 68438c2ecf20Sopenharmony_cierr_skb0: 68448c2ecf20Sopenharmony_ci __free_page(page[0]); 68458c2ecf20Sopenharmony_cierr_page0: 68468c2ecf20Sopenharmony_ci return NULL; 68478c2ecf20Sopenharmony_ci} 68488c2ecf20Sopenharmony_ci 68498c2ecf20Sopenharmony_cistatic __init struct sk_buff *build_test_skb_linear_no_head_frag(void) 68508c2ecf20Sopenharmony_ci{ 68518c2ecf20Sopenharmony_ci unsigned int alloc_size = 2000; 68528c2ecf20Sopenharmony_ci unsigned int headroom = 102, doffset = 72, data_size = 1308; 68538c2ecf20Sopenharmony_ci struct sk_buff *skb[2]; 68548c2ecf20Sopenharmony_ci int i; 68558c2ecf20Sopenharmony_ci 68568c2ecf20Sopenharmony_ci /* skbs linked in a frag_list, both with linear data, with head_frag=0 68578c2ecf20Sopenharmony_ci * (data allocated by kmalloc), both have tcp data of 1308 bytes 68588c2ecf20Sopenharmony_ci * (total payload is 2616 bytes). 68598c2ecf20Sopenharmony_ci * Data offset is 72 bytes (40 ipv6 hdr, 32 tcp hdr). Some headroom. 68608c2ecf20Sopenharmony_ci */ 68618c2ecf20Sopenharmony_ci for (i = 0; i < 2; i++) { 68628c2ecf20Sopenharmony_ci skb[i] = alloc_skb(alloc_size, GFP_KERNEL); 68638c2ecf20Sopenharmony_ci if (!skb[i]) { 68648c2ecf20Sopenharmony_ci if (i == 0) 68658c2ecf20Sopenharmony_ci goto err_skb0; 68668c2ecf20Sopenharmony_ci else 68678c2ecf20Sopenharmony_ci goto err_skb1; 68688c2ecf20Sopenharmony_ci } 68698c2ecf20Sopenharmony_ci 68708c2ecf20Sopenharmony_ci skb[i]->protocol = htons(ETH_P_IPV6); 68718c2ecf20Sopenharmony_ci skb_reserve(skb[i], headroom); 68728c2ecf20Sopenharmony_ci skb_put(skb[i], doffset + data_size); 68738c2ecf20Sopenharmony_ci skb_reset_network_header(skb[i]); 68748c2ecf20Sopenharmony_ci if (i == 0) 68758c2ecf20Sopenharmony_ci skb_reset_mac_header(skb[i]); 68768c2ecf20Sopenharmony_ci else 68778c2ecf20Sopenharmony_ci skb_set_mac_header(skb[i], -ETH_HLEN); 68788c2ecf20Sopenharmony_ci __skb_pull(skb[i], doffset); 68798c2ecf20Sopenharmony_ci } 68808c2ecf20Sopenharmony_ci 68818c2ecf20Sopenharmony_ci /* setup shinfo. 68828c2ecf20Sopenharmony_ci * mimic bpf_skb_proto_4_to_6, which resets gso_segs and assigns a 68838c2ecf20Sopenharmony_ci * reduced gso_size. 68848c2ecf20Sopenharmony_ci */ 68858c2ecf20Sopenharmony_ci skb_shinfo(skb[0])->gso_size = 1288; 68868c2ecf20Sopenharmony_ci skb_shinfo(skb[0])->gso_type = SKB_GSO_TCPV6 | SKB_GSO_DODGY; 68878c2ecf20Sopenharmony_ci skb_shinfo(skb[0])->gso_segs = 0; 68888c2ecf20Sopenharmony_ci skb_shinfo(skb[0])->frag_list = skb[1]; 68898c2ecf20Sopenharmony_ci 68908c2ecf20Sopenharmony_ci /* adjust skb[0]'s len */ 68918c2ecf20Sopenharmony_ci skb[0]->len += skb[1]->len; 68928c2ecf20Sopenharmony_ci skb[0]->data_len += skb[1]->len; 68938c2ecf20Sopenharmony_ci skb[0]->truesize += skb[1]->truesize; 68948c2ecf20Sopenharmony_ci 68958c2ecf20Sopenharmony_ci return skb[0]; 68968c2ecf20Sopenharmony_ci 68978c2ecf20Sopenharmony_cierr_skb1: 68988c2ecf20Sopenharmony_ci kfree_skb(skb[0]); 68998c2ecf20Sopenharmony_cierr_skb0: 69008c2ecf20Sopenharmony_ci return NULL; 69018c2ecf20Sopenharmony_ci} 69028c2ecf20Sopenharmony_ci 69038c2ecf20Sopenharmony_cistruct skb_segment_test { 69048c2ecf20Sopenharmony_ci const char *descr; 69058c2ecf20Sopenharmony_ci struct sk_buff *(*build_skb)(void); 69068c2ecf20Sopenharmony_ci netdev_features_t features; 69078c2ecf20Sopenharmony_ci}; 69088c2ecf20Sopenharmony_ci 69098c2ecf20Sopenharmony_cistatic struct skb_segment_test skb_segment_tests[] __initconst = { 69108c2ecf20Sopenharmony_ci { 69118c2ecf20Sopenharmony_ci .descr = "gso_with_rx_frags", 69128c2ecf20Sopenharmony_ci .build_skb = build_test_skb, 69138c2ecf20Sopenharmony_ci .features = NETIF_F_SG | NETIF_F_GSO_PARTIAL | NETIF_F_IP_CSUM | 69148c2ecf20Sopenharmony_ci NETIF_F_IPV6_CSUM | NETIF_F_RXCSUM 69158c2ecf20Sopenharmony_ci }, 69168c2ecf20Sopenharmony_ci { 69178c2ecf20Sopenharmony_ci .descr = "gso_linear_no_head_frag", 69188c2ecf20Sopenharmony_ci .build_skb = build_test_skb_linear_no_head_frag, 69198c2ecf20Sopenharmony_ci .features = NETIF_F_SG | NETIF_F_FRAGLIST | 69208c2ecf20Sopenharmony_ci NETIF_F_HW_VLAN_CTAG_TX | NETIF_F_GSO | 69218c2ecf20Sopenharmony_ci NETIF_F_LLTX | NETIF_F_GRO | 69228c2ecf20Sopenharmony_ci NETIF_F_IPV6_CSUM | NETIF_F_RXCSUM | 69238c2ecf20Sopenharmony_ci NETIF_F_HW_VLAN_STAG_TX 69248c2ecf20Sopenharmony_ci } 69258c2ecf20Sopenharmony_ci}; 69268c2ecf20Sopenharmony_ci 69278c2ecf20Sopenharmony_cistatic __init int test_skb_segment_single(const struct skb_segment_test *test) 69288c2ecf20Sopenharmony_ci{ 69298c2ecf20Sopenharmony_ci struct sk_buff *skb, *segs; 69308c2ecf20Sopenharmony_ci int ret = -1; 69318c2ecf20Sopenharmony_ci 69328c2ecf20Sopenharmony_ci skb = test->build_skb(); 69338c2ecf20Sopenharmony_ci if (!skb) { 69348c2ecf20Sopenharmony_ci pr_info("%s: failed to build_test_skb", __func__); 69358c2ecf20Sopenharmony_ci goto done; 69368c2ecf20Sopenharmony_ci } 69378c2ecf20Sopenharmony_ci 69388c2ecf20Sopenharmony_ci segs = skb_segment(skb, test->features); 69398c2ecf20Sopenharmony_ci if (!IS_ERR(segs)) { 69408c2ecf20Sopenharmony_ci kfree_skb_list(segs); 69418c2ecf20Sopenharmony_ci ret = 0; 69428c2ecf20Sopenharmony_ci } 69438c2ecf20Sopenharmony_ci kfree_skb(skb); 69448c2ecf20Sopenharmony_cidone: 69458c2ecf20Sopenharmony_ci return ret; 69468c2ecf20Sopenharmony_ci} 69478c2ecf20Sopenharmony_ci 69488c2ecf20Sopenharmony_cistatic __init int test_skb_segment(void) 69498c2ecf20Sopenharmony_ci{ 69508c2ecf20Sopenharmony_ci int i, err_cnt = 0, pass_cnt = 0; 69518c2ecf20Sopenharmony_ci 69528c2ecf20Sopenharmony_ci for (i = 0; i < ARRAY_SIZE(skb_segment_tests); i++) { 69538c2ecf20Sopenharmony_ci const struct skb_segment_test *test = &skb_segment_tests[i]; 69548c2ecf20Sopenharmony_ci 69558c2ecf20Sopenharmony_ci pr_info("#%d %s ", i, test->descr); 69568c2ecf20Sopenharmony_ci 69578c2ecf20Sopenharmony_ci if (test_skb_segment_single(test)) { 69588c2ecf20Sopenharmony_ci pr_cont("FAIL\n"); 69598c2ecf20Sopenharmony_ci err_cnt++; 69608c2ecf20Sopenharmony_ci } else { 69618c2ecf20Sopenharmony_ci pr_cont("PASS\n"); 69628c2ecf20Sopenharmony_ci pass_cnt++; 69638c2ecf20Sopenharmony_ci } 69648c2ecf20Sopenharmony_ci } 69658c2ecf20Sopenharmony_ci 69668c2ecf20Sopenharmony_ci pr_info("%s: Summary: %d PASSED, %d FAILED\n", __func__, 69678c2ecf20Sopenharmony_ci pass_cnt, err_cnt); 69688c2ecf20Sopenharmony_ci return err_cnt ? -EINVAL : 0; 69698c2ecf20Sopenharmony_ci} 69708c2ecf20Sopenharmony_ci 69718c2ecf20Sopenharmony_cistatic __init int test_bpf(void) 69728c2ecf20Sopenharmony_ci{ 69738c2ecf20Sopenharmony_ci int i, err_cnt = 0, pass_cnt = 0; 69748c2ecf20Sopenharmony_ci int jit_cnt = 0, run_cnt = 0; 69758c2ecf20Sopenharmony_ci 69768c2ecf20Sopenharmony_ci for (i = 0; i < ARRAY_SIZE(tests); i++) { 69778c2ecf20Sopenharmony_ci struct bpf_prog *fp; 69788c2ecf20Sopenharmony_ci int err; 69798c2ecf20Sopenharmony_ci 69808c2ecf20Sopenharmony_ci cond_resched(); 69818c2ecf20Sopenharmony_ci if (exclude_test(i)) 69828c2ecf20Sopenharmony_ci continue; 69838c2ecf20Sopenharmony_ci 69848c2ecf20Sopenharmony_ci pr_info("#%d %s ", i, tests[i].descr); 69858c2ecf20Sopenharmony_ci 69868c2ecf20Sopenharmony_ci fp = generate_filter(i, &err); 69878c2ecf20Sopenharmony_ci if (fp == NULL) { 69888c2ecf20Sopenharmony_ci if (err == 0) { 69898c2ecf20Sopenharmony_ci pass_cnt++; 69908c2ecf20Sopenharmony_ci continue; 69918c2ecf20Sopenharmony_ci } 69928c2ecf20Sopenharmony_ci err_cnt++; 69938c2ecf20Sopenharmony_ci continue; 69948c2ecf20Sopenharmony_ci } 69958c2ecf20Sopenharmony_ci 69968c2ecf20Sopenharmony_ci pr_cont("jited:%u ", fp->jited); 69978c2ecf20Sopenharmony_ci 69988c2ecf20Sopenharmony_ci run_cnt++; 69998c2ecf20Sopenharmony_ci if (fp->jited) 70008c2ecf20Sopenharmony_ci jit_cnt++; 70018c2ecf20Sopenharmony_ci 70028c2ecf20Sopenharmony_ci err = run_one(fp, &tests[i]); 70038c2ecf20Sopenharmony_ci release_filter(fp, i); 70048c2ecf20Sopenharmony_ci 70058c2ecf20Sopenharmony_ci if (err) { 70068c2ecf20Sopenharmony_ci pr_cont("FAIL (%d times)\n", err); 70078c2ecf20Sopenharmony_ci err_cnt++; 70088c2ecf20Sopenharmony_ci } else { 70098c2ecf20Sopenharmony_ci pr_cont("PASS\n"); 70108c2ecf20Sopenharmony_ci pass_cnt++; 70118c2ecf20Sopenharmony_ci } 70128c2ecf20Sopenharmony_ci } 70138c2ecf20Sopenharmony_ci 70148c2ecf20Sopenharmony_ci pr_info("Summary: %d PASSED, %d FAILED, [%d/%d JIT'ed]\n", 70158c2ecf20Sopenharmony_ci pass_cnt, err_cnt, jit_cnt, run_cnt); 70168c2ecf20Sopenharmony_ci 70178c2ecf20Sopenharmony_ci return err_cnt ? -EINVAL : 0; 70188c2ecf20Sopenharmony_ci} 70198c2ecf20Sopenharmony_ci 70208c2ecf20Sopenharmony_cistatic int __init test_bpf_init(void) 70218c2ecf20Sopenharmony_ci{ 70228c2ecf20Sopenharmony_ci int ret; 70238c2ecf20Sopenharmony_ci 70248c2ecf20Sopenharmony_ci ret = prepare_bpf_tests(); 70258c2ecf20Sopenharmony_ci if (ret < 0) 70268c2ecf20Sopenharmony_ci return ret; 70278c2ecf20Sopenharmony_ci 70288c2ecf20Sopenharmony_ci ret = test_bpf(); 70298c2ecf20Sopenharmony_ci destroy_bpf_tests(); 70308c2ecf20Sopenharmony_ci if (ret) 70318c2ecf20Sopenharmony_ci return ret; 70328c2ecf20Sopenharmony_ci 70338c2ecf20Sopenharmony_ci return test_skb_segment(); 70348c2ecf20Sopenharmony_ci} 70358c2ecf20Sopenharmony_ci 70368c2ecf20Sopenharmony_cistatic void __exit test_bpf_exit(void) 70378c2ecf20Sopenharmony_ci{ 70388c2ecf20Sopenharmony_ci} 70398c2ecf20Sopenharmony_ci 70408c2ecf20Sopenharmony_cimodule_init(test_bpf_init); 70418c2ecf20Sopenharmony_cimodule_exit(test_bpf_exit); 70428c2ecf20Sopenharmony_ci 70438c2ecf20Sopenharmony_ciMODULE_LICENSE("GPL"); 7044