1 #ifndef BPF_CORE_BUILTINS_H
2 #define BPF_CORE_BUILTINS_H
4 #include "btfext-out.h"
8 BPF_BUILTIN_UNUSED
= 0,
9 /* Built-ins for non-generic loads and stores. */
10 BPF_BUILTIN_LOAD_BYTE
,
11 BPF_BUILTIN_LOAD_HALF
,
12 BPF_BUILTIN_LOAD_WORD
,
14 /* Compile Once - Run Everywhere (CO-RE) support. */
15 BPF_CORE_BUILTINS_MARKER
= 10,
16 BPF_BUILTIN_PRESERVE_ACCESS_INDEX
,
17 BPF_BUILTIN_PRESERVE_FIELD_INFO
,
18 BPF_BUILTIN_BTF_TYPE_ID
,
19 BPF_BUILTIN_PRESERVE_TYPE_INFO
,
20 BPF_BUILTIN_PRESERVE_ENUM_VALUE
,
22 /* CO-RE INTERNAL reloc. */
23 BPF_BUILTIN_CORE_RELOC
,
28 enum bpf_field_info_kind
{
29 BPF_FIELD_BYTE_OFFSET
= 0, /* field byte offset */
30 BPF_FIELD_BYTE_SIZE
= 1,
31 BPF_FIELD_EXISTS
= 2, /* field existence in target kernel */
33 BPF_FIELD_LSHIFT_U64
= 4,
34 BPF_FIELD_RSHIFT_U64
= 5,
37 /* second argument to __builtin_btf_type_id () built-in */
38 enum bpf_type_id_kind
{
39 BPF_TYPE_ID_LOCAL
= 0, /* BTF type ID in local program */
40 BPF_TYPE_ID_TARGET
= 1, /* BTF type ID in target kernel */
43 /* second argument to __builtin_preserve_type_info () built-in */
44 enum bpf_type_info_kind
{
45 BPF_TYPE_EXISTS
= 0, /* type existence in target kernel */
46 BPF_TYPE_SIZE
= 1, /* type size in target kernel */
47 BPF_TYPE_MATCHES
= 2, /* type match in target kernel */
50 /* second argument to __builtin_preserve_enum_value () built-in */
51 enum bpf_enum_value_kind
{
52 BPF_ENUMVAL_EXISTS
= 0, /* enum value existence in kernel */
53 BPF_ENUMVAL_VALUE
= 1, /* enum value value relocation */
56 extern GTY (()) tree bpf_builtins
[(int) BPF_BUILTIN_MAX
];
58 void bpf_init_core_builtins (void);
59 rtx
bpf_expand_core_builtin (tree exp
, enum bpf_builtins code
);
60 tree
bpf_resolve_overloaded_core_builtin (location_t loc
, tree fndecl
,
63 bpf_output_core_reloc (rtx
*operands
, int nr_ops
);