• Wang Nan's avatar
    bpf tools: Improve libbpf error reporting · 6371ca3b
    Wang Nan authored
    In this patch, a series of libbpf specific error numbers and
    libbpf_strerror() are introduced to help reporting errors.
    
    Functions are updated to pass correct the error number through the
    CHECK_ERR() macro.
    
    All users of bpf_object__open{_buffer}() and bpf_program__title() in
    perf are modified accordingly. In addition, due to the error codes
    changing, bpf__strerror_load() is also modified to use them.
    
    bpf__strerror_head() is also changed accordingly so it can parse libbpf
    errors. bpf_loader_strerror() is introduced for that purpose, and will
    be improved by the following patch.
    
    load_program() is improved not to dump log buffer if it is empty. log
    buffer is also used to deduce whether the error was caused by an invalid
    program or other problem.
    
    v1 -> v2:
    
     - Using macro for error code.
    
     - Fetch error message based on array index, eliminate for-loop.
    
     - Use log buffer to detect the reason of failure. 3 new error code
       are introduced to replace LIBBPF_ERRNO__LOAD.
    
    In v1:
    
      # perf record -e ./test_ill_program.o ls
      event syntax error: './test_ill_program.o'
                           \___ Failed to load program: Validate your program and check 'license'/'version' sections in your object
      SKIP
    
      # perf record -e ./test_kversion_nomatch_program.o ls
      event syntax error: './test_kversion_nomatch_program.o'
                           \___ Failed to load program: Validate your program and check 'license'/'version' sections in your object
      SKIP
    
      # perf record -e ./test_big_program.o ls
      event syntax error: './test_big_program.o'
                           \___ Failed to load program: Validate your program and check 'license'/'version' sections in your object
      SKIP
    
      In v2:
    
      # perf record -e ./test_ill_program.o ls
      event syntax error: './test_ill_program.o'
                           \___ Kernel verifier blocks program loading
      SKIP
    
      # perf record -e ./test_kversion_nomatch_program.o
      event syntax error: './test_kversion_nomatch_program.o'
                           \___ Incorrect kernel version
      SKIP
      (Will be further improved by following patches)
    
      # perf record -e ./test_big_program.o
      event syntax error: './test_big_program.o'
                           \___ Program too big
      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/1446817783-86722-2-git-send-email-wangnan0@huawei.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    6371ca3b
bpf-loader.c 7.6 KB