• Wang Nan's avatar
    perf bpf: Improve BPF related error messages · d3e0ce39
    Wang Nan authored
    A series of bpf loader related error codes were introduced to help error
    reporting. Functions were improved to return these new error codes.
    
    Functions which return pointers were adjusted to encode error codes into
    return value using the ERR_PTR() interface.
    
    bpf_loader_strerror() was improved to convert these error messages to
    strings. It checks the error codes and calls libbpf_strerror() and
    strerror_r() accordingly, so caller don't need to consider checking the
    range of the error code.
    
    In bpf__strerror_load(), print kernel version of running kernel and the
    object's 'version' section to notify user how to fix his/her program.
    
    v1 -> v2:
     Use macro for error code.
    
     Fetch error message based on array index, eliminate for-loop.
    
     Print version strings.
    
    Before:
    
      # perf record -e ./test_kversion_nomatch_program.o sleep 1
      event syntax error: './test_kversion_nomatch_program.o'
                           \___ Failed to load program: Validate your program and check 'license'/'version' sections in your object
      SKIP
    
      After:
    
      # perf record -e ./test_kversion_nomatch_program.o ls
      event syntax error: './test_kversion_nomatch_program.o'
                           \___ 'version' (4.4.0) doesn't match running kernel (4.3.0)
      SKIP
    Signed-off-by: default avatarWang Nan <wangnan0@huawei.com>
    Tested-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    Cc: Jiri Olsa <jolsa@kernel.org>
    Cc: Namhyung Kim <namhyung@kernel.org>
    Cc: Zefan Li <lizefan@huawei.com>
    Cc: pi3orama@163.com
    Link: http://lkml.kernel.org/r/1446818289-87444-1-git-send-email-wangnan0@huawei.com
    [ Add 'static inline' to bpf__strerror_prepare_load() when LIBBPF is disabled ]
    Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    d3e0ce39
util.h 8.9 KB