1f8acfdd0SEduard Zingerman #define BTF_TYPES \ 2f8acfdd0SEduard Zingerman .btf_strings = "\0int\0i\0ctx\0callback\0main\0", \ 3f8acfdd0SEduard Zingerman .btf_types = { \ 4f8acfdd0SEduard Zingerman /* 1: int */ BTF_TYPE_INT_ENC(1, BTF_INT_SIGNED, 0, 32, 4), \ 5f8acfdd0SEduard Zingerman /* 2: int* */ BTF_PTR_ENC(1), \ 6f8acfdd0SEduard Zingerman /* 3: void* */ BTF_PTR_ENC(0), \ 7f8acfdd0SEduard Zingerman /* 4: int __(void*) */ BTF_FUNC_PROTO_ENC(1, 1), \ 8f8acfdd0SEduard Zingerman BTF_FUNC_PROTO_ARG_ENC(7, 3), \ 9f8acfdd0SEduard Zingerman /* 5: int __(int, int*) */ BTF_FUNC_PROTO_ENC(1, 2), \ 10f8acfdd0SEduard Zingerman BTF_FUNC_PROTO_ARG_ENC(5, 1), \ 11f8acfdd0SEduard Zingerman BTF_FUNC_PROTO_ARG_ENC(7, 2), \ 12f8acfdd0SEduard Zingerman /* 6: main */ BTF_FUNC_ENC(20, 4), \ 13f8acfdd0SEduard Zingerman /* 7: callback */ BTF_FUNC_ENC(11, 5), \ 14f8acfdd0SEduard Zingerman BTF_END_RAW \ 15f8acfdd0SEduard Zingerman } 16f8acfdd0SEduard Zingerman 17f8acfdd0SEduard Zingerman #define MAIN_TYPE 6 18f8acfdd0SEduard Zingerman #define CALLBACK_TYPE 7 19f8acfdd0SEduard Zingerman 20f8acfdd0SEduard Zingerman /* can't use BPF_CALL_REL, jit_subprogs adjusts IMM & OFF 21f8acfdd0SEduard Zingerman * fields for pseudo calls 22f8acfdd0SEduard Zingerman */ 23f8acfdd0SEduard Zingerman #define PSEUDO_CALL_INSN() \ 24f8acfdd0SEduard Zingerman BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, BPF_PSEUDO_CALL, \ 25f8acfdd0SEduard Zingerman INSN_OFF_MASK, INSN_IMM_MASK) 26f8acfdd0SEduard Zingerman 27f8acfdd0SEduard Zingerman /* can't use BPF_FUNC_loop constant, 28f8acfdd0SEduard Zingerman * do_mix_fixups adjusts the IMM field 29f8acfdd0SEduard Zingerman */ 30f8acfdd0SEduard Zingerman #define HELPER_CALL_INSN() \ 31f8acfdd0SEduard Zingerman BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, INSN_OFF_MASK, INSN_IMM_MASK) 32f8acfdd0SEduard Zingerman 33f8acfdd0SEduard Zingerman { 34f8acfdd0SEduard Zingerman "inline simple bpf_loop call", 35f8acfdd0SEduard Zingerman .insns = { 36f8acfdd0SEduard Zingerman /* main */ 37f8acfdd0SEduard Zingerman /* force verifier state branching to verify logic on first and 38f8acfdd0SEduard Zingerman * subsequent bpf_loop insn processing steps 39f8acfdd0SEduard Zingerman */ 40f8acfdd0SEduard Zingerman BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_jiffies64), 41f8acfdd0SEduard Zingerman BPF_JMP_IMM(BPF_JEQ, BPF_REG_0, 777, 2), 42f8acfdd0SEduard Zingerman BPF_ALU64_IMM(BPF_MOV, BPF_REG_1, 1), 43f8acfdd0SEduard Zingerman BPF_JMP_IMM(BPF_JA, 0, 0, 1), 44f8acfdd0SEduard Zingerman BPF_ALU64_IMM(BPF_MOV, BPF_REG_1, 2), 45f8acfdd0SEduard Zingerman 46f8acfdd0SEduard Zingerman BPF_RAW_INSN(BPF_LD | BPF_IMM | BPF_DW, BPF_REG_2, BPF_PSEUDO_FUNC, 0, 6), 47f8acfdd0SEduard Zingerman BPF_RAW_INSN(0, 0, 0, 0, 0), 48f8acfdd0SEduard Zingerman BPF_ALU64_IMM(BPF_MOV, BPF_REG_3, 0), 49f8acfdd0SEduard Zingerman BPF_ALU64_IMM(BPF_MOV, BPF_REG_4, 0), 50f8acfdd0SEduard Zingerman BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_loop), 51f8acfdd0SEduard Zingerman BPF_ALU64_IMM(BPF_MOV, BPF_REG_0, 0), 52f8acfdd0SEduard Zingerman BPF_EXIT_INSN(), 53f8acfdd0SEduard Zingerman /* callback */ 54f8acfdd0SEduard Zingerman BPF_ALU64_IMM(BPF_MOV, BPF_REG_0, 1), 55f8acfdd0SEduard Zingerman BPF_EXIT_INSN(), 56f8acfdd0SEduard Zingerman }, 57f8acfdd0SEduard Zingerman .expected_insns = { PSEUDO_CALL_INSN() }, 58f8acfdd0SEduard Zingerman .unexpected_insns = { HELPER_CALL_INSN() }, 59f8acfdd0SEduard Zingerman .prog_type = BPF_PROG_TYPE_TRACEPOINT, 60*0b50478fSTiezhu Yang .flags = F_NEEDS_JIT_ENABLED, 61f8acfdd0SEduard Zingerman .result = ACCEPT, 62f8acfdd0SEduard Zingerman .runs = 0, 63f8acfdd0SEduard Zingerman .func_info = { { 0, MAIN_TYPE }, { 12, CALLBACK_TYPE } }, 64f8acfdd0SEduard Zingerman .func_info_cnt = 2, 65f8acfdd0SEduard Zingerman BTF_TYPES 66f8acfdd0SEduard Zingerman }, 67f8acfdd0SEduard Zingerman { 68f8acfdd0SEduard Zingerman "don't inline bpf_loop call, flags non-zero", 69f8acfdd0SEduard Zingerman .insns = { 70f8acfdd0SEduard Zingerman /* main */ 71f8acfdd0SEduard Zingerman BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_jiffies64), 72f8acfdd0SEduard Zingerman BPF_ALU64_REG(BPF_MOV, BPF_REG_6, BPF_REG_0), 73f8acfdd0SEduard Zingerman BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_jiffies64), 74f8acfdd0SEduard Zingerman BPF_ALU64_REG(BPF_MOV, BPF_REG_7, BPF_REG_0), 75f8acfdd0SEduard Zingerman BPF_JMP_IMM(BPF_JNE, BPF_REG_6, 0, 9), 76f8acfdd0SEduard Zingerman BPF_ALU64_IMM(BPF_MOV, BPF_REG_4, 0), 77f8acfdd0SEduard Zingerman BPF_JMP_IMM(BPF_JNE, BPF_REG_7, 0, 0), 78f8acfdd0SEduard Zingerman BPF_ALU64_IMM(BPF_MOV, BPF_REG_1, 1), 79f8acfdd0SEduard Zingerman BPF_RAW_INSN(BPF_LD | BPF_IMM | BPF_DW, BPF_REG_2, BPF_PSEUDO_FUNC, 0, 7), 80f8acfdd0SEduard Zingerman BPF_RAW_INSN(0, 0, 0, 0, 0), 81f8acfdd0SEduard Zingerman BPF_ALU64_IMM(BPF_MOV, BPF_REG_3, 0), 82f8acfdd0SEduard Zingerman BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_loop), 83f8acfdd0SEduard Zingerman BPF_ALU64_IMM(BPF_MOV, BPF_REG_0, 0), 84f8acfdd0SEduard Zingerman BPF_EXIT_INSN(), 85f8acfdd0SEduard Zingerman BPF_ALU64_IMM(BPF_MOV, BPF_REG_4, 1), 86f8acfdd0SEduard Zingerman BPF_JMP_IMM(BPF_JA, 0, 0, -10), 87f8acfdd0SEduard Zingerman /* callback */ 88f8acfdd0SEduard Zingerman BPF_ALU64_IMM(BPF_MOV, BPF_REG_0, 1), 89f8acfdd0SEduard Zingerman BPF_EXIT_INSN(), 90f8acfdd0SEduard Zingerman }, 91f8acfdd0SEduard Zingerman .expected_insns = { HELPER_CALL_INSN() }, 92f8acfdd0SEduard Zingerman .unexpected_insns = { PSEUDO_CALL_INSN() }, 93f8acfdd0SEduard Zingerman .prog_type = BPF_PROG_TYPE_TRACEPOINT, 94*0b50478fSTiezhu Yang .flags = F_NEEDS_JIT_ENABLED, 95f8acfdd0SEduard Zingerman .result = ACCEPT, 96f8acfdd0SEduard Zingerman .runs = 0, 97f8acfdd0SEduard Zingerman .func_info = { { 0, MAIN_TYPE }, { 16, CALLBACK_TYPE } }, 98f8acfdd0SEduard Zingerman .func_info_cnt = 2, 99f8acfdd0SEduard Zingerman BTF_TYPES 100f8acfdd0SEduard Zingerman }, 101f8acfdd0SEduard Zingerman { 102f8acfdd0SEduard Zingerman "don't inline bpf_loop call, callback non-constant", 103f8acfdd0SEduard Zingerman .insns = { 104f8acfdd0SEduard Zingerman /* main */ 105f8acfdd0SEduard Zingerman BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_jiffies64), 106f8acfdd0SEduard Zingerman BPF_JMP_IMM(BPF_JEQ, BPF_REG_0, 777, 4), /* pick a random callback */ 107f8acfdd0SEduard Zingerman 108f8acfdd0SEduard Zingerman BPF_ALU64_IMM(BPF_MOV, BPF_REG_1, 1), 109f8acfdd0SEduard Zingerman BPF_RAW_INSN(BPF_LD | BPF_IMM | BPF_DW, BPF_REG_2, BPF_PSEUDO_FUNC, 0, 10), 110f8acfdd0SEduard Zingerman BPF_RAW_INSN(0, 0, 0, 0, 0), 111f8acfdd0SEduard Zingerman BPF_JMP_IMM(BPF_JA, 0, 0, 3), 112f8acfdd0SEduard Zingerman 113f8acfdd0SEduard Zingerman BPF_ALU64_IMM(BPF_MOV, BPF_REG_1, 1), 114f8acfdd0SEduard Zingerman BPF_RAW_INSN(BPF_LD | BPF_IMM | BPF_DW, BPF_REG_2, BPF_PSEUDO_FUNC, 0, 8), 115f8acfdd0SEduard Zingerman BPF_RAW_INSN(0, 0, 0, 0, 0), 116f8acfdd0SEduard Zingerman 117f8acfdd0SEduard Zingerman BPF_ALU64_IMM(BPF_MOV, BPF_REG_3, 0), 118f8acfdd0SEduard Zingerman BPF_ALU64_IMM(BPF_MOV, BPF_REG_4, 0), 119f8acfdd0SEduard Zingerman BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_loop), 120f8acfdd0SEduard Zingerman BPF_ALU64_IMM(BPF_MOV, BPF_REG_0, 0), 121f8acfdd0SEduard Zingerman BPF_EXIT_INSN(), 122f8acfdd0SEduard Zingerman /* callback */ 123f8acfdd0SEduard Zingerman BPF_ALU64_IMM(BPF_MOV, BPF_REG_0, 1), 124f8acfdd0SEduard Zingerman BPF_EXIT_INSN(), 125f8acfdd0SEduard Zingerman /* callback #2 */ 126f8acfdd0SEduard Zingerman BPF_ALU64_IMM(BPF_MOV, BPF_REG_0, 1), 127f8acfdd0SEduard Zingerman BPF_EXIT_INSN(), 128f8acfdd0SEduard Zingerman }, 129f8acfdd0SEduard Zingerman .expected_insns = { HELPER_CALL_INSN() }, 130f8acfdd0SEduard Zingerman .unexpected_insns = { PSEUDO_CALL_INSN() }, 131f8acfdd0SEduard Zingerman .prog_type = BPF_PROG_TYPE_TRACEPOINT, 132*0b50478fSTiezhu Yang .flags = F_NEEDS_JIT_ENABLED, 133f8acfdd0SEduard Zingerman .result = ACCEPT, 134f8acfdd0SEduard Zingerman .runs = 0, 135f8acfdd0SEduard Zingerman .func_info = { 136f8acfdd0SEduard Zingerman { 0, MAIN_TYPE }, 137f8acfdd0SEduard Zingerman { 14, CALLBACK_TYPE }, 138f8acfdd0SEduard Zingerman { 16, CALLBACK_TYPE } 139f8acfdd0SEduard Zingerman }, 140f8acfdd0SEduard Zingerman .func_info_cnt = 3, 141f8acfdd0SEduard Zingerman BTF_TYPES 142f8acfdd0SEduard Zingerman }, 143f8acfdd0SEduard Zingerman { 144f8acfdd0SEduard Zingerman "bpf_loop_inline and a dead func", 145f8acfdd0SEduard Zingerman .insns = { 146f8acfdd0SEduard Zingerman /* main */ 147f8acfdd0SEduard Zingerman 148f8acfdd0SEduard Zingerman /* A reference to callback #1 to make verifier count it as a func. 149f8acfdd0SEduard Zingerman * This reference is overwritten below and callback #1 is dead. 150f8acfdd0SEduard Zingerman */ 151f8acfdd0SEduard Zingerman BPF_RAW_INSN(BPF_LD | BPF_IMM | BPF_DW, BPF_REG_2, BPF_PSEUDO_FUNC, 0, 9), 152f8acfdd0SEduard Zingerman BPF_RAW_INSN(0, 0, 0, 0, 0), 153f8acfdd0SEduard Zingerman BPF_ALU64_IMM(BPF_MOV, BPF_REG_1, 1), 154f8acfdd0SEduard Zingerman BPF_RAW_INSN(BPF_LD | BPF_IMM | BPF_DW, BPF_REG_2, BPF_PSEUDO_FUNC, 0, 8), 155f8acfdd0SEduard Zingerman BPF_RAW_INSN(0, 0, 0, 0, 0), 156f8acfdd0SEduard Zingerman BPF_ALU64_IMM(BPF_MOV, BPF_REG_3, 0), 157f8acfdd0SEduard Zingerman BPF_ALU64_IMM(BPF_MOV, BPF_REG_4, 0), 158f8acfdd0SEduard Zingerman BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_loop), 159f8acfdd0SEduard Zingerman BPF_ALU64_IMM(BPF_MOV, BPF_REG_0, 0), 160f8acfdd0SEduard Zingerman BPF_EXIT_INSN(), 161f8acfdd0SEduard Zingerman /* callback */ 162f8acfdd0SEduard Zingerman BPF_ALU64_IMM(BPF_MOV, BPF_REG_0, 1), 163f8acfdd0SEduard Zingerman BPF_EXIT_INSN(), 164f8acfdd0SEduard Zingerman /* callback #2 */ 165f8acfdd0SEduard Zingerman BPF_ALU64_IMM(BPF_MOV, BPF_REG_0, 1), 166f8acfdd0SEduard Zingerman BPF_EXIT_INSN(), 167f8acfdd0SEduard Zingerman }, 168f8acfdd0SEduard Zingerman .expected_insns = { PSEUDO_CALL_INSN() }, 169f8acfdd0SEduard Zingerman .unexpected_insns = { HELPER_CALL_INSN() }, 170f8acfdd0SEduard Zingerman .prog_type = BPF_PROG_TYPE_TRACEPOINT, 171*0b50478fSTiezhu Yang .flags = F_NEEDS_JIT_ENABLED, 172f8acfdd0SEduard Zingerman .result = ACCEPT, 173f8acfdd0SEduard Zingerman .runs = 0, 174f8acfdd0SEduard Zingerman .func_info = { 175f8acfdd0SEduard Zingerman { 0, MAIN_TYPE }, 176f8acfdd0SEduard Zingerman { 10, CALLBACK_TYPE }, 177f8acfdd0SEduard Zingerman { 12, CALLBACK_TYPE } 178f8acfdd0SEduard Zingerman }, 179f8acfdd0SEduard Zingerman .func_info_cnt = 3, 180f8acfdd0SEduard Zingerman BTF_TYPES 181f8acfdd0SEduard Zingerman }, 182f8acfdd0SEduard Zingerman { 183f8acfdd0SEduard Zingerman "bpf_loop_inline stack locations for loop vars", 184f8acfdd0SEduard Zingerman .insns = { 185f8acfdd0SEduard Zingerman /* main */ 186f8acfdd0SEduard Zingerman BPF_ST_MEM(BPF_W, BPF_REG_10, -12, 0x77), 187f8acfdd0SEduard Zingerman /* bpf_loop call #1 */ 188f8acfdd0SEduard Zingerman BPF_ALU64_IMM(BPF_MOV, BPF_REG_1, 1), 189f8acfdd0SEduard Zingerman BPF_RAW_INSN(BPF_LD | BPF_IMM | BPF_DW, BPF_REG_2, BPF_PSEUDO_FUNC, 0, 22), 190f8acfdd0SEduard Zingerman BPF_RAW_INSN(0, 0, 0, 0, 0), 191f8acfdd0SEduard Zingerman BPF_ALU64_IMM(BPF_MOV, BPF_REG_3, 0), 192f8acfdd0SEduard Zingerman BPF_ALU64_IMM(BPF_MOV, BPF_REG_4, 0), 193f8acfdd0SEduard Zingerman BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_loop), 194f8acfdd0SEduard Zingerman /* bpf_loop call #2 */ 195f8acfdd0SEduard Zingerman BPF_ALU64_IMM(BPF_MOV, BPF_REG_1, 2), 196f8acfdd0SEduard Zingerman BPF_RAW_INSN(BPF_LD | BPF_IMM | BPF_DW, BPF_REG_2, BPF_PSEUDO_FUNC, 0, 16), 197f8acfdd0SEduard Zingerman BPF_RAW_INSN(0, 0, 0, 0, 0), 198f8acfdd0SEduard Zingerman BPF_ALU64_IMM(BPF_MOV, BPF_REG_3, 0), 199f8acfdd0SEduard Zingerman BPF_ALU64_IMM(BPF_MOV, BPF_REG_4, 0), 200f8acfdd0SEduard Zingerman BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_loop), 201f8acfdd0SEduard Zingerman /* call func and exit */ 202f8acfdd0SEduard Zingerman BPF_CALL_REL(2), 203f8acfdd0SEduard Zingerman BPF_ALU64_IMM(BPF_MOV, BPF_REG_0, 0), 204f8acfdd0SEduard Zingerman BPF_EXIT_INSN(), 205f8acfdd0SEduard Zingerman /* func */ 206f8acfdd0SEduard Zingerman BPF_ST_MEM(BPF_DW, BPF_REG_10, -32, 0x55), 207f8acfdd0SEduard Zingerman BPF_ALU64_IMM(BPF_MOV, BPF_REG_1, 2), 208f8acfdd0SEduard Zingerman BPF_RAW_INSN(BPF_LD | BPF_IMM | BPF_DW, BPF_REG_2, BPF_PSEUDO_FUNC, 0, 6), 209f8acfdd0SEduard Zingerman BPF_RAW_INSN(0, 0, 0, 0, 0), 210f8acfdd0SEduard Zingerman BPF_ALU64_IMM(BPF_MOV, BPF_REG_3, 0), 211f8acfdd0SEduard Zingerman BPF_ALU64_IMM(BPF_MOV, BPF_REG_4, 0), 212f8acfdd0SEduard Zingerman BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_loop), 213f8acfdd0SEduard Zingerman BPF_ALU64_IMM(BPF_MOV, BPF_REG_0, 0), 214f8acfdd0SEduard Zingerman BPF_EXIT_INSN(), 215f8acfdd0SEduard Zingerman /* callback */ 216f8acfdd0SEduard Zingerman BPF_ALU64_IMM(BPF_MOV, BPF_REG_0, 1), 217f8acfdd0SEduard Zingerman BPF_EXIT_INSN(), 218f8acfdd0SEduard Zingerman }, 219f8acfdd0SEduard Zingerman .expected_insns = { 220f8acfdd0SEduard Zingerman BPF_ST_MEM(BPF_W, BPF_REG_10, -12, 0x77), 221f8acfdd0SEduard Zingerman SKIP_INSNS(), 222f8acfdd0SEduard Zingerman BPF_STX_MEM(BPF_DW, BPF_REG_10, BPF_REG_6, -40), 223f8acfdd0SEduard Zingerman BPF_STX_MEM(BPF_DW, BPF_REG_10, BPF_REG_7, -32), 224f8acfdd0SEduard Zingerman BPF_STX_MEM(BPF_DW, BPF_REG_10, BPF_REG_8, -24), 225f8acfdd0SEduard Zingerman SKIP_INSNS(), 226f8acfdd0SEduard Zingerman /* offsets are the same as in the first call */ 227f8acfdd0SEduard Zingerman BPF_STX_MEM(BPF_DW, BPF_REG_10, BPF_REG_6, -40), 228f8acfdd0SEduard Zingerman BPF_STX_MEM(BPF_DW, BPF_REG_10, BPF_REG_7, -32), 229f8acfdd0SEduard Zingerman BPF_STX_MEM(BPF_DW, BPF_REG_10, BPF_REG_8, -24), 230f8acfdd0SEduard Zingerman SKIP_INSNS(), 231f8acfdd0SEduard Zingerman BPF_ST_MEM(BPF_DW, BPF_REG_10, -32, 0x55), 232f8acfdd0SEduard Zingerman SKIP_INSNS(), 233f8acfdd0SEduard Zingerman /* offsets differ from main because of different offset 234f8acfdd0SEduard Zingerman * in BPF_ST_MEM instruction 235f8acfdd0SEduard Zingerman */ 236f8acfdd0SEduard Zingerman BPF_STX_MEM(BPF_DW, BPF_REG_10, BPF_REG_6, -56), 237f8acfdd0SEduard Zingerman BPF_STX_MEM(BPF_DW, BPF_REG_10, BPF_REG_7, -48), 238f8acfdd0SEduard Zingerman BPF_STX_MEM(BPF_DW, BPF_REG_10, BPF_REG_8, -40), 239f8acfdd0SEduard Zingerman }, 240f8acfdd0SEduard Zingerman .unexpected_insns = { HELPER_CALL_INSN() }, 241f8acfdd0SEduard Zingerman .prog_type = BPF_PROG_TYPE_TRACEPOINT, 242*0b50478fSTiezhu Yang .flags = F_NEEDS_JIT_ENABLED, 243f8acfdd0SEduard Zingerman .result = ACCEPT, 244f8acfdd0SEduard Zingerman .func_info = { 245f8acfdd0SEduard Zingerman { 0, MAIN_TYPE }, 246f8acfdd0SEduard Zingerman { 16, MAIN_TYPE }, 247f8acfdd0SEduard Zingerman { 25, CALLBACK_TYPE }, 248f8acfdd0SEduard Zingerman }, 249f8acfdd0SEduard Zingerman .func_info_cnt = 3, 250f8acfdd0SEduard Zingerman BTF_TYPES 251f8acfdd0SEduard Zingerman }, 25241188e9eSEduard Zingerman { 25341188e9eSEduard Zingerman "inline bpf_loop call in a big program", 25441188e9eSEduard Zingerman .insns = {}, 25541188e9eSEduard Zingerman .fill_helper = bpf_fill_big_prog_with_loop_1, 25641188e9eSEduard Zingerman .expected_insns = { PSEUDO_CALL_INSN() }, 25741188e9eSEduard Zingerman .unexpected_insns = { HELPER_CALL_INSN() }, 25841188e9eSEduard Zingerman .result = ACCEPT, 259e3fa4735SKumar Kartikeya Dwivedi .prog_type = BPF_PROG_TYPE_TRACEPOINT, 260*0b50478fSTiezhu Yang .flags = F_NEEDS_JIT_ENABLED, 26141188e9eSEduard Zingerman .func_info = { { 0, MAIN_TYPE }, { 16, CALLBACK_TYPE } }, 26241188e9eSEduard Zingerman .func_info_cnt = 2, 26341188e9eSEduard Zingerman BTF_TYPES 26441188e9eSEduard Zingerman }, 265f8acfdd0SEduard Zingerman 266f8acfdd0SEduard Zingerman #undef HELPER_CALL_INSN 267f8acfdd0SEduard Zingerman #undef PSEUDO_CALL_INSN 268f8acfdd0SEduard Zingerman #undef CALLBACK_TYPE 269f8acfdd0SEduard Zingerman #undef MAIN_TYPE 270f8acfdd0SEduard Zingerman #undef BTF_TYPES 271