diff options
author | Alan Maguire <alan.maguire@oracle.com> | 2024-06-13 11:50:11 +0200 |
---|---|---|
committer | Andrii Nakryiko <andrii@kernel.org> | 2024-06-17 23:38:31 +0200 |
commit | 6ba77385f386053cea2a1cad33717de74a26db4e (patch) | |
tree | 9437b582fa99975de476fa3fec0f3ca0f395a5b9 | |
parent | libbpf: Make btf_parse_elf process .BTF.base transparently (diff) | |
download | linux-6ba77385f386053cea2a1cad33717de74a26db4e.tar.xz linux-6ba77385f386053cea2a1cad33717de74a26db4e.zip |
resolve_btfids: Handle presence of .BTF.base section
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
-rw-r--r-- | tools/bpf/resolve_btfids/main.c | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/tools/bpf/resolve_btfids/main.c b/tools/bpf/resolve_btfids/main.c index af393c7dee1f..936ef95c3d32 100644 --- a/tools/bpf/resolve_btfids/main.c +++ b/tools/bpf/resolve_btfids/main.c @@ -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)) |