Merge branch 'perf-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
Pull perf fixes from Ingo Molnar. * 'perf-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: perf tools, x86: Build perf on older user-space as well perf tools: Use scnprintf where applicable perf tools: Incorrect use of snprintf results in SEGV
This commit is contained in:
Коммит
96ee0499c5
|
@ -249,6 +249,8 @@ LIB_H += util/include/asm/uaccess.h
|
|||
LIB_H += util/include/dwarf-regs.h
|
||||
LIB_H += util/include/asm/dwarf2.h
|
||||
LIB_H += util/include/asm/cpufeature.h
|
||||
LIB_H += util/include/asm/unistd_32.h
|
||||
LIB_H += util/include/asm/unistd_64.h
|
||||
LIB_H += perf.h
|
||||
LIB_H += util/annotate.h
|
||||
LIB_H += util/cache.h
|
||||
|
|
|
@ -25,7 +25,7 @@ get_cpuid(char *buffer, size_t sz)
|
|||
|
||||
pvr = mfspr(SPRN_PVR);
|
||||
|
||||
nb = snprintf(buffer, sz, "%lu,%lu$", PVR_VER(pvr), PVR_REV(pvr));
|
||||
nb = scnprintf(buffer, sz, "%lu,%lu$", PVR_VER(pvr), PVR_REV(pvr));
|
||||
|
||||
/* look for end marker to ensure the entire data fit */
|
||||
if (strchr(buffer, '$')) {
|
||||
|
|
|
@ -48,7 +48,7 @@ get_cpuid(char *buffer, size_t sz)
|
|||
if (family >= 0x6)
|
||||
model += ((a >> 16) & 0xf) << 4;
|
||||
}
|
||||
nb = snprintf(buffer, sz, "%s,%u,%u,%u$", vendor, family, model, step);
|
||||
nb = scnprintf(buffer, sz, "%s,%u,%u,%u$", vendor, family, model, step);
|
||||
|
||||
/* look for end marker to ensure the entire data fit */
|
||||
if (strchr(buffer, '$')) {
|
||||
|
|
|
@ -10,6 +10,9 @@ void get_term_dimensions(struct winsize *ws);
|
|||
#define rmb() asm volatile("lock; addl $0,0(%%esp)" ::: "memory")
|
||||
#define cpu_relax() asm volatile("rep; nop" ::: "memory");
|
||||
#define CPUINFO_PROC "model name"
|
||||
#ifndef __NR_perf_event_open
|
||||
# define __NR_perf_event_open 336
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if defined(__x86_64__)
|
||||
|
@ -17,6 +20,9 @@ void get_term_dimensions(struct winsize *ws);
|
|||
#define rmb() asm volatile("lfence" ::: "memory")
|
||||
#define cpu_relax() asm volatile("rep; nop" ::: "memory");
|
||||
#define CPUINFO_PROC "model name"
|
||||
#ifndef __NR_perf_event_open
|
||||
# define __NR_perf_event_open 298
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef __powerpc__
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
#include <linux/kernel.h>
|
||||
#include "cache.h"
|
||||
#include "color.h"
|
||||
|
||||
|
@ -182,12 +183,12 @@ static int __color_vsnprintf(char *bf, size_t size, const char *color,
|
|||
}
|
||||
|
||||
if (perf_use_color_default && *color)
|
||||
r += snprintf(bf, size, "%s", color);
|
||||
r += vsnprintf(bf + r, size - r, fmt, args);
|
||||
r += scnprintf(bf, size, "%s", color);
|
||||
r += vscnprintf(bf + r, size - r, fmt, args);
|
||||
if (perf_use_color_default && *color)
|
||||
r += snprintf(bf + r, size - r, "%s", PERF_COLOR_RESET);
|
||||
r += scnprintf(bf + r, size - r, "%s", PERF_COLOR_RESET);
|
||||
if (trail)
|
||||
r += snprintf(bf + r, size - r, "%s", trail);
|
||||
r += scnprintf(bf + r, size - r, "%s", trail);
|
||||
return r;
|
||||
}
|
||||
|
||||
|
|
|
@ -280,7 +280,7 @@ int build_id_cache__add_s(const char *sbuild_id, const char *debugdir,
|
|||
if (realname == NULL || filename == NULL || linkname == NULL)
|
||||
goto out_free;
|
||||
|
||||
len = snprintf(filename, size, "%s%s%s",
|
||||
len = scnprintf(filename, size, "%s%s%s",
|
||||
debugdir, is_kallsyms ? "/" : "", realname);
|
||||
if (mkdir_p(filename, 0755))
|
||||
goto out_free;
|
||||
|
@ -295,7 +295,7 @@ int build_id_cache__add_s(const char *sbuild_id, const char *debugdir,
|
|||
goto out_free;
|
||||
}
|
||||
|
||||
len = snprintf(linkname, size, "%s/.build-id/%.2s",
|
||||
len = scnprintf(linkname, size, "%s/.build-id/%.2s",
|
||||
debugdir, sbuild_id);
|
||||
|
||||
if (access(linkname, X_OK) && mkdir_p(linkname, 0755))
|
||||
|
|
|
@ -768,7 +768,7 @@ static int hist_entry__pcnt_snprintf(struct hist_entry *he, char *s,
|
|||
sep ? "%.2f" : " %6.2f%%",
|
||||
(period * 100.0) / total);
|
||||
else
|
||||
ret = snprintf(s, size, sep ? "%.2f" : " %6.2f%%",
|
||||
ret = scnprintf(s, size, sep ? "%.2f" : " %6.2f%%",
|
||||
(period * 100.0) / total);
|
||||
if (symbol_conf.show_cpu_utilization) {
|
||||
ret += percent_color_snprintf(s + ret, size - ret,
|
||||
|
@ -791,20 +791,20 @@ static int hist_entry__pcnt_snprintf(struct hist_entry *he, char *s,
|
|||
}
|
||||
}
|
||||
} else
|
||||
ret = snprintf(s, size, sep ? "%" PRIu64 : "%12" PRIu64 " ", period);
|
||||
ret = scnprintf(s, size, sep ? "%" PRIu64 : "%12" PRIu64 " ", period);
|
||||
|
||||
if (symbol_conf.show_nr_samples) {
|
||||
if (sep)
|
||||
ret += snprintf(s + ret, size - ret, "%c%" PRIu64, *sep, nr_events);
|
||||
ret += scnprintf(s + ret, size - ret, "%c%" PRIu64, *sep, nr_events);
|
||||
else
|
||||
ret += snprintf(s + ret, size - ret, "%11" PRIu64, nr_events);
|
||||
ret += scnprintf(s + ret, size - ret, "%11" PRIu64, nr_events);
|
||||
}
|
||||
|
||||
if (symbol_conf.show_total_period) {
|
||||
if (sep)
|
||||
ret += snprintf(s + ret, size - ret, "%c%" PRIu64, *sep, period);
|
||||
ret += scnprintf(s + ret, size - ret, "%c%" PRIu64, *sep, period);
|
||||
else
|
||||
ret += snprintf(s + ret, size - ret, " %12" PRIu64, period);
|
||||
ret += scnprintf(s + ret, size - ret, " %12" PRIu64, period);
|
||||
}
|
||||
|
||||
if (pair_hists) {
|
||||
|
@ -819,25 +819,25 @@ static int hist_entry__pcnt_snprintf(struct hist_entry *he, char *s,
|
|||
diff = new_percent - old_percent;
|
||||
|
||||
if (fabs(diff) >= 0.01)
|
||||
snprintf(bf, sizeof(bf), "%+4.2F%%", diff);
|
||||
ret += scnprintf(bf, sizeof(bf), "%+4.2F%%", diff);
|
||||
else
|
||||
snprintf(bf, sizeof(bf), " ");
|
||||
ret += scnprintf(bf, sizeof(bf), " ");
|
||||
|
||||
if (sep)
|
||||
ret += snprintf(s + ret, size - ret, "%c%s", *sep, bf);
|
||||
ret += scnprintf(s + ret, size - ret, "%c%s", *sep, bf);
|
||||
else
|
||||
ret += snprintf(s + ret, size - ret, "%11.11s", bf);
|
||||
ret += scnprintf(s + ret, size - ret, "%11.11s", bf);
|
||||
|
||||
if (show_displacement) {
|
||||
if (displacement)
|
||||
snprintf(bf, sizeof(bf), "%+4ld", displacement);
|
||||
ret += scnprintf(bf, sizeof(bf), "%+4ld", displacement);
|
||||
else
|
||||
snprintf(bf, sizeof(bf), " ");
|
||||
ret += scnprintf(bf, sizeof(bf), " ");
|
||||
|
||||
if (sep)
|
||||
ret += snprintf(s + ret, size - ret, "%c%s", *sep, bf);
|
||||
ret += scnprintf(s + ret, size - ret, "%c%s", *sep, bf);
|
||||
else
|
||||
ret += snprintf(s + ret, size - ret, "%6.6s", bf);
|
||||
ret += scnprintf(s + ret, size - ret, "%6.6s", bf);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -855,7 +855,7 @@ int hist_entry__snprintf(struct hist_entry *he, char *s, size_t size,
|
|||
if (se->elide)
|
||||
continue;
|
||||
|
||||
ret += snprintf(s + ret, size - ret, "%s", sep ?: " ");
|
||||
ret += scnprintf(s + ret, size - ret, "%s", sep ?: " ");
|
||||
ret += se->se_snprintf(he, s + ret, size - ret,
|
||||
hists__col_len(hists, se->se_width_idx));
|
||||
}
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
|
|
@ -0,0 +1 @@
|
|||
|
|
@ -33,6 +33,9 @@ static int repsep_snprintf(char *bf, size_t size, const char *fmt, ...)
|
|||
}
|
||||
}
|
||||
va_end(ap);
|
||||
|
||||
if (n >= (int)size)
|
||||
return size - 1;
|
||||
return n;
|
||||
}
|
||||
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
#include "cache.h"
|
||||
#include <linux/kernel.h>
|
||||
|
||||
int prefixcmp(const char *str, const char *prefix)
|
||||
{
|
||||
|
@ -89,14 +90,14 @@ void strbuf_addf(struct strbuf *sb, const char *fmt, ...)
|
|||
if (!strbuf_avail(sb))
|
||||
strbuf_grow(sb, 64);
|
||||
va_start(ap, fmt);
|
||||
len = vsnprintf(sb->buf + sb->len, sb->alloc - sb->len, fmt, ap);
|
||||
len = vscnprintf(sb->buf + sb->len, sb->alloc - sb->len, fmt, ap);
|
||||
va_end(ap);
|
||||
if (len < 0)
|
||||
die("your vsnprintf is broken");
|
||||
die("your vscnprintf is broken");
|
||||
if (len > strbuf_avail(sb)) {
|
||||
strbuf_grow(sb, len);
|
||||
va_start(ap, fmt);
|
||||
len = vsnprintf(sb->buf + sb->len, sb->alloc - sb->len, fmt, ap);
|
||||
len = vscnprintf(sb->buf + sb->len, sb->alloc - sb->len, fmt, ap);
|
||||
va_end(ap);
|
||||
if (len > strbuf_avail(sb)) {
|
||||
die("this should not happen, your snprintf is broken");
|
||||
|
|
|
@ -837,15 +837,15 @@ static int hists__browser_title(struct hists *self, char *bf, size_t size,
|
|||
unsigned long nr_events = self->stats.nr_events[PERF_RECORD_SAMPLE];
|
||||
|
||||
nr_events = convert_unit(nr_events, &unit);
|
||||
printed = snprintf(bf, size, "Events: %lu%c %s", nr_events, unit, ev_name);
|
||||
printed = scnprintf(bf, size, "Events: %lu%c %s", nr_events, unit, ev_name);
|
||||
|
||||
if (thread)
|
||||
printed += snprintf(bf + printed, size - printed,
|
||||
printed += scnprintf(bf + printed, size - printed,
|
||||
", Thread: %s(%d)",
|
||||
(thread->comm_set ? thread->comm : ""),
|
||||
thread->pid);
|
||||
if (dso)
|
||||
printed += snprintf(bf + printed, size - printed,
|
||||
printed += scnprintf(bf + printed, size - printed,
|
||||
", DSO: %s", dso->short_name);
|
||||
return printed;
|
||||
}
|
||||
|
@ -1095,7 +1095,7 @@ static void perf_evsel_menu__write(struct ui_browser *browser,
|
|||
HE_COLORSET_NORMAL);
|
||||
|
||||
nr_events = convert_unit(nr_events, &unit);
|
||||
printed = snprintf(bf, sizeof(bf), "%lu%c%s%s", nr_events,
|
||||
printed = scnprintf(bf, sizeof(bf), "%lu%c%s%s", nr_events,
|
||||
unit, unit == ' ' ? "" : " ", ev_name);
|
||||
slsmg_printf("%s", bf);
|
||||
|
||||
|
@ -1105,8 +1105,8 @@ static void perf_evsel_menu__write(struct ui_browser *browser,
|
|||
if (!current_entry)
|
||||
ui_browser__set_color(browser, HE_COLORSET_TOP);
|
||||
nr_events = convert_unit(nr_events, &unit);
|
||||
snprintf(bf, sizeof(bf), ": %ld%c%schunks LOST!", nr_events,
|
||||
unit, unit == ' ' ? "" : " ");
|
||||
printed += scnprintf(bf, sizeof(bf), ": %ld%c%schunks LOST!",
|
||||
nr_events, unit, unit == ' ' ? "" : " ");
|
||||
warn = bf;
|
||||
}
|
||||
|
||||
|
|
|
@ -64,7 +64,7 @@ int ui_helpline__show_help(const char *format, va_list ap)
|
|||
static int backlog;
|
||||
|
||||
pthread_mutex_lock(&ui__lock);
|
||||
ret = vsnprintf(ui_helpline__last_msg + backlog,
|
||||
ret = vscnprintf(ui_helpline__last_msg + backlog,
|
||||
sizeof(ui_helpline__last_msg) - backlog, format, ap);
|
||||
backlog += ret;
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче