• Wang Nan's avatar
    perf tools: Make options always available, even if required libs not linked · 48e1cab1
    Wang Nan authored
    This patch keeps options of perf builtins same in all conditions. If
    one option is disabled because of compiling options, users should be
    notified.
    
    Masami suggested another implementation in [1] that, by adding a
    OPTION_NEXT_DEPENDS option before those options in the 'struct option'
    array, options parser knows an option is disabled. However, in some
    cases this array is reordered (options__order()). In addition, in
    parse-option.c that array is const, so we can't simply merge
    information in decorator option into the affacted option.
    
    This patch chooses a simpler implementation that, introducing a
    set_option_nobuild() function and two option parsing flags. Builtins
    with such options should call set_option_nobuild() before option
    parsing. The complexity of this patch is because we want some of options
    can be skipped safely. In this case their arguments should also be
    consumed.
    
    Options in 'perf record' and 'perf probe' are fixed in this patch.
    
    [1] http://lkml.kernel.org/g/50399556C9727B4D88A595C8584AAB3752627CD4@GSjpTKYDCembx32.service.hitachi.net
    
    Test result:
    
    Normal case:
    
      # ./perf probe --vmlinux /tmp/vmlinux sys_write
      Added new event:
        probe:sys_write      (on sys_write)
    
      You can now use it in all perf tools, such as:
    
    	perf record -e probe:sys_write -aR sleep 1
    
    Build with NO_DWARF=1:
    
      # ./perf probe -L sys_write
        Error: switch `L' is not available because NO_DWARF=1
    
       Usage: perf probe [<options>] 'PROBEDEF' ['PROBEDEF' ...]
          or: perf probe [<options>] --add 'PROBEDEF' [--add 'PROBEDEF' ...]
          or: perf probe [<options>] --del '[GROUP:]EVENT' ...
          or: perf probe --list [GROUP:]EVENT ...
          or: perf probe [<options>] --funcs
    
        -L, --line <FUNC[:RLN[+NUM|-RLN2]]|SRC:ALN[+NUM|-ALN2]>
                              Show source code lines.
                              (not built-in because NO_DWARF=1)
    
      # ./perf probe -k /tmp/vmlinux sys_write
        Warning: switch `k' is being ignored because NO_DWARF=1
      Added new event:
        probe:sys_write      (on sys_write)
    
      You can now use it in all perf tools, such as:
    
    	perf record -e probe:sys_write -aR sleep 1
    
      # ./perf probe --vmlinux /tmp/vmlinux sys_write
        Warning: option `vmlinux' is being ignored because NO_DWARF=1
      Added new event:
      [SNIP]
    
      # ./perf probe -l
       Usage: perf probe [<options>] 'PROBEDEF' ['PROBEDEF' ...]
          or: perf probe [<options>] --add 'PROBEDEF' [--add 'PROBEDEF' ...]
    ...
        -k, --vmlinux <file>  vmlinux pathname
                              (not built-in because NO_DWARF=1)
        -L, --line <FUNC[:RLN[+NUM|-RLN2]]|SRC:ALN[+NUM|-ALN2]>
                              Show source code lines.
                              (not built-in because NO_DWARF=1)
    ...
        -V, --vars <FUNC[@SRC][+OFF|%return|:RL|;PT]|SRC:AL|SRC;PT>
                              Show accessible variables on PROBEDEF
                              (not built-in because NO_DWARF=1)
            --externs         Show external variables too (with --vars only)
                              (not built-in because NO_DWARF=1)
            --no-inlines      Don't search inlined functions
                              (not built-in because NO_DWARF=1)
            --range           Show variables location range in scope (with --vars only)
                              (not built-in because NO_DWARF=1)
    Signed-off-by: default avatarWang Nan <wangnan0@huawei.com>
    Tested-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    Cc: Alexei Starovoitov <ast@kernel.org>
    Cc: Jiri Olsa <jolsa@kernel.org>
    Cc: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
    Cc: Namhyung Kim <namhyung@kernel.org>
    Cc: Zefan Li <lizefan@huawei.com>
    Cc: pi3orama@163.com
    Link: http://lkml.kernel.org/r/1450089563-122430-14-git-send-email-wangnan0@huawei.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    48e1cab1
parse-options.c 22.1 KB