1. 25 Oct, 2022 1 commit
    • Arnaldo Carvalho de Melo's avatar
      perf bpf: Fix build with libbpf 0.7.0 by checking if bpf_program__set_insns() is available · f1bdebbb
      Arnaldo Carvalho de Melo authored
      
      During the transition to libbpf 1.0 some functions that perf used were
      deprecated and finally removed from libbpf, so bpf_program__set_insns()
      was introduced for perf to continue to use its bpf loader.
      
      But when build with LIBBPF_DYNAMIC=1 we now need to check if that
      function is available so that perf can build with older libbpf versions,
      even if the end result is emitting a warning to the user that the use
      of the perf BPF loader requires a newer libbpf, since bpf_program__set_insns()
      touches libbpf objects internal state.
      
      This affects only 'perf trace' when using bpf C code or pre-compiled
      bytecode as an event.
      
      Noticed on RHEL9, that has libbpf 0.7.0, where bpf_program__set_insns()
      isn't available.
      Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      f1bdebbb
  2. 04 Oct, 2022 3 commits
    • Roberto Sassu's avatar
      tools build: Display logical OR of a feature flavors · 74ef1cc9
      Roberto Sassu authored
      
      Sometimes, features are simply different flavors of another feature, to
      properly detect the exact dependencies needed by different Linux
      distributions.
      
      For example, libbfd has three flavors: libbfd if the distro does not
      require any additional dependency; libbfd-liberty if it requires libiberty;
      libbfd-liberty-z if it requires libiberty and libz.
      
      It might not be clear to the user whether a feature has been successfully
      detected or not, given that some of its flavors will be set to OFF, others
      to ON.
      
      Instead, display only the feature main flavor if not in verbose mode
      (VF != 1), and set it to ON if at least one of its flavors has been
      successfully detected (logical OR), OFF otherwise. Omit the other flavors.
      
      Accomplish that by declaring a FEATURE_GROUP_MEMBERS-<feature main flavor>
      variable, with the list of the other flavors as variable value. For now, do
      it just for libbfd.
      
      In verbose mode, of if no group is defined for a feature, show the feature
      detection result as before.
      
      Committer testing:
      
      Collecting the output from:
      
        $ make -C tools/bpf/bpftool/ clean
        $ make -C tools/bpf/bpftool/ |& grep "Auto-detecting system features" -A10
      
        $ diff -u before after
        --- before	2022-08-18 10:06:40.422086966 -0300
        +++ after	2022-08-18 10:07:59.202138282 -0300
        @@ -1,6 +1,4 @@
         Auto-detecting system features:
         ...                                  libbfd: [ on  ]
        -...                          libbfd-liberty: [ on  ]
        -...                        libbfd-liberty-z: [ on  ]
         ...                                  libcap: [ on  ]
         ...                         clang-bpf-co-re: [ on  ]
        $
      Signed-off-by: default avatarRoberto Sassu <roberto.sassu@huawei.com>
      Tested-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: Ingo Molnar <mingo@redhat.com>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: Mark Rutland <mark.rutland@arm.com>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Quentin Monnet <quentin@isovalent.com>
      Cc: bpf@vger.kernel.org
      Link: https://lore.kernel.org/r/20220818120957.319995-3-roberto.sassu@huaweicloud.com
      
      Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      74ef1cc9
    • Roberto Sassu's avatar
      tools build: Increment room for feature name in feature detection output · 74da7697
      Roberto Sassu authored
      
      Since now there are features with a long name, increase the room for them,
      so that fields are correctly aligned.
      Signed-off-by: default avatarRoberto Sassu <roberto.sassu@huawei.com>
      Tested-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: Ingo Molnar <mingo@redhat.com>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: Mark Rutland <mark.rutland@arm.com>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Quentin Monnet <quentin@isovalent.com>
      Cc: bpf@vger.kernel.org
      Link: https://lore.kernel.org/r/20220818120957.319995-2-roberto.sassu@huaweicloud.com
      
      Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      74da7697
    • Roberto Sassu's avatar
      tools build: Fix feature detection output due to eval expansion · 709533e5
      Roberto Sassu authored
      As the first eval expansion is used only to generate Makefile statements,
      messages should not be displayed at this stage, as for example conditional
      expressions are not evaluated.
      
      It can be seen for example in the output of feature detection for bpftool,
      where the number of detected features does not change, despite turning on
      the verbose mode (VF = 1) and there are additional features to display.
      
      Fix this issue by escaping the $ before $(info) statements, to ensure that
      messages are printed only when the function containing them is actually
      executed, and not when it is expanded.
      
      In addition, move the $(info) statement out of feature_print_status, due to
      the fact that is called both inside and outside an eval context, and place
      it to the caller so that the $ can be escaped when necessary. For symmetry,
      move the $(info) statement also out of feature_print_text, and place it to
      the caller.
      
      Force the TMP variable evaluation in verbose mode, to display the features
      in FEATURE_TESTS that are not in FEATURE_DISPLAY.
      
      Reorder perf feature detection messages (first non-verbose, then verbose
      ones) by moving the call to feature_display_entries earlier, before the VF
      environment variable check.
      
      Also, remove the newline from that function, as perf might display
      additional messages. Move the newline to perf Makefile, and display another
      one if displaying the detection result is not deferred as in the case of
      bpftool.
      
      Committer testing:
      
        Collecting the output from:
      
        $ make VF=1 -C tools/bpf/bpftool/ |& grep "Auto-detecting system features" -A20
      
        $ diff -u before after
        --- before	2022-08-18 09:59:55.460529231 -0300
        +++ after	2022-08-18 10:01:11.182517282 -0300
        @@ -4,3 +4,5 @@
         ...              libbfd-liberty-z: [ on  ]
         ...                        libcap: [ on  ]
         ...               clang-bpf-co-re: [ on  ]
        +...        disassembler-four-args: [ on  ]
        +...      disassembler-init-styled: [ OFF ]
        $
      
      Fixes: 0afc5cad
      
       ("perf build: Separate feature make support into config/Makefile.feature")
      Signed-off-by: default avatarRoberto Sassu <roberto.sassu@huawei.com>
      Tested-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: bpf@vger.kernel.org
      Cc: Ingo Molnar <mingo@redhat.com>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: Mark Rutland <mark.rutland@arm.com>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Quentin Monnet <quentin@isovalent.com>
      Link: https://lore.kernel.org/r/20220818120957.319995-1-roberto.sassu@huaweicloud.com
      
      Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      709533e5
  3. 01 Aug, 2022 2 commits
  4. 26 May, 2022 4 commits
    • Arnaldo Carvalho de Melo's avatar
      perf build: Stop using __weak bpf_map_create() to handle older libbpf versions · df76e003
      Arnaldo Carvalho de Melo authored
      By adding a feature test for bpf_map_create() and providing a fallback if
      it isn't present in older versions of libbpf.
      
      This also fixes the build with torvalds/master at this point:
      
        $ git log --oneline -5 torvalds/master
        babf0bb9 (torvalds/master) Merge tag 'xfs-5.19-for-linus' of git://git.kernel.org/pub/scm/fs/xfs/xfs-linux
        e375780b Merge tag 'fsnotify_for_v5.19-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/jack/linux-fs
        8b728edc Merge tag 'fs_for_v5.19-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/jack/linux-fs
        3f306ea2 Merge tag 'dma-mapping-5.19-2022-05-25' of git://git.infradead.org/users/hch/dma-mapping
        fbe86dac Merge tag 'scsi-misc' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi
        $
      
      Coping with:
      
        $ git log --oneline -2 d16495a9
        d16495a9 libbpf: remove bpf_create_map*() APIs
        e2371b16 libbpf: start 1.0 development cycle
        $
      
      As the __weak function fails to build as it calls the now removed
      bpf_create_map() API.
      
      Testing:
      
        $ rpm -q libbpf-devel
        libbpf-devel-0.4.0-2.fc35.x86_64
        $
        $ make -C tools/perf BUILD_BPF_SKEL=1 LIBBPF_DYNAMIC=1 O=/tmp/build/perf install-bin
        $ cat /tmp/build/perf/feature/test-libbpf-bpf_map_create.make.output
        test-libbpf-bpf_map_create.c: In function ‘main’:
        test-libbpf-bpf_map_create.c:6:16: error: implicit declaration of function ‘bpf_map_create’; did you mean ‘bpf_map_freeze’? [-Werror=implicit-function-declaration]
            6 |         return bpf_map_create(0 /* map_type */, NULL /* map_name */, 0, /* key_size */,
              |                ^~~~~~~~~~~~~~
              |                bpf_map_freeze
        test-libbpf-bpf_map_create.c:6:87: error: expected expression before ‘,’ token
            6 |         return bpf_map_create(0 /* map_type */, NULL /* map_name */, 0, /* key_size */,
              |                                                                                       ^
        cc1: all warnings being treated as errors
        $
        $ objdump -dS /tmp/build/perf/perf | grep '<bpf_map_create>:' -A20
        000000000058b290 <bpf_map_create>:
        {
          58b290:	55                   	push   %rbp
          58b291:	48 89 e5             	mov    %rsp,%rbp
          58b294:	48 83 ec 10          	sub    $0x10,%rsp
          58b298:	64 48 8b 04 25 28 00 	mov    %fs:0x28,%rax
          58b29f:	00 00
          58b2a1:	48 89 45 f8          	mov    %rax,-0x8(%rbp)
          58b2a5:	31 c0                	xor    %eax,%eax
        	return bpf_create_map(map_type, key_size, value_size, max_entries, 0);
          58b2a7:	48 8b 45 f8          	mov    -0x8(%rbp),%rax
          58b2ab:	64 48 2b 04 25 28 00 	sub    %fs:0x28,%rax
          58b2b2:	00 00
          58b2b4:	75 10                	jne    58b2c6 <bpf_map_create+0x36>
        }
          58b2b6:	c9                   	leave
          58b2b7:	89 d6                	mov    %edx,%esi
          58b2b9:	89 ca                	mov    %ecx,%edx
          58b2bb:	44 89 c1             	mov    %r8d,%ecx
        	return bpf_create_map(map_type, key_size, value_size, max_entries, 0);
          58b2be:	45 31 c0             	xor    %r8d,%r8d
        $
      
      Cc: Andrii Nakryiko <andrii@kernel.org>
      Cc: Heiko Carstens <hca@linux.ibm.com>
      Cc: Ian Rogers <irogers@google.com>
      Cc: Ilya Leoshkevich <iii@linux.ibm.com>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: Song Liu <songliubraving@fb.com>
      Cc: Sumanth Korikkar <sumanthk@linux.ibm.com>
      Cc: Sven Schnelle <svens@linux.ibm.com>
      Cc: Thomas Richter <tmricht@linux.ibm.com>
      Cc: Vasily Gorbik <gor@linux.ibm.com>
      Link: http://lore.kernel.org/linux-perf-users/Yo+XvQNKL4K5khl2@kernel.org
      
      Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      df76e003
    • Jiri Olsa's avatar
      perf build: Stop using __weak bpf_object__next_map() to handle older libbpf versions · 739c9180
      Jiri Olsa authored
      
      By adding a feature test for bpf_object__next_map() and providing a fallback if
      it isn't present in older versions of libbpf.
      
      Committer testing:
      
        $ rpm -q libbpf-devel
        libbpf-devel-0.4.0-2.fc35.x86_64
        $ make -C tools/perf LIBBPF_DYNAMIC=1 O=/tmp/build/perf install-bin
        $ cat /tmp/build/perf/feature/test-libbpf-bpf_object__next_map.make.output
        test-libbpf-bpf_object__next_map.c: In function ‘main’:
        test-libbpf-bpf_object__next_map.c:6:9: error: implicit declaration of function ‘bpf_object__next_map’; did you mean ‘bpf_object__next’? [-Werror=implicit-function-declaration]
            6 |         bpf_object__next_map(NULL /* obj */, NULL /* prev */);
              |         ^~~~~~~~~~~~~~~~~~~~
              |         bpf_object__next
          cc1: all warnings being treated as errors
        $
        $ objdump -dS /tmp/build/perf/perf | grep '<bpf_object__next_map>:' -A20
        00000000005b2e00 <bpf_object__next_map>:
        {
          5b2e00:	55                   	push   %rbp
          5b2e01:	48 89 e5             	mov    %rsp,%rbp
          5b2e04:	48 83 ec 10          	sub    $0x10,%rsp
          5b2e08:	64 48 8b 04 25 28 00 	mov    %fs:0x28,%rax
          5b2e0f:	00 00
          5b2e11:	48 89 45 f8          	mov    %rax,-0x8(%rbp)
          5b2e15:	31 c0                	xor    %eax,%eax
      	  return bpf_map__next(prev, obj);
          5b2e17:	48 8b 45 f8          	mov    -0x8(%rbp),%rax
          5b2e1b:	64 48 2b 04 25 28 00 	sub    %fs:0x28,%rax
          5b2e22:	00 00
          5b2e24:	75 0f                	jne    5b2e35 <bpf_object__next_map+0x35>
        }
          5b2e26:	c9                   	leave
          5b2e27:	49 89 f8             	mov    %rdi,%r8
          5b2e2a:	48 89 f7             	mov    %rsi,%rdi
      	  return bpf_map__next(prev, obj);
          5b2e2d:	4c 89 c6             	mov    %r8,%rsi
          5b2e30:	e9 cb b1 e5 ff       	jmp    40e000 <bpf_map__next@plt>
        $
      Signed-off-by: default avatarJiri Olsa <jolsa@kernel.org>
      Tested-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      Cc: Heiko Carstens <hca@linux.ibm.com>
      Cc: Ian Rogers <irogers@google.com>
      Cc: Ilya Leoshkevich <iii@linux.ibm.com>
      Cc: Sumanth Korikkar <sumanthk@linux.ibm.com>
      Cc: Sven Schnelle <svens@linux.ibm.com>
      Cc: Thomas Richter <tmricht@linux.ibm.com>
      Cc: Vasily Gorbik <gor@linux.ibm.com>
      Link: http://lore.kernel.org/linux-perf-users/YozLKby7ITEtchC9@krava
      
      Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      739c9180
    • Jiri Olsa's avatar
      perf build: Stop using __weak bpf_object__next_program() to handle older libbpf versions · 8916d725
      Jiri Olsa authored
      
      By adding a feature test for bpf_object__next_program() and providing a fallback if
      it isn't present in older versions of libbpf.
      
      Committer testing:
      
        $ rpm -q libbpf-devel
        libbpf-devel-0.4.0-2.fc35.x86_64
        $ make -C tools/perf LIBBPF_DYNAMIC=1 O=/tmp/build/perf install-bin
        $ cat /tmp/build/perf/feature/test-libbpf-bpf_object__next_program.make.output
        test-libbpf-bpf_object__next_program.c: In function ‘main’:
        test-libbpf-bpf_object__next_program.c:6:9: error: implicit declaration of function ‘bpf_object__next_program’; did you mean ‘bpf_object__unpin_programs’? [-Werror=implicit-function-declaration]
            6 |         bpf_object__next_program(NULL /* obj */, NULL /* prev */);
              |         ^~~~~~~~~~~~~~~~~~~~~~~~
              |         bpf_object__unpin_programs
        cc1: all warnings being treated as errors
        $
        $ objdump -dS /tmp/build/perf/perf | grep '<bpf_object__next_program>:' -A20
        00000000005b2dc0 <bpf_object__next_program>:
        {
          5b2dc0:	55                   	push   %rbp
          5b2dc1:	48 89 e5             	mov    %rsp,%rbp
          5b2dc4:	48 83 ec 10          	sub    $0x10,%rsp
          5b2dc8:	64 48 8b 04 25 28 00 	mov    %fs:0x28,%rax
          5b2dcf:	00 00
          5b2dd1:	48 89 45 f8          	mov    %rax,-0x8(%rbp)
          5b2dd5:	31 c0                	xor    %eax,%eax
      	  return bpf_program__next(prev, obj);
          5b2dd7:	48 8b 45 f8          	mov    -0x8(%rbp),%rax
          5b2ddb:	64 48 2b 04 25 28 00 	sub    %fs:0x28,%rax
          5b2de2:	00 00
          5b2de4:	75 0f                	jne    5b2df5 <bpf_object__next_program+0x35>
        }
          5b2de6:	c9                   	leave
          5b2de7:	49 89 f8             	mov    %rdi,%r8
          5b2dea:	48 89 f7             	mov    %rsi,%rdi
      	  return bpf_program__next(prev, obj);
          5b2ded:	4c 89 c6             	mov    %r8,%rsi
          5b2df0:	e9 3b b4 e5 ff       	jmp    40e230 <bpf_program__next@plt>
          $
      Signed-off-by: default avatarJiri Olsa <jolsa@kernel.org>
      Tested-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      Cc: Heiko Carstens <hca@linux.ibm.com>
      Cc: Ian Rogers <irogers@google.com>
      Cc: Ilya Leoshkevich <iii@linux.ibm.com>
      Cc: Sumanth Korikkar <sumanthk@linux.ibm.com>
      Cc: Sven Schnelle <svens@linux.ibm.com>
      Cc: Thomas Richter <tmricht@linux.ibm.com>
      Cc: Vasily Gorbik <gor@linux.ibm.com>
      Link: http://lore.kernel.org/linux-perf-users/YozLKby7ITEtchC9@krava
      
      Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      8916d725
    • Jiri Olsa's avatar
      perf build: Stop using __weak bpf_prog_load() to handle older libbpf versions · 5c83eff3
      Jiri Olsa authored
      
      By adding a feature test for bpf_prog_load() and providing a fallback if
      it isn't present in older versions of libbpf.
      
      Committer testing:
      
        $ rpm -q libbpf-devel
        libbpf-devel-0.4.0-2.fc35.x86_64
        $ make -C tools/perf LIBBPF_DYNAMIC=1 O=/tmp/build/perf install-bin
        $ cat /tmp/build/perf/feature/test-libbpf-bpf_prog_load.make.output
        test-libbpf-bpf_prog_load.c: In function ‘main’:
        test-libbpf-bpf_prog_load.c:6:16: error: implicit declaration of function ‘bpf_prog_load’ [-Werror=implicit-function-declaration]
            6 |         return bpf_prog_load(0 /* prog_type */, NULL /* prog_name */,
              |                ^~~~~~~~~~~~~
        cc1: all warnings being treated as errors
        $
      
        $ objdump -dS /tmp/build/perf/perf | grep '<bpf_prog_load>:' -A20
        00000000005b2d70 <bpf_prog_load>:
        {
          5b2d70:	55                   	push   %rbp
          5b2d71:	48 89 ce             	mov    %rcx,%rsi
          5b2d74:	4c 89 c8             	mov    %r9,%rax
          5b2d77:	49 89 d2             	mov    %rdx,%r10
          5b2d7a:	4c 89 c2             	mov    %r8,%rdx
          5b2d7d:	48 89 e5             	mov    %rsp,%rbp
          5b2d80:	48 83 ec 18          	sub    $0x18,%rsp
          5b2d84:	64 48 8b 0c 25 28 00 	mov    %fs:0x28,%rcx
          5b2d8b:	00 00
          5b2d8d:	48 89 4d f8          	mov    %rcx,-0x8(%rbp)
          5b2d91:	31 c9                	xor    %ecx,%ecx
        	return bpf_load_program(prog_type, insns, insn_cnt, license,
          5b2d93:	41 8b 49 5c          	mov    0x5c(%r9),%ecx
          5b2d97:	51                   	push   %rcx
          5b2d98:	4d 8b 49 60          	mov    0x60(%r9),%r9
          5b2d9c:	4c 89 d1             	mov    %r10,%rcx
          5b2d9f:	44 8b 40 1c          	mov    0x1c(%rax),%r8d
          5b2da3:	e8 f8 aa e5 ff       	call   40d8a0 <bpf_load_program@plt>
        }
        $
      Signed-off-by: default avatarJiri Olsa <jolsa@kernel.org>
      Tested-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      Cc: Heiko Carstens <hca@linux.ibm.com>
      Cc: Ian Rogers <irogers@google.com>
      Cc: Ilya Leoshkevich <iii@linux.ibm.com>
      Cc: Sumanth Korikkar <sumanthk@linux.ibm.com>
      Cc: Sven Schnelle <svens@linux.ibm.com>
      Cc: Thomas Richter <tmricht@linux.ibm.com>
      Cc: Vasily Gorbik <gor@linux.ibm.com>
      Link: http://lore.kernel.org/linux-perf-users/YozLKby7ITEtchC9@krava
      
      Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      5c83eff3
  5. 20 May, 2022 1 commit
    • Arnaldo Carvalho de Melo's avatar
      perf build: Fix check for btf__load_from_kernel_by_id() in libbpf · 0ae065a5
      Arnaldo Carvalho de Melo authored
      Avi Kivity reported a problem where the __weak
      btf__load_from_kernel_by_id() in tools/perf/util/bpf-event.c was being
      used and it called btf__get_from_id() in tools/lib/bpf/btf.c that in
      turn called back to btf__load_from_kernel_by_id(), resulting in an
      endless loop.
      
      Fix this by adding a feature test to check if
      btf__load_from_kernel_by_id() is available when building perf with
      LIBBPF_DYNAMIC=1, and if not then provide the fallback to the old
      btf__get_from_id(), that doesn't call back to btf__load_from_kernel_by_id()
      since at that time it didn't exist at all.
      
      Tested on Fedora 35 where we have libbpf-devel 0.4.0 with LIBBPF_DYNAMIC
      where we don't have btf__load_from_kernel_by_id() and thus its feature
      test fail, not defining HAVE_LIBBPF_BTF__LOAD_FROM_KERNEL_BY_ID:
      
        $ cat /tmp/build/perf-urgent/feature/test-libbpf-btf__load_from_kernel_by_id.make.output
        test-libbpf-btf__load_from_kernel_by_id.c: In function ‘main’:
        test-libbpf-btf__load_from_kernel_by_id.c:6:16: error: implicit declaration of function ‘btf__load_from_kernel_by_id’ [-Werror=implicit-function-declaration]
            6 |         return btf__load_from_kernel_by_id(20151128, NULL);
              |                ^~~~~~~~~~~~~~~~~~~~~~~~~~~
        cc1: all warnings being treated as errors
        $
      
        $ nm /tmp/build/perf-urgent/perf | grep btf__load_from_kernel_by_id
        00000000005ba180 T btf__load_from_kernel_by_id
        $
      
        $ objdump --disassemble=btf__load_from_kernel_by_id -S /tmp/build/perf-urgent/perf
      
        /tmp/build/perf-urgent/perf:     file format elf64-x86-64
        <SNIP>
        00000000005ba180 <btf__load_from_kernel_by_id>:
        #include "record.h"
        #include "util/synthetic-events.h"
      
        #ifndef HAVE_LIBBPF_BTF__LOAD_FROM_KERNEL_BY_ID
        struct btf *btf__load_from_kernel_by_id(__u32 id)
        {
          5ba180:	55                   	push   %rbp
          5ba181:	48 89 e5             	mov    %rsp,%rbp
          5ba184:	48 83 ec 10          	sub    $0x10,%rsp
          5ba188:	64 48 8b 04 25 28 00 	mov    %fs:0x28,%rax
          5ba18f:	00 00
          5ba191:	48 89 45 f8          	mov    %rax,-0x8(%rbp)
          5ba195:	31 c0                	xor    %eax,%eax
               struct btf *btf;
        #pragma GCC diagnostic push
        #pragma GCC diagnostic ignored "-Wdeprecated-declarations"
               int err = btf__get_from_id(id, &btf);
          5ba197:	48 8d 75 f0          	lea    -0x10(%rbp),%rsi
          5ba19b:	e8 a0 57 e5 ff       	call   40f940 <btf__get_from_id@plt>
          5ba1a0:	89 c2                	mov    %eax,%edx
        #pragma GCC diagnostic pop
      
               return err ? ERR_PTR(err) : btf;
          5ba1a2:	48 98                	cltq
          5ba1a4:	85 d2                	test   %edx,%edx
          5ba1a6:	48 0f 44 45 f0       	cmove  -0x10(%rbp),%rax
        }
        <SNIP>
      
      Fixes: 218e7b77
      
       ("perf bpf: Provide a weak btf__load_from_kernel_by_id() for older libbpf versions")
      Reported-by: default avatarAvi Kivity <avi@scylladb.com>
      Link: https://lore.kernel.org/linux-perf-users/f0add43b-3de5-20c5-22c4-70aff4af959f@scylladb.com
      Cc: Adrian Hunter <adrian.hunter@intel.com>
      Cc: Ian Rogers <irogers@google.com>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Link: https://lore.kernel.org/linux-perf-users/YobjjFOblY4Xvwo7@kernel.org
      
      Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      0ae065a5
  6. 07 Dec, 2021 1 commit
    • Arnaldo Carvalho de Melo's avatar
      tools build: Remove needless libpython-version feature check that breaks test-all fast path · 3d1d57de
      Arnaldo Carvalho de Melo authored
      Since 66dfdff0 ("perf tools: Add Python 3 support") we don't use
      the tools/build/feature/test-libpython-version.c version in any Makefile
      feature check:
      
        $ find tools/ -type f | xargs grep feature-libpython-version
        $
      
      The only place where this was used was removed in 66dfdff0
      
      :
      
        -        ifneq ($(feature-libpython-version), 1)
        -          $(warning Python 3 is not yet supported; please set)
        -          $(warning PYTHON and/or PYTHON_CONFIG appropriately.)
        -          $(warning If you also have Python 2 installed, then)
        -          $(warning try something like:)
        -          $(warning $(and ,))
        -          $(warning $(and ,)  make PYTHON=python2)
        -          $(warning $(and ,))
        -          $(warning Otherwise, disable Python support entirely:)
        -          $(warning $(and ,))
        -          $(warning $(and ,)  make NO_LIBPYTHON=1)
        -          $(warning $(and ,))
        -          $(error   $(and ,))
        -        else
        -          LDFLAGS += $(PYTHON_EMBED_LDFLAGS)
        -          EXTLIBS += $(PYTHON_EMBED_LIBADD)
        -          LANG_BINDINGS += $(obj-perf)python/perf.so
        -          $(call detected,CONFIG_LIBPYTHON)
        -        endif
      
      And nowadays we either build with PYTHON=python3 or just install the
      python3 devel packages and perf will build against it.
      
      But the leftover feature-libpython-version check made the fast path
      feature detection to break in all cases except when python2 devel files
      were installed:
      
        $ rpm -qa | grep python.*devel
        python3-devel-3.9.7-1.fc34.x86_64
        $ rm -rf /tmp/build/perf ; mkdir -p /tmp/build/perf ;
        $ make -C tools/perf O=/tmp/build/perf install-bin
        make: Entering directory '/var/home/acme/git/perf/tools/perf'
          BUILD:   Doing 'make -j32' parallel build
          HOSTCC  /tmp/build/perf/fixdep.o
        <SNIP>
        $ cat /tmp/build/perf/feature/test-all.make.output
        In file included from test-all.c:18:
        test-libpython-version.c:5:10: error: #error
            5 |         #error
              |          ^~~~~
        $ ldd ~/bin/perf | grep python
      	libpython3.9.so.1.0 => /lib64/libpython3.9.so.1.0 (0x00007fda6dbcf000)
        $
      
      As python3 is the norm these days, fix this by just removing the unused
      feature-libpython-version feature check, making the test-all fast path
      to work with the common case.
      
      With this:
      
        $ rm -rf /tmp/build/perf ; mkdir -p /tmp/build/perf ;
        $ make -C tools/perf O=/tmp/build/perf install-bin |& head
        make: Entering directory '/var/home/acme/git/perf/tools/perf'
          BUILD:   Doing 'make -j32' parallel build
          HOSTCC  /tmp/build/perf/fixdep.o
          HOSTLD  /tmp/build/perf/fixdep-in.o
          LINK    /tmp/build/perf/fixdep
      
        Auto-detecting system features:
        ...                         dwarf: [ on  ]
        ...            dwarf_getlocations: [ on  ]
        ...                         glibc: [ on  ]
        $ ldd ~/bin/perf | grep python
      	libpython3.9.so.1.0 => /lib64/libpython3.9.so.1.0 (0x00007f58800b0000)
        $ cat /tmp/build/perf/feature/test-all.make.output
        $
      Reviewed-by: default avatarJames Clark <james.clark@arm.com>
      Fixes: 66dfdff0 ("perf tools: Add Python 3 support")
      Cc: Adrian Hunter <adrian.hunter@intel.com>
      Cc: Ian Rogers <irogers@google.com>
      Cc: Jaroslav Škarvada <jskarvad@redhat.com>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Link: https://lore.kernel.org/lkml/YaYmeeC6CS2b8OSz@kernel.org
      
      Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      3d1d57de
  7. 28 Sep, 2021 1 commit
  8. 09 Aug, 2021 1 commit
    • Leo Yan's avatar
      tools: Remove feature-sync-compare-and-swap feature detection · 60fa754b
      Leo Yan authored
      
      Since the __sync functions have been removed from perf, it's needless
      for perf tool to test the feature sync-compare-and-swap.
      
      The feature test is not used by any other components, remove it.
      Signed-off-by: default avatarLeo Yan <leo.yan@linaro.org>
      Cc: Adrian Hunter <adrian.hunter@intel.com>
      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: Alexei Starovoitov <ast@kernel.org>
      Cc: Andi Kleen <ak@linux.intel.com>
      Cc: Andrii Nakryiko <andriin@fb.com>
      Cc: Borislav Petkov <bp@alien8.de>
      Cc: Daniel Díaz <daniel.diaz@linaro.org>
      Cc: Frank Ch. Eigler <fche@redhat.com>
      Cc: H. Peter Anvin <hpa@zytor.com>
      Cc: Jiri Olsa <jolsa@redhat.com>
      Cc: Mark Rutland <mark.rutland@arm.com>
      Cc: Mathieu Poirier <mathieu.poirier@linaro.org>
      Cc: Michael Petlan <mpetlan@redhat.com>
      Cc: Mike Leach <mike.leach@linaro.org>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Sedat Dilek <sedat.dilek@gmail.com>
      Cc: Song Liu <songliubraving@fb.com>
      Cc: Suzuki Poulouse <suzuki.poulose@arm.com>
      Cc: Thomas Gleixner <tglx@linutronix.de>
      Cc: coresight@lists.linaro.org
      Cc: x86@kernel.org
      Link: http://lore.kernel.org/lkml/20210809111407.596077-10-leo.yan@linaro.org
      
      Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      60fa754b
  9. 29 Apr, 2021 2 commits
  10. 15 Jan, 2021 1 commit
  11. 04 Sep, 2020 2 commits
    • Arnaldo Carvalho de Melo's avatar
      perf tools: Make GTK2 support opt-in · 4751bddd
      Arnaldo Carvalho de Melo authored
      
      This is bitrotting, nobody is stepping up to work on it, and since we
      treat warnings as errors, feature detection is failing in its main,
      faster test (tools/build/feature/test-all.c) because of the GTK+2
      infobar check.
      
      So make this opt-in, at some point ditch this if nobody volunteers to
      take care of this.
      
      Cc: Adrian Hunter <adrian.hunter@intel.com>
      Cc: Ian Rogers <irogers@google.com>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      4751bddd
    • Arnaldo Carvalho de Melo's avatar
      tools features: Add feature test to check if libbfd has buildid support · e71e19a9
      Arnaldo Carvalho de Melo authored
      
      Which is needed by the PE executable support, for instance.
      
      Cc: Adrian Hunter <adrian.hunter@intel.com>
      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: Ian Rogers <irogers@google.com>
      Cc: Jacek Caban <jacek@codeweavers.com>
      Cc: Jiri Olsa <jolsa@redhat.com>
      Cc: Mark Rutland <mark.rutland@arm.com>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Remi Bernon <rbernon@codeweavers.com>
      Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      e71e19a9
  12. 19 Aug, 2020 1 commit
  13. 14 Aug, 2020 1 commit
    • Frank Ch. Eigler's avatar
      perf build-ids: Fall back to debuginfod query if debuginfo not found · c7a14fdc
      Frank Ch. Eigler authored
      During a perf-record, use the -ldebuginfod API to query a debuginfod
      server, should the debug data not be found in the usual system
      locations.  If successful, the usual $HOME/.debug dir is populated.
      
      Tested with:
      
        $ find .
        .
        ./ctags-debuginfo-5.8-26.fc31.x86_64.rpm
        ./usr
        ./usr/lib
        ./usr/lib/debug
        ./usr/lib/debug/.build-id
        ./usr/lib/debug/.build-id/ca
        ./usr/lib/debug/.build-id/ca/46f6ae6a0cee57d85abc1d461c49074248908d
        ./usr/lib/debug/.build-id/ca/46f6ae6a0cee57d85abc1d461c49074248908d.debug
        ./usr/lib/debug/usr
        ./usr/lib/debug/usr/bin
        ./usr/lib/debug/usr/bin/ctags-5.8-26.fc31.x86_64.debug
      
        $ debuginfod  -F .
        ...
      
        $ rm -rf ~/.debug/ ; mkdir ~/.debug
      
        $ perf record make tags
          BUILD:   Doing 'make -j8' parallel build
          GEN      tags
        [ perf record: Woken up 1 times to write data ]
        [ perf record: Captured and wrote 0.107 MB perf.data (1483 samples) ]
      
        $ find ~/.debug | grep ctags
        /home/jolsa/.debug/usr/bin/ctags
        /home/jolsa/.debug/usr/bin/ctags/ca46f6ae6a0cee57d85abc1d461c49074248908d
        /home/jolsa/.debug/usr/bin/ctags/ca46f6ae6a0cee57d85abc1d461c49074248908d/elf
        /home/jolsa/.debug/usr/bin/ctags/ca46f6ae6a0cee57d85abc1d461c49074248908d/probes
      
        $ rm -rf ~/.debug/ ; mkdir ~/.debug
      
        $ DEBUGINFOD_URLS=http://localhost:8002
      
       perf record make tags
          BUILD:   Doing 'make -j8' parallel build
          GEN      tags
        [ perf record: Woken up 1 times to write data ]
        [ perf record: Captured and wrote 0.108 MB perf.data (1531 samples) ]
      
        $ find ~/.debug | grep ctag
        /home/jolsa/.debug/usr/bin/ctags
        /home/jolsa/.debug/usr/bin/ctags/ca46f6ae6a0cee57d85abc1d461c49074248908d
        /home/jolsa/.debug/usr/bin/ctags/ca46f6ae6a0cee57d85abc1d461c49074248908d/debug
        /home/jolsa/.debug/usr/bin/ctags/ca46f6ae6a0cee57d85abc1d461c49074248908d/elf
        /home/jolsa/.debug/usr/bin/ctags/ca46f6ae6a0cee57d85abc1d461c49074248908d/probes
      
      Note the 'debug' file is created in the last run.
      
      Note that currently the debuginfo data are downloaded only on record path,
      we still need add this support to perf build-id/report.. and test ;-)
      Tested-by: default avatarJiri Olsa <jolsa@kernel.org>
      Signed-off-by: default avatarJiri Olsa <jolsa@kernel.org>
      Signed-off-by: default avatarFrank Ch. Eigler <fche@redhat.com>
      Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      c7a14fdc
  14. 13 Aug, 2020 1 commit
    • Daniel Díaz's avatar
      tools build feature: Quote CC and CXX for their arguments · fa5c8931
      Daniel Díaz authored
      When using a cross-compilation environment, such as OpenEmbedded,
      the CC an CXX variables are set to something more than just a
      command: there are arguments (such as --sysroot) that need to be
      passed on to the compiler so that the right set of headers and
      libraries are used.
      
      For the particular case that our systems detected, CC is set to
      the following:
      
        export CC="aarch64-linaro-linux-gcc  --sysroot=/oe/build/tmp/work/machine/perf/1.0-r9/recipe-sysroot"
      
      Without quotes, detection is as follows:
      
        Auto-detecting system features:
        ...                         dwarf: [ OFF ]
        ...            dwarf_getlocations: [ OFF ]
        ...                         glibc: [ OFF ]
        ...                          gtk2: [ OFF ]
        ...                        libbfd: [ OFF ]
        ...                        libcap: [ OFF ]
        ...                        libelf: [ OFF ]
        ...                       libnuma: [ OFF ]
        ...        numa_num_possible_cpus: [ OFF ]
        ...                       libperl: [ OFF ]
        ...                     libpython: [ OFF ]
        ...                     libcrypto: [ OFF ]
        ...                     libunwind: [ OFF ]
        ...            libdw-dwarf-unwind: [ OFF ]
        ...                          zlib: [ OFF ]
        ...                          lzma: [ OFF ]
        ...                     get_cpuid: [ OFF ]
        ...                           bpf: [ OFF ]
        ...                        libaio: [ OFF ]
        ...                       libzstd: [ OFF ]
        ...        disassembler-four-args: [ OFF ]
      
        Makefile.config:414: *** No gnu/libc-version.h found, please install glibc-dev[el].  Stop.
        Makefile.perf:230: recipe for target 'sub-make' failed
        make[1]: *** [sub-make] Error 2
        Makefile:69: recipe for target 'all' failed
        make: *** [all] Error 2
      
      With CC and CXX quoted, some of those features are now detected.
      
      Fixes: e3232c2f
      
       ("tools build feature: Use CC and CXX from parent")
      Signed-off-by: default avatarDaniel Díaz <daniel.diaz@linaro.org>
      Reviewed-by: default avatarThomas Hebb <tommyhebb@gmail.com>
      Cc: Alexei Starovoitov <ast@kernel.org>
      Cc: Andrii Nakryiko <andriin@fb.com>
      Cc: Daniel Borkmann <daniel@iogearbox.net>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: John Fastabend <john.fastabend@gmail.com>
      Cc: KP Singh <kpsingh@chromium.org>
      Cc: Martin KaFai Lau <kafai@fb.com>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Song Liu <songliubraving@fb.com>
      Cc: Stephane Eranian <eranian@google.com>
      Cc: Yonghong Song <yhs@fb.com>
      Link: http://lore.kernel.org/lkml/20200812221518.2869003-1-daniel.diaz@linaro.org
      
      Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      fa5c8931
  15. 31 Jul, 2020 1 commit
    • Thomas Hebb's avatar
      tools build feature: Use CC and CXX from parent · e3232c2f
      Thomas Hebb authored
      commit c8c18867 ("tools build: Use the same CC for feature detection
      and actual build") changed these assignments from unconditional (:=) to
      conditional (?=) so that they wouldn't clobber values from the
      environment. However, conditional assignment does not work properly for
      variables that Make implicitly sets, among which are CC and CXX. To
      quote tools/scripts/Makefile.include, which handles this properly:
      
        # Makefiles suck: This macro sets a default value of $(2) for the
        # variable named by $(1), unless the variable has been set by
        # environment or command line. This is necessary for CC and AR
        # because make sets default values, so the simpler ?= approach
        # won't work as expected.
      
      In other words, the conditional assignments will not run even if the
      variables are not overridden in the environment; Make will set CC to
      "cc" and CXX to "g++" when it starts[1], meaning the variables are not
      empty by the time the conditional assignments are evaluated. This breaks
      cross-compilation when CROSS_COMPILE is set but CC isn't, since "cc"
      gets used for feature detection instead of the cross compiler (and
      likewise for CXX).
      
      To fix the issue, just pass down the values of CC and CXX computed by
      the parent Makefile, which gets included by the Makefile that actually
      builds whatever we're detecting features for and so is guaranteed to
      have good values. This is a better solution anyway, since it means we
      aren't trying to replicate the logic of the parent build system and so
      don't risk it getting out of sync.
      
      Leave PKG_CONFIG alone, since 1) there's no common logic to compute it
      in Makefile.include, and 2) it's not an implicit variable, so
      conditional assignment works properly.
      
      [1] https://www.gnu.org/software/make/manual/html_node/Implicit-Variables.html
      
      Fixes: c8c18867
      
       ("tools build: Use the same CC for feature detection and actual build")
      Signed-off-by: default avatarThomas Hebb <tommyhebb@gmail.com>
      Acked-by: default avatarJiri Olsa <jolsa@kernel.org>
      Cc: David Carrillo-Cisneros <davidcc@google.com>
      Cc: Ian Rogers <irogers@google.com>
      Cc: Igor Lubashev <ilubashe@akamai.com>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Quentin Monnet <quentin@isovalent.com>
      Cc: Song Liu <songliubraving@fb.com>
      Cc: Stephane Eranian <eranian@google.com>
      Cc: thomas hebb <tommyhebb@gmail.com>
      Link: http://lore.kernel.org/lkml/0a6e69d1736b0fa231a648f50b0cce5d8a6734ef.1595822871.git.tommyhebb@gmail.com
      
      Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      e3232c2f
  16. 29 May, 2020 1 commit
    • Arnaldo Carvalho de Melo's avatar
      perf build: Remove libaudit from the default feature checks · a88f70de
      Arnaldo Carvalho de Melo authored
      
      Ingo reported that the libaudit was always appearing as OFF:
      
        Auto-detecting system features:
        ...                         dwarf: [ on  ]
        ...            dwarf_getlocations: [ on  ]
        ...                         glibc: [ on  ]
        ...                          gtk2: [ on  ]
        ...                      libaudit: [ OFF ]
      
      And everything seemed to work, i.e. we were checking for a feature that
      we don't use, causing confusion for people building perf, so work to
      remove that nuisance while making sure that it works when an arch
      doesn't provide the alternative method to generate the syscall id/name
      conversion tables.
      
      Longer explanation of the new modus operandi:
      
        $ make -C tools/perf O=/tmp/build/perf NO_SYSCALL_TABLE=1
        <SNIP>
        Auto-detecting system features:
        ...                         dwarf: [ on  ]
        ...            dwarf_getlocations: [ on  ]
        ...                         glibc: [ on  ]
        ...                          gtk2: [ on  ]
        ...                        libbfd: [ on  ]
        ...                        libcap: [ on  ]
        ...                        libelf: [ on  ]
        ...                       libnuma: [ on  ]
        ...        numa_num_possible_cpus: [ on  ]
        ...                       libperl: [ on  ]
        ...                     libpython: [ on  ]
        ...                     libcrypto: [ on  ]
        ...                     libunwind: [ on  ]
        ...            libdw-dwarf-unwind: [ on  ]
        ...                          zlib: [ on  ]
        ...                          lzma: [ on  ]
        ...                     get_cpuid: [ on  ]
        ...                           bpf: [ on  ]
        ...                        libaio: [ on  ]
        ...                       libzstd: [ on  ]
        ...        disassembler-four-args: [ on  ]
      
        Makefile.config:665: No libaudit.h found, disables 'trace' tool, please install audit-libs-devel or libaudit-dev
          GEN      /tmp/build/perf/common-cmds.h
          MKDIR    /tmp/build/perf/fd/
          MKDIR    /tmp/build/perf/fs/
        <SNIP>
        $
      
      The libaudit test is forced and it fails when audit-libs-devel isn't available:
      
        $ cat /tmp/build/perf/feature/test-libaudit.make.output
        test-libaudit.c:2:10: fatal error: libaudit.h: No such file or directory
            2 | #include <libaudit.h>
              |          ^~~~~~~~~~~~
        compilation terminated.
        $
      
      If we install audit-libs-devel and rebuild it continues not to be shown as OFF
      in the main auto-detection summary, but again gets tested and this time:
      
        $ rpm -q audit-libs-devel
        audit-libs-devel-3.0-0.15.20191104git1c2f876.fc31.x86_64
        $
      
      The make output for the feature detection comes clean:
      
        $ cat /tmp/build/perf/feature/test-libaudit.make.output
      
      And the feature detection binary is successfully built and is dynamicly linked
      with libaudit:
      
        $ ldd /tmp/build/perf/feature/test-libaudit.bin | grep audit
        	libaudit.so.1 => /lib64/libaudit.so.1 (0x00007f5bf5177000)
        $
      
      As well as the resulting perf binary:
      
        $ ldd /tmp/build/perf/perf | grep audit
        	libaudit.so.1 => /lib64/libaudit.so.1 (0x00007fad511c7000)
        $
      
      And 'perf trace' works using the libaudit method:
      
        $ sudo /tmp/build/perf/perf trace -e nanosleep sleep 1
             0.000 (1000.067 ms): sleep/281872 nanosleep(rqtp: 0x7ffedbbe69d0) = 0
        $
      
      If we leave audit-libs-devel installed but don't disable the use of the best
      method, the one using SYSCALL_TABLE, the default for architectures that provide
      the script to build the syscall id/name mapping using the .tbl files copied
      from the kernel sources, we get:
      
        $ rm -rf /tmp/build/perf ; mkdir -p /tmp/build/perf
        $ make -C tools/perf O=/tmp/build/perf
        Auto-detecting system features:
        ...                         dwarf: [ on  ]
        ...            dwarf_getlocations: [ on  ]
        ...                         glibc: [ on  ]
        ...                          gtk2: [ on  ]
        ...                        libbfd: [ on  ]
        ...                        libcap: [ on  ]
        ...                        libelf: [ on  ]
        ...                       libnuma: [ on  ]
        ...        numa_num_possible_cpus: [ on  ]
        ...                       libperl: [ on  ]
        ...                     libpython: [ on  ]
        ...                     libcrypto: [ on  ]
        ...                     libunwind: [ on  ]
        ...            libdw-dwarf-unwind: [ on  ]
        ...                          zlib: [ on  ]
        ...                          lzma: [ on  ]
        ...                     get_cpuid: [ on  ]
        ...                           bpf: [ on  ]
        ...                        libaio: [ on  ]
        ...                       libzstd: [ on  ]
        ...        disassembler-four-args: [ on  ]
      
          GEN      /tmp/build/perf/common-cmds.h
        <SNIP>
        $
      
      Again, no mention of libaudit being on or OFF and:
      
        $ cat /tmp/build/perf/feature/test-libaudit.make.output
        cat: /tmp/build/perf/feature/test-libaudit.make.output: No such file or directory
        $
      
      We didn't even bother checking for its availability, slightly speeding up the
      build process and:
      
        $ ldd /tmp/build/perf/perf | grep libaudit
        $
      
      We don't link with it, also:
      
        $ sudo /tmp/build/perf/perf trace -e nanosleep sleep 1
             0.000 (1000.053 ms): sleep/299125 nanosleep(rqtp: 0x7ffc24611b50) = 0
        $
      
      And globs become available:
      
        $ sudo /tmp/build/perf/perf trace -e *sleep sleep 1
             0.000 (1000.072 ms): sleep/299136 nanosleep(rqtp: 0x7ffe7a3c4ff0) = 0
        $
      Reported-by: default avatarIngo Molnar <mingo@kernel.org>
      Cc: Adrian Hunter <adrian.hunter@intel.com>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      a88f70de
  17. 05 May, 2020 1 commit
    • Stephane Eranian's avatar
      tools feature: Add support for detecting libpfm4 · 5ef86146
      Stephane Eranian authored
      
      libpfm4 provides an alternate command line encoding of perf events.
      Signed-off-by: default avatarStephane Eranian <eranian@google.com>
      Reviewed-by: default avatarIan Rogers <irogers@google.com>
      Acked-by: default avatarJiri Olsa <jolsa@redhat.com>
      Cc: Adrian Hunter <adrian.hunter@intel.com>
      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: Alexei Starovoitov <ast@kernel.org>
      Cc: Alexey Budankov <alexey.budankov@linux.intel.com>
      Cc: Andi Kleen <ak@linux.intel.com>
      Cc: Andrii Nakryiko <andriin@fb.com>
      Cc: Daniel Borkmann <daniel@iogearbox.net>
      Cc: Florian Fainelli <f.fainelli@gmail.com>
      Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
      Cc: Igor Lubashev <ilubashe@akamai.com>
      Cc: Jin Yao <yao.jin@linux.intel.com>
      Cc: Jiwei Sun <jiwei.sun@windriver.com>
      Cc: John Garry <john.garry@huawei.com>
      Cc: Kan Liang <kan.liang@linux.intel.com>
      Cc: Leo Yan <leo.yan@linaro.org>
      Cc: Mark Rutland <mark.rutland@arm.com>
      Cc: Martin KaFai Lau <kafai@fb.com>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Thomas Gleixner <tglx@linutronix.de>
      Cc: Yonghong Song <yhs@fb.com>
      Cc: bpf@vger.kernel.org
      Cc: netdev@vger.kernel.org
      Cc: yuzhoujian <yuzhoujian@didichuxing.com>
      Link: http://lore.kernel.org/lkml/20200429231443.207201-3-irogers@google.com
      
      Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      5ef86146
  18. 03 Apr, 2020 1 commit
    • Namhyung Kim's avatar
      perf tools: Add file-handle feature test · 49f550ea
      Namhyung Kim authored
      
      The file handle (FHANDLE) support is configurable so some systems might not
      have it.  So add a config feature item to check it on build time so that we
      don't add the cgroup tracking feature based on that.
      
      Committer notes:
      
      Had to make the test use the same construct as its later use in
      synthetic-events.c, in the next patch in this series. i.e. make it be:
      
      	struct {
      		struct file_handle fh;
      		uint64_t cgroup_id;
      	} handle;
      
      To cope with:
      
          CC       /tmp/build/perf/util/cloexec.o
        util/synthetic-events.c:428:22: error: field 'fh' with   CC       /tmp/build/perf/util/call-path.o
        variable sized type 'struct file_handle' not at the end of a struct or class is a GNU
              extension [-Werror,-Wgnu-variable-sized-type-not-at-end]
                        struct file_handle fh;
                                           ^
        1 error generated.
      
      Deal with this at some point, i.e. investigate if the right thing is to
      remove that -Wgnu-variable-sized-type-not-at-end from our CFLAGS, for
      now do the test the same way as it is used looks more sensible.
      Reported-by: default avatarArnaldo Carvalho de Melo <acme@kernel.org>
      Signed-off-by: default avatarNamhyung Kim <namhyung@kernel.org>
      Tested-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: Jiri Olsa <jolsa@redhat.com>
      Cc: Mark Rutland <mark.rutland@arm.com>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Link: http://lore.kernel.org/lkml/20200402015249.3800462-1-namhyung@kernel.org
      
      
      [ split from a larger patch, removed blank line at EOF ]
      Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      49f550ea
  19. 26 Nov, 2019 1 commit
    • Jiri Olsa's avatar
      perf tools: Allow to link with libbpf dynamicaly · 7b65e203
      Jiri Olsa authored
      
      Currently we support only static linking with kernel's libbpf
      (tools/lib/bpf). This patch adds libbpf package detection and support to
      link perf with it dynamically.
      
      The libbpf package status is displayed with:
      
        $ make VF=1
        Auto-detecting system features:
        ...
        ...                        libbpf: [ on  ]
      
      It's not checked by default, because it's quite new.  Once it's on most
      distros we can switch it on.
      
      For the same reason it's not added to the test-all check.
      
      Perf does not need advanced version of libbpf, so we can check just for
      the base bpf_object__open function.
      
      Adding new compile variable to detect libbpf package and link bpf
      dynamically:
      
        $ make LIBBPF_DYNAMIC=1
          ...
          LINK     perf
        $ ldd perf | grep bpf
          libbpf.so.0 => /lib64/libbpf.so.0 (0x00007f46818bc000)
      
      If libbpf is not installed, build stops with:
      
        Makefile.config:486: *** Error: No libbpf devel library found,\
        please install libbpf-devel.  Stop.
      
      Committer testing:
      
        $ make LIBBPF_DYNAMIC=1 -C tools/perf O=/tmp/build/perf
        make: Entering directory '/home/acme/git/perf/tools/perf'
          BUILD:   Doing 'make -j8' parallel build
        Makefile.config:493: *** Error: No libbpf devel library found, please install libbpf-devel.  Stop.
        make[1]: *** [Makefile.perf:225: sub-make] Error 2
        make: *** [Makefile:70: all] Error 2
        make: Leaving directory '/home/acme/git/perf/tools/perf'
        $
      Signed-off-by: default avatarJiri Olsa <jolsa@kernel.org>
      Tested-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      Cc: Toke Høiland-Jørgensen <toke@redhat.com>
      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: Alexei Starovoitov <alexei.starovoitov@gmail.com>
      Cc: Andrii Nakryiko <andriin@fb.com>
      Cc: Daniel Borkmann <daniel@iogearbox.net>
      Cc: Jesper Dangaard Brouer <brouer@redhat.com>
      Cc: Martin KaFai Lau <kafai@fb.com>
      Cc: Michael Petlan <mpetlan@redhat.com>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Song Liu <songliubraving@fb.com>
      Cc: Yonghong Song <yhs@fb.com>
      Cc: bpf@vger.kernel.org
      Cc: netdev@vger.kernel.org
      Link: http://lore.kernel.org/lkml/20191126121253.28253-1-jolsa@kernel.org
      
      Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      7b65e203
  20. 12 Aug, 2019 1 commit
    • Igor Lubashev's avatar
      tools build: Add capability-related feature detection · 74d5f3d0
      Igor Lubashev authored
      
      Add utilities to help checking capabilities of the running procss.  Make
      perf link with libcap, if it is available. If no libcap-dev[el], assume
      no capabilities.
      
      Committer testing:
      
        $ make O=/tmp/build/perf -C tools/perf install-bin
        make: Entering directory '/home/acme/git/perf/tools/perf'
          BUILD:   Doing 'make -j8' parallel build
      
        Auto-detecting system features:
        <SNIP>
        ...                        libbfd: [ on  ]
        ...                        libcap: [ OFF ]
        ...                        libelf: [ on  ]
        <SNIP>
        Makefile.config:833: No libcap found, disables capability support, please install libcap-devel/libcap-dev
        <SNIP>
        $ grep libcap /tmp/build/perf/FEATURE-DUMP
        feature-libcap=0
        $ cat /tmp/build/perf/feature/test-libcap.make.output
        test-libcap.c:2:10: fatal error: sys/capability.h: No such file or directory
            2 | #include <sys/capability.h>
              |          ^~~~~~~~~~~~~~~~~~
        compilation terminated.
        $
      
      Now install libcap-devel and try again:
      
        $ make O=/tmp/build/perf -C tools/perf install-bin
        make: Entering directory '/home/acme/git/perf/tools/perf'
          BUILD:   Doing 'make -j8' parallel build
        Warning: Kernel ABI header at 'tools/include/linux/bits.h' differs from latest version at 'include/linux/bits.h'
        diff -u tools/include/linux/bits.h include/linux/bits.h
        Warning: Kernel ABI header at 'tools/arch/x86/include/asm/cpufeatures.h' differs from latest version at 'arch/x86/include/asm/cpufeatures.h'
        diff -u tools/arch/x86/include/asm/cpufeatures.h arch/x86/include/asm/cpufeatures.h
      
        Auto-detecting system features:
        <SNIP>
        ...                        libbfd: [ on  ]
        ...                        libcap: [ on  ]
        ...                        libelf: [ on  ]
        <SNIP>>
          CC       /tmp/build/perf/jvmti/libjvmti.o
        <SNIP>>
        $ grep libcap /tmp/build/perf/FEATURE-DUMP
        feature-libcap=1
        $ cat /tmp/build/perf/feature/test-libcap.make.output
        $ ldd /tmp/build/perf/feature/test-libcap.make.bin
        ldd: /tmp/build/perf/feature/test-libcap.make.bin: No such file or directory
        $ ldd /tmp/build/perf/feature/test-libcap.bin
        	linux-vdso.so.1 (0x00007ffc35bfe000)
        	libcap.so.2 => /lib64/libcap.so.2 (0x00007ff9c62ff000)
        	libc.so.6 => /lib64/libc.so.6 (0x00007ff9c6139000)
        	/lib64/ld-linux-x86-64.so.2 (0x00007ff9c6326000)
        $
      Signed-off-by: default avatarIgor Lubashev <ilubashe@akamai.com>
      Acked-by: default avatarJiri Olsa <jolsa@kernel.org>
      Tested-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: Alexey Budankov <alexey.budankov@linux.intel.com>
      Cc: James Morris <jmorris@namei.org>
      Cc: Mathieu Poirier <mathieu.poirier@linaro.org>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Suzuki Poulouse <suzuki.poulose@arm.com>
      [ split from a larger patch ]
      Link: http://lkml.kernel.org/r/8a1e76cf5c7c9796d0d4d240fbaa85305298aafa.1565188228.git.ilubashe@akamai.com
      
      Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      74d5f3d0
  21. 07 Jul, 2019 1 commit
    • Arnaldo Carvalho de Melo's avatar
      tools build: Check if gettid() is available before providing helper · 05c78468
      Arnaldo Carvalho de Melo authored
      
      Laura reported that the perf build failed in fedora when we got a glibc
      that provides gettid(), which I reproduced using fedora rawhide with the
      glibc-devel-2.29.9000-26.fc31.x86_64 package.
      
      Add a feature check to avoid providing a gettid() helper in such
      systems.
      
      On a fedora rawhide system with this patch applied we now get:
      
        [root@7a5f55352234 perf]# grep gettid /tmp/build/perf/FEATURE-DUMP
        feature-gettid=1
        [root@7a5f55352234 perf]# cat /tmp/build/perf/feature/test-gettid.make.output
        [root@7a5f55352234 perf]# ldd /tmp/build/perf/feature/test-gettid.bin
                linux-vdso.so.1 (0x00007ffc6b1f6000)
                libc.so.6 => /lib64/libc.so.6 (0x00007f04e0a74000)
                /lib64/ld-linux-x86-64.so.2 (0x00007f04e0c47000)
        [root@7a5f55352234 perf]# nm /tmp/build/perf/feature/test-gettid.bin | grep -w gettid
                         U gettid@@GLIBC_2.30
        [root@7a5f55352234 perf]#
      
      While on a fedora:29 system:
      
        [acme@quaco perf]$ grep gettid /tmp/build/perf/FEATURE-DUMP
        feature-gettid=0
        [acme@quaco perf]$ cat /tmp/build/perf/feature/test-gettid.make.output
        test-gettid.c: In function ‘main’:
        test-gettid.c:8:9: error: implicit declaration of function ‘gettid’; did you mean ‘getgid’? [-Werror=implicit-function-declaration]
          return gettid();
                 ^~~~~~
                 getgid
        cc1: all warnings being treated as errors
        [acme@quaco perf]$
      Reported-by: default avatarLaura Abbott <labbott@redhat.com>
      Tested-by: default avatarLaura Abbott <labbott@redhat.com>
      Acked-by: default avatarJiri Olsa <jolsa@kernel.org>
      Cc: Adrian Hunter <adrian.hunter@intel.com>
      Cc: Florian Weimer <fweimer@redhat.com>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Stephane Eranian <eranian@google.com>
      Link: https://lkml.kernel.org/n/tip-yfy3ch53agmklwu9o7rlgf9c@git.kernel.org
      
      Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      05c78468
  22. 18 Jun, 2019 1 commit
    • Arnaldo Carvalho de Melo's avatar
      tools build: Add test to check if slang.h is in /usr/include/slang/ · cbefd24f
      Arnaldo Carvalho de Melo authored
      A few odd old distros (rhel5, 6, yeah, lots of those out in use, in many
      cases we want to use upstream perf on it) have the slang header files in
      /usr/include/slang/, so add a test that will be performed only when
      test-all.c (the one with the most common sane settings) fails, either
      because we're in one of these odd distros with slang/slang.h or because
      something else failed (say libelf is not present).
      
      So for the common case nothing changes, no additional test is performed.
      
      Next step is to check in perf the result of these tests.
      
      Cc: Adrian Hunter <adrian.hunter@intel.com>
      Cc: Florian Fainelli <f.fainelli@gmail.com>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Fixes: 1955c8cf ("perf tools: Don't hardcode host include path for libslang")
      Link: https://lkml.kernel.org/n/tip-2sy7hbwkx68jr6n97qxgg0c6@git.kernel.org
      
      Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      cbefd24f
  23. 17 Jun, 2019 1 commit
    • Arnaldo Carvalho de Melo's avatar
      tools build: Check if gettid() is available before providing helper · 4541a8bb
      Arnaldo Carvalho de Melo authored
      
      Laura reported that the perf build failed in fedora when we got a glibc
      that provides gettid(), which I reproduced using fedora rawhide with the
      glibc-devel-2.29.9000-26.fc31.x86_64 package.
      
      Add a feature check to avoid providing a gettid() helper in such
      systems.
      
      On a fedora rawhide system with this patch applied we now get:
      
        [root@7a5f55352234 perf]# grep gettid /tmp/build/perf/FEATURE-DUMP
        feature-gettid=1
        [root@7a5f55352234 perf]# cat /tmp/build/perf/feature/test-gettid.make.output
        [root@7a5f55352234 perf]# ldd /tmp/build/perf/feature/test-gettid.bin
                linux-vdso.so.1 (0x00007ffc6b1f6000)
                libc.so.6 => /lib64/libc.so.6 (0x00007f04e0a74000)
                /lib64/ld-linux-x86-64.so.2 (0x00007f04e0c47000)
        [root@7a5f55352234 perf]# nm /tmp/build/perf/feature/test-gettid.bin | grep -w gettid
                         U gettid@@GLIBC_2.30
        [root@7a5f55352234 perf]#
      
      While on a fedora:29 system:
      
        [acme@quaco perf]$ grep gettid /tmp/build/perf/FEATURE-DUMP
        feature-gettid=0
        [acme@quaco perf]$ cat /tmp/build/perf/feature/test-gettid.make.output
        test-gettid.c: In function ‘main’:
        test-gettid.c:8:9: error: implicit declaration of function ‘gettid’; did you mean ‘getgid’? [-Werror=implicit-function-declaration]
          return gettid();
                 ^~~~~~
                 getgid
        cc1: all warnings being treated as errors
        [acme@quaco perf]$
      Reported-by: default avatarLaura Abbott <labbott@redhat.com>
      Tested-by: default avatarLaura Abbott <labbott@redhat.com>
      Acked-by: default avatarJiri Olsa <jolsa@kernel.org>
      Cc: Adrian Hunter <adrian.hunter@intel.com>
      Cc: Florian Weimer <fweimer@redhat.com>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Stephane Eranian <eranian@google.com>
      Link: https://lkml.kernel.org/n/tip-yfy3ch53agmklwu9o7rlgf9c@git.kernel.org
      
      Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      4541a8bb
  24. 21 May, 2019 1 commit
  25. 01 Apr, 2019 1 commit
  26. 20 Mar, 2019 1 commit
    • Song Liu's avatar
      perf build: Check what binutils's 'disassembler()' signature to use · 8a1b1718
      Song Liu authored
      Commit 003ca0fd2286 ("Refactor disassembler selection") in the binutils
      repo, which changed the disassembler() function signature, so we must
      use the feature test introduced in fb982666
      
       ("tools/bpftool: fix
      bpftool build with bintutils >= 2.9") to deal with that.
      
      Committer testing:
      
      After adding the missing function call to test-all.c, and:
      
        FEATURE_CHECK_LDFLAGS-disassembler-four-args = -bfd -lopcodes
      
      And the fallbacks for cases where we need -liberty and sometimes -lz to
      tools/perf/Makefile.config, we get:
      
        $ make -C tools/perf O=/tmp/build/perf install-bin
        make: Entering directory '/home/acme/git/perf/tools/perf'
          BUILD:   Doing 'make -j8' parallel build
      
        Auto-detecting system features:
        ...                         dwarf: [ on  ]
        ...            dwarf_getlocations: [ on  ]
        ...                         glibc: [ on  ]
        ...                          gtk2: [ on  ]
        ...                      libaudit: [ on  ]
        ...                        libbfd: [ on  ]
        ...                        libelf: [ on  ]
        ...                       libnuma: [ on  ]
        ...        numa_num_possible_cpus: [ on  ]
        ...                       libperl: [ on  ]
        ...                     libpython: [ on  ]
        ...                      libslang: [ on  ]
        ...                     libcrypto: [ on  ]
        ...                     libunwind: [ on  ]
        ...            libdw-dwarf-unwind: [ on  ]
        ...                          zlib: [ on  ]
        ...                          lzma: [ on  ]
        ...                     get_cpuid: [ on  ]
        ...                           bpf: [ on  ]
        ...                        libaio: [ on  ]
        ...        disassembler-four-args: [ on  ]
          CC       /tmp/build/perf/jvmti/libjvmti.o
          CC       /tmp/build/perf/builtin-bench.o
        <SNIP>
        $
        $
      
      The feature detection test-all.bin gets successfully built and linked:
      
        $ ls -la /tmp/build/perf/feature/test-all.bin
        -rwxrwxr-x. 1 acme acme 2680352 Mar 19 11:07 /tmp/build/perf/feature/test-all.bin
        $ nm /tmp/build/perf/feature/test-all.bin  | grep -w disassembler
        0000000000061f90 T disassembler
        $
      
      Time to move on to the patches that make use of this disassembler()
      routine in binutils's libopcodes.
      Signed-off-by: default avatarSong Liu <songliubraving@fb.com>
      Tested-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      Cc: Alexei Starovoitov <ast@kernel.org>
      Cc: Daniel Borkmann <daniel@iogearbox.net>
      Cc: Jakub Kicinski <jakub.kicinski@netronome.com>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Roman Gushchin <guro@fb.com>
      Cc: Stanislav Fomichev <sdf@google.com>
      Link: http://lkml.kernel.org/r/20190312053051.2690567-13-songliubraving@fb.com
      
      
      [ split from a larger patch, added missing FEATURE_CHECK_LDFLAGS-disassembler-four-args ]
      Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      8a1b1718
  27. 14 Feb, 2019 2 commits
    • Arnaldo Carvalho de Melo's avatar
      perf unwind: Do not put libunwind-{x86,aarch64} in FEATURE_TESTS_BASIC · 5c4d7c82
      Arnaldo Carvalho de Melo authored
      As it is not normally available on x86_64 not being tested on test-all.c
      but being in FEATURE_TESTS_BASIC ends up implying that those features
      are present, which leads to trying to link with those libraries and a
      build failure now that test-all.c is finally again building
      successfully:
      
        /usr/bin/ld: cannot find -lunwind-x86
        /usr/bin/ld: cannot find -lunwind-aarch64
        collect2: error: ld returned 1 exit status
        make[3]: *** [Makefile:199: /tmp/build/perf/plugin_jbd2.so] Error 1
        make[3]: *** Waiting for unfinished jobs....
        /usr/bin/ld: cannot find -lunwind-x86
        /usr/bin/ld: cannot find -lunwind-aarch64
      
      So remove those features from there and explicitely test them.
      
      And then move this patch to just before the last one that allows this to
      be exposed, so that we keep the tree bisectable.
      
      With all this in place we get, at this point:
      
        $ ldd /tmp/build/perf/feature/test-libunwind.bin
      	linux-vdso.so.1 (0x00007fffa09c6000)
      	libunwind-x86_64.so.8 => /lib64/libunwind-x86_64.so.8 (0x00007fbcf4451000)
      	libunwind.so.8 => /lib64/libunwind.so.8 (0x00007fbcf4435000)
      	liblzma.so.5 => /lib64/liblzma.so.5 (0x00007fbcf440c000)
      	libelf.so.1 => /lib64/libelf.so.1 (0x00007fbcf43f2000)
      	libc.so.6 => /lib64/libc.so.6 (0x00007fbcf422c000)
      	libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007fbcf4211000)
      	/lib64/ld-linux-x86-64.so.2 (0x00007fbcf4491000)
      	libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fbcf41ed000)
      	libz.so.1 => /lib64/libz.so.1 (0x00007fbcf41d3000)
        $ cat /tmp/build/perf/feature/test-libunwind-x86.make.output
        test-libunwind-x86.c:2:10: fatal error: libunwind-x86.h: No such file or directory
         #include <libunwind-x86.h>
                  ^~~~~~~~~~~~~~~~~
        compilation terminated.
        $ cat /tmp/build/perf/feature/test-libunwind-aarch64.make.output
        test-libunwind-aarch64.c:2:10: fatal error: libunwind-aarch64.h: No such file or directory
        #include <libunwind-aarch64.h>
                 ^~~~~~~~~~~~~~~~~~~~~
        compilation terminated.
        $
        $ ldd ~/bin/perf | grep unwind
      	libunwind-x86_64.so.8 => /lib64/libunwind-x86_64.so.8 (0x00007f5ceb24b000)
      	libunwind.so.8 => /lib64/libunwind.so.8 (0x00007f5ceb22f000)
        $
      
      Cc: Adrian Hunter <adrian.hunter@intel.com>
      Cc: He Kuang <hekuang@huawei.com>
      Cc: Jean Pihet <jean.pihet@linaro.org>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Wang Nan <wangnan0@huawei.com>
      Cc: Will Deacon <will.deacon@arm.com>
      Link: https://lkml.kernel.org/n/tip-vs6kwqsvwk7oxhs6z9mq87pp@git.kernel.org
      
      Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      5c4d7c82
    • Arnaldo Carvalho de Melo's avatar
      perf coresight: Do not test for libopencsd by default · 1c3b28fd
      Arnaldo Carvalho de Melo authored
      Since it is not yet that generally available, avoid testing for the
      presence of libcoresight in the fast path test-all.bin feature test.
      
        # dnf search opencsd
        No matches found.
        # dnf search OpenCSD
        No matches found.
        # cat /etc/fedora-release
        Fedora release 29 (Twenty Nine)
        #
      
      I.e. right now, in my system test-all.bin is failing all the time since
      Fedora29 doesn't have libopencsd available:
      
        $ cat /tmp/build/perf/feature/test-all.make.output
        In file included from test-all.c:174:
        test-libopencsd.c:2:10: fatal error: opencsd/c_api/opencsd_c_api.h: No such file or directory
         #include <opencsd/c_api/opencsd_c_api.h>
                  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        compilation terminated.
      
      See:
      
        6ab2b762 ("perf build: Disable libbabeltrace check by default")
      
      For the rationale, as soon as libopencsd becomes more generally packaged
      and available, we do the same thing we did with babeltrace, enabling it
      by default, as done in:
      
        24787afb ("perf tools: Enable LIBBABELTRACE by default")
      
      For now, to explicitely ask for opencsd, make sure you have it installed
      and use:
      
         make -C tools/perf CORESIGHT=1
      
      The feature test output will be there as an empty file:
      
        $ ls -la /tmp/build/perf/feature/test-libopencsd.make.output
      
      Because the binary used for the feature check was successfully built:
      
        $ ls -la /tmp/build/perf/feature/test-libopencsd.bin
        -rwxrwxr-x. 1 acme acme 18336 Feb 12 14:49 /tmp/build/perf/feature/test-libopencsd.bin
        $ ldd /tmp/build/perf/feature/test-libopencsd.bin
      	linux-vdso.so.1 (0x00007fffe18cc000)
      	libopencsd_c_api.so.0 => /lib64/libopencsd_c_api.so.0 (0x00007fb8e67f6000)
      	libopencsd.so.0 => /lib64/libopencsd.so.0 (0x00007fb8e676f000)
      	libc.so.6 => /lib64/libc.so.6 (0x00007fb8e65a9000)
      	libstdc++.so.6 => /lib64/libstdc++.so.6 (0x00007fb8e6411000)
      	libm.so.6 => /lib64/libm.so.6 (0x00007fb8e628d000)
      	libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007fb8e6272000)
      	/lib64/ld-linux-x86-64.so.2 (0x00007fb8e6828000)
        $
      
      And the resulting perf binary will be linked with it:
      
        -rw-rw-r--. 1 acme acme 0 Feb 12 14:49 /tmp/build/perf/feature/test-libopencsd.make.output
        $ ldd ~/bin/perf | grep opencsd
      	libopencsd_c_api.so.0 => /lib64/libopencsd_c_api.so.0 (0x00007fd43097f000)
      	libopencsd.so.0 => /lib64/libopencsd.so.0 (0x00007fd4308f8000)
        $
      
      To make sure this gets built before pushing things upstream I have a
      ubuntu:19.04-x-arm64 container that has:
      
        [root@quaco x-arm64]# grep CORESIGHT Dockerfile
        ENV EXTRA_MAKE_ARGS=CORESIGHT=1
        [root@quaco x-arm64]#
      
      So that I always build with libopencsd before pushing things upstream.
      
      Cc: Adrian Hunter <adrian.hunter@intel.com>
      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: Kim Phillips <kim.phillips@arm.com>
      Cc: linux-arm-kernel@lists.infradead.org
      Cc: Mathieu Poirier <mathieu.poirier@linaro.org>
      Cc: Mike Leach <mike.leach@arm.com>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Suzuki Poulouse <suzuki.poulose@arm.com>
      Link: https://lkml.kernel.org/n/tip-20vyy39jw9jgrijesi30fgox@git.kernel.org
      
      Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      1c3b28fd
  28. 21 Dec, 2018 1 commit
    • Stanislav Fomichev's avatar
      perf build: Don't unconditionally link the libbfd feature test to -liberty and -lz · 14541b1e
      Stanislav Fomichev authored
      Current libbfd feature test unconditionally links against -liberty and -lz.
      While it's required on some systems (e.g. opensuse), it's completely
      unnecessary on the others, where only -lbdf is sufficient (debian).
      This patch streamlines (and renames) the following feature checks:
      
      feature-libbfd           - only link against -lbfd (debian),
                                 see commit 2cf90407 ("perf tools: Fix bfd
      			   dependency libraries detection")
      feature-libbfd-liberty   - link against -lbfd and -liberty
      feature-libbfd-liberty-z - link against -lbfd, -liberty and -lz (opensuse),
                                 see commit 280e7c48
      
       ("perf tools: fix BFD
      			   detection on opensuse")
      
      (feature-liberty{,-z} were renamed to feature-libbfd-liberty{,z}
      for clarity)
      
      The main motivation is to fix this feature test for bpftool which is
      currently broken on debian (libbfd feature shows OFF, but we still
      unconditionally link against -lbfd and it works).
      
      Tested on debian with only -lbfd installed (without -liberty); I'd
      appreciate if somebody on the other systems can test this new detection
      method.
      Signed-off-by: default avatarStanislav Fomichev <sdf@google.com>
      Acked-by: default avatarJiri Olsa <jolsa@kernel.org>
      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: Mathieu Poirier <mathieu.poirier@linaro.org>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Link: http://lkml.kernel.org/r/4dfc634cfcfb236883971b5107cf3c28ec8a31be.1542328222.git.sdf@google.com
      
      Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      14541b1e
  29. 17 Dec, 2018 1 commit
    • Alexey Budankov's avatar
      tools build feature: Check if libaio is available · 2a07d814
      Alexey Budankov authored
      
      This will be used by 'perf record' to speed up reading the perf ring
      buffer.
      
      Committer testing:
      
        $ make -C tools/perf O=/tmp/build/perf
        make: Entering directory '/home/acme/git/perf/tools/perf'
          BUILD:   Doing 'make -j8' parallel build
      
        Auto-detecting system features:
        ...                         dwarf: [ on  ]
        ...            dwarf_getlocations: [ on  ]
        ...                         glibc: [ on  ]
        ...                          gtk2: [ OFF ]
        ...                      libaudit: [ OFF ]
        ...                        libbfd: [ OFF ]
        ...                        libelf: [ on  ]
        ...                       libnuma: [ OFF ]
        ...        numa_num_possible_cpus: [ OFF ]
        ...                       libperl: [ OFF ]
        ...                     libpython: [ OFF ]
        ...                      libslang: [ on  ]
        ...                     libcrypto: [ on  ]
        ...                     libunwind: [ on  ]
        ...            libdw-dwarf-unwind: [ on  ]
        ...                          zlib: [ on  ]
        ...                          lzma: [ on  ]
        ...                     get_cpuid: [ on  ]
        ...                           bpf: [ on  ]
        ...                        libaio: [ on  ]
      
        $ ls -la /tmp/build/perf/feature/test-libaio.*
        -rwxrwxr-x. 1 acme acme 18296 Nov 26 08:49 /tmp/build/perf/feature/test-libaio.bin
        -rw-rw-r--. 1 acme acme  1165 Nov 26 08:49 /tmp/build/perf/feature/test-libaio.d
        -rw-rw-r--. 1 acme acme     0 Nov 26 08:49 /tmp/build/perf/feature/test-libaio.make.output
        $
        $ grep -i aio /tmp/build/perf/FEATURE-DUMP
        feature-libaio=1
        $
      Signed-off-by: default avatarAlexey Budankov <alexey.budankov@linux.intel.com>
      Tested-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      Reviewed-by: default avatarJiri Olsa <jolsa@redhat.com>
      Acked-by: default avatarNamhyung Kim <namhyung@kernel.org>
      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: Andi Kleen <ak@linux.intel.com>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Link: http://lkml.kernel.org/r/5fcda10c-6c63-68df-383a-c6d9e5d1f918@linux.intel.com
      
      
      [ split from a larger patch ]
      Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      2a07d814
  30. 22 Nov, 2018 1 commit
    • Arnaldo Carvalho de Melo's avatar
      tools build feature: Check if eventfd() is available · 11c6cbe7
      Arnaldo Carvalho de Melo authored
      A new 'perf bench epoll' will use this, and to disable it for older
      systems, add a feature test for this API.
      
      This is just a simple program that if successfully compiled, means that
      the feature is present, at least at the library level, in a build that
      sets the output directory to /tmp/build/perf (using O=/tmp/build/perf),
      we end up with:
      
        $ ls -la /tmp/build/perf/feature/test-eventfd*
        -rwxrwxr-x. 1 acme acme 8176 Nov 21 15:58 /tmp/build/perf/feature/test-eventfd.bin
        -rw-rw-r--. 1 acme acme  588 Nov 21 15:58 /tmp/build/perf/feature/test-eventfd.d
        -rw-rw-r--. 1 acme acme    0 Nov 21 15:58 /tmp/build/perf/feature/test-eventfd.make.output
        $ ldd /tmp/build/perf/feature/test-eventfd.bin
      	  linux-vdso.so.1 (0x00007fff3bf3f000)
      	  libc.so.6 => /lib64/libc.so.6 (0x00007fa984061000)
      	  /lib64/ld-linux-x86-64.so.2 (0x00007fa984417000)
        $ grep eventfd -A 2 -B 2 /tmp/build/perf/FEATURE-DUMP
        feature-dwarf=1
        feature-dwarf_getlocations=1
        feature-eventfd=1
        feature-fortify-source=1
        feature-sync-compare-and-swap=1
        $
      
      The main thing here is that in the end we'll have -DHAVE_EVENTFD in
      CFLAGS, and then the 'perf bench' entry needing that API can be
      selectively pruned.
      
      Cc: Adrian Hunter <adrian.hunter@intel.com>
      Cc: Andrew Morton <akpm@linux-foundation.org>
      Cc: David Ahern <dsahern@gmail.com>
      Cc: Davidlohr Bueso <dbueso@suse.de>
      Cc: Jason Baron <jbaron@akamai.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-wkeldwob7dpx6jvtuzl8164k@git.kernel.org
      
      Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      11c6cbe7
  31. 19 Nov, 2018 1 commit