Lines Matching refs:ksyms
25 struct ksyms { struct
31 static struct ksyms *ksyms; variable
34 static int ksyms__add_symbol(struct ksyms *ksyms, const char *name, in ksyms__add_symbol() argument
42 ksyms->syms[ksyms->sym_cnt].addr = addr; in ksyms__add_symbol()
43 ksyms->syms[ksyms->sym_cnt].name = tmp; in ksyms__add_symbol()
44 ksyms->sym_cnt++; in ksyms__add_symbol()
48 void free_kallsyms_local(struct ksyms *ksyms) in free_kallsyms_local() argument
52 if (!ksyms) in free_kallsyms_local()
55 if (!ksyms->syms) { in free_kallsyms_local()
56 free(ksyms); in free_kallsyms_local()
60 for (i = 0; i < ksyms->sym_cnt; i++) in free_kallsyms_local()
61 free(ksyms->syms[i].name); in free_kallsyms_local()
62 free(ksyms->syms); in free_kallsyms_local()
63 free(ksyms); in free_kallsyms_local()
66 static struct ksyms *load_kallsyms_local_common(ksym_cmp_t cmp_cb) in load_kallsyms_local_common()
73 struct ksyms *ksyms; in load_kallsyms_local_common() local
79 ksyms = calloc(1, sizeof(struct ksyms)); in load_kallsyms_local_common()
80 if (!ksyms) { in load_kallsyms_local_common()
91 ret = libbpf_ensure_mem((void **) &ksyms->syms, &ksyms->sym_cap, in load_kallsyms_local_common()
92 sizeof(struct ksym), ksyms->sym_cnt + 1); in load_kallsyms_local_common()
95 ret = ksyms__add_symbol(ksyms, func, (unsigned long)addr); in load_kallsyms_local_common()
100 qsort(ksyms->syms, ksyms->sym_cnt, sizeof(struct ksym), cmp_cb); in load_kallsyms_local_common()
101 return ksyms; in load_kallsyms_local_common()
105 free_kallsyms_local(ksyms); in load_kallsyms_local_common()
114 struct ksyms *load_kallsyms_local(void) in load_kallsyms_local()
119 struct ksyms *load_kallsyms_custom_local(ksym_cmp_t cmp_cb) in load_kallsyms_custom_local()
127 if (!ksyms) in load_kallsyms()
128 ksyms = load_kallsyms_local(); in load_kallsyms()
130 return ksyms ? 0 : 1; in load_kallsyms()
133 struct ksym *ksym_search_local(struct ksyms *ksyms, long key) in ksym_search_local() argument
135 int start = 0, end = ksyms->sym_cnt; in ksym_search_local()
139 if (ksyms->sym_cnt <= 0) in ksym_search_local()
145 result = key - ksyms->syms[mid].addr; in ksym_search_local()
151 return &ksyms->syms[mid]; in ksym_search_local()
154 if (start >= 1 && ksyms->syms[start - 1].addr < key && in ksym_search_local()
155 key < ksyms->syms[start].addr) in ksym_search_local()
157 return &ksyms->syms[start - 1]; in ksym_search_local()
160 return &ksyms->syms[0]; in ksym_search_local()
163 struct ksym *search_kallsyms_custom_local(struct ksyms *ksyms, const void *p, in search_kallsyms_custom_local() argument
166 int start = 0, mid, end = ksyms->sym_cnt; in search_kallsyms_custom_local()
172 ks = &ksyms->syms[mid]; in search_kallsyms_custom_local()
187 if (!ksyms) in ksym_search()
189 return ksym_search_local(ksyms, key); in ksym_search()
192 long ksym_get_addr_local(struct ksyms *ksyms, const char *name) in ksym_get_addr_local() argument
196 for (i = 0; i < ksyms->sym_cnt; i++) { in ksym_get_addr_local()
197 if (strcmp(ksyms->syms[i].name, name) == 0) in ksym_get_addr_local()
198 return ksyms->syms[i].addr; in ksym_get_addr_local()
206 if (!ksyms) in ksym_get_addr()
208 return ksym_get_addr_local(ksyms, name); in ksym_get_addr()