diff --git a/tools/perf/util/dso.c b/tools/perf/util/dso.c index 22fd5fa806ed..4ab1b03d0779 100644 --- a/tools/perf/util/dso.c +++ b/tools/perf/util/dso.c @@ -1532,3 +1532,15 @@ int dso__strerror_load(struct dso *dso, char *buf, size_t buflen) scnprintf(buf, buflen, "%s", dso_load__error_str[idx]); return 0; } + +bool perf_pid_map_tid(const char *dso_name, int *tid) +{ + return sscanf(dso_name, "/tmp/perf-%d.map", tid) == 1; +} + +bool is_perf_pid_map_name(const char *dso_name) +{ + int tid; + + return perf_pid_map_tid(dso_name, &tid); +} diff --git a/tools/perf/util/dso.h b/tools/perf/util/dso.h index ce9f3849a773..f161ac10fa03 100644 --- a/tools/perf/util/dso.h +++ b/tools/perf/util/dso.h @@ -411,4 +411,8 @@ int dso__strerror_load(struct dso *dso, char *buf, size_t buflen); void reset_fd_limit(void); +/* Check if dso name is of format "/tmp/perf-%d.map" */ +bool perf_pid_map_tid(const char *dso_name, int *tid); +bool is_perf_pid_map_name(const char *dso_name); + #endif /* __PERF_DSO */ diff --git a/tools/perf/util/symbol.c b/tools/perf/util/symbol.c index 8e09f7db933a..85679aa443f3 100644 --- a/tools/perf/util/symbol.c +++ b/tools/perf/util/symbol.c @@ -1764,7 +1764,7 @@ int dso__load(struct dso *dso, struct map *map) const char *map_path = dso->long_name; mutex_lock(&dso->lock); - perfmap = strncmp(dso->name, "/tmp/perf-", 10) == 0; + perfmap = is_perf_pid_map_name(map_path); if (perfmap) { if (dso->nsinfo && (dso__find_perf_map(newmapname, sizeof(newmapname), &dso->nsinfo) == 0)) {