return ret;
 }
 
-int
-bpf_program__load(struct bpf_program *prog,
-                 char *license, __u32 kern_version)
+static int libbpf_find_attach_btf_id(const char *name,
+                                    enum bpf_attach_type attach_type,
+                                    __u32 attach_prog_fd);
+
+int bpf_program__load(struct bpf_program *prog, char *license, __u32 kern_ver)
 {
-       int err = 0, fd, i;
+       int err = 0, fd, i, btf_id;
+
+       if (prog->type == BPF_PROG_TYPE_TRACING) {
+               btf_id = libbpf_find_attach_btf_id(prog->section_name,
+                                                  prog->expected_attach_type,
+                                                  prog->attach_prog_fd);
+               if (btf_id <= 0)
+                       return btf_id;
+               prog->attach_btf_id = btf_id;
+       }
 
        if (prog->instances.nr < 0 || !prog->instances.fds) {
                if (prog->preprocessor) {
                                prog->section_name, prog->instances.nr);
                }
                err = load_program(prog, prog->insns, prog->insns_cnt,
-                                  license, kern_version, &fd);
+                                  license, kern_ver, &fd);
                if (!err)
                        prog->instances.fds[0] = fd;
                goto out;
                }
 
                err = load_program(prog, result.new_insn_ptr,
-                                  result.new_insn_cnt,
-                                  license, kern_version, &fd);
-
+                                  result.new_insn_cnt, license, kern_ver, &fd);
                if (err) {
                        pr_warn("Loading the %dth instance of program '%s' failed\n",
                                i, prog->section_name);
        return 0;
 }
 
-static int libbpf_find_attach_btf_id(const char *name,
-                                    enum bpf_attach_type attach_type,
-                                    __u32 attach_prog_fd);
 static struct bpf_object *
 __bpf_object__open(const char *path, const void *obj_buf, size_t obj_buf_sz,
                   const struct bpf_object_open_opts *opts)
 
                bpf_program__set_type(prog, prog_type);
                bpf_program__set_expected_attach_type(prog, attach_type);
-               if (prog_type == BPF_PROG_TYPE_TRACING) {
-                       err = libbpf_find_attach_btf_id(prog->section_name,
-                                                       attach_type,
-                                                       attach_prog_fd);
-                       if (err <= 0)
-                               goto out;
-                       prog->attach_btf_id = err;
+               if (prog_type == BPF_PROG_TYPE_TRACING)
                        prog->attach_prog_fd = attach_prog_fd;
-               }
        }
 
        return obj;