{
        struct stat st;
        int flags;
-       int err, output;
+       int err, output, feat;
        unsigned long waking = 0;
        const bool forks = argc > 0;
        struct machine *machine;
 
        rec->session = session;
 
-       if (!rec->no_buildid)
-               perf_header__set_feat(&session->header, HEADER_BUILD_ID);
+       for (feat = HEADER_FIRST_FEATURE; feat < HEADER_LAST_FEATURE; feat++)
+               perf_header__set_feat(&session->header, feat);
+
+       if (rec->no_buildid)
+               perf_header__clear_feat(&session->header, HEADER_BUILD_ID);
+
+       if (!have_tracepoints(&evsel_list->entries))
+               perf_header__clear_feat(&session->header, HEADER_TRACE_INFO);
 
        if (!rec->file_new) {
                err = perf_session__read_header(session, output);
                        goto out_delete_session;
        }
 
-       if (have_tracepoints(&evsel_list->entries))
-               perf_header__set_feat(&session->header, HEADER_TRACE_INFO);
-
-       perf_header__set_feat(&session->header, HEADER_HOSTNAME);
-       perf_header__set_feat(&session->header, HEADER_OSRELEASE);
-       perf_header__set_feat(&session->header, HEADER_ARCH);
-       perf_header__set_feat(&session->header, HEADER_CPUDESC);
-       perf_header__set_feat(&session->header, HEADER_NRCPUS);
-       perf_header__set_feat(&session->header, HEADER_EVENT_DESC);
-       perf_header__set_feat(&session->header, HEADER_CMDLINE);
-       perf_header__set_feat(&session->header, HEADER_VERSION);
-       perf_header__set_feat(&session->header, HEADER_CPU_TOPOLOGY);
-       perf_header__set_feat(&session->header, HEADER_TOTAL_MEM);
-       perf_header__set_feat(&session->header, HEADER_NUMA_TOPOLOGY);
-       perf_header__set_feat(&session->header, HEADER_CPUID);
-
        if (forks) {
                err = perf_evlist__prepare_workload(evsel_list, opts, argv);
                if (err < 0) {