• Wang Nan's avatar
    perf probe: Fix segfault when glob matching function without debuginfo · 6bb536cc
    Wang Nan authored
    Commit 4c859351 ("perf probe: Support
    glob wildcards for function name") introduces segfault problems when
    debuginfo is not available:
    
     # perf probe 'sys_w*'
      Added new events:
      Segmentation fault
    
    The first problem resides in find_probe_trace_events_from_map(). In
    that function, find_probe_functions() is called to match each symbol
    against glob to find the number of matching functions, but still use
    map__for_each_symbol_by_name() to find 'struct symbol' for matching
    functions. Unfortunately, map__for_each_symbol_by_name() does
    exact matching by searching in an rbtree.
    
    It doesn't know glob matching, and not easy for it to support it because
    it use rbtree based binary search, but we are unable to ensure all names
    matched by the glob (any glob passed by user) reside in one subtree.
    
    This patch drops map__for_each_symbol_by_name(). Since there is no
    rbtree again, re-matching all symbols costs a lot. This patch avoid it
    by saving all matching results into an array (syms).
    
    The second problem is the lost of tp->realname. In
    __add_probe_trace_events(), if pev->point.function is glob, the event
    name should be set to tev->point.realname. This patch ensures its
    existence by strdup sym->name instead of leaving a NULL pointer there.
    
    After this patch:
    
     # perf probe 'sys_w*'
     Added new events:
       probe:sys_waitid     (on sys_w*)
       probe:sys_wait4      (on sys_w*)
       probe:sys_waitpid    (on sys_w*)
       probe:sys_write      (on sys_w*)
       probe:sys_writev     (on sys_w*)
    
     You can now use it in all perf tools, such as:
    
             perf record -e probe:sys_writev -aR sleep 1
    Signed-off-by: default avatarWang Nan <wangnan0@huawei.com>
    Acked-by: default avatarMasami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
    Cc: Jiri Olsa <jolsa@redhat.com>
    Cc: Namhyung Kim <namhyung@kernel.org>
    Cc: Zefan Li <lizefan@huawei.com>
    Link: http://lkml.kernel.org/r/1432892747-232506-1-git-send-email-wangnan0@huawei.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    6bb536cc
probe-event.c 65.1 KB