selftests/bpf: Refactor trace helper func load_kallsyms_local()
authorYonghong Song <yonghong.song@linux.dev>
Tue, 26 Mar 2024 04:15:08 +0000 (21:15 -0700)
committerAlexei Starovoitov <ast@kernel.org>
Fri, 29 Mar 2024 01:31:41 +0000 (18:31 -0700)
Refactor trace helper function load_kallsyms_local() such that
it invokes a common function with a compare function as input.
The common function will be used later for other local functions.

Signed-off-by: Yonghong Song <yonghong.song@linux.dev>
Link: https://lore.kernel.org/r/20240326041508.1199239-1-yonghong.song@linux.dev
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
tools/testing/selftests/bpf/trace_helpers.c
tools/testing/selftests/bpf/trace_helpers.h

index 27fd7ed3e4b0cf3e0da9b971b40f8bca3b1ca23c..fc9de4a89aeac49a762b77ba6c329ea6b536084b 100644 (file)
@@ -61,12 +61,7 @@ void free_kallsyms_local(struct ksyms *ksyms)
        free(ksyms);
 }
 
-static int ksym_cmp(const void *p1, const void *p2)
-{
-       return ((struct ksym *)p1)->addr - ((struct ksym *)p2)->addr;
-}
-
-struct ksyms *load_kallsyms_local(void)
+static struct ksyms *load_kallsyms_local_common(ksym_cmp_t cmp_cb)
 {
        FILE *f;
        char func[256], buf[256];
@@ -100,7 +95,7 @@ struct ksyms *load_kallsyms_local(void)
                        goto error;
        }
        fclose(f);
-       qsort(ksyms->syms, ksyms->sym_cnt, sizeof(struct ksym), ksym_cmp);
+       qsort(ksyms->syms, ksyms->sym_cnt, sizeof(struct ksym), cmp_cb);
        return ksyms;
 
 error:
@@ -109,6 +104,16 @@ error:
        return NULL;
 }
 
+static int ksym_cmp(const void *p1, const void *p2)
+{
+       return ((struct ksym *)p1)->addr - ((struct ksym *)p2)->addr;
+}
+
+struct ksyms *load_kallsyms_local(void)
+{
+       return load_kallsyms_local_common(ksym_cmp);
+}
+
 int load_kallsyms(void)
 {
        pthread_mutex_lock(&ksyms_mutex);
index 04fd1da7079ddb38cf3013e51b589d49d6b3eefe..9da0d0484eedd3821539bd8bbbd6a05e15ee2ebc 100644 (file)
@@ -13,6 +13,8 @@ struct ksym {
 };
 struct ksyms;
 
+typedef int (*ksym_cmp_t)(const void *p1, const void *p2);
+
 int load_kallsyms(void);
 struct ksym *ksym_search(long key);
 long ksym_get_addr(const char *name);