goto out_child;
        }
 
+       err = -1;
        if (!rec->no_buildid
            && !perf_header__has_feat(&session->header, HEADER_BUILD_ID)) {
                pr_err("Couldn't generate buildids. "
                       "Use --no-buildid to profile anyway.\n");
-               err = -1;
                goto out_child;
        }
 
-       if (!opts->no_bpf_event)
-               bpf_event__add_sb_event(&rec->sb_evlist, &session->header.env);
+       if (!opts->no_bpf_event) {
+               rec->sb_evlist = evlist__new();
+
+               if (rec->sb_evlist == NULL) {
+                       pr_err("Couldn't create side band evlist.\n.");
+                       goto out_child;
+               }
+
+               if (evlist__add_bpf_sb_event(rec->sb_evlist, &session->header.env)) {
+                       pr_err("Couldn't ask for PERF_RECORD_BPF_EVENT side band events.\n.");
+                       goto out_child;
+               }
+       }
 
        if (perf_evlist__start_sb_thread(rec->sb_evlist, &rec->opts.target)) {
                pr_debug("Couldn't start the BPF side band thread:\nBPF programs starting from now on won't be annotatable\n");
 
                goto out_delete_evlist;
        }
 
-       if (!top.record_opts.no_bpf_event)
-               bpf_event__add_sb_event(&top.sb_evlist, &perf_env);
+       if (!top.record_opts.no_bpf_event) {
+               top.sb_evlist = evlist__new();
+
+               if (top.sb_evlist == NULL) {
+                       pr_err("Couldn't create side band evlist.\n.");
+                       goto out_delete_evlist;
+               }
+
+               if (evlist__add_bpf_sb_event(top.sb_evlist, &perf_env)) {
+                       pr_err("Couldn't ask for PERF_RECORD_BPF_EVENT side band events.\n.");
+                       goto out_delete_evlist;
+               }
+       }
 
        if (perf_evlist__start_sb_thread(top.sb_evlist, target)) {
                pr_debug("Couldn't start the BPF side band thread:\nBPF programs starting from now on won't be annotatable\n");
 
        return 0;
 }
 
-int bpf_event__add_sb_event(struct evlist **evlist,
-                           struct perf_env *env)
+int evlist__add_bpf_sb_event(struct evlist *evlist, struct perf_env *env)
 {
        struct perf_event_attr attr = {
                .type             = PERF_TYPE_SOFTWARE,
 
 #ifdef HAVE_LIBBPF_SUPPORT
 int machine__process_bpf(struct machine *machine, union perf_event *event,
                         struct perf_sample *sample);
-int bpf_event__add_sb_event(struct evlist **evlist,
-                                struct perf_env *env);
+int evlist__add_bpf_sb_event(struct evlist *evlist, struct perf_env *env);
 void bpf_event__print_bpf_prog_info(struct bpf_prog_info *info,
                                    struct perf_env *env,
                                    FILE *fp);
        return 0;
 }
 
-static inline int bpf_event__add_sb_event(struct evlist **evlist __maybe_unused,
-                                         struct perf_env *env __maybe_unused)
+static inline int evlist__add_bpf_sb_event(struct evlist *evlist __maybe_unused,
+                                          struct perf_env *env __maybe_unused)
 {
        return 0;
 }
 
        return leader;
 }
 
-int perf_evlist__add_sb_event(struct evlist **evlist,
+int perf_evlist__add_sb_event(struct evlist *evlist,
                              struct perf_event_attr *attr,
                              perf_evsel__sb_cb_t cb,
                              void *data)
 {
        struct evsel *evsel;
-       bool new_evlist = (*evlist) == NULL;
-
-       if (*evlist == NULL)
-               *evlist = evlist__new();
-       if (*evlist == NULL)
-               return -1;
 
        if (!attr->sample_id_all) {
                pr_warning("enabling sample_id_all for all side band events\n");
                attr->sample_id_all = 1;
        }
 
-       evsel = perf_evsel__new_idx(attr, (*evlist)->core.nr_entries);
+       evsel = perf_evsel__new_idx(attr, evlist->core.nr_entries);
        if (!evsel)
-               goto out_err;
+               return -1;
 
        evsel->side_band.cb = cb;
        evsel->side_band.data = data;
-       evlist__add(*evlist, evsel);
+       evlist__add(evlist, evsel);
        return 0;
-
-out_err:
-       if (new_evlist) {
-               evlist__delete(*evlist);
-               *evlist = NULL;
-       }
-       return -1;
 }
 
 static void *perf_evlist__poll_thread(void *arg)
 
 
 int perf_evlist__add_dummy(struct evlist *evlist);
 
-int perf_evlist__add_sb_event(struct evlist **evlist,
+int perf_evlist__add_sb_event(struct evlist *evlist,
                              struct perf_event_attr *attr,
                              perf_evsel__sb_cb_t cb,
                              void *data);