]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
resolve_btfids: Handle presence of .BTF.base section
authorAlan Maguire <alan.maguire@oracle.com>
Thu, 13 Jun 2024 09:50:11 +0000 (10:50 +0100)
committerAndrii Nakryiko <andrii@kernel.org>
Mon, 17 Jun 2024 21:38:31 +0000 (14:38 -0700)
Now that btf_parse_elf() handles .BTF.base section presence,
we need to ensure that resolve_btfids uses .BTF.base when present
rather than the vmlinux base BTF passed in via the -B option.
Detect .BTF.base section presence and unset the base BTF path
to ensure that BTF ELF parsing will do the right thing.

Signed-off-by: Alan Maguire <alan.maguire@oracle.com>
Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
Reviewed-by: Eduard Zingerman <eddyz87@gmail.com>
Link: https://lore.kernel.org/bpf/20240613095014.357981-7-alan.maguire@oracle.com
tools/bpf/resolve_btfids/main.c

index af393c7dee1f189d9143b0c33e45eaed40b3bff6..936ef95c3d3236fec15ef9b0fa5432cfdf3dfe93 100644 (file)
@@ -409,6 +409,14 @@ static int elf_collect(struct object *obj)
                        obj->efile.idlist       = data;
                        obj->efile.idlist_shndx = idx;
                        obj->efile.idlist_addr  = sh.sh_addr;
+               } else if (!strcmp(name, BTF_BASE_ELF_SEC)) {
+                       /* If a .BTF.base section is found, do not resolve
+                        * BTF ids relative to vmlinux; resolve relative
+                        * to the .BTF.base section instead.  btf__parse_split()
+                        * will take care of this once the base BTF it is
+                        * passed is NULL.
+                        */
+                       obj->base_btf_path = NULL;
                }
 
                if (compressed_section_fix(elf, scn, &sh))