bool fentry_can_attach()

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);
}