Commit Graph

1731 Commits

Author SHA1 Message Date
Luca Boccassi 82756ea3ea libbpf: Fixup patch to allow to use packaged version
The original "libbpf: allow to use packaged version" had a symlink as
suggested during review, that got mistakenly dropped by Arnaldo when
applying the patch by hand to fixup conflicts, add it back.

Committer notes:

This caused mixups with libbpf-devel files that ended up breaking the
build as reported by Andrii.

Reported-by: Andrii Nakryiko <andrii.nakryiko@gmail.com>
Tested-by: Acked-by: Andrii Nakryiko <andrii@kernel.org>
Signed-off-by: Luca Boccassi <bluca@debian.org>
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2021-06-13 10:22:21 -03:00
Deepak Kumar Mishra ba953a53be README: Add documentation for -DBUILD_SHARED_LIBS
Added a section in README to give details about use of
-DBUILD_SHARED_LIBS cmake option and existing documentation reformatted
to accommodate this.

Signed-off-by: Deepak Kumar Mishra <deepakkumar.mishra@arm.com>
Cc: Qais Yousef <qais.yousef@arm.com>
Cc: dwarves@vger.kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2021-06-10 14:31:44 -03:00
Deepak Kumar Mishra aa20277086 CMakeLists.txt: Enable SHARED and STATIC lib creation
CMakeLists.txt does not allow creation of static library and link applications
accordingly.

Creation of SHARED and STATIC should be allowed using -DBUILD_SHARED_LIBS
If -DBUILD_SHARED_LIBS option is not supplied, CMakeLists.txt sets it to ON.

Ex:

  $ cmake -D__LIB=lib -DBUILD_SHARED_LIBS=OFF ..
  $ cmake -D__LIB=lib -DBUILD_SHARED_LIBS=ON ..

Committer testing:

I had to fixup it a bit due to changes related to allowing building with
libbpf-devel, test resuts:

With the default, i.e. creating libdwarves.so and using it:

  ⬢[acme@toolbox pahole]$ rm -f vmlinux.btf ; perf stat -r5 pahole -j vmlinux.btf vmlinux && perf stat -r5 btfdiff vmlinux vmlinux.btf

   Performance counter stats for 'pahole -j vmlinux.btf vmlinux' (5 runs):

            8,612.69 msec task-clock:u              #    1.014 CPUs utilized            ( +-  0.68% )
                   0      context-switches:u        #    0.000 /sec
                   0      cpu-migrations:u          #    0.000 /sec
             775,702      page-faults:u             #   91.330 K/sec                    ( +-  0.00% )
      33,720,048,514      cycles:u                  #    3.970 GHz                      ( +-  0.38% )  (83.33%)
         689,752,139      stalled-cycles-frontend:u #    2.05% frontend cycles idle     ( +-  2.57% )  (83.33%)
       5,070,723,369      stalled-cycles-backend:u  #   15.04% backend cycles idle      ( +-  1.20% )  (83.34%)
      77,270,640,084      instructions:u            #    2.29  insn per cycle
                                                    #    0.07  stalled cycles per insn  ( +-  0.01% )  (83.34%)
      18,164,028,242      branches:u                #    2.139 G/sec                    ( +-  0.04% )  (83.33%)
         150,194,338      branch-misses:u           #    0.83% of all branches          ( +-  0.17% )  (83.32%)

              8.4979 +- 0.0590 seconds time elapsed  ( +-  0.69% )

   Performance counter stats for 'btfdiff vmlinux vmlinux.btf' (5 runs):

            7,001.79 msec task-clock:u              #    1.006 CPUs utilized            ( +-  1.02% )
                   0      context-switches:u        #    0.000 /sec
                   0      cpu-migrations:u          #    0.000 /sec
             727,980      page-faults:u             #  104.736 K/sec                    ( +-  0.00% )
      26,912,307,448      cycles:u                  #    3.872 GHz                      ( +-  0.31% )  (83.33%)
         509,467,882      stalled-cycles-frontend:u #    1.90% frontend cycles idle     ( +-  2.44% )  (83.33%)
       3,602,777,263      stalled-cycles-backend:u  #   13.43% backend cycles idle      ( +-  1.34% )  (83.32%)
      66,192,815,701      instructions:u            #    2.47  insn per cycle
                                                    #    0.06  stalled cycles per insn  ( +-  0.01% )  (83.35%)
      15,753,663,095      branches:u                #    2.267 G/sec                    ( +-  0.02% )  (83.35%)
          98,345,696      branch-misses:u           #    0.62% of all branches          ( +-  0.14% )  (83.34%)

              6.9586 +- 0.0720 seconds time elapsed  ( +-  1.03% )

  ⬢[acme@toolbox pahole]$

Then building with:

  ⬢[acme@toolbox pahole]$ rm -rf build ; mkdir build ; cd build ; cmake -DBUILD_SHARED_LIBS=OFF -DCMAKE_BUILD_TYPE=Release .. ; cd .. ; make -C build
  ⬢[acme@toolbox pahole]$ ldd build/pahole
	linux-vdso.so.1 (0x00007ffff0172000)
	libdw.so.1 => /lib64/libdw.so.1 (0x00007fdd3905d000)
	libelf.so.1 => /lib64/libelf.so.1 (0x00007fdd39042000)
	libz.so.1 => /lib64/libz.so.1 (0x00007fdd39028000)
	libc.so.6 => /lib64/libc.so.6 (0x00007fdd38e59000)
	libdl.so.2 => /lib64/libdl.so.2 (0x00007fdd38e52000)
	libzstd.so.1 => /lib64/libzstd.so.1 (0x00007fdd38d5c000)
	liblzma.so.5 => /lib64/liblzma.so.5 (0x00007fdd38d2e000)
	libbz2.so.1 => /lib64/libbz2.so.1 (0x00007fdd38d1b000)
	libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fdd38cfa000)
	/lib64/ld-linux-x86-64.so.2 (0x00007fdd390ff000)
  ⬢[acme@toolbox pahole]$

We get some performance improvement:

- First is encoding detached BTF, i.e. read DWARF, generate BTF.
- Second is about loading both DWARF and BTF, producing output for both, that must match.

  ⬢[acme@toolbox pahole]$ rm -f vmlinux.btf ; perf stat -r5 pahole -j vmlinux.btf vmlinux && perf stat -r5 btfdiff vmlinux vmlinux.btf

   Performance counter stats for 'pahole -j vmlinux.btf vmlinux' (5 runs):

            8,566.34 msec task-clock:u              #    1.025 CPUs utilized            ( +-  0.85% )
                   0      context-switches:u        #    0.000 /sec
                   0      cpu-migrations:u          #    0.000 /sec
             775,685      page-faults:u             #   92.865 K/sec                    ( +-  0.00% )
      33,333,991,512      cycles:u                  #    3.991 GHz                      ( +-  0.23% )  (83.34%)
         799,187,919      stalled-cycles-frontend:u #    2.42% frontend cycles idle     ( +-  1.95% )  (83.33%)
       5,157,722,792      stalled-cycles-backend:u  #   15.61% backend cycles idle      ( +-  1.25% )  (83.33%)
      76,273,972,066      instructions:u            #    2.31  insn per cycle
                                                    #    0.07  stalled cycles per insn  ( +-  0.03% )  (83.33%)
      17,843,388,470      branches:u                #    2.136 G/sec                    ( +-  0.05% )  (83.33%)
         150,507,690      branch-misses:u           #    0.84% of all branches          ( +-  0.46% )  (83.33%)

              8.3561 +- 0.0729 seconds time elapsed  ( +-  0.87% )

   Performance counter stats for 'btfdiff vmlinux vmlinux.btf' (5 runs):

            6,685.39 msec task-clock:u              #    0.986 CPUs utilized            ( +-  0.54% )
                   0      context-switches:u        #    0.000 /sec
                   0      cpu-migrations:u          #    0.000 /sec
             727,931      page-faults:u             #  107.475 K/sec                    ( +-  0.00% )
      26,149,371,139      cycles:u                  #    3.861 GHz                      ( +-  0.15% )  (83.36%)
         525,918,808      stalled-cycles-frontend:u #    2.00% frontend cycles idle     ( +-  2.96% )  (83.33%)
       3,547,589,546      stalled-cycles-backend:u  #   13.51% backend cycles idle      ( +-  1.28% )  (83.35%)
      65,389,507,702      instructions:u            #    2.49  insn per cycle
                                                    #    0.06  stalled cycles per insn  ( +-  0.03% )  (83.29%)
      15,553,175,605      branches:u                #    2.296 G/sec                    ( +-  0.02% )  (83.34%)
          97,812,971      branch-misses:u           #    0.63% of all branches          ( +-  0.23% )  (83.34%)

              6.7784 +- 0.0359 seconds time elapsed  ( +-  0.53% )

  ⬢[acme@toolbox pahole]$

Signed-off-by: Deepak Kumar Mishra <deepakkumar.mishra@arm.com>
Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Qais Yousef <qais.yousef@arm.com>
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2021-06-10 14:23:25 -03:00
Luca Boccassi ae2581647e libbpf: Allow to use packaged version
Add a new CMake option, LIBBPF_EMBEDDED, to switch between the embedded
version and the system version (searched via pkg-config) of libbpf. Set
the embedded version as the default.

Committer testing:

The default build works as before:

  ⬢[acme@toolbox pahole]$ rm -rf build ; mkdir build ; cd build ; cmake -DCMAKE_BUILD_TYPE=Release .. ; cd ..
  -- The C compiler identification is GNU 11.1.1
  -- Detecting C compiler ABI info
  -- Detecting C compiler ABI info - done
  -- Check for working C compiler: /usr/bin/cc - skipped
  -- Detecting C compile features
  -- Detecting C compile features - done
  -- Checking availability of DWARF and ELF development libraries
  -- Looking for dwfl_module_build_id in elf
  -- Looking for dwfl_module_build_id in elf - found
  -- Found dwarf.h header: /usr/include
  -- Found elfutils/libdw.h header: /usr/include
  -- Found libdw library: /usr/lib64/libdw.so
  -- Found libelf library: /usr/lib64/libelf.so
  -- Checking availability of DWARF and ELF development libraries - done
  -- Found ZLIB: /usr/lib64/libz.so (found version "1.2.11")
  -- Submodule update
  -- Submodule update - done
  -- Performing Test HAVE_REALLOCARRAY_SUPPORT
  -- Performing Test HAVE_REALLOCARRAY_SUPPORT - Success
  -- Configuring done
  -- Generating done
  -- Build files have been written to: /var/home/acme/git/pahole/build
  ⬢[acme@toolbox pahole]$ make -j28 -C build
  make: Entering directory '/var/home/acme/git/pahole/build'
  make[1]: Entering directory '/var/home/acme/git/pahole/build'
  make[2]: Entering directory '/var/home/acme/git/pahole/build'
  Scanning dependencies of target bpf
  make[2]: Leaving directory '/var/home/acme/git/pahole/build'
  make[2]: Entering directory '/var/home/acme/git/pahole/build'
  [  5%] Building C object CMakeFiles/bpf.dir/lib/bpf/src/btf.c.o
  [  5%] Building C object CMakeFiles/bpf.dir/lib/bpf/src/bpf_prog_linfo.c.o
  [  5%] Building C object CMakeFiles/bpf.dir/lib/bpf/src/bpf.c.o
  [  7%] Building C object CMakeFiles/bpf.dir/lib/bpf/src/libbpf_errno.c.o
  <SNIP>
  make[2]: Leaving directory '/var/home/acme/git/pahole/build'
  [ 98%] Built target ctracer
  [100%] Linking C executable pahole
  make[2]: Leaving directory '/var/home/acme/git/pahole/build'
  [100%] Built target pahole
  make[1]: Leaving directory '/var/home/acme/git/pahole/build'
  make: Leaving directory '/var/home/acme/git/pahole/build'
  ⬢[acme@toolbox pahole]$ ldd build/pahole
  	linux-vdso.so.1 (0x00007ffcf4d92000)
  	libdwarves_reorganize.so.1 => /var/home/acme/git/pahole/build/libdwarves_reorganize.so.1 (0x00007f059c289000)
  	libdwarves.so.1 => /var/home/acme/git/pahole/build/libdwarves.so.1 (0x00007f059c226000)
  	libdw.so.1 => /lib64/libdw.so.1 (0x00007f059c186000)
  	libelf.so.1 => /lib64/libelf.so.1 (0x00007f059c16b000)
  	libz.so.1 => /lib64/libz.so.1 (0x00007f059c151000)
  	libc.so.6 => /lib64/libc.so.6 (0x00007f059bf82000)
  	libdl.so.2 => /lib64/libdl.so.2 (0x00007f059bf79000)
  	libzstd.so.1 => /lib64/libzstd.so.1 (0x00007f059be83000)
  	liblzma.so.5 => /lib64/liblzma.so.5 (0x00007f059be57000)
  	libbz2.so.1 => /lib64/libbz2.so.1 (0x00007f059be44000)
  	libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f059be23000)
  	/lib64/ld-linux-x86-64.so.2 (0x00007f059c290000)
  ⬢[acme@toolbox pahole]$

Then, trying to use the libbpf-devel present in Fedora 34:

  ⬢[acme@toolbox pahole]$ rm -rf build ; mkdir build ; cd build ; cmake -DCMAKE_BUILD_TYPE=Release -DLIBBPF_EMBEDDED=Off .. ; cd ..
  -- The C compiler identification is GNU 11.1.1
  -- Detecting C compiler ABI info
  -- Detecting C compiler ABI info - done
  -- Check for working C compiler: /usr/bin/cc - skipped
  -- Detecting C compile features
  -- Detecting C compile features - done
  -- Found PkgConfig: /usr/bin/pkg-config (found version "1.7.3")
  -- Checking for module 'libbpf>=0.3.0'
  --   Found libbpf, version 0.3.0
  -- Checking availability of DWARF and ELF development libraries
  -- Looking for dwfl_module_build_id in elf
  -- Looking for dwfl_module_build_id in elf - found
  -- Found dwarf.h header: /usr/include
  -- Found elfutils/libdw.h header: /usr/include
  -- Found libdw library: /usr/lib64/libdw.so
  -- Found libelf library: /usr/lib64/libelf.so
  -- Checking availability of DWARF and ELF development libraries - done
  -- Found ZLIB: /usr/lib64/libz.so (found version "1.2.11")
  -- Submodule update
  -- Submodule update - done
  -- Performing Test HAVE_REALLOCARRAY_SUPPORT
  -- Performing Test HAVE_REALLOCARRAY_SUPPORT - Success
  -- Configuring done
  -- Generating done
  -- Build files have been written to: /var/home/acme/git/pahole/build
  ⬢[acme@toolbox pahole]$ m
  make: Entering directory '/var/home/acme/git/pahole/build'
  make[1]: Entering directory '/var/home/acme/git/pahole/build'
  make[2]: Entering directory '/var/home/acme/git/pahole/build'
  Scanning dependencies of target dwarves
  make[2]: Leaving directory '/var/home/acme/git/pahole/build'
  make[2]: Entering directory '/var/home/acme/git/pahole/build'
  [  2%] Building C object CMakeFiles/dwarves.dir/dwarves.c.o
  [  5%] Building C object CMakeFiles/dwarves.dir/dwarves_fprintf.c.o
  [  7%] Building C object CMakeFiles/dwarves.dir/gobuffer.c.o
  <SNIP>
  [ 33%] Building C object CMakeFiles/dwarves.dir/rbtree.c.o
  /var/home/acme/git/pahole/btf_encoder.c:84:10: error: ‘BTF_KIND_FLOAT’ undeclared here (not in a function); did you mean ‘BTF_KIND_INT’?
     84 |         [BTF_KIND_FLOAT]        = "FLOAT",
        |          ^~~~~~~~~~~~~~
        |          BTF_KIND_INT
  /var/home/acme/git/pahole/btf_encoder.c:84:10: error: array index in initializer not of integer type
  /var/home/acme/git/pahole/btf_encoder.c:84:10: note: (near initialization for ‘btf_kind_str’)
  /var/home/acme/git/pahole/btf_encoder.c:84:35: warning: excess elements in array initializer
     84 |         [BTF_KIND_FLOAT]        = "FLOAT",
        |                                   ^~~~~~~
  /var/home/acme/git/pahole/btf_encoder.c:84:35: note: (near initialization for ‘btf_kind_str’)
  /var/home/acme/git/pahole/btf_encoder.c: In function ‘btf_encoder__add_float’:
  /var/home/acme/git/pahole/btf_encoder.c:224:22: warning: implicit declaration of function ‘btf__add_float’; did you mean ‘btf__add_var’? [-Wimplicit-function-declaration]
    224 |         int32_t id = btf__add_float(encoder->btf, name, BITS_ROUNDUP_BYTES(bt->bit_size));
        |                      ^~~~~~~~~~~~~~
        |                      btf__add_var
  /var/home/acme/git/pahole/btf_loader.c: In function ‘btf__load_types’:
  /var/home/acme/git/pahole/btf_loader.c:455:22: error: ‘BTF_KIND_FLOAT’ undeclared (first use in this function); did you mean ‘BTF_KIND_INT’?
    455 |                 case BTF_KIND_FLOAT:
        |                      ^~~~~~~~~~~~~~
        |                      BTF_KIND_INT
  /var/home/acme/git/pahole/btf_loader.c:455:22: note: each undeclared identifier is reported only once for each function it appears in
  make[2]: *** [CMakeFiles/dwarves.dir/build.make:173: CMakeFiles/dwarves.dir/btf_encoder.c.o] Error 1
  make[2]: *** Waiting for unfinished jobs....
  make[2]: *** [CMakeFiles/dwarves.dir/build.make:186: CMakeFiles/dwarves.dir/btf_loader.c.o] Error 1
  make[2]: Leaving directory '/var/home/acme/git/pahole/build'
  make[1]: *** [CMakeFiles/Makefile2:173: CMakeFiles/dwarves.dir/all] Error 2
  make[1]: Leaving directory '/var/home/acme/git/pahole/build'
  make: *** [Makefile:149: all] Error 2
  make: Leaving directory '/var/home/acme/git/pahole/build'
  ⬢[acme@toolbox pahole]$

It doesn't build as libbpf is old and doesn't have support for
BTF_KIND_FLOAT.

Signed-off-by: Luca Boccassi <bluca@debian.org>
Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: dwarves@vger.kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2021-06-09 13:34:18 -03:00
Arnaldo Carvalho de Melo 743f2536d8 btf_encoder: Move libbtf.c to btf_encoder.c, the only user of its functions
All those functions now operate on a 'struct btf_encoder' object, there
is no need to make them visible outside the btf_encoder.c source file,
so move them all there and make them static.

This leads to some savings as the compiler is free to optimize further,
inlining stuff used in just one place, etc:

Before, for encoding then reading we have:

  ⬢[acme@toolbox pahole]$ rm -f vmlinux.btf ; perf stat -r5 pahole -j vmlinux.btf vmlinux && perf stat -r5 btfdiff vmlinux vmlinux.btf

   Performance counter stats for 'pahole -j vmlinux.btf vmlinux' (5 runs):

            8,546.56 msec task-clock:u              #    0.989 CPUs utilized            ( +-  0.71% )
                   0      context-switches:u        #    0.000 /sec
                   0      cpu-migrations:u          #    0.000 /sec
             775,699      page-faults:u             #   89.802 K/sec                    ( +-  0.00% )
      34,082,471,148      cycles:u                  #    3.946 GHz                      ( +-  0.22% )  (83.33%)
         636,039,662      stalled-cycles-frontend:u #    1.87% frontend cycles idle     ( +-  1.69% )  (83.33%)
       4,895,524,778      stalled-cycles-backend:u  #   14.38% backend cycles idle      ( +-  2.10% )  (83.33%)
      77,379,632,646      instructions:u            #    2.27  insn per cycle
                                                    #    0.07  stalled cycles per insn  ( +-  0.04% )  (83.33%)
      18,185,560,802      branches:u                #    2.105 G/sec                    ( +-  0.03% )  (83.34%)
         149,715,849      branch-misses:u           #    0.82% of all branches          ( +-  0.15% )  (83.34%)

              8.6412 +- 0.0612 seconds time elapsed  ( +-  0.71% )

   Performance counter stats for 'btfdiff vmlinux vmlinux.btf' (5 runs):

            7,168.97 msec task-clock:u              #    1.016 CPUs utilized            ( +-  0.50% )
                   0      context-switches:u        #    0.000 /sec
                   0      cpu-migrations:u          #    0.000 /sec
             727,965      page-faults:u             #  103.257 K/sec                    ( +-  0.00% )
      27,339,019,686      cycles:u                  #    3.878 GHz                      ( +-  0.17% )  (83.28%)
         511,689,773      stalled-cycles-frontend:u #    1.88% frontend cycles idle     ( +-  1.84% )  (83.34%)
       3,677,090,126      stalled-cycles-backend:u  #   13.53% backend cycles idle      ( +-  1.47% )  (83.35%)
      66,182,032,226      instructions:u            #    2.44  insn per cycle
                                                    #    0.06  stalled cycles per insn  ( +-  0.02% )  (83.35%)
      15,747,149,247      branches:u                #    2.234 G/sec                    ( +-  0.02% )  (83.36%)
          98,013,024      branch-misses:u           #    0.62% of all branches          ( +-  0.21% )  (83.33%)

              7.0554 +- 0.0357 seconds time elapsed  ( +-  0.51% )

  ⬢[acme@toolbox pahole]$

Then, with this patch:

  ⬢[acme@toolbox pahole]$ rm -f vmlinux.btf ; perf stat -r5 pahole -j vmlinux.btf vmlinux && perf stat -r5 btfdiff vmlinux vmlinux.btf

   Performance counter stats for 'pahole -j vmlinux.btf vmlinux' (5 runs):

            8,280.48 msec task-clock:u              #    0.975 CPUs utilized            ( +-  0.72% )
                   0      context-switches:u        #    0.000 /sec
                   0      cpu-migrations:u          #    0.000 /sec
             775,699      page-faults:u             #   91.481 K/sec                    ( +-  0.00% )
      33,265,078,702      cycles:u                  #    3.923 GHz                      ( +-  0.32% )  (83.32%)
         725,690,346      stalled-cycles-frontend:u #    2.16% frontend cycles idle     ( +-  1.76% )  (83.34%)
       4,803,211,469      stalled-cycles-backend:u  #   14.33% backend cycles idle      ( +-  2.43% )  (83.34%)
      77,162,277,929      instructions:u            #    2.30  insn per cycle
                                                    #    0.07  stalled cycles per insn  ( +-  0.06% )  (83.34%)
      18,139,715,894      branches:u                #    2.139 G/sec                    ( +-  0.03% )  (83.34%)
         149,609,552      branch-misses:u           #    0.82% of all branches          ( +-  0.16% )  (83.33%)

              8.4921 +- 0.0630 seconds time elapsed  ( +-  0.74% )

   Performance counter stats for 'btfdiff vmlinux vmlinux.btf' (5 runs):

            7,018.11 msec task-clock:u              #    1.013 CPUs utilized            ( +-  0.68% )
                   0      context-switches:u        #    0.000 /sec
                   0      cpu-migrations:u          #    0.000 /sec
             727,949      page-faults:u             #  105.207 K/sec                    ( +-  0.00% )
      26,632,191,985      cycles:u                  #    3.849 GHz                      ( +-  0.31% )  (83.35%)
         496,648,058      stalled-cycles-frontend:u #    1.87% frontend cycles idle     ( +-  2.02% )  (83.29%)
       3,437,243,040      stalled-cycles-backend:u  #   12.92% backend cycles idle      ( +-  0.90% )  (83.33%)
      66,192,034,237      instructions:u            #    2.49  insn per cycle
                                                    #    0.05  stalled cycles per insn  ( +-  0.03% )  (83.34%)
      15,750,883,004      branches:u                #    2.276 G/sec                    ( +-  0.03% )  (83.35%)
          97,544,298      branch-misses:u           #    0.62% of all branches          ( +-  0.12% )  (83.36%)

              6.9247 +- 0.0478 seconds time elapsed  ( +-  0.69% )

  ⬢[acme@toolbox pahole]$

Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2021-06-09 13:34:15 -03:00
Arnaldo Carvalho de Melo 6f72dddbed btf_encoder: Move PERCPU_SECTION define to the only source file using it
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2021-06-09 10:56:36 -03:00
Arnaldo Carvalho de Melo f0f5b4f2bc btf_encoder: Move library global variable btf_gen_floats to btf_encoder class
So this should be the last global variable in the BTF encoder, good
riddance!

Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2021-06-09 10:54:10 -03:00
Arnaldo Carvalho de Melo 09970b03bd btf_encoder: Ditch unused 'btf_encoder__verbose' global variable
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2021-06-09 10:46:52 -03:00
Arnaldo Carvalho de Melo 1bf2e3511a btf_encoder: Use encoder->verbose instead of btf_encoder__verbose
Its available, has the same value, use the per-instance 'verbose' member
instead of the global, this should be the last use of that global, time
to ditch it.

Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2021-06-09 10:46:49 -03:00
Arnaldo Carvalho de Melo 4ffa484b6a btf_encoder: Adopt btf__log_func_param() and use encoder->verbose
This will eventually allow us to remove one more global variable,
btf_encoder__verbose.

Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2021-06-09 10:46:46 -03:00
Arnaldo Carvalho de Melo 729da7613b btf_encoder: Adopt btf__log_member() and use encoder->verbose
This will eventually allow us to remove one more global variable,
btf_encoder__verbose.

Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2021-06-09 10:46:43 -03:00
Arnaldo Carvalho de Melo be75b76b6b btf_encoder: Adopt btf__log_type() and use encoder->verbose
This will eventually allow us to remove one more global variable,
btf_encoder__verbose.

Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2021-06-09 10:46:34 -03:00
Arnaldo Carvalho de Melo 9f19e96001 btf_encoder: No need to pass encoder->percpu_secinfo to btf_encoder__add_datasec()
As it receives the encoder and can get that field from it.

Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2021-06-09 10:46:30 -03:00
Arnaldo Carvalho de Melo 869c177f8e btf_encoder: Make btf_encoder__add_var_secinfo() receive a btf_encoder pointer
For consistency.

Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2021-06-09 10:21:07 -03:00
Arnaldo Carvalho de Melo f0e8cd68f5 btf_encoder: Adopt btf__encode_var_secinfo() as btf_encoder__add_var_secinfo()
So that we can eventually ditch the btf_encoder__verbose and
btf_gen_float globals, making them members of 'struct btf_encoder'.

Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2021-06-09 10:18:53 -03:00
Arnaldo Carvalho de Melo cc646d93d1 btf_encoder: Adopt btf__encode_datasec_type() as btf_encoder__add_datasec()
As it is just prep work to call libbpf's btf__add_datasec() for
variables using pahole's data structures populated from another format,
normally DWARF.

So that we can eventually ditch the btf_encoder__verbose and
btf_gen_float globals, making them members of 'struct btf_encoder'.

Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2021-06-09 10:14:47 -03:00
Arnaldo Carvalho de Melo b0f71fabde btf_encoder: Adopt btf__encode_var_type() as btf_encoder__add_var()
As it is just prep work to call libbpf's btf__add_var for a variable
using pahole's data structures populated from another format, normally
DWARF.

So that we can eventually ditch the btf_encoder__verbose and
btf_gen_float globals, making them members of 'struct btf_encoder'.

Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2021-06-09 10:12:26 -03:00
Arnaldo Carvalho de Melo 1aece1e7e6 btf_encoder: Adopt btf__encode_enum_val() as btf_encoder__add_enum_val()
As it is just prep work to call libbpf's btf__add_enum_val for an
enumeration entry using pahole's data structures populated from another
format, normally DWARF.

So that we can eventually ditch the btf_encoder__verbose and
btf_gen_float globals, making them members of 'struct btf_encoder'.

Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2021-06-09 10:10:35 -03:00
Arnaldo Carvalho de Melo 4371b3cd5b btf_encoder: Adopt btf__encode_enum() as btf_encoder__add_enum()
As it is just prep work to call libbpf's btf__add_enum for an
enumeration using pahole's data structures populated from another
format, normally DWARF.

So that we can eventually ditch the btf_encoder__verbose and
btf_gen_float globals, making them members of 'struct btf_encoder'.

Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2021-06-09 10:08:45 -03:00
Arnaldo Carvalho de Melo b536947512 btf_encoder: Adopt btf__encode_enumeration_type() as btf_encoder__add_enum_type()
As it is just prep work to call libbpf's btf__add_enum*() APIs for an
enumeration and its entries using pahole's data structures populated
from another format, normally DWARF.

So that we can eventually ditch the btf_encoder__verbose and
btf_gen_float globals, making them members of 'struct btf_encoder'.

Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2021-06-09 10:06:43 -03:00
Arnaldo Carvalho de Melo 1bc29591ec btf_encoder: Adopt btf__encode_func_proto_param() as btf_encoder__add_func_param()
As it is just prep work to call libbpf's btf__add_func_param() for an
argument in a function prototype using pahole's data structures
populated from another format, normally DWARF.

So that we can eventually ditch the btf_encoder__verbose and
btf_gen_float globals, making them members of 'struct btf_encoder'.

Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2021-06-09 10:03:55 -03:00
Arnaldo Carvalho de Melo 393febe592 btf_encoder: Adopt btf__encode_func_proto() as btf_encoder__add_func_proto()
As it is just prep work to call libbpf's btf__add_func_proto() for a
function prototype using pahole's data structures populated from another
format, normally DWARF.

So that we can eventually ditch the btf_encoder__verbose and
btf_gen_float globals, making them members of 'struct btf_encoder'.

Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2021-06-09 10:01:22 -03:00
Arnaldo Carvalho de Melo 4eb4c03578 btf_encoder: Adopt btf__encode_array() as btf_encoder__add_array()
As it is just prep work to call libbpf's btf__add_array() for an array
using pahole's data structures populated from another format, normally
DWARF.

So that we can eventually ditch the btf_encoder__verbose and
btf_gen_float globals, making them members of 'struct btf_encoder'.

Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2021-06-09 09:59:20 -03:00
Arnaldo Carvalho de Melo 06cd9f00c6 btf_encoder: Adopt btf__encode_struct() as btf_encoder__add_struct()
As it is just prep work to call libbpf's btf__add_struct() for a
struct/union/class using pahole's data structures populated from another
format, normally DWARF.

So that we can eventually ditch the btf_encoder__verbose and
btf_gen_float globals, making them members of 'struct btf_encoder'.

Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2021-06-09 09:57:15 -03:00
Arnaldo Carvalho de Melo 0b29d5a65c btf_encoder: Adopt btf__encode_member() as btf_encoder__add_field()
As it is just prep work to call libbpf's btf__add_field() for a
struct/union/class member using pahole's data structures populated from
another format, normally DWARF.

So that we can eventually ditch the btf_encoder__verbose and
btf_gen_float globals, making them members of 'struct btf_encoder'.

Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2021-06-09 09:53:45 -03:00
Arnaldo Carvalho de Melo 3e2a1f7ddc btf_encoder: Adopt btf__encode_struct_type() as btf_encoder__add_struct_type()
As it is just prep work to call the various libbpf's btf__add*() for
structs/unions and its members using pahole's data structures populated
from another format, normally DWARF.

So that we can eventually ditch the btf_encoder__verbose and
btf_gen_float globals, making them members of 'struct btf_encoder'.

Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2021-06-09 09:46:22 -03:00
Arnaldo Carvalho de Melo 2c7a2f270e btf_encoder: Adopt btf__encode_ref_type() as btf_encoder__add_ref_type()
As it is just prep work to call the various libbpf's btf__add*() for
types that reference other types (volatile, const, pointers, etc) using
pahole's data structures populated from another format, normally DWARF.

So that we can eventually ditch the btf_encoder__verbose and
btf_gen_float globals, making them members of 'struct btf_encoder'.

Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2021-06-09 09:42:20 -03:00
Arnaldo Carvalho de Melo 07d4ec9cef btf_encoder: Adopt btf__encode_float_type() as btf_encoder__add_float()
As it is just prep work to call libbpf's btf__add_float() using
pahole's data structures populated from another format, normally DWARF.

So that we can eventually ditch the btf_encoder__verbose and
btf_gen_float globals, making them members of 'struct btf_encoder'.

Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2021-06-09 09:39:18 -03:00
Arnaldo Carvalho de Melo 68ed8af859 btf_encoder: Adopt btf__encode_base_type() as btf_encoder__add_base_type()
As it is just prep work to call libbpf's btf__add_base_type() using
pahole's data structures populated from another format, normally DWARF.

So that we can eventually ditch the btf_encoder__verbose and
btf_gen_float globals, making them members of 'struct btf_encoder'.

Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2021-06-09 09:31:26 -03:00
Arnaldo Carvalho de Melo 14ab2e0361 libbtf: Ditch unused btf_elf__verbose_log() macro
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2021-06-09 09:21:43 -03:00
Arnaldo Carvalho de Melo 539c94fee9 libbtf: Ditch btf_elf class, unused
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2021-06-09 09:21:42 -03:00
Arnaldo Carvalho de Melo 282a8a2187 btf_encoder: Use 'struct btf' directly, stop using btf_elf
Now that btf_elf is only crating the 'struct btf' instance, do it
directly.

Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2021-06-09 09:20:23 -03:00
Arnaldo Carvalho de Melo dd0b01f568 libbtf: Remove unused ELF fields and calls from btf_elf
The continuous eroding of libbtf and the move to use libbpf APIs made
possible to ditch these aspects from libbtf.c and btf_elf, that is near
terminal death :-)

Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2021-06-09 09:10:36 -03:00
Arnaldo Carvalho de Melo a0c5f49b0c btf_encoder: Phagocytize percpu_secinfo from btf_elf
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2021-06-08 17:54:35 -03:00
Arnaldo Carvalho de Melo c288e29d06 pahole: Rename 'encoder' to 'btf_encoder' as we support multiple formats
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2021-06-08 15:40:14 -03:00
Arnaldo Carvalho de Melo 46a3e3a87a btf_encoder: Move the global btf_encoder to its users, like pahole
Tools should instantiate it using btf_encoder__new(), etc, ditch the
library global.

Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2021-06-08 15:38:48 -03:00
Arnaldo Carvalho de Melo fa849010b4 btf_encoder: Adopt the cu__encode_btf() method, as btf_encoder__encode_cu()
This should be the last user of the global btf_encoder variable, time to
ditch it.

Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2021-06-08 15:35:30 -03:00
Arnaldo Carvalho de Melo 3be437c5e7 btf_encoder: Set btf_encoder__verbose in just one place, its users
E.g.: pahole.

Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2021-06-08 15:32:55 -03:00
Arnaldo Carvalho de Melo e1e787af44 btf_encoder: Move btf_elf__verbose var to btf_encoder class
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2021-06-08 15:29:55 -03:00
Arnaldo Carvalho de Melo 66f4054252 btf_encoder: Adopt btf_elf__force, its only used in btf_encoder methods
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2021-06-08 15:20:11 -03:00
Arnaldo Carvalho de Melo 5e1207754e pahole: Adopt btf_encoder object instantiation from btf_encoder
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2021-06-08 15:03:05 -03:00
Arnaldo Carvalho de Melo 0208952e8f btf_encoder: Move the function encode() to be a btf_encoder method
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2021-06-08 14:44:19 -03:00
Arnaldo Carvalho de Melo bcc5f95364 btf_encoder: Temporarily expose the 'encoder' variable
To move creation to pahole.c, i.e. outside the library, to the user,
then move the other methods still using the global variable.

Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2021-06-08 14:40:17 -03:00
Arnaldo Carvalho de Melo e27be59f10 btf_encoder: Move 'filename' member from btf_elf to btf_encoder
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2021-06-08 10:10:41 -03:00
Arnaldo Carvalho de Melo da9d70a16f btfdiff: Support diffing DWARF vs detached BTF
I.e.:

  $ rm -f vmlinux.btf ; pahole -j vmlinux.btf vmlinux && btfdiff vmlinux vmlinux.btf

Is much more robust in making sure we really generated new BTF from
the DWARF in a ELF file and that the detached BTF produces the same
output as the original DWARF.

Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2021-06-08 10:08:22 -03:00
Arnaldo Carvalho de Melo 6bc135c8f4 btf_encoder: No need for calling btf_encoder__encode() from cu__encode_btf()
For a vmlinux, the usual case, btf_encoder__encode() ends up being
called just from pahole, after processing all CUs, this looks like a
leftover from when Andrii made it support multiple CUs.

Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2021-06-04 17:46:18 -03:00
Arnaldo Carvalho de Melo 48a0fa2ef7 btf_encoder: Move btf_elf based encode_in_elf and write_elf methods to btf_encoder
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2021-06-04 17:38:54 -03:00
Arnaldo Carvalho de Melo cc8eae604d btf_encoder: Move collect_symbols() call to btf_encoder constructor
As we'll call the constructor from users, not from inside the a
btf_constructor method updating a global variable.

Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2021-06-04 17:30:20 -03:00
Arnaldo Carvalho de Melo 96e59c5568 btf_encoder: Remove needless hash.h include, not used anymore
In 2e719cca66 ("btf_encoder: revamp how per-CPU variables are encoded")
hash.h stopped being used, remove the hash.h include.

Cc: Andrii Nakryiko <andriin@fb.com>
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2021-06-04 17:30:20 -03:00
Arnaldo Carvalho de Melo 92f8852d8d btf_encoder: Move global elf_functions table to the btf_encoder class
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2021-06-04 17:30:20 -03:00