Author | Tokens | Token Proportion | Commits | Commit Proportion |
---|---|---|---|---|
288 | 100.00% | 4 | 100.00% | |
Total | 288 | 4 |
Author | Tokens | Token Proportion | Commits | Commit Proportion |
---|---|---|---|---|
Andrii Nakryiko | 288 | 100.00% | 4 | 100.00% |
Total | 288 | 4 |
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
// SPDX-License-Identifier: GPL-2.0 // Copyright (c) 2020 Facebook #include <linux/bpf.h> #include <stdint.h> #include <stdbool.h> #include <bpf/bpf_helpers.h> #include <bpf/bpf_core_read.h> char _license[] SEC("license") = "GPL"; struct { char in[256]; char out[256]; bool skip; } data = {}; enum named_enum { NAMED_ENUM_VAL1 = 1, NAMED_ENUM_VAL2 = 2, NAMED_ENUM_VAL3 = 3, }; typedef enum { ANON_ENUM_VAL1 = 0x10, ANON_ENUM_VAL2 = 0x20, ANON_ENUM_VAL3 = 0x30, } anon_enum; struct core_reloc_enumval_output { bool named_val1_exists; bool named_val2_exists; bool named_val3_exists; bool anon_val1_exists; bool anon_val2_exists; bool anon_val3_exists; int named_val1; int named_val2; int anon_val1; int anon_val2; }; SEC("raw_tracepoint/sys_enter") int test_core_enumval(void *ctx) { #if __has_builtin(__builtin_preserve_enum_value) struct core_reloc_enumval_output *out = (void *)&data.out; enum named_enum named = 0; anon_enum anon = 0; out->named_val1_exists = bpf_core_enum_value_exists(named, NAMED_ENUM_VAL1); out->named_val2_exists = bpf_core_enum_value_exists(enum named_enum, NAMED_ENUM_VAL2); out->named_val3_exists = bpf_core_enum_value_exists(enum named_enum, NAMED_ENUM_VAL3); out->anon_val1_exists = bpf_core_enum_value_exists(anon, ANON_ENUM_VAL1); out->anon_val2_exists = bpf_core_enum_value_exists(anon_enum, ANON_ENUM_VAL2); out->anon_val3_exists = bpf_core_enum_value_exists(anon_enum, ANON_ENUM_VAL3); out->named_val1 = bpf_core_enum_value(named, NAMED_ENUM_VAL1); out->named_val2 = bpf_core_enum_value(named, NAMED_ENUM_VAL2); /* NAMED_ENUM_VAL3 value is optional */ out->anon_val1 = bpf_core_enum_value(anon, ANON_ENUM_VAL1); out->anon_val2 = bpf_core_enum_value(anon, ANON_ENUM_VAL2); /* ANON_ENUM_VAL3 value is optional */ #else data.skip = true; #endif return 0; }