libbpf: Extract ELF processing state into separate struct
authorAndrii Nakryiko <andrii@kernel.org>
Thu, 21 Oct 2021 01:43:56 +0000 (18:43 -0700)
committerAlexei Starovoitov <ast@kernel.org>
Fri, 22 Oct 2021 00:10:10 +0000 (17:10 -0700)
Name currently anonymous internal struct that keeps ELF-related state
for bpf_object. Just a bit of clean up, no functional changes.

Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Acked-by: Song Liu <songliubraving@fb.com>
Link: https://lore.kernel.org/bpf/20211021014404.2635234-3-andrii@kernel.org
tools/lib/bpf/libbpf.c

index fdc25a112150259f6d662b1d26fb3fa198a01b8d..84a0683d214bb7de8a717cdd9c4cc9e3dfb6a69a 100644 (file)
@@ -462,6 +462,35 @@ struct module_btf {
        int fd_array_idx;
 };
 
+struct elf_state {
+       int fd;
+       const void *obj_buf;
+       size_t obj_buf_sz;
+       Elf *elf;
+       GElf_Ehdr ehdr;
+       Elf_Data *symbols;
+       Elf_Data *data;
+       Elf_Data *rodata;
+       Elf_Data *bss;
+       Elf_Data *st_ops_data;
+       size_t shstrndx; /* section index for section name strings */
+       size_t strtabidx;
+       struct {
+               GElf_Shdr shdr;
+               Elf_Data *data;
+       } *reloc_sects;
+       int nr_reloc_sects;
+       int maps_shndx;
+       int btf_maps_shndx;
+       __u32 btf_maps_sec_btf_id;
+       int text_shndx;
+       int symbols_shndx;
+       int data_shndx;
+       int rodata_shndx;
+       int bss_shndx;
+       int st_ops_shndx;
+};
+
 struct bpf_object {
        char name[BPF_OBJ_NAME_LEN];
        char license[64];
@@ -484,40 +513,10 @@ struct bpf_object {
 
        struct bpf_gen *gen_loader;
 
+       /* Information when doing ELF related work. Only valid if efile.elf is not NULL */
+       struct elf_state efile;
        /*
-        * Information when doing elf related work. Only valid if fd
-        * is valid.
-        */
-       struct {
-               int fd;
-               const void *obj_buf;
-               size_t obj_buf_sz;
-               Elf *elf;
-               GElf_Ehdr ehdr;
-               Elf_Data *symbols;
-               Elf_Data *data;
-               Elf_Data *rodata;
-               Elf_Data *bss;
-               Elf_Data *st_ops_data;
-               size_t shstrndx; /* section index for section name strings */
-               size_t strtabidx;
-               struct {
-                       GElf_Shdr shdr;
-                       Elf_Data *data;
-               } *reloc_sects;
-               int nr_reloc_sects;
-               int maps_shndx;
-               int btf_maps_shndx;
-               __u32 btf_maps_sec_btf_id;
-               int text_shndx;
-               int symbols_shndx;
-               int data_shndx;
-               int rodata_shndx;
-               int bss_shndx;
-               int st_ops_shndx;
-       } efile;
-       /*
-        * All loaded bpf_object is linked in a list, which is
+        * All loaded bpf_object are linked in a list, which is
         * hidden to caller. bpf_objects__<func> handlers deal with
         * all objects.
         */
@@ -551,7 +550,6 @@ struct bpf_object {
 
        char path[];
 };
-#define obj_elf_valid(o)       ((o)->efile.elf)
 
 static const char *elf_sym_str(const struct bpf_object *obj, size_t off);
 static const char *elf_sec_str(const struct bpf_object *obj, size_t off);
@@ -1185,7 +1183,7 @@ static struct bpf_object *bpf_object__new(const char *path,
 
 static void bpf_object__elf_finish(struct bpf_object *obj)
 {
-       if (!obj_elf_valid(obj))
+       if (!obj->efile.elf)
                return;
 
        if (obj->efile.elf) {
@@ -1210,7 +1208,7 @@ static int bpf_object__elf_init(struct bpf_object *obj)
        int err = 0;
        GElf_Ehdr *ep;
 
-       if (obj_elf_valid(obj)) {
+       if (obj->efile.elf) {
                pr_warn("elf: init internal error\n");
                return -LIBBPF_ERRNO__LIBELF;
        }