in helpers/trace_helpers.c [1034:1069]
bool fentry_can_attach(const char *name, const char *mod)
{
const char sysfs_vmlinux[] = "/sys/kernel/btf/vmlinux";
struct btf *base, *btf = NULL;
char sysfs_mod[80];
int id = -1, err;
base = btf__parse(sysfs_vmlinux, NULL);
if (!base) {
err = -errno;
fprintf(stderr, "failed to parse vmlinux BTF at '%s': %s\n",
sysfs_vmlinux, strerror(-err));
goto err_out;
}
if (mod && module_btf_exists(mod)) {
snprintf(sysfs_mod, sizeof(sysfs_mod), "/sys/kernel/btf/%s", mod);
btf = btf__parse_split(sysfs_mod, base);
if (!btf) {
err = -errno;
fprintf(stderr, "failed to load BTF from %s: %s\n",
sysfs_mod, strerror(-err));
btf = base;
base = NULL;
}
} else {
btf = base;
base = NULL;
}
id = btf__find_by_name_kind(btf, name, BTF_KIND_FUNC);
err_out:
btf__free(btf);
btf__free(base);
return id > 0 && fentry_try_attach(id);
}