mirror of
https://github.com/rd-stuffs/msm-4.14.git
synced 2025-02-20 11:45:48 +08:00
perf tools: Fix accidentally preprocessed snprintf callback
struct sort_entry has a callback named snprintf that turns an entry into a string result. But there are glibc versions that implement snprintf through a macro. The following expression is then going to get the snprintf call preprocessed: ent->snprintf(...) to finally end up in a build error: util/hist.c: Dans la fonction «hist_entry__snprintf» : util/hist.c:539: erreur: «struct sort_entry» has no member named «__builtin___snprintf_chk» To fix this, prepend struct sort_entry callbacks with an "se_" prefix. Signed-off-by: Frederic Weisbecker <fweisbec@gmail.com> Cc: Peter Zijlstra <a.p.zijlstra@chello.nl> Cc: Paul Mackerras <paulus@samba.org> Cc: Ingo Molnar <mingo@elte.hu> Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
parent
df8290bf7e
commit
fcd1498405
@ -68,7 +68,7 @@ hist_entry__cmp(struct hist_entry *left, struct hist_entry *right)
|
|||||||
int64_t cmp = 0;
|
int64_t cmp = 0;
|
||||||
|
|
||||||
list_for_each_entry(se, &hist_entry__sort_list, list) {
|
list_for_each_entry(se, &hist_entry__sort_list, list) {
|
||||||
cmp = se->cmp(left, right);
|
cmp = se->se_cmp(left, right);
|
||||||
if (cmp)
|
if (cmp)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -85,7 +85,7 @@ hist_entry__collapse(struct hist_entry *left, struct hist_entry *right)
|
|||||||
list_for_each_entry(se, &hist_entry__sort_list, list) {
|
list_for_each_entry(se, &hist_entry__sort_list, list) {
|
||||||
int64_t (*f)(struct hist_entry *, struct hist_entry *);
|
int64_t (*f)(struct hist_entry *, struct hist_entry *);
|
||||||
|
|
||||||
f = se->collapse ?: se->cmp;
|
f = se->se_collapse ?: se->se_cmp;
|
||||||
|
|
||||||
cmp = f(left, right);
|
cmp = f(left, right);
|
||||||
if (cmp)
|
if (cmp)
|
||||||
@ -536,8 +536,8 @@ int hist_entry__snprintf(struct hist_entry *self,
|
|||||||
continue;
|
continue;
|
||||||
|
|
||||||
ret += snprintf(s + ret, size - ret, "%s", sep ?: " ");
|
ret += snprintf(s + ret, size - ret, "%s", sep ?: " ");
|
||||||
ret += se->snprintf(self, s + ret, size - ret,
|
ret += se->se_snprintf(self, s + ret, size - ret,
|
||||||
se->width ? *se->width : 0);
|
se->se_width ? *se->se_width : 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
@ -564,7 +564,7 @@ static size_t hist_entry__fprintf_callchain(struct hist_entry *self, FILE *fp,
|
|||||||
if (sort__first_dimension == SORT_COMM) {
|
if (sort__first_dimension == SORT_COMM) {
|
||||||
struct sort_entry *se = list_first_entry(&hist_entry__sort_list,
|
struct sort_entry *se = list_first_entry(&hist_entry__sort_list,
|
||||||
typeof(*se), list);
|
typeof(*se), list);
|
||||||
left_margin = se->width ? *se->width : 0;
|
left_margin = se->se_width ? *se->se_width : 0;
|
||||||
left_margin -= thread__comm_len(self->thread);
|
left_margin -= thread__comm_len(self->thread);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -615,22 +615,22 @@ size_t perf_session__fprintf_hists(struct rb_root *hists,
|
|||||||
if (se->elide)
|
if (se->elide)
|
||||||
continue;
|
continue;
|
||||||
if (sep) {
|
if (sep) {
|
||||||
fprintf(fp, "%c%s", *sep, se->header);
|
fprintf(fp, "%c%s", *sep, se->se_header);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
width = strlen(se->header);
|
width = strlen(se->se_header);
|
||||||
if (se->width) {
|
if (se->se_width) {
|
||||||
if (symbol_conf.col_width_list_str) {
|
if (symbol_conf.col_width_list_str) {
|
||||||
if (col_width) {
|
if (col_width) {
|
||||||
*se->width = atoi(col_width);
|
*se->se_width = atoi(col_width);
|
||||||
col_width = strchr(col_width, ',');
|
col_width = strchr(col_width, ',');
|
||||||
if (col_width)
|
if (col_width)
|
||||||
++col_width;
|
++col_width;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
width = *se->width = max(*se->width, width);
|
width = *se->se_width = max(*se->se_width, width);
|
||||||
}
|
}
|
||||||
fprintf(fp, " %*s", width, se->header);
|
fprintf(fp, " %*s", width, se->se_header);
|
||||||
}
|
}
|
||||||
fprintf(fp, "\n");
|
fprintf(fp, "\n");
|
||||||
|
|
||||||
@ -652,10 +652,10 @@ size_t perf_session__fprintf_hists(struct rb_root *hists,
|
|||||||
continue;
|
continue;
|
||||||
|
|
||||||
fprintf(fp, " ");
|
fprintf(fp, " ");
|
||||||
if (se->width)
|
if (se->se_width)
|
||||||
width = *se->width;
|
width = *se->se_width;
|
||||||
else
|
else
|
||||||
width = strlen(se->header);
|
width = strlen(se->se_header);
|
||||||
for (i = 0; i < width; i++)
|
for (i = 0; i < width; i++)
|
||||||
fprintf(fp, ".");
|
fprintf(fp, ".");
|
||||||
}
|
}
|
||||||
|
@ -30,38 +30,38 @@ static int hist_entry__parent_snprintf(struct hist_entry *self, char *bf,
|
|||||||
size_t size, unsigned int width);
|
size_t size, unsigned int width);
|
||||||
|
|
||||||
struct sort_entry sort_thread = {
|
struct sort_entry sort_thread = {
|
||||||
.header = "Command: Pid",
|
.se_header = "Command: Pid",
|
||||||
.cmp = sort__thread_cmp,
|
.se_cmp = sort__thread_cmp,
|
||||||
.snprintf = hist_entry__thread_snprintf,
|
.se_snprintf = hist_entry__thread_snprintf,
|
||||||
.width = &threads__col_width,
|
.se_width = &threads__col_width,
|
||||||
};
|
};
|
||||||
|
|
||||||
struct sort_entry sort_comm = {
|
struct sort_entry sort_comm = {
|
||||||
.header = "Command",
|
.se_header = "Command",
|
||||||
.cmp = sort__comm_cmp,
|
.se_cmp = sort__comm_cmp,
|
||||||
.collapse = sort__comm_collapse,
|
.se_collapse = sort__comm_collapse,
|
||||||
.snprintf = hist_entry__comm_snprintf,
|
.se_snprintf = hist_entry__comm_snprintf,
|
||||||
.width = &comms__col_width,
|
.se_width = &comms__col_width,
|
||||||
};
|
};
|
||||||
|
|
||||||
struct sort_entry sort_dso = {
|
struct sort_entry sort_dso = {
|
||||||
.header = "Shared Object",
|
.se_header = "Shared Object",
|
||||||
.cmp = sort__dso_cmp,
|
.se_cmp = sort__dso_cmp,
|
||||||
.snprintf = hist_entry__dso_snprintf,
|
.se_snprintf = hist_entry__dso_snprintf,
|
||||||
.width = &dsos__col_width,
|
.se_width = &dsos__col_width,
|
||||||
};
|
};
|
||||||
|
|
||||||
struct sort_entry sort_sym = {
|
struct sort_entry sort_sym = {
|
||||||
.header = "Symbol",
|
.se_header = "Symbol",
|
||||||
.cmp = sort__sym_cmp,
|
.se_cmp = sort__sym_cmp,
|
||||||
.snprintf = hist_entry__sym_snprintf,
|
.se_snprintf = hist_entry__sym_snprintf,
|
||||||
};
|
};
|
||||||
|
|
||||||
struct sort_entry sort_parent = {
|
struct sort_entry sort_parent = {
|
||||||
.header = "Parent symbol",
|
.se_header = "Parent symbol",
|
||||||
.cmp = sort__parent_cmp,
|
.se_cmp = sort__parent_cmp,
|
||||||
.snprintf = hist_entry__parent_snprintf,
|
.se_snprintf = hist_entry__parent_snprintf,
|
||||||
.width = &parent_symbol__col_width,
|
.se_width = &parent_symbol__col_width,
|
||||||
};
|
};
|
||||||
|
|
||||||
struct sort_dimension {
|
struct sort_dimension {
|
||||||
@ -255,7 +255,7 @@ int sort_dimension__add(const char *tok)
|
|||||||
if (strncasecmp(tok, sd->name, strlen(tok)))
|
if (strncasecmp(tok, sd->name, strlen(tok)))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (sd->entry->collapse)
|
if (sd->entry->se_collapse)
|
||||||
sort__need_collapse = 1;
|
sort__need_collapse = 1;
|
||||||
|
|
||||||
if (sd->entry == &sort_parent) {
|
if (sd->entry == &sort_parent) {
|
||||||
|
@ -78,13 +78,13 @@ enum sort_type {
|
|||||||
struct sort_entry {
|
struct sort_entry {
|
||||||
struct list_head list;
|
struct list_head list;
|
||||||
|
|
||||||
const char *header;
|
const char *se_header;
|
||||||
|
|
||||||
int64_t (*cmp)(struct hist_entry *, struct hist_entry *);
|
int64_t (*se_cmp)(struct hist_entry *, struct hist_entry *);
|
||||||
int64_t (*collapse)(struct hist_entry *, struct hist_entry *);
|
int64_t (*se_collapse)(struct hist_entry *, struct hist_entry *);
|
||||||
int (*snprintf)(struct hist_entry *self, char *bf, size_t size,
|
int (*se_snprintf)(struct hist_entry *self, char *bf, size_t size,
|
||||||
unsigned int width);
|
unsigned int width);
|
||||||
unsigned int *width;
|
unsigned int *se_width;
|
||||||
bool elide;
|
bool elide;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user