Skip to content
  • Arnaldo Carvalho de Melo's avatar
    perf bpf: Add bpf/stdio.h wrapper to bpf_perf_event_output function · 53a5d7b8
    Arnaldo Carvalho de Melo authored
    That, together with the map __bpf_output__ that is already handled by
    'perf trace' to print that event's contents as strings provides a
    debugging facility, to show it in use, print a simple string everytime
    the syscalls:sys_enter_openat() syscall tracepoint is hit:
    
      # cat tools/perf/examples/bpf/hello.c
      #include <stdio.h>
    
      int syscall_enter(openat)(void *args)
      {
    	  puts("Hello, world\n");
    	  return 0;
      }
    
      license(GPL);
      #
      # perf trace -e openat,tools/perf/examples/bpf/hello.c cat /etc/passwd > /dev/null
         0.016 (         ): __bpf_stdout__:Hello, world
         0.018 ( 0.010 ms): cat/9079 openat(dfd: CWD, filename: /etc/ld.so.cache, flags: CLOEXEC) = 3
         0.057 (         ): __bpf_stdout__:Hello, world
         0.059 ( 0.011 ms): cat/9079 openat(dfd: CWD, filename: /lib64/libc.so.6, flags: CLOEXEC) = 3
         0.417 (         ): __bpf_stdout__:Hello, world
         0.419 ( 0.009 ms): cat/9079 openat(dfd: CWD, filename: /etc/passwd) = 3
      #
    
    This is part of an ongoing experimentation on making eBPF scripts as
    consumed by perf to be as concise as possible and using familiar
    concepts such as stdio.h functions, that end up just wrapping the
    existing BPF functions, trying to hide as much boilerplate as possible
    while using just conventions and C preprocessor tricks.
    
    Cc: Adrian Hunter <adrian.hunter@intel.com>
    Cc: David Ahern <dsahern@gmail.com>
    Cc: Jiri Olsa <jolsa@kernel.org>
    Cc: Namhyung Kim <namhyung@kernel.org>
    Cc: Wang Nan <wangnan0@huawei.com>
    Link: https://lkml.kernel.org/n/tip-4tiaqlx5crf0fwpe7a6j84x7@git.kernel.org
    
    
    Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    53a5d7b8