int fd;
        bool autoload;
+       bool autoattach;
        bool mark_btf_static;
        enum bpf_prog_type type;
        enum bpf_attach_type expected_attach_type;
                prog->autoload = true;
        }
 
+       prog->autoattach = true;
+
        /* inherit object's log_level */
        prog->log_level = obj->log_level;
 
        return 0;
 }
 
+bool bpf_program__autoattach(const struct bpf_program *prog)
+{
+       return prog->autoattach;
+}
+
+void bpf_program__set_autoattach(struct bpf_program *prog, bool autoattach)
+{
+       prog->autoattach = autoattach;
+}
+
 const struct bpf_insn *bpf_program__insns(const struct bpf_program *prog)
 {
        return prog->insns;
                struct bpf_program *prog = *s->progs[i].prog;
                struct bpf_link **link = s->progs[i].link;
 
-               if (!prog->autoload)
+               if (!prog->autoload || !prog->autoattach)
                        continue;
 
                /* auto-attaching not supported for this program */
 
 LIBBPF_API const char *bpf_program__section_name(const struct bpf_program *prog);
 LIBBPF_API bool bpf_program__autoload(const struct bpf_program *prog);
 LIBBPF_API int bpf_program__set_autoload(struct bpf_program *prog, bool autoload);
+LIBBPF_API bool bpf_program__autoattach(const struct bpf_program *prog);
+LIBBPF_API void bpf_program__set_autoattach(struct bpf_program *prog, bool autoattach);
 
 struct bpf_insn;
 
 
                bpf_obj_get_opts;
                bpf_prog_query_opts;
                bpf_program__attach_ksyscall;
+               bpf_program__autoattach;
+               bpf_program__set_autoattach;
                btf__add_enum64;
                btf__add_enum64_value;
                libbpf_bpf_attach_type_str;