lkml.org 
[lkml]   [2009]   [Dec]   [6]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[PATCH 1/3] perf/sched: fix 'perf sched trace'
    If we use 'perf sched trace', it will call symbol__init() again,
    and can lead 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>
    ---
    tools/perf/builtin-sched.c | 14 +++++++-------
    1 files changed, 7 insertions(+), 7 deletions(-)

    diff --git a/tools/perf/builtin-sched.c b/tools/perf/builtin-sched.c
    index 45c46c7..7481ebd 100644
    --- a/tools/perf/builtin-sched.c
    +++ b/tools/perf/builtin-sched.c
    @@ -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)
    {
    - symbol__init(0);
    -
    argc = parse_options(argc, argv, sched_options, sched_usage,
    PARSE_OPT_STOP_AT_NON_OPTION);
    if (!argc)
    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)) {
    return __cmd_record(argc, argv);
    } 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);
    }
    __cmd_replay();
    - } else if (!strcmp(argv[0], "trace")) {
    - /*
    - * Aliased to 'perf trace' for now:
    - */
    - return cmd_trace(argc, argv, prefix);
    } else {
    usage_with_options(sched_usage, sched_options);
    }
    --
    1.6.1.2


    \
     
     \ /
      Last update: 2009-12-07 05:09    [W:0.025 / U:29.920 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site