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, 60f8acfdd0SEduard Zingerman .result = ACCEPT, 61f8acfdd0SEduard Zingerman .runs = 0, 62f8acfdd0SEduard Zingerman .func_info = { { 0, MAIN_TYPE }, { 12, CALLBACK_TYPE } }, 63f8acfdd0SEduard Zingerman .func_info_cnt = 2, 64f8acfdd0SEduard Zingerman BTF_TYPES 65f8acfdd0SEduard Zingerman }, 66f8acfdd0SEduard Zingerman { 67f8acfdd0SEduard Zingerman "don't inline bpf_loop call, flags non-zero", 68f8acfdd0SEduard Zingerman .insns = { 69f8acfdd0SEduard Zingerman /* main */ 70f8acfdd0SEduard Zingerman BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_jiffies64), 71f8acfdd0SEduard Zingerman BPF_ALU64_REG(BPF_MOV, BPF_REG_6, BPF_REG_0), 72f8acfdd0SEduard Zingerman BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_jiffies64), 73f8acfdd0SEduard Zingerman BPF_ALU64_REG(BPF_MOV, BPF_REG_7, BPF_REG_0), 74f8acfdd0SEduard Zingerman BPF_JMP_IMM(BPF_JNE, BPF_REG_6, 0, 9), 75f8acfdd0SEduard Zingerman BPF_ALU64_IMM(BPF_MOV, BPF_REG_4, 0), 76f8acfdd0SEduard Zingerman BPF_JMP_IMM(BPF_JNE, BPF_REG_7, 0, 0), 77f8acfdd0SEduard Zingerman BPF_ALU64_IMM(BPF_MOV, BPF_REG_1, 1), 78f8acfdd0SEduard Zingerman BPF_RAW_INSN(BPF_LD | BPF_IMM | BPF_DW, BPF_REG_2, BPF_PSEUDO_FUNC, 0, 7), 79f8acfdd0SEduard Zingerman BPF_RAW_INSN(0, 0, 0, 0, 0), 80f8acfdd0SEduard Zingerman BPF_ALU64_IMM(BPF_MOV, BPF_REG_3, 0), 81f8acfdd0SEduard Zingerman BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_loop), 82f8acfdd0SEduard Zingerman BPF_ALU64_IMM(BPF_MOV, BPF_REG_0, 0), 83f8acfdd0SEduard Zingerman BPF_EXIT_INSN(), 84f8acfdd0SEduard Zingerman BPF_ALU64_IMM(BPF_MOV, BPF_REG_4, 1), 85f8acfdd0SEduard Zingerman BPF_JMP_IMM(BPF_JA, 0, 0, -10), 86f8acfdd0SEduard Zingerman /* callback */ 87f8acfdd0SEduard Zingerman BPF_ALU64_IMM(BPF_MOV, BPF_REG_0, 1), 88f8acfdd0SEduard Zingerman BPF_EXIT_INSN(), 89f8acfdd0SEduard Zingerman }, 90f8acfdd0SEduard Zingerman .expected_insns = { HELPER_CALL_INSN() }, 91f8acfdd0SEduard Zingerman .unexpected_insns = { PSEUDO_CALL_INSN() }, 92f8acfdd0SEduard Zingerman .prog_type = BPF_PROG_TYPE_TRACEPOINT, 93f8acfdd0SEduard Zingerman .result = ACCEPT, 94f8acfdd0SEduard Zingerman .runs = 0, 95f8acfdd0SEduard Zingerman .func_info = { { 0, MAIN_TYPE }, { 16, CALLBACK_TYPE } }, 96f8acfdd0SEduard Zingerman .func_info_cnt = 2, 97f8acfdd0SEduard Zingerman BTF_TYPES 98f8acfdd0SEduard Zingerman }, 99f8acfdd0SEduard Zingerman { 100f8acfdd0SEduard Zingerman "don't inline bpf_loop call, callback non-constant", 101f8acfdd0SEduard Zingerman .insns = { 102f8acfdd0SEduard Zingerman /* main */ 103f8acfdd0SEduard Zingerman BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_jiffies64), 104f8acfdd0SEduard Zingerman BPF_JMP_IMM(BPF_JEQ, BPF_REG_0, 777, 4), /* pick a random callback */ 105f8acfdd0SEduard Zingerman 106f8acfdd0SEduard Zingerman BPF_ALU64_IMM(BPF_MOV, BPF_REG_1, 1), 107f8acfdd0SEduard Zingerman BPF_RAW_INSN(BPF_LD | BPF_IMM | BPF_DW, BPF_REG_2, BPF_PSEUDO_FUNC, 0, 10), 108f8acfdd0SEduard Zingerman BPF_RAW_INSN(0, 0, 0, 0, 0), 109f8acfdd0SEduard Zingerman BPF_JMP_IMM(BPF_JA, 0, 0, 3), 110f8acfdd0SEduard Zingerman 111f8acfdd0SEduard Zingerman BPF_ALU64_IMM(BPF_MOV, BPF_REG_1, 1), 112f8acfdd0SEduard Zingerman BPF_RAW_INSN(BPF_LD | BPF_IMM | BPF_DW, BPF_REG_2, BPF_PSEUDO_FUNC, 0, 8), 113f8acfdd0SEduard Zingerman BPF_RAW_INSN(0, 0, 0, 0, 0), 114f8acfdd0SEduard Zingerman 115f8acfdd0SEduard Zingerman BPF_ALU64_IMM(BPF_MOV, BPF_REG_3, 0), 116f8acfdd0SEduard Zingerman BPF_ALU64_IMM(BPF_MOV, BPF_REG_4, 0), 117f8acfdd0SEduard Zingerman BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_loop), 118f8acfdd0SEduard Zingerman BPF_ALU64_IMM(BPF_MOV, BPF_REG_0, 0), 119f8acfdd0SEduard Zingerman BPF_EXIT_INSN(), 120f8acfdd0SEduard Zingerman /* callback */ 121f8acfdd0SEduard Zingerman BPF_ALU64_IMM(BPF_MOV, BPF_REG_0, 1), 122f8acfdd0SEduard Zingerman BPF_EXIT_INSN(), 123f8acfdd0SEduard Zingerman /* callback #2 */ 124f8acfdd0SEduard Zingerman BPF_ALU64_IMM(BPF_MOV, BPF_REG_0, 1), 125f8acfdd0SEduard Zingerman BPF_EXIT_INSN(), 126f8acfdd0SEduard Zingerman }, 127f8acfdd0SEduard Zingerman .expected_insns = { HELPER_CALL_INSN() }, 128f8acfdd0SEduard Zingerman .unexpected_insns = { PSEUDO_CALL_INSN() }, 129f8acfdd0SEduard Zingerman .prog_type = BPF_PROG_TYPE_TRACEPOINT, 130f8acfdd0SEduard Zingerman .result = ACCEPT, 131f8acfdd0SEduard Zingerman .runs = 0, 132f8acfdd0SEduard Zingerman .func_info = { 133f8acfdd0SEduard Zingerman { 0, MAIN_TYPE }, 134f8acfdd0SEduard Zingerman { 14, CALLBACK_TYPE }, 135f8acfdd0SEduard Zingerman { 16, CALLBACK_TYPE } 136f8acfdd0SEduard Zingerman }, 137f8acfdd0SEduard Zingerman .func_info_cnt = 3, 138f8acfdd0SEduard Zingerman BTF_TYPES 139f8acfdd0SEduard Zingerman }, 140f8acfdd0SEduard Zingerman { 141f8acfdd0SEduard Zingerman "bpf_loop_inline and a dead func", 142f8acfdd0SEduard Zingerman .insns = { 143f8acfdd0SEduard Zingerman /* main */ 144f8acfdd0SEduard Zingerman 145f8acfdd0SEduard Zingerman /* A reference to callback #1 to make verifier count it as a func. 146f8acfdd0SEduard Zingerman * This reference is overwritten below and callback #1 is dead. 147f8acfdd0SEduard Zingerman */ 148f8acfdd0SEduard Zingerman BPF_RAW_INSN(BPF_LD | BPF_IMM | BPF_DW, BPF_REG_2, BPF_PSEUDO_FUNC, 0, 9), 149f8acfdd0SEduard Zingerman BPF_RAW_INSN(0, 0, 0, 0, 0), 150f8acfdd0SEduard Zingerman BPF_ALU64_IMM(BPF_MOV, BPF_REG_1, 1), 151f8acfdd0SEduard Zingerman BPF_RAW_INSN(BPF_LD | BPF_IMM | BPF_DW, BPF_REG_2, BPF_PSEUDO_FUNC, 0, 8), 152f8acfdd0SEduard Zingerman BPF_RAW_INSN(0, 0, 0, 0, 0), 153f8acfdd0SEduard Zingerman BPF_ALU64_IMM(BPF_MOV, BPF_REG_3, 0), 154f8acfdd0SEduard Zingerman BPF_ALU64_IMM(BPF_MOV, BPF_REG_4, 0), 155f8acfdd0SEduard Zingerman BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_loop), 156f8acfdd0SEduard Zingerman BPF_ALU64_IMM(BPF_MOV, BPF_REG_0, 0), 157f8acfdd0SEduard Zingerman BPF_EXIT_INSN(), 158f8acfdd0SEduard Zingerman /* callback */ 159f8acfdd0SEduard Zingerman BPF_ALU64_IMM(BPF_MOV, BPF_REG_0, 1), 160f8acfdd0SEduard Zingerman BPF_EXIT_INSN(), 161f8acfdd0SEduard Zingerman /* callback #2 */ 162f8acfdd0SEduard Zingerman BPF_ALU64_IMM(BPF_MOV, BPF_REG_0, 1), 163f8acfdd0SEduard Zingerman BPF_EXIT_INSN(), 164f8acfdd0SEduard Zingerman }, 165f8acfdd0SEduard Zingerman .expected_insns = { PSEUDO_CALL_INSN() }, 166f8acfdd0SEduard Zingerman .unexpected_insns = { HELPER_CALL_INSN() }, 167f8acfdd0SEduard Zingerman .prog_type = BPF_PROG_TYPE_TRACEPOINT, 168f8acfdd0SEduard Zingerman .result = ACCEPT, 169f8acfdd0SEduard Zingerman .runs = 0, 170f8acfdd0SEduard Zingerman .func_info = { 171f8acfdd0SEduard Zingerman { 0, MAIN_TYPE }, 172f8acfdd0SEduard Zingerman { 10, CALLBACK_TYPE }, 173f8acfdd0SEduard Zingerman { 12, CALLBACK_TYPE } 174f8acfdd0SEduard Zingerman }, 175f8acfdd0SEduard Zingerman .func_info_cnt = 3, 176f8acfdd0SEduard Zingerman BTF_TYPES 177f8acfdd0SEduard Zingerman }, 178f8acfdd0SEduard Zingerman { 179f8acfdd0SEduard Zingerman "bpf_loop_inline stack locations for loop vars", 180f8acfdd0SEduard Zingerman .insns = { 181f8acfdd0SEduard Zingerman /* main */ 182f8acfdd0SEduard Zingerman BPF_ST_MEM(BPF_W, BPF_REG_10, -12, 0x77), 183f8acfdd0SEduard Zingerman /* bpf_loop call #1 */ 184f8acfdd0SEduard Zingerman BPF_ALU64_IMM(BPF_MOV, BPF_REG_1, 1), 185f8acfdd0SEduard Zingerman BPF_RAW_INSN(BPF_LD | BPF_IMM | BPF_DW, BPF_REG_2, BPF_PSEUDO_FUNC, 0, 22), 186f8acfdd0SEduard Zingerman BPF_RAW_INSN(0, 0, 0, 0, 0), 187f8acfdd0SEduard Zingerman BPF_ALU64_IMM(BPF_MOV, BPF_REG_3, 0), 188f8acfdd0SEduard Zingerman BPF_ALU64_IMM(BPF_MOV, BPF_REG_4, 0), 189f8acfdd0SEduard Zingerman BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_loop), 190f8acfdd0SEduard Zingerman /* bpf_loop call #2 */ 191f8acfdd0SEduard Zingerman BPF_ALU64_IMM(BPF_MOV, BPF_REG_1, 2), 192f8acfdd0SEduard Zingerman BPF_RAW_INSN(BPF_LD | BPF_IMM | BPF_DW, BPF_REG_2, BPF_PSEUDO_FUNC, 0, 16), 193f8acfdd0SEduard Zingerman BPF_RAW_INSN(0, 0, 0, 0, 0), 194f8acfdd0SEduard Zingerman BPF_ALU64_IMM(BPF_MOV, BPF_REG_3, 0), 195f8acfdd0SEduard Zingerman BPF_ALU64_IMM(BPF_MOV, BPF_REG_4, 0), 196f8acfdd0SEduard Zingerman BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_loop), 197f8acfdd0SEduard Zingerman /* call func and exit */ 198f8acfdd0SEduard Zingerman BPF_CALL_REL(2), 199f8acfdd0SEduard Zingerman BPF_ALU64_IMM(BPF_MOV, BPF_REG_0, 0), 200f8acfdd0SEduard Zingerman BPF_EXIT_INSN(), 201f8acfdd0SEduard Zingerman /* func */ 202f8acfdd0SEduard Zingerman BPF_ST_MEM(BPF_DW, BPF_REG_10, -32, 0x55), 203f8acfdd0SEduard Zingerman BPF_ALU64_IMM(BPF_MOV, BPF_REG_1, 2), 204f8acfdd0SEduard Zingerman BPF_RAW_INSN(BPF_LD | BPF_IMM | BPF_DW, BPF_REG_2, BPF_PSEUDO_FUNC, 0, 6), 205f8acfdd0SEduard Zingerman BPF_RAW_INSN(0, 0, 0, 0, 0), 206f8acfdd0SEduard Zingerman BPF_ALU64_IMM(BPF_MOV, BPF_REG_3, 0), 207f8acfdd0SEduard Zingerman BPF_ALU64_IMM(BPF_MOV, BPF_REG_4, 0), 208f8acfdd0SEduard Zingerman BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_loop), 209f8acfdd0SEduard Zingerman BPF_ALU64_IMM(BPF_MOV, BPF_REG_0, 0), 210f8acfdd0SEduard Zingerman BPF_EXIT_INSN(), 211f8acfdd0SEduard Zingerman /* callback */ 212f8acfdd0SEduard Zingerman BPF_ALU64_IMM(BPF_MOV, BPF_REG_0, 1), 213f8acfdd0SEduard Zingerman BPF_EXIT_INSN(), 214f8acfdd0SEduard Zingerman }, 215f8acfdd0SEduard Zingerman .expected_insns = { 216f8acfdd0SEduard Zingerman BPF_ST_MEM(BPF_W, BPF_REG_10, -12, 0x77), 217f8acfdd0SEduard Zingerman SKIP_INSNS(), 218f8acfdd0SEduard Zingerman BPF_STX_MEM(BPF_DW, BPF_REG_10, BPF_REG_6, -40), 219f8acfdd0SEduard Zingerman BPF_STX_MEM(BPF_DW, BPF_REG_10, BPF_REG_7, -32), 220f8acfdd0SEduard Zingerman BPF_STX_MEM(BPF_DW, BPF_REG_10, BPF_REG_8, -24), 221f8acfdd0SEduard Zingerman SKIP_INSNS(), 222f8acfdd0SEduard Zingerman /* offsets are the same as in the first call */ 223f8acfdd0SEduard Zingerman BPF_STX_MEM(BPF_DW, BPF_REG_10, BPF_REG_6, -40), 224f8acfdd0SEduard Zingerman BPF_STX_MEM(BPF_DW, BPF_REG_10, BPF_REG_7, -32), 225f8acfdd0SEduard Zingerman BPF_STX_MEM(BPF_DW, BPF_REG_10, BPF_REG_8, -24), 226f8acfdd0SEduard Zingerman SKIP_INSNS(), 227f8acfdd0SEduard Zingerman BPF_ST_MEM(BPF_DW, BPF_REG_10, -32, 0x55), 228f8acfdd0SEduard Zingerman SKIP_INSNS(), 229f8acfdd0SEduard Zingerman /* offsets differ from main because of different offset 230f8acfdd0SEduard Zingerman * in BPF_ST_MEM instruction 231f8acfdd0SEduard Zingerman */ 232f8acfdd0SEduard Zingerman BPF_STX_MEM(BPF_DW, BPF_REG_10, BPF_REG_6, -56), 233f8acfdd0SEduard Zingerman BPF_STX_MEM(BPF_DW, BPF_REG_10, BPF_REG_7, -48), 234f8acfdd0SEduard Zingerman BPF_STX_MEM(BPF_DW, BPF_REG_10, BPF_REG_8, -40), 235f8acfdd0SEduard Zingerman }, 236f8acfdd0SEduard Zingerman .unexpected_insns = { HELPER_CALL_INSN() }, 237f8acfdd0SEduard Zingerman .prog_type = BPF_PROG_TYPE_TRACEPOINT, 238f8acfdd0SEduard Zingerman .result = ACCEPT, 239f8acfdd0SEduard Zingerman .func_info = { 240f8acfdd0SEduard Zingerman { 0, MAIN_TYPE }, 241f8acfdd0SEduard Zingerman { 16, MAIN_TYPE }, 242f8acfdd0SEduard Zingerman { 25, CALLBACK_TYPE }, 243f8acfdd0SEduard Zingerman }, 244f8acfdd0SEduard Zingerman .func_info_cnt = 3, 245f8acfdd0SEduard Zingerman BTF_TYPES 246f8acfdd0SEduard Zingerman }, 247*41188e9eSEduard Zingerman { 248*41188e9eSEduard Zingerman "inline bpf_loop call in a big program", 249*41188e9eSEduard Zingerman .insns = {}, 250*41188e9eSEduard Zingerman .fill_helper = bpf_fill_big_prog_with_loop_1, 251*41188e9eSEduard Zingerman .expected_insns = { PSEUDO_CALL_INSN() }, 252*41188e9eSEduard Zingerman .unexpected_insns = { HELPER_CALL_INSN() }, 253*41188e9eSEduard Zingerman .result = ACCEPT, 254*41188e9eSEduard Zingerman .func_info = { { 0, MAIN_TYPE }, { 16, CALLBACK_TYPE } }, 255*41188e9eSEduard Zingerman .func_info_cnt = 2, 256*41188e9eSEduard Zingerman BTF_TYPES 257*41188e9eSEduard Zingerman }, 258f8acfdd0SEduard Zingerman 259f8acfdd0SEduard Zingerman #undef HELPER_CALL_INSN 260f8acfdd0SEduard Zingerman #undef PSEUDO_CALL_INSN 261f8acfdd0SEduard Zingerman #undef CALLBACK_TYPE 262f8acfdd0SEduard Zingerman #undef MAIN_TYPE 263f8acfdd0SEduard Zingerman #undef BTF_TYPES 264