On 8/18/20 10:28 PM, Andrii Nakryiko wrote:
Add tests validating existence and value relocations for enum value-based
relocations. If __builtin_preserve_enum_value() built-in is not supported,
skip tests.
Signed-off-by: Andrii Nakryiko <[email protected]>
---
.../selftests/bpf/prog_tests/core_reloc.c | 56 +++++++++++++
.../bpf/progs/btf__core_reloc_enumval.c | 3 +
.../progs/btf__core_reloc_enumval___diff.c | 3 +
.../btf__core_reloc_enumval___err_missing.c | 3 +
.../btf__core_reloc_enumval___val3_missing.c | 3 +
.../selftests/bpf/progs/core_reloc_types.h | 84 +++++++++++++++++++
.../bpf/progs/test_core_reloc_enumval.c | 73 ++++++++++++++++
7 files changed, 225 insertions(+)
create mode 100644 tools/testing/selftests/bpf/progs/btf__core_reloc_enumval.c
create mode 100644
tools/testing/selftests/bpf/progs/btf__core_reloc_enumval___diff.c
create mode 100644
tools/testing/selftests/bpf/progs/btf__core_reloc_enumval___err_missing.c
create mode 100644
tools/testing/selftests/bpf/progs/btf__core_reloc_enumval___val3_missing.c
create mode 100644 tools/testing/selftests/bpf/progs/test_core_reloc_enumval.c
diff --git a/tools/testing/selftests/bpf/prog_tests/core_reloc.c
b/tools/testing/selftests/bpf/prog_tests/core_reloc.c
index ad550510ef69..30e40ff4b0d8 100644
--- a/tools/testing/selftests/bpf/prog_tests/core_reloc.c
+++ b/tools/testing/selftests/bpf/prog_tests/core_reloc.c
@@ -289,6 +289,23 @@ static int duration = 0;
.fails = true, \
}
[...]
+
+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;
+}
+
empty line at the end of file?