prog_linfo
const struct bpf_prog_linfo *prog_linfo,
if (prog_linfo) {
linfo = bpf_prog_linfo__lfind_addr_func(prog_linfo,
const struct bpf_prog_linfo *prog_linfo,
const struct bpf_prog_linfo *prog_linfo,
struct bpf_prog_linfo *prog_linfo = NULL;
prog_linfo = bpf_prog_linfo__new(info);
if (!prog_linfo)
prog_linfo, ksyms[i], i,
dd.prog_linfo = prog_linfo;
bpf_prog_linfo__free(prog_linfo);
const struct bpf_prog_linfo *prog_linfo = dd->prog_linfo;
if (prog_linfo) {
linfo = bpf_prog_linfo__lfind(prog_linfo, i, nr_skip);
const struct bpf_prog_linfo *prog_linfo = dd->prog_linfo;
if (prog_linfo) {
linfo = bpf_prog_linfo__lfind(prog_linfo, i, nr_skip);
const struct bpf_prog_linfo *prog_linfo = dd->prog_linfo;
if (prog_linfo) {
linfo = bpf_prog_linfo__lfind(prog_linfo, insn_off, 0);
const struct bpf_prog_linfo *prog_linfo;
struct bpf_prog_linfo *prog_linfo;
prog_linfo = calloc(1, sizeof(*prog_linfo));
if (!prog_linfo)
prog_linfo->nr_linfo = nr_linfo;
prog_linfo->rec_size = info->line_info_rec_size;
data_sz = (__u64)nr_linfo * prog_linfo->rec_size;
prog_linfo->raw_linfo = malloc(data_sz);
if (!prog_linfo->raw_linfo)
memcpy(prog_linfo->raw_linfo, (void *)(long)info->line_info, data_sz);
return prog_linfo;
prog_linfo->nr_jited_func = nr_jited_func;
prog_linfo->jited_rec_size = info->jited_line_info_rec_size;
data_sz = (__u64)nr_linfo * prog_linfo->jited_rec_size;
prog_linfo->raw_jited_linfo = malloc(data_sz);
if (!prog_linfo->raw_jited_linfo)
memcpy(prog_linfo->raw_jited_linfo,
prog_linfo->nr_jited_linfo_per_func = malloc(nr_jited_func *
if (!prog_linfo->nr_jited_linfo_per_func)
prog_linfo->jited_linfo_func_idx = malloc(nr_jited_func *
if (!prog_linfo->jited_linfo_func_idx)
if (dissect_jited_func(prog_linfo,
return prog_linfo;
bpf_prog_linfo__free(prog_linfo);
bpf_prog_linfo__lfind_addr_func(const struct bpf_prog_linfo *prog_linfo,
if (func_idx >= prog_linfo->nr_jited_func)
nr_linfo = prog_linfo->nr_jited_linfo_per_func[func_idx];
start = prog_linfo->jited_linfo_func_idx[func_idx] + nr_skip;
jited_rec_size = prog_linfo->jited_rec_size;
raw_jited_linfo = prog_linfo->raw_jited_linfo +
rec_size = prog_linfo->rec_size;
raw_linfo = prog_linfo->raw_linfo + (start * rec_size);
bpf_prog_linfo__lfind(const struct bpf_prog_linfo *prog_linfo,
static int dissect_jited_func(struct bpf_prog_linfo *prog_linfo,
nr_linfo = prog_linfo->nr_linfo;
rec_size = prog_linfo->rec_size;
raw_linfo = prog_linfo->raw_linfo + (nr_skip * rec_size);
raw_jited_linfo = prog_linfo->raw_jited_linfo;
prog_linfo->jited_linfo_func_idx[0] = 0;
nr_jited_func = prog_linfo->nr_jited_func;
nr_linfo = prog_linfo->nr_linfo;
raw_jited_linfo += prog_linfo->jited_rec_size;
prog_linfo->jited_linfo_func_idx[f] = i;
prog_linfo->nr_jited_linfo_per_func[f - 1] =
prog_linfo->nr_jited_linfo_per_func[nr_jited_func - 1] =
void bpf_prog_linfo__free(struct bpf_prog_linfo *prog_linfo)
if (!prog_linfo)
free(prog_linfo->raw_linfo);
free(prog_linfo->raw_jited_linfo);
free(prog_linfo->nr_jited_linfo_per_func);
free(prog_linfo->jited_linfo_func_idx);
free(prog_linfo);
struct bpf_prog_linfo *prog_linfo = NULL;
prog_linfo = bpf_prog_linfo__new(&info_linear->info);
if (prog_linfo)
linfo = bpf_prog_linfo__lfind_addr_func(prog_linfo,
free(prog_linfo);