xref: /linux/tools/testing/selftests/bpf/progs/stacktrace_ips.c (revision c9e208fa93cd66f8077ee15df0728e62b105a687)
1*c9e208faSJiri Olsa // SPDX-License-Identifier: GPL-2.0
2*c9e208faSJiri Olsa // Copyright (c) 2018 Facebook
3*c9e208faSJiri Olsa 
4*c9e208faSJiri Olsa #include <vmlinux.h>
5*c9e208faSJiri Olsa #include <bpf/bpf_helpers.h>
6*c9e208faSJiri Olsa #include <bpf/bpf_tracing.h>
7*c9e208faSJiri Olsa 
8*c9e208faSJiri Olsa #ifndef PERF_MAX_STACK_DEPTH
9*c9e208faSJiri Olsa #define PERF_MAX_STACK_DEPTH         127
10*c9e208faSJiri Olsa #endif
11*c9e208faSJiri Olsa 
12*c9e208faSJiri Olsa typedef __u64 stack_trace_t[PERF_MAX_STACK_DEPTH];
13*c9e208faSJiri Olsa 
14*c9e208faSJiri Olsa struct {
15*c9e208faSJiri Olsa 	__uint(type, BPF_MAP_TYPE_STACK_TRACE);
16*c9e208faSJiri Olsa 	__uint(max_entries, 16384);
17*c9e208faSJiri Olsa 	__type(key, __u32);
18*c9e208faSJiri Olsa 	__type(value, stack_trace_t);
19*c9e208faSJiri Olsa } stackmap SEC(".maps");
20*c9e208faSJiri Olsa 
21*c9e208faSJiri Olsa extern bool CONFIG_UNWINDER_ORC __kconfig __weak;
22*c9e208faSJiri Olsa 
23*c9e208faSJiri Olsa /*
24*c9e208faSJiri Olsa  * This function is here to have CONFIG_UNWINDER_ORC
25*c9e208faSJiri Olsa  * used and added to object BTF.
26*c9e208faSJiri Olsa  */
27*c9e208faSJiri Olsa int unused(void)
28*c9e208faSJiri Olsa {
29*c9e208faSJiri Olsa 	return CONFIG_UNWINDER_ORC ? 0 : 1;
30*c9e208faSJiri Olsa }
31*c9e208faSJiri Olsa 
32*c9e208faSJiri Olsa __u32 stack_key;
33*c9e208faSJiri Olsa 
34*c9e208faSJiri Olsa SEC("kprobe.multi")
35*c9e208faSJiri Olsa int kprobe_multi_test(struct pt_regs *ctx)
36*c9e208faSJiri Olsa {
37*c9e208faSJiri Olsa 	stack_key = bpf_get_stackid(ctx, &stackmap, 0);
38*c9e208faSJiri Olsa 	return 0;
39*c9e208faSJiri Olsa }
40*c9e208faSJiri Olsa 
41*c9e208faSJiri Olsa char _license[] SEC("license") = "GPL";
42