subprog_info
info = env->subprog_info;
struct bpf_subprog_info subprog_info[BPF_MAX_SUBPROGS + 2]; /* max + 2 for the fake and exception subprogs */
return &env->subprog_info[subprog];
struct bpf_subprog_info *sub = subprog_info(env, subprog);
struct bpf_subprog_info *subprog_info = env->subprog_info;
callchain->sp_starts[i] = subprog_info[st->frame[i]->subprogno].start;
struct bpf_subprog_info *sub = subprog_info(env, subprog);
env->subprog_info[subprog].is_cb = true;
env->subprog_info[subprog].is_async_cb = true;
async_cb = push_async_cb(env, env->subprog_info[subprog].start,
callback_state = push_stack(env, env->subprog_info[subprog].start, insn_idx, false);
if (env->subprog_info[subprog].might_sleep &&
if (env->subprog_info[subprog].changes_pkt_data)
*insn_idx = env->subprog_info[subprog].start - 1;
if (env->subprog_info[state->subprogno].stack_depth < size)
env->subprog_info[state->subprogno].stack_depth = size;
struct bpf_subprog_info *subprog = env->subprog_info;
? env->subprog_info[env->exception_callback_subprog].start
env->prog->aux->changes_pkt_data = env->subprog_info[0].changes_pkt_data;
env->prog->aux->might_sleep = env->subprog_info[0].might_sleep;
env->subprog_info[i].postorder_start = cur_postorder;
stack[0] = env->subprog_info[i].start;
env->subprog_info[i].postorder_start = cur_postorder;
if (env->subprog_info[i].has_ld_abs) {
if (env->subprog_info[i].has_tail_call) {
if (env->subprog_info[i].start != krecord[i].insn_off) {
if (i && !scalar_return && env->subprog_info[i].has_ld_abs) {
if (i && !scalar_return && env->subprog_info[i].has_tail_call) {
aux->func_info[i].insn_off = env->subprog_info[i].start;
sub = env->subprog_info;
if (env->subprog_info[i].start <= off)
env->subprog_info[i].start += len - 1;
if (env->subprog_info[i].start >= off)
if (env->subprog_info[j].start >= off + cnt)
if (env->subprog_info[j].start != off + cnt)
memmove(env->subprog_info + i,
env->subprog_info + j,
sizeof(*env->subprog_info) * move);
if (env->subprog_info[i].start == off)
env->subprog_info[i].start -= cnt;
if (env->subprog_info[i].linfo_idx > l_off) {
if (env->subprog_info[i].linfo_idx >= l_off + l_cnt)
env->subprog_info[i].linfo_idx -= l_cnt;
env->subprog_info[i].linfo_idx = l_off;
struct bpf_subprog_info *subprogs = env->subprog_info;
subprog_end = env->subprog_info[i + 1].start;
func[i]->aux->stack_depth = env->subprog_info[i].stack_depth;
if (env->subprog_info[i].priv_stack_mode == PRIV_STACK_ADAPTIVE)
func[i]->aux->linfo_idx = env->subprog_info[i].linfo_idx;
func[i]->aux->tail_call_reachable = env->subprog_info[i].tail_call_reachable;
func[i]->aux->exception_cb = env->subprog_info[i].is_exception_cb;
func[i]->aux->changes_pkt_data = env->subprog_info[i].changes_pkt_data;
func[i]->aux->might_sleep = env->subprog_info[i].might_sleep;
struct bpf_subprog_info *info = env->subprog_info;
struct bpf_subprog_info *subprogs = env->subprog_info;
callback_start = env->subprog_info[callback_subprogno].start;
struct bpf_subprog_info *subprogs = env->subprog_info;
env->prog->aux->stack_depth = env->subprog_info[0].stack_depth;
struct bpf_subprog_info *subprog = env->subprog_info;
struct bpf_subprog_info *sub = subprog_info(env, subprog);
state->first_insn_idx = env->subprog_info[subprog].start;
env->insn_idx = env->subprog_info[i].start;
env->prog->aux->stack_depth = env->subprog_info[0].stack_depth;
u32 depth = env->subprog_info[i].stack_depth;
if (has_refcounted_arg && env->subprog_info[i].has_tail_call) {
struct bpf_subprog_info *vals = env->subprog_info;
return p - env->subprog_info;
env->subprog_info[env->subprog_cnt++].start = off;
sort(env->subprog_info, env->subprog_cnt,
sizeof(env->subprog_info[0]), cmp_subprogs, NULL);
struct bpf_subprog_info *subprog = env->subprog_info;
if (env->subprog_info[i].start != ex_cb_insn)
struct bpf_subprog_info *subprog = env->subprog_info;
struct bpf_subprog_info *info = subprog_info(env, subprog);
return subprog_info(env, subprog)->is_exception_cb;
struct bpf_subprog_info *subprog = &env->subprog_info[state->subprogno];
struct bpf_subprog_info *subprog = env->subprog_info;
struct bpf_subprog_info *si = env->subprog_info;
return env->subprog_info[subprog].stack_depth;