^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) // SPDX-License-Identifier: GPL-2.0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3) #include <bpf.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5) struct bpf_map SEC("maps") __bpf_stdout__ = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6) .type = BPF_MAP_TYPE_PERF_EVENT_ARRAY,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7) .key_size = sizeof(int),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8) .value_size = sizeof(u32),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9) .max_entries = __NR_CPUS__,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) #define puts(from) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) ({ const int __len = sizeof(from); \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) char __from[__len] = from; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) perf_event_output(args, &__bpf_stdout__, BPF_F_CURRENT_CPU, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) &__from, __len & (sizeof(from) - 1)); })