return ret ? -1 : 0;
 }
 
-int perf_session__cache_build_ids(struct perf_session *session)
+int __perf_session__cache_build_ids(struct perf_session *session,
+                                   machine__dso_t fn, void *priv)
 {
        if (no_buildid_cache)
                return 0;
        if (mkdir(buildid_dir, 0755) != 0 && errno != EEXIST)
                return -1;
 
-       return machines__for_each_dso(&session->machines, dso__cache_build_id, NULL) ?  -1 : 0;
+       return machines__for_each_dso(&session->machines, fn, priv) ?  -1 : 0;
+}
+
+int perf_session__cache_build_ids(struct perf_session *session)
+{
+       return __perf_session__cache_build_ids(session, dso__cache_build_id, NULL);
 }
 
 static bool machine__read_build_ids(struct machine *machine, bool with_hits)
 
 #define BUILD_ID_SIZE  20
 #define SBUILD_ID_SIZE (BUILD_ID_SIZE * 2 + 1)
 
+#include "machine.h"
 #include "tool.h"
 #include <linux/types.h>
 
 int perf_session__write_buildid_table(struct perf_session *session,
                                      struct feat_fd *fd);
 int perf_session__cache_build_ids(struct perf_session *session);
+int __perf_session__cache_build_ids(struct perf_session *session,
+                                   machine__dso_t fn, void *priv);
 
 char *build_id_cache__origname(const char *sbuild_id);
 char *build_id_cache__linkname(const char *sbuild_id, char *bf, size_t size);