}
 
 int bpf_obj_get(const char *pathname)
+{
+       return bpf_obj_get_opts(pathname, NULL);
+}
+
+int bpf_obj_get_opts(const char *pathname, const struct bpf_obj_get_opts *opts)
 {
        union bpf_attr attr;
        int fd;
 
+       if (!OPTS_VALID(opts, bpf_obj_get_opts))
+               return libbpf_err(-EINVAL);
+
        memset(&attr, 0, sizeof(attr));
        attr.pathname = ptr_to_u64((void *)pathname);
+       attr.file_flags = OPTS_GET(opts, file_flags, 0);
 
        fd = sys_bpf_fd(BPF_OBJ_GET, &attr, sizeof(attr));
        return libbpf_err_errno(fd);
 
                                    __u32 *count,
                                    const struct bpf_map_batch_opts *opts);
 
+struct bpf_obj_get_opts {
+       size_t sz; /* size of this struct for forward/backward compatibility */
+
+       __u32 file_flags;
+
+       size_t :0;
+};
+#define bpf_obj_get_opts__last_field file_flags
+
 LIBBPF_API int bpf_obj_pin(int fd, const char *pathname);
 LIBBPF_API int bpf_obj_get(const char *pathname);
+LIBBPF_API int bpf_obj_get_opts(const char *pathname,
+                               const struct bpf_obj_get_opts *opts);
 
 struct bpf_prog_attach_opts {
        size_t sz; /* size of this struct for forward/backward compatibility */