diff options
Diffstat (limited to 'sys/linux')
| -rw-r--r-- | sys/linux/bpf.txt | 21 | ||||
| -rw-r--r-- | sys/linux/bpf.txt.const | 1 |
2 files changed, 19 insertions, 3 deletions
diff --git a/sys/linux/bpf.txt b/sys/linux/bpf.txt index 539b00e3b..bfb62a629 100644 --- a/sys/linux/bpf.txt +++ b/sys/linux/bpf.txt @@ -410,6 +410,7 @@ bpf_insn [ cb_func bpf_insn_cb_func printk bpf_insn_trace_printk snprintf bpf_insn_snprintf + tail_call bpf_insn_tail_call ] [varlen] bpf_insn_generic { @@ -575,18 +576,21 @@ type bpf_insn_mov_imm64[DST, IMM1, IMM2] { imm2 const[IMM2, int32] } -bpf_insn_map_fd { +type bpf_insn_map_fd_t[DST, MAP_FD] { code const[bpf_insn_load_imm_dw, int8] - dst flags[bpf_reg, int8:4] + dst DST src const[BPF_PSEUDO_MAP_FD, int8:4] off const[0, int16] - imm fd_bpf_map + imm MAP_FD code2 const[0, int8] regs2 const[0, int8] off2 const[0, int16] imm2 const[0, int32] } +type bpf_insn_map_fd bpf_insn_map_fd_t[flags[bpf_reg, int8:4], fd_bpf_map] +type bpf_insn_tail_call_map_fd[DST] bpf_insn_map_fd_t[const[DST, int8:4], tail_call_map] + bpf_insn_map_idx { code const[bpf_insn_load_imm_dw, int8] dst flags[bpf_reg, int8:4] @@ -709,6 +713,17 @@ bpf_insn_snprintf { insn12 bpf_insn_call_helper_t[const[BPF_FUNC_snprintf, int32]] } +# (18) r2 = map[id:10] +# (b7) r3 = 2 +# (85) call bpf_tail_call#12 +# (b7) r0 = 0 +bpf_insn_tail_call { + insn1 bpf_insn_tail_call_map_fd[BPF_REG_2] + insn2 bpf_insn_mov_imm[BPF_REG_3, 0] + insn3 bpf_insn_call_helper_t[const[BPF_FUNC_tail_call, int32]] + insn4 bpf_insn_mov_imm[BPF_REG_0, 0] +} + define MAX_BPF_REG __MAX_BPF_REG bpf_obj_pin_map [ diff --git a/sys/linux/bpf.txt.const b/sys/linux/bpf.txt.const index e1d7a549e..4e55324c0 100644 --- a/sys/linux/bpf.txt.const +++ b/sys/linux/bpf.txt.const @@ -67,6 +67,7 @@ BPF_EXIT0 = 9 BPF_FLOW_DISSECTOR = 17 BPF_FUNC_INFO_SIZE = 8 BPF_FUNC_snprintf = 165 +BPF_FUNC_tail_call = 12 BPF_FUNC_trace_printk = 6 BPF_F_AFTER = 16 BPF_F_ALLOW_MULTI = 2 |
