Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

selftests/bpf: Test btf__load_vmlinux_btf/btf__load_module_btf APIs

Add test for btf__load_vmlinux_btf/btf__load_module_btf APIs. The test
loads bpf_testmod module BTF and check existence of a symbol which is
known to exist.

Signed-off-by: Hengqi Chen <hengqi.chen@gmail.com>
Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
Link: https://lore.kernel.org/bpf/20210815081035.205879-1-hengqi.chen@gmail.com

authored by

Hengqi Chen and committed by
Andrii Nakryiko
edce1a24 bb571649

+34
+34
tools/testing/selftests/bpf/prog_tests/btf_module.c
··· 1 + /* SPDX-License-Identifier: GPL-2.0 */ 2 + /* Copyright (c) 2021 Hengqi Chen */ 3 + 4 + #include <test_progs.h> 5 + #include <bpf/btf.h> 6 + 7 + static const char *module_name = "bpf_testmod"; 8 + static const char *symbol_name = "bpf_testmod_test_read"; 9 + 10 + void test_btf_module() 11 + { 12 + struct btf *vmlinux_btf, *module_btf; 13 + __s32 type_id; 14 + 15 + if (!env.has_testmod) { 16 + test__skip(); 17 + return; 18 + } 19 + 20 + vmlinux_btf = btf__load_vmlinux_btf(); 21 + if (!ASSERT_OK_PTR(vmlinux_btf, "could not load vmlinux BTF")) 22 + return; 23 + 24 + module_btf = btf__load_module_btf(module_name, vmlinux_btf); 25 + if (!ASSERT_OK_PTR(module_btf, "could not load module BTF")) 26 + goto cleanup; 27 + 28 + type_id = btf__find_by_name(module_btf, symbol_name); 29 + ASSERT_GT(type_id, 0, "func not found"); 30 + 31 + cleanup: 32 + btf__free(module_btf); 33 + btf__free(vmlinux_btf); 34 + }