1 // SPDX-License-Identifier: GPL-2.0
5 * Copyright (c) 2021 Google
10 #include <bpf/bpf_helpers.h>
12 int out__existing_typed = -1;
13 __u64 out__existing_typeless = -1;
15 __u64 out__non_existent_typeless = -1;
16 __u64 out__non_existent_typed = -1;
18 /* existing weak symbols */
20 /* test existing weak symbols can be resolved. */
21 extern const struct rq runqueues __ksym __weak; /* typed */
22 extern const void bpf_prog_active __ksym __weak; /* typeless */
23 struct task_struct *bpf_task_acquire(struct task_struct *p) __ksym __weak;
24 void bpf_testmod_test_mod_kfunc(int i) __ksym __weak;
27 /* non-existent weak symbols. */
29 /* typeless symbols, default to zero. */
30 extern const void bpf_link_fops1 __ksym __weak;
32 /* typed symbols, default to zero. */
33 extern const int bpf_link_fops2 __ksym __weak;
34 void invalid_kfunc(void) __ksym __weak;
36 SEC("raw_tp/sys_enter")
37 int pass_handler(const void *ctx)
41 /* tests existing symbols. */
42 rq = (struct rq *)bpf_per_cpu_ptr(&runqueues, 0);
43 if (rq && bpf_ksym_exists(&runqueues))
44 out__existing_typed = rq->cpu;
45 out__existing_typeless = (__u64)&bpf_prog_active;
47 /* tests non-existent symbols. */
48 out__non_existent_typeless = (__u64)&bpf_link_fops1;
50 /* tests non-existent symbols. */
51 out__non_existent_typed = (__u64)&bpf_link_fops2;
53 if (&bpf_link_fops2) /* can't happen */
54 out__non_existent_typed = (__u64)bpf_per_cpu_ptr(&bpf_link_fops2, 0);
56 if (!bpf_ksym_exists(bpf_task_acquire))
57 /* dead code won't be seen by the verifier */
60 if (!bpf_ksym_exists(bpf_testmod_test_mod_kfunc))
61 /* dead code won't be seen by the verifier */
62 bpf_testmod_test_mod_kfunc(0);
64 if (bpf_ksym_exists(invalid_kfunc))
65 /* dead code won't be seen by the verifier */
71 char _license[] SEC("license") = "GPL";