1 /* SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause) */
2 /* Copyright (c) 2021 Facebook */
3 #ifndef __BPF_GEN_INTERNAL_H
4 #define __BPF_GEN_INTERNAL_H
8 struct ksym_relo_desc
{
24 /* used for typeless ksym */
32 struct gen_loader_opts
*opts
;
38 ssize_t cleanup_label
;
43 struct ksym_relo_desc
*relos
;
45 struct bpf_core_relo
*core_relos
;
47 char attach_target
[128];
49 struct ksym_desc
*ksyms
;
55 void bpf_gen__init(struct bpf_gen
*gen
, int log_level
, int nr_progs
, int nr_maps
);
56 int bpf_gen__finish(struct bpf_gen
*gen
, int nr_progs
, int nr_maps
);
57 void bpf_gen__free(struct bpf_gen
*gen
);
58 void bpf_gen__load_btf(struct bpf_gen
*gen
, const void *raw_data
, __u32 raw_size
);
59 void bpf_gen__map_create(struct bpf_gen
*gen
,
60 enum bpf_map_type map_type
, const char *map_name
,
61 __u32 key_size
, __u32 value_size
, __u32 max_entries
,
62 struct bpf_map_create_opts
*map_attr
, int map_idx
);
63 void bpf_gen__prog_load(struct bpf_gen
*gen
,
64 enum bpf_prog_type prog_type
, const char *prog_name
,
65 const char *license
, struct bpf_insn
*insns
, size_t insn_cnt
,
66 struct bpf_prog_load_opts
*load_attr
, int prog_idx
);
67 void bpf_gen__map_update_elem(struct bpf_gen
*gen
, int map_idx
, void *value
, __u32 value_size
);
68 void bpf_gen__map_freeze(struct bpf_gen
*gen
, int map_idx
);
69 void bpf_gen__record_attach_target(struct bpf_gen
*gen
, const char *name
, enum bpf_attach_type type
);
70 void bpf_gen__record_extern(struct bpf_gen
*gen
, const char *name
, bool is_weak
,
71 bool is_typeless
, bool is_ld64
, int kind
, int insn_idx
);
72 void bpf_gen__record_relo_core(struct bpf_gen
*gen
, const struct bpf_core_relo
*core_relo
);
73 void bpf_gen__populate_outer_map(struct bpf_gen
*gen
, int outer_map_idx
, int key
, int inner_map_idx
);