mirror of
https://github.com/netdata/libbpf.git
synced 2026-04-05 16:19:06 +08:00
libbpf: Define BTF_KIND_* constants in btf.h to avoid compilation errors
The btf.h header included with libbpf contains inline helper functions to check for various BTF kinds. These helpers directly reference the BTF_KIND_* constants defined in the kernel header, and because the header file is included in user applications, this happens in the user application compile units. This presents a problem if a user application is compiled on a system with older kernel headers because the constants are not available. To avoid this, add #defines of the constants directly in btf.h before using them. Since the kernel header moved to an enum for BTF_KIND_*, the #defines can shadow the enum values without any errors, so we only need #ifndef guards for the constants that predates the conversion to enum. We group these so there's only one guard for groups of values that were added together. [0] Closes: https://github.com/libbpf/libbpf/issues/436 Fixes: 223f903e9c83 ("bpf: Rename BTF_KIND_TAG to BTF_KIND_DECL_TAG") Fixes: 5b84bd10363e ("libbpf: Add support for BTF_KIND_TAG") Signed-off-by: Toke Høiland-Jørgensen <toke@redhat.com> Signed-off-by: Andrii Nakryiko <andrii@kernel.org> Acked-by: Arnaldo Carvalho de Melo <acme@redhat.com> Link: https://lore.kernel.org/bpf/20220118141327.34231-1-toke@redhat.com
This commit is contained in:
committed by
Andrii Nakryiko
parent
be89b28f96
commit
8404d1396c
22
src/btf.h
22
src/btf.h
@@ -375,8 +375,28 @@ btf_dump__dump_type_data(struct btf_dump *d, __u32 id,
|
|||||||
const struct btf_dump_type_data_opts *opts);
|
const struct btf_dump_type_data_opts *opts);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* A set of helpers for easier BTF types handling
|
* A set of helpers for easier BTF types handling.
|
||||||
|
*
|
||||||
|
* The inline functions below rely on constants from the kernel headers which
|
||||||
|
* may not be available for applications including this header file. To avoid
|
||||||
|
* compilation errors, we define all the constants here that were added after
|
||||||
|
* the initial introduction of the BTF_KIND* constants.
|
||||||
*/
|
*/
|
||||||
|
#ifndef BTF_KIND_FUNC
|
||||||
|
#define BTF_KIND_FUNC 12 /* Function */
|
||||||
|
#define BTF_KIND_FUNC_PROTO 13 /* Function Proto */
|
||||||
|
#endif
|
||||||
|
#ifndef BTF_KIND_VAR
|
||||||
|
#define BTF_KIND_VAR 14 /* Variable */
|
||||||
|
#define BTF_KIND_DATASEC 15 /* Section */
|
||||||
|
#endif
|
||||||
|
#ifndef BTF_KIND_FLOAT
|
||||||
|
#define BTF_KIND_FLOAT 16 /* Floating point */
|
||||||
|
#endif
|
||||||
|
/* The kernel header switched to enums, so these two were never #defined */
|
||||||
|
#define BTF_KIND_DECL_TAG 17 /* Decl Tag */
|
||||||
|
#define BTF_KIND_TYPE_TAG 18 /* Type Tag */
|
||||||
|
|
||||||
static inline __u16 btf_kind(const struct btf_type *t)
|
static inline __u16 btf_kind(const struct btf_type *t)
|
||||||
{
|
{
|
||||||
return BTF_INFO_KIND(t->info);
|
return BTF_INFO_KIND(t->info);
|
||||||
|
|||||||
Reference in New Issue
Block a user