mirror of
https://github.com/Fishwaldo/linux-bl808.git
synced 2025-06-17 20:25:19 +00:00
perf/sched: Fix 'perf sched trace'
If we use 'perf sched trace', it will call symbol__init() again, and can lead to a perf tool crash: [root@localhost perf]# ./perf sched trace *** glibc detected *** ./perf: free(): invalid next size (normal): 0x094c1898 *** ======= Backtrace: ========= /lib/libc.so.6[0xb7602404] /lib/libc.so.6(cfree+0x96)[0xb76043b6] ./perf[0x80730fe] ./perf[0x8074c97] ./perf[0x805eb59] ./perf[0x80536fd] ./perf[0x804b618] ./perf[0x804bdc3] /lib/libc.so.6(__libc_start_main+0xe5)[0xb75a9735] ./perf[0x804af81] ======= Memory map: ======== 08048000-08158000 r-xp 00000000 fe:00 556831 /home/eric/.... 08158000-08168000 rw-p 0010f000 fe:00 556831 /home/eric/... 08168000-085fe000 rw-p 00000000 00:00 0 094ab000-094cc000 rw-p 00000000 00:00 0 [heap] Signed-off-by: Xiao Guangrong <xiaoguangrong@cn.fujitsu.com> LKML-Reference: <4B1C7EE1.8030906@cn.fujitsu.com> Cc: Peter Zijlstra <a.p.zijlstra@chello.nl> Cc: Mike Galbraith <efault@gmx.de> Cc: Paul Mackerras <paulus@samba.org> Cc: Arnaldo Carvalho de Melo <acme@redhat.com> Cc: Frederic Weisbecker <fweisbec@gmail.com> Signed-off-by: Ingo Molnar <mingo@elte.hu>
This commit is contained in:
parent
b9b1e1c71a
commit
c0777c5aa8
1 changed files with 7 additions and 7 deletions
|
@ -1888,13 +1888,18 @@ static int __cmd_record(int argc, const char **argv)
|
||||||
|
|
||||||
int cmd_sched(int argc, const char **argv, const char *prefix __used)
|
int cmd_sched(int argc, const char **argv, const char *prefix __used)
|
||||||
{
|
{
|
||||||
symbol__init(0);
|
|
||||||
|
|
||||||
argc = parse_options(argc, argv, sched_options, sched_usage,
|
argc = parse_options(argc, argv, sched_options, sched_usage,
|
||||||
PARSE_OPT_STOP_AT_NON_OPTION);
|
PARSE_OPT_STOP_AT_NON_OPTION);
|
||||||
if (!argc)
|
if (!argc)
|
||||||
usage_with_options(sched_usage, sched_options);
|
usage_with_options(sched_usage, sched_options);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Aliased to 'perf trace' for now:
|
||||||
|
*/
|
||||||
|
if (!strcmp(argv[0], "trace"))
|
||||||
|
return cmd_trace(argc, argv, prefix);
|
||||||
|
|
||||||
|
symbol__init(0);
|
||||||
if (!strncmp(argv[0], "rec", 3)) {
|
if (!strncmp(argv[0], "rec", 3)) {
|
||||||
return __cmd_record(argc, argv);
|
return __cmd_record(argc, argv);
|
||||||
} else if (!strncmp(argv[0], "lat", 3)) {
|
} else if (!strncmp(argv[0], "lat", 3)) {
|
||||||
|
@ -1918,11 +1923,6 @@ int cmd_sched(int argc, const char **argv, const char *prefix __used)
|
||||||
usage_with_options(replay_usage, replay_options);
|
usage_with_options(replay_usage, replay_options);
|
||||||
}
|
}
|
||||||
__cmd_replay();
|
__cmd_replay();
|
||||||
} else if (!strcmp(argv[0], "trace")) {
|
|
||||||
/*
|
|
||||||
* Aliased to 'perf trace' for now:
|
|
||||||
*/
|
|
||||||
return cmd_trace(argc, argv, prefix);
|
|
||||||
} else {
|
} else {
|
||||||
usage_with_options(sched_usage, sched_options);
|
usage_with_options(sched_usage, sched_options);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue