The bpf-samples/bpf-stdout-example.c demonstrates how to put the buildid data into eBPF program. Link: http://lkml.kernel.org/n/tip-dq97ddil7h3qbvphbbo8p08c@xxxxxxxxxxxxxx Signed-off-by: Jiri Olsa <jolsa@xxxxxxxxxx> --- tools/perf/bpf-samples/bpf-stdout-example.c | 42 +++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 tools/perf/bpf-samples/bpf-stdout-example.c diff --git a/tools/perf/bpf-samples/bpf-stdout-example.c b/tools/perf/bpf-samples/bpf-stdout-example.c new file mode 100644 index 000000000000..60783442bd5c --- /dev/null +++ b/tools/perf/bpf-samples/bpf-stdout-example.c @@ -0,0 +1,42 @@ +#include <uapi/linux/bpf.h> +#include <linux/buildid.h> + +#define SEC(NAME) __attribute__((section(NAME), used)) + +char _license[] SEC("license") = "GPL"; +int _version SEC("version") = LINUX_VERSION_CODE; +char _buildid[] SEC("buildid") = LINUX_BUILDID_DATA; + +static unsigned long long (*bpf_get_smp_processor_id)(void) = + (void *) BPF_FUNC_get_smp_processor_id; +static int (*bpf_perf_event_output)(void *ctx, void *map, + unsigned long long flags, void *data, + int size) = + (void *) BPF_FUNC_perf_event_output; + +struct bpf_map_def { + unsigned int type; + unsigned int key_size; + unsigned int value_size; + unsigned int max_entries; + unsigned int map_flags; + unsigned int inner_map_idx; + unsigned int numa_node; +}; + +struct bpf_map_def SEC("maps") __bpf_stdout__ = { + .type = BPF_MAP_TYPE_PERF_EVENT_ARRAY, + .key_size = sizeof(int), + .value_size = sizeof(u32), + .max_entries = __NR_CPUS__, +}; + +SEC("probe=sys_read") +int func(void *ctx) +{ + char output_str[] = "Raise a BPF event!"; + + bpf_perf_event_output(ctx, &__bpf_stdout__, bpf_get_smp_processor_id(), + &output_str, sizeof(output_str)); + return 0; +} -- 2.13.6 -- To unsubscribe from this list: send the line "unsubscribe linux-kbuild" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html