• Arnaldo Carvalho de Melo's avatar
    perf bpf: Add struct bpf_map struct · 7402e543
    Arnaldo Carvalho de Melo authored
    A helper structure used by eBPF C program to describe map attributes to
    elf_bpf loader, to be used initially by the special __bpf_stdout__ map
    used to print strings into the perf ring buffer in BPF scripts, e.g.:
    
    Using the upcoming stdio.h and puts() macros to use the __bpf_stdout__
    map to add strings to the ring buffer:
    
      # cat tools/perf/examples/bpf/hello.c
      #include <stdio.h>
    
      int syscall_enter(openat)(void *args)
      {
    	  puts("Hello, world\n");
    	  return 0;
      }
    
      license(GPL);
      #
      # cat ~/.perfconfig
      [llvm]
    	dump-obj = true
      # perf trace -e openat,tools/perf/examples/bpf/hello.c/call-graph=dwarf/ cat /etc/passwd > /dev/null
      LLVM: dumping tools/perf/examples/bpf/hello.o
         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
      #
      # file tools/perf/examples/bpf/hello.o
      tools/perf/examples/bpf/hello.o: ELF 64-bit LSB relocatable, *unknown arch 0xf7* version 1 (SYSV), not stripped
       # readelf -SW tools/perf/examples/bpf/hello.o
      There are 10 section headers, starting at offset 0x208:
    
      Section Headers:
        [Nr] Name              Type            Address          Off    Size   ES Flg Lk Inf Al
        [ 0]                   NULL            0000000000000000 000000 000000 00      0   0  0
        [ 1] .strtab           STRTAB          0000000000000000 000188 00007f 00      0   0  1
        [ 2] .text             PROGBITS        0000000000000000 000040 000000 00  AX  0   0  4
        [ 3] syscalls:sys_enter_openat PROGBITS        0000000000000000 000040 000088 00  AX  0   0  8
        [ 4] .relsyscalls:sys_enter_openat REL             0000000000000000 000178 000010 10      9   3  8
        [ 5] maps              PROGBITS        0000000000000000 0000c8 00001c 00  WA  0   0  4
        [ 6] .rodata.str1.1    PROGBITS        0000000000000000 0000e4 00000e 01 AMS  0   0  1
        [ 7] license           PROGBITS        0000000000000000 0000f2 000004 00  WA  0   0  1
        [ 8] version           PROGBITS        0000000000000000 0000f8 000004 00  WA  0   0  4
        [ 9] .symtab           SYMTAB          0000000000000000 000100 000078 18      1   1  8
      Key to Flags:
        W (write), A (alloc), X (execute), M (merge), S (strings), I (info),
        L (link order), O (extra OS processing required), G (group), T (TLS),
        C (compressed), x (unknown), o (OS specific), E (exclude),
        p (processor specific)
        # readelf -s tools/perf/examples/bpf/hello.o
    
      Symbol table '.symtab' contains 5 entries:
       Num:    Value          Size Type    Bind   Vis      Ndx Name
         0: 0000000000000000     0 NOTYPE  LOCAL  DEFAULT  UND
         1: 0000000000000000     0 NOTYPE  GLOBAL DEFAULT    5 __bpf_stdout__
         2: 0000000000000000     0 NOTYPE  GLOBAL DEFAULT    7 _license
         3: 0000000000000000     0 NOTYPE  GLOBAL DEFAULT    8 _version
         4: 0000000000000000     0 NOTYPE  GLOBAL DEFAULT    3 syscall_enter_openat
      #
    
    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-81fg60om2ifnatsybzwmiga3@git.kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    7402e543
bpf.h 876 Bytes