mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-12-24 05:04:00 +08:00
tools/resolve_btfids: Emit warnings and patch zero id for missing symbols
Kernel functions referenced by .BTF_ids may be changed from global to static and get inlined or get renamed/removed, and thus disappears from BTF. This causes kernel build failure when resolve_btfids do id patch for symbols in .BTF_ids in vmlinux. Update resolve_btfids to emit warning messages and patch zero id for missing symbols instead of aborting kernel build process. Suggested-by: Andrii Nakryiko <andrii@kernel.org> Signed-off-by: Hengqi Chen <hengqi.chen@gmail.com> Signed-off-by: Andrii Nakryiko <andrii@kernel.org> Acked-by: Yonghong Song <yhs@fb.com> Link: https://lore.kernel.org/bpf/20210727132532.2473636-2-hengqi.chen@gmail.com
This commit is contained in:
parent
33b57e0cc7
commit
5aad036851
@ -291,7 +291,7 @@ static int compressed_section_fix(Elf *elf, Elf_Scn *scn, GElf_Shdr *sh)
|
||||
sh->sh_addralign = expected;
|
||||
|
||||
if (gelf_update_shdr(scn, sh) == 0) {
|
||||
printf("FAILED cannot update section header: %s\n",
|
||||
pr_err("FAILED cannot update section header: %s\n",
|
||||
elf_errmsg(-1));
|
||||
return -1;
|
||||
}
|
||||
@ -317,6 +317,7 @@ static int elf_collect(struct object *obj)
|
||||
|
||||
elf = elf_begin(fd, ELF_C_RDWR_MMAP, NULL);
|
||||
if (!elf) {
|
||||
close(fd);
|
||||
pr_err("FAILED cannot create ELF descriptor: %s\n",
|
||||
elf_errmsg(-1));
|
||||
return -1;
|
||||
@ -484,7 +485,7 @@ static int symbols_resolve(struct object *obj)
|
||||
err = libbpf_get_error(btf);
|
||||
if (err) {
|
||||
pr_err("FAILED: load BTF from %s: %s\n",
|
||||
obj->path, strerror(-err));
|
||||
obj->btf ?: obj->path, strerror(-err));
|
||||
return -1;
|
||||
}
|
||||
|
||||
@ -555,8 +556,7 @@ static int id_patch(struct object *obj, struct btf_id *id)
|
||||
int i;
|
||||
|
||||
if (!id->id) {
|
||||
pr_err("FAILED unresolved symbol %s\n", id->name);
|
||||
return -EINVAL;
|
||||
pr_err("WARN: resolve_btfids: unresolved symbol %s\n", id->name);
|
||||
}
|
||||
|
||||
for (i = 0; i < id->addr_cnt; i++) {
|
||||
@ -734,8 +734,9 @@ int main(int argc, const char **argv)
|
||||
|
||||
err = 0;
|
||||
out:
|
||||
if (obj.efile.elf)
|
||||
if (obj.efile.elf) {
|
||||
elf_end(obj.efile.elf);
|
||||
close(obj.efile.fd);
|
||||
close(obj.efile.fd);
|
||||
}
|
||||
return err;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user