diff options
Diffstat (limited to 'tools/testing/selftests/bpf/progs/linked_funcs1.c')
| -rw-r--r-- | tools/testing/selftests/bpf/progs/linked_funcs1.c | 15 | 
1 files changed, 14 insertions, 1 deletions
diff --git a/tools/testing/selftests/bpf/progs/linked_funcs1.c b/tools/testing/selftests/bpf/progs/linked_funcs1.c index b964ec1390c2..b05571bc67d5 100644 --- a/tools/testing/selftests/bpf/progs/linked_funcs1.c +++ b/tools/testing/selftests/bpf/progs/linked_funcs1.c @@ -4,6 +4,7 @@  #include "vmlinux.h"  #include <bpf/bpf_helpers.h>  #include <bpf/bpf_tracing.h> +#include <bpf/bpf_core_read.h>  /* weak and shared between two files */  const volatile int my_tid __weak; @@ -44,6 +45,13 @@ void set_output_ctx1(__u64 *ctx)  /* this weak instance should win because it's the first one */  __weak int set_output_weak(int x)  { +	static volatile int whatever; + +	/* make sure we use CO-RE relocations in a weak function, this used to +	 * cause problems for BPF static linker +	 */ +	whatever = bpf_core_type_size(struct task_struct); +  	output_weak1 = x;  	return x;  } @@ -53,12 +61,17 @@ extern int set_output_val2(int x);  /* here we'll force set_output_ctx2() to be __hidden in the final obj file */  __hidden extern void set_output_ctx2(__u64 *ctx); -SEC("raw_tp/sys_enter") +SEC("?raw_tp/sys_enter")  int BPF_PROG(handler1, struct pt_regs *regs, long id)  { +	static volatile int whatever; +  	if (my_tid != (u32)bpf_get_current_pid_tgid() || id != syscall_id)  		return 0; +	/* make sure we have CO-RE relocations in main program */ +	whatever = bpf_core_type_size(struct task_struct); +  	set_output_val2(1000);  	set_output_ctx2(ctx); /* ctx definition is hidden in BPF_PROG macro */  | 
