ksyms
u32 ksyms;
ksyms = p->symbol_rate / 1000;
bandwidth = (878 * ksyms + 6500000) / 1000000 + 1;
st_map->ksyms =
if (!st_map->uvalue || !st_map->links || !st_map->ksyms) {
struct bpf_ksym **ksyms;
if (!st_map->ksyms[i])
bpf_image_ksym_add(st_map->ksyms[i]);
if (!st_map->ksyms[i])
bpf_image_ksym_del(st_map->ksyms[i]);
if (!st_map->ksyms[i])
kfree(st_map->ksyms[i]);
st_map->ksyms[i] = NULL;
pksym = st_map->ksyms;
if (st_map->ksyms)
bpf_map_area_free(st_map->ksyms);
#define MCS_SYMBOL_TIME(sgi, ksyms) \
((ksyms) * 4 * 18) / 20 : /* 3.6 us per sym */ \
((ksyms) * 4) /* 4.0 us per sym */ \
#define HE_SYMBOL_TIME(gi, ksyms) \
((ksyms) * 16 * 17) / 20 : /* 13.6 us per sym */ \
((ksyms) * 16 * 18) / 20 : /* 14.4 us per sym */ \
((ksyms) * 16) /* 16.0 us per sym */ \
__u64 *ksyms = NULL;
ksyms = u64_to_ptr(info->jited_ksyms);
if (ksyms) {
sym = kernel_syms_search(&dd, ksyms[i]);
sprintf(sym_name, "0x%016llx", ksyms[i]);
if (ksyms) {
prog_linfo, ksyms[i], i,
struct ksym_desc *ksyms;
free(gen->ksyms);
gen->ksyms = NULL;
kdesc = &gen->ksyms[i];
kdesc = libbpf_reallocarray(gen->ksyms, gen->nr_ksyms + 1, sizeof(*kdesc));
gen->ksyms = kdesc;
kdesc = &gen->ksyms[gen->nr_ksyms++];
kdesc = &gen->ksyms[i];
struct ksyms *ksyms = NULL;
if (bpf_get_ksyms(&ksyms, true)) {
opts.syms = (const char **)ksyms->filtered_syms;
opts.cnt = ksyms->filtered_cnt;
free_kallsyms_local(ksyms);
struct ksyms *ksyms = NULL;
if (!ASSERT_OK(bpf_get_ksyms(&ksyms, kernel), "bpf_get_ksyms"))
opts.syms = (const char **)ksyms->filtered_syms;
opts.cnt = ksyms->filtered_cnt;
free_kallsyms_local(ksyms);
addrs[0] = ksym_get_addr_local(ksyms, "bpf_testmod_fentry_test1");
addrs[1] = ksym_get_addr_local(ksyms, "bpf_testmod_fentry_test2");
addrs[2] = ksym_get_addr_local(ksyms, "bpf_testmod_fentry_test3");
static struct ksyms *ksyms;
ksyms = load_kallsyms_local();
if (!ASSERT_OK_PTR(ksyms, "load_kallsyms_local"))
free_kallsyms_local(ksyms);
ksyms = load_kallsyms_local();
if (!ASSERT_OK_PTR(ksyms, "load_kallsyms_local"))
ksym = ksym_search_local(ksyms, ips[i]);
free_kallsyms_local(ksyms);
struct ksyms *ksyms = NULL;
free_kallsyms_local(ksyms);
struct ksyms *load_kallsyms_local(void)
struct ksyms *load_kallsyms_custom_local(ksym_cmp_t cmp_cb)
if (!ksyms)
ksyms = load_kallsyms_local();
return ksyms ? 0 : 1;
struct ksym *ksym_search_local(struct ksyms *ksyms, long key)
int start = 0, end = ksyms->sym_cnt;
if (ksyms->sym_cnt <= 0)
result = key - ksyms->syms[mid].addr;
return &ksyms->syms[mid];
if (start >= 1 && ksyms->syms[start - 1].addr < key &&
key < ksyms->syms[start].addr)
return &ksyms->syms[start - 1];
return &ksyms->syms[0];
struct ksym *search_kallsyms_custom_local(struct ksyms *ksyms, const void *p,
int start = 0, mid, end = ksyms->sym_cnt;
ks = &ksyms->syms[mid];
if (!ksyms)
return ksym_search_local(ksyms, key);
long ksym_get_addr_local(struct ksyms *ksyms, const char *name)
for (i = 0; i < ksyms->sym_cnt; i++) {
if (strcmp(ksyms->syms[i].name, name) == 0)
return ksyms->syms[i].addr;
if (!ksyms)
return ksym_get_addr_local(ksyms, name);
static struct ksyms *ksyms;
static int ksyms__add_symbol(struct ksyms *ksyms, const char *name,
ksyms->syms[ksyms->sym_cnt].addr = addr;
ksyms->syms[ksyms->sym_cnt].name = tmp;
ksyms->sym_cnt++;
void free_kallsyms_local(struct ksyms *ksyms)
if (!ksyms)
free(ksyms->filtered_syms);
if (!ksyms->syms) {
free(ksyms);
for (i = 0; i < ksyms->sym_cnt; i++)
free(ksyms->syms[i].name);
free(ksyms->syms);
int bpf_get_ksyms(struct ksyms **ksymsp, bool kernel)
free(ksyms);
struct ksyms *ksyms;
ksyms = load_kallsyms_custom_local(load_kallsyms_compare);
if (!ksyms)
free_kallsyms_local(ksyms);
static struct ksyms *load_kallsyms_local_common(ksym_cmp_t cmp_cb)
ks = search_kallsyms_custom_local(ksyms, name, search_kallsyms_compare);
ksyms->filtered_syms = syms;
ksyms->filtered_cnt = cnt;
*ksymsp = ksyms;
free_kallsyms_local(ksyms);
struct ksyms *ksyms;
ksyms = calloc(1, sizeof(struct ksyms));
if (!ksyms) {
ret = libbpf_ensure_mem((void **) &ksyms->syms, &ksyms->sym_cap,
sizeof(struct ksym), ksyms->sym_cnt + 1);
ret = ksyms__add_symbol(ksyms, func, (unsigned long)addr);
qsort(ksyms->syms, ksyms->sym_cnt, sizeof(struct ksym), cmp_cb);
return ksyms;
struct ksyms *load_kallsyms_local(void);
struct ksym *ksym_search_local(struct ksyms *ksyms, long key);
long ksym_get_addr_local(struct ksyms *ksyms, const char *name);
void free_kallsyms_local(struct ksyms *ksyms);
struct ksyms *load_kallsyms_custom_local(ksym_cmp_t cmp_cb);
struct ksym *search_kallsyms_custom_local(struct ksyms *ksyms, const void *p1,
int bpf_get_ksyms(struct ksyms **ksymsp, bool kernel);