Received: by 2002:a05:7412:f690:b0:e2:908c:2ebd with SMTP id ej16csp582522rdb; Thu, 19 Oct 2023 12:46:33 -0700 (PDT) X-Google-Smtp-Source: AGHT+IHec6pYUeaSiavU2AfloDSn3ZHicAlGmVX4F9D6ecltJs8mia2/mgYl6EOpQbv0Al61BokT X-Received: by 2002:a05:6870:469f:b0:1e9:dae7:f58a with SMTP id a31-20020a056870469f00b001e9dae7f58amr3499633oap.22.1697744792819; Thu, 19 Oct 2023 12:46:32 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1697744792; cv=none; d=google.com; s=arc-20160816; b=RI+GgCKhIOPMe14RnZoJ6J0oR1r/8AjT+p8HPOImfAHjaUWXF4b3ceB+BfR55zOjcx DU1NBaYs5SYtqYH6s9V7ptuFK/6suBKb7PN2NHWM5f6/3S4wvmWFEl9wR/jw3tZDhRjd MXeKJIaxlZqIeBGY/oHe1c7Vc30B+BhKdEbTyOUTIva9fqn1pVoqGkZ+7nSh+Y8WNacg v3RwpSjOp5+zI1/ALgepkNkBknxl5E2GYKJIImUWN3WtMEezO55g8RjVD/5meBDm6uYa O9btOo9MOBCG2lKHDUnr9MCmoWNyYLmDp7C4nBdsg9lmrfSodkwHzUK73BQZ1cq9sbIq mopw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:in-reply-to:content-transfer-encoding :content-disposition:mime-version:references:message-id:subject:cc :to:from:date:dkim-signature; bh=Ks6faZ64etx3+TRd9Rpm17zzeqbhwatyU51w+Proau0=; fh=vGyL3sU+HqNbr7RuJtfm4v8bkhEv/TsnqQN2GheqvKg=; b=tv6KIDHyaSAf+SYKfmd17q27vgMLT6HXOPOUrBDFSfMwJQJkofv+iXG6OP82m8F6bq AfhTMQ/Ty+FVBfOeB97f57XPlIemT45mzYV3SBZoMjMH0DKvNGn6XOQITiSfgHjDzcKN XQvblrn2oCPyK+kpjvhzkiwwEsZ7HzFLhROXCL6PAkg3aBB5iTSvKTXGqqk5WxbqzkxT 2QRLAV9xrzM9IY/5v83RYQ1jJTK2tf1R4WPVJjjZDiJgouBU0OgPEwWB+ihopKZ099OU 72EElj+Y4iY1yXraagLYQjr7OTAYqFToM8R17ndowmnH2mbUJfO+iXddhBPEShFxJ39h tAUQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20230601 header.b=XZxN7EKb; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:7 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from snail.vger.email (snail.vger.email. [2620:137:e000::3:7]) by mx.google.com with ESMTPS id j63-20020a638042000000b005aa4888b9bfsi266202pgd.629.2023.10.19.12.46.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 19 Oct 2023 12:46:32 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:7 as permitted sender) client-ip=2620:137:e000::3:7; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20230601 header.b=XZxN7EKb; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:7 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by snail.vger.email (Postfix) with ESMTP id 82D0F809220B; Thu, 19 Oct 2023 12:45:47 -0700 (PDT) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.10 at snail.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1346462AbjJSTpg (ORCPT + 99 others); Thu, 19 Oct 2023 15:45:36 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:38388 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1346457AbjJSTpe (ORCPT ); Thu, 19 Oct 2023 15:45:34 -0400 Received: from mail-pf1-x42d.google.com (mail-pf1-x42d.google.com [IPv6:2607:f8b0:4864:20::42d]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id A8199FA; Thu, 19 Oct 2023 12:45:29 -0700 (PDT) Received: by mail-pf1-x42d.google.com with SMTP id d2e1a72fcca58-6b709048f32so109728b3a.0; Thu, 19 Oct 2023 12:45:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1697744729; x=1698349529; darn=vger.kernel.org; h=in-reply-to:content-transfer-encoding:content-disposition :mime-version:references:message-id:subject:cc:to:from:date:from:to :cc:subject:date:message-id:reply-to; bh=Ks6faZ64etx3+TRd9Rpm17zzeqbhwatyU51w+Proau0=; b=XZxN7EKbau0PS3Jcc3N1VhsAlCex7MRiQNNxuS8L0U48u4hk/RqgEVOQ6CT5s1U349 Cpmd7iHR4s0cXfBgPI3V4Zaixfif249zJ7flBhK9l5a+Y6lMVLaycrQqLHm/nT3oBcmj dePYCh8JQ2eMqrK45i/+fMH9vqDWPhlaxvTrylM0s1ZaKlhnM3Ntse1LgRA5+g1XjhY9 nVxfGa7VaD8EprLExQ9GpjiJLl8o0zEzHLyioem4RFGWQbP6pmwmYPSiFwmwV3+aGGvA o3vVmynPW7FOqegKp9eWN1ar4Psqch5TMVRtAYHfDU/ZodPb6/sznWDRuuJj3YjG4jkb yMjQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1697744729; x=1698349529; h=in-reply-to:content-transfer-encoding:content-disposition :mime-version:references:message-id:subject:cc:to:from:date :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=Ks6faZ64etx3+TRd9Rpm17zzeqbhwatyU51w+Proau0=; b=SPbdyO1mXRR061gqb6R7n7z3D8dBq4azbfl6KbRUZj84y2rR8oXONXowkpZKCg45FG Ps+VPzrMKg/deTjdAag7IlxRevitohIrASH0VXHDYp+3Y844nER+6lrF7FqEn4k35N2f IDedD6JRe74dQPnLngqREDMbr+yZLxsz1Zs9OFBtK9fOC7GgpZZmG8+23SNR1HRKnEby Ru1XhHAT6TB48vlXbDOSrvQMDR8IYwHNSmK5WdRnb8hl/jfXSRSgzLOEJEF1AdxryOWv Lw8u2EJ+A+pMS7omYqVOIXvFHYYT9uxKWDebgYqb/NTrUj50WkSpPliExxWkjqWPoUBx 3u/A== X-Gm-Message-State: AOJu0YxEAtN7n81igvTYy3gkDKZX8i1i6vhim4iSnqpSwonH58vBQtBs fn0r6W0LGGa0FDJs4vYSLB4= X-Received: by 2002:aa7:88d0:0:b0:6b1:bf32:4fc3 with SMTP id k16-20020aa788d0000000b006b1bf324fc3mr3049645pff.19.1697744728718; Thu, 19 Oct 2023 12:45:28 -0700 (PDT) Received: from surya ([2600:1700:3ec2:2011:b14a:c750:3938:f592]) by smtp.gmail.com with ESMTPSA id gu15-20020a056a004e4f00b0068620bee456sm156090pfb.209.2023.10.19.12.45.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 19 Oct 2023 12:45:28 -0700 (PDT) Date: Thu, 19 Oct 2023 12:45:08 -0700 From: Manu Bretelle To: Arnaldo Carvalho de Melo Cc: Ian Rogers , Peter Zijlstra , Ingo Molnar , Mark Rutland , Alexander Shishkin , Jiri Olsa , Namhyung Kim , Adrian Hunter , Nathan Chancellor , Nick Desaulniers , Tom Rix , Fangrui Song , Anshuman Khandual , Andi Kleen , Leo Yan , Madhavan Srinivasan , Carsten Haitzler , Ravi Bangoria , "Naveen N. Rao" , Athira Rajeev , Kan Liang , Yang Jihong , James Clark , Tiezhu Yang , Eduard Zingerman , Andrii Nakryiko , Yonghong Song , Rob Herring , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org, bpf@vger.kernel.org, llvm@lists.linux.dev, Wang Nan , Wang ShaoBo , YueHaibing , He Kuang , Brendan Gregg , Quentin Monnet Subject: Re: [PATCH v1 1/4] perf parse-events: Remove BPF event support Message-ID: References: <20230810184853.2860737-1-irogers@google.com> <20230810184853.2860737-2-irogers@google.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: X-Spam-Status: No, score=-0.8 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_ENVFROM_END_DIGIT, FREEMAIL_FROM,FREEMAIL_REPLY,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS, URIBL_BLOCKED autolearn=no autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (snail.vger.email [0.0.0.0]); Thu, 19 Oct 2023 12:45:47 -0700 (PDT) cc @quentin On Fri, Aug 11, 2023 at 12:41:36PM -0300, Arnaldo Carvalho de Melo wrote: > Em Fri, Aug 11, 2023 at 11:43:22AM -0300, Arnaldo Carvalho de Melo escreveu: > > Right now it is not applying due to some clash with other changes and > > when I tried to apply it manually there were some formatting issues: > > > > ⬢[acme@toolbox perf-tools-next]$ head ~/wb/1.patch > > From SRS0=EALy=D3=flex--irogers.bounces.google.com=3IDHVZAcKBAUnwtljwxlttlqj.htrfhrjpjwsjq.twl@kernel.org Thu Aug 10 17:53:46 2023 > > Delivered-To: arnaldo.melo@gmail.com > > Received: from imap.gmail.com [64.233.186.109] > > by quaco with IMAP (fetchmail-6.4.37) > > for (single-drop); Thu, 10 Aug 2023 17:53:46 -0300 (-03) > > Received: by 2002:a0c:ab03:0:b0:63d:780e:9480 with SMTP id h3csp908198qvb; > > Thu, 10 Aug 2023 11:49:52 -0700 (PDT) > > X-Google-Smtp-Source: AGHT+IH9N/knUCyQ0tQ2Q0XBH0gqf8A8DB8/37YHWAJDKBmz7AGSV9CvCKYDuE3EwxriZFBwtZMs > > X-Received: by 2002:a4a:6b4f:0:b0:56c:b2ab:9820 with SMTP id > > h15-20020a4a6b4f000000b0056cb2ab9820mr2695332oof.8.1691693392493; Thu, 10 Aug > > ⬢[acme@toolbox perf-tools-next]$ patch -p1 < ~/wb/1.patch > > patching file tools/perf/Documentation/perf-config.txt > > patch: **** malformed patch at line 234: ith > > > > ⬢[acme@toolbox perf-tools-next]$ > > > > I'm trying to apply it manually. > > I have this extracted from this patch as the first patch in the series: > > >From adc61b5774a9de62f34d593f164ca02daa6fb44c Mon Sep 17 00:00:00 2001 > From: Ian Rogers > Date: Fri, 11 Aug 2023 12:19:48 -0300 > Subject: [PATCH 1/1] perf bpf: Remove support for embedding clang for > compiling BPF events (-e foo.c) > > This never was in the default build for perf, is difficult to maintain > as it uses clang/llvm internals so ditch it, keeping, for now, the > external compilation of .c BPF into .o bytecode and its subsequent > loading, that is also going to be removed, do it separately to help > bisection and to properly document what is being removed and why. > > Committer notes: > > Extracted from a larger patch and removed some leftovers, namely > deleting these now unused feature tests: > > tools/build/feature/test-clang.cpp > tools/build/feature/test-cxx.cpp > tools/build/feature/test-llvm-version.cpp > tools/build/feature/test-llvm.cpp > This seem to have broken `llvm` feature detection for `bpftool`. The feature detections are still available in `tools/build/Makefile.feature` [0] but the .cpp files are gone. `bpftool` still rely on the `llvm` feature: $ git --no-pager grep 'feature-llvm' tools/bpf/bpftool/Makefile:ifeq ($(feature-llvm),1) The result of testing llvm feature is: $ cat tools/build/feature/test-llvm.make.output cc1plus: fatal error: test-llvm.cpp: No such file or directory compilation terminated. With current head: make -j $((4*$(nproc))) -C tools/bpf/bpftool && ./tools/bpf/bpftool/bpftool --version ... Auto-detecting system features: ... clang-bpf-co-re: [ on ] ... llvm: [ OFF ] ... libcap: [ on ] ... libbfd: [ on ] ... ... ... bpftool v7.3.0 using libbpf v1.3 features: libbfd, skeletons After applying git show 56b11a2126bf2f422831ecf6112b87a4485b221b tools/build/feature | \ patch -p1 -R The feature gets properly detected again by: make -j $((4*$(nproc))) -C tools/bpf/bpftool && ./tools/bpf/bpftool/bpftool --version ... Auto-detecting system features: ... clang-bpf-co-re: [ on ] ... llvm: [ on ] ... libcap: [ on ] ... libbfd: [ on ] ... ... bpftool v7.3.0 using libbpf v1.3 features: llvm, skeletons make -C tools/bpf/bpftool [0] https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/tools/build/Makefile.feature?id=74e9347ebc5be452935fe4f3eddb150aa5a6f4fe#n99 > Testing the use of BPF events after applying this patch: > > To use the external clang/llvm toolchain to compile a .c event and then > use libbpf to load it, to get the syscalls:sys_enter_open* tracepoints > and read the filename pointer, putting it into the ring buffer right > after the usual tracepoint payload for 'perf trace' to then print it: > > [root@quaco ~]# perf trace -e /home/acme/git/perf-tools-next/tools/perf/examples/bpf/augmented_raw_syscalls.c,open* --max-events=10 > 0.000 systemd-oomd/959 openat(dfd: CWD, filename: "/proc/meminfo", flags: RDONLY|CLOEXEC) = 12 > 0.083 abrt-dump-jour/1453 openat(dfd: CWD, filename: "/var/log/journal/d6a97235307247e09f13f326fb607e3c/system.journal", flags: RDONLY|CLOEXEC|NONBLOCK) = 4 > 0.063 abrt-dump-jour/1454 openat(dfd: CWD, filename: "/var/log/journal/d6a97235307247e09f13f326fb607e3c/system.journal", flags: RDONLY|CLOEXEC|NONBLOCK) = 4 > 0.082 abrt-dump-jour/1455 openat(dfd: CWD, filename: "/var/log/journal/d6a97235307247e09f13f326fb607e3c/system.journal", flags: RDONLY|CLOEXEC|NONBLOCK) = 4 > 250.124 systemd-oomd/959 openat(dfd: CWD, filename: "/proc/meminfo", flags: RDONLY|CLOEXEC) = 12 > 250.521 systemd-oomd/959 openat(dfd: CWD, filename: "/sys/fs/cgroup/user.slice/user-1000.slice/user@1000.service/app.slice/memory.pressure", flags: RDONLY|CLOEXEC) = 12 > 251.047 systemd-oomd/959 openat(dfd: CWD, filename: "/sys/fs/cgroup/user.slice/user-1000.slice/user@1000.service/app.slice/memory.current", flags: RDONLY|CLOEXEC) = 12 > 251.162 systemd-oomd/959 openat(dfd: CWD, filename: "/sys/fs/cgroup/user.slice/user-1000.slice/user@1000.service/app.slice/memory.min", flags: RDONLY|CLOEXEC) = 12 > 251.242 systemd-oomd/959 openat(dfd: CWD, filename: "/sys/fs/cgroup/user.slice/user-1000.slice/user@1000.service/app.slice/memory.low", flags: RDONLY|CLOEXEC) = 12 > 251.353 systemd-oomd/959 openat(dfd: CWD, filename: "/sys/fs/cgroup/user.slice/user-1000.slice/user@1000.service/app.slice/memory.swap.current", flags: RDONLY|CLOEXEC) = 12 > [root@quaco ~]# > > Same thing, but with a prebuilt .o BPF bytecode: > > [root@quaco ~]# perf trace -e /home/acme/git/perf-tools-next/tools/perf/examples/bpf/augmented_raw_syscalls.o,open* --max-events=10 > 0.000 systemd-oomd/959 openat(dfd: CWD, filename: "/proc/meminfo", flags: RDONLY|CLOEXEC) = 12 > 0.083 abrt-dump-jour/1453 openat(dfd: CWD, filename: "/var/log/journal/d6a97235307247e09f13f326fb607e3c/system.journal", flags: RDONLY|CLOEXEC|NONBLOCK) = 4 > 0.083 abrt-dump-jour/1455 openat(dfd: CWD, filename: "/var/log/journal/d6a97235307247e09f13f326fb607e3c/system.journal", flags: RDONLY|CLOEXEC|NONBLOCK) = 4 > 0.062 abrt-dump-jour/1454 openat(dfd: CWD, filename: "/var/log/journal/d6a97235307247e09f13f326fb607e3c/system.journal", flags: RDONLY|CLOEXEC|NONBLOCK) = 4 > 249.985 systemd-oomd/959 openat(dfd: CWD, filename: "/proc/meminfo", flags: RDONLY|CLOEXEC) = 12 > 466.763 thermald/1234 openat(dfd: CWD, filename: "/sys/class/powercap/intel-rapl/intel-rapl:0/intel-rapl:0:2/energy_uj") = 13 > 467.145 thermald/1234 openat(dfd: CWD, filename: "/sys/class/powercap/intel-rapl/intel-rapl:0/energy_uj") = 13 > 467.311 thermald/1234 openat(dfd: CWD, filename: "/sys/class/thermal/thermal_zone2/temp") = 13 > 500.040 cgroupify/24006 openat(dfd: 4, filename: ".", flags: RDONLY|CLOEXEC|DIRECTORY|NONBLOCK) = 5 > 500.295 cgroupify/24006 openat(dfd: 4, filename: "24616/cgroup.procs") = 5 > [root@quaco ~]# > > Signed-off-by: Ian Rogers > Cc: Adrian Hunter > Cc: Alexander Shishkin > Cc: Andi Kleen > Cc: Andrii Nakryiko > Cc: Anshuman Khandual > Cc: Athira Rajeev > Cc: Brendan Gregg > Cc: Carsten Haitzler > Cc: Eduard Zingerman > Cc: Fangrui Song > Cc: He Kuang > Cc: Ingo Molnar > Cc: James Clark > Cc: Jiri Olsa > Cc: Kan Liang > Cc: Leo Yan > Cc: Madhavan Srinivasan > Cc: Mark Rutland > Cc: Namhyung Kim > Cc: Nathan Chancellor > Cc: "Naveen N. Rao" > Cc: Nick Desaulniers > Cc: Peter Zijlstra > Cc: Ravi Bangoria > Cc: Rob Herring > Cc: Tiezhu Yang > Cc: Tom Rix > Cc: Wang Nan > Cc: Wang ShaoBo > Cc: Yang Jihong > Cc: Yonghong Song > Cc: YueHaibing > Link: https://lore.kernel.org/lkml/ > Signed-off-by: Arnaldo Carvalho de Melo > --- > tools/build/feature/test-clang.cpp | 28 --- > tools/build/feature/test-cxx.cpp | 16 -- > tools/build/feature/test-llvm-version.cpp | 12 -- > tools/build/feature/test-llvm.cpp | 14 -- > tools/perf/Makefile.config | 31 --- > tools/perf/Makefile.perf | 17 -- > tools/perf/tests/Build | 1 - > tools/perf/tests/builtin-test.c | 1 - > tools/perf/tests/clang.c | 32 --- > tools/perf/tests/make | 1 - > tools/perf/util/Build | 2 - > tools/perf/util/bpf-loader.c | 15 +- > tools/perf/util/c++/Build | 5 - > tools/perf/util/c++/clang-c.h | 43 ----- > tools/perf/util/c++/clang-test.cpp | 67 ------- > tools/perf/util/c++/clang.cpp | 225 ---------------------- > tools/perf/util/c++/clang.h | 27 --- > 17 files changed, 4 insertions(+), 533 deletions(-) > delete mode 100644 tools/build/feature/test-clang.cpp > delete mode 100644 tools/build/feature/test-cxx.cpp > delete mode 100644 tools/build/feature/test-llvm-version.cpp > delete mode 100644 tools/build/feature/test-llvm.cpp > delete mode 100644 tools/perf/tests/clang.c > delete mode 100644 tools/perf/util/c++/Build > delete mode 100644 tools/perf/util/c++/clang-c.h > delete mode 100644 tools/perf/util/c++/clang-test.cpp > delete mode 100644 tools/perf/util/c++/clang.cpp > delete mode 100644 tools/perf/util/c++/clang.h > > diff --git a/tools/build/feature/test-clang.cpp b/tools/build/feature/test-clang.cpp > deleted file mode 100644 > index 7d87075cd1c5dd6e..0000000000000000 > --- a/tools/build/feature/test-clang.cpp > +++ /dev/null > @@ -1,28 +0,0 @@ > -// SPDX-License-Identifier: GPL-2.0 > -#include "clang/Basic/Version.h" > -#if CLANG_VERSION_MAJOR < 8 > -#include "clang/Basic/VirtualFileSystem.h" > -#endif > -#include "clang/Driver/Driver.h" > -#include "clang/Frontend/TextDiagnosticPrinter.h" > -#include "llvm/ADT/IntrusiveRefCntPtr.h" > -#include "llvm/Support/ManagedStatic.h" > -#if CLANG_VERSION_MAJOR >= 8 > -#include "llvm/Support/VirtualFileSystem.h" > -#endif > -#include "llvm/Support/raw_ostream.h" > - > -using namespace clang; > -using namespace clang::driver; > - > -int main() > -{ > - IntrusiveRefCntPtr DiagID(new DiagnosticIDs()); > - IntrusiveRefCntPtr DiagOpts = new DiagnosticOptions(); > - > - DiagnosticsEngine Diags(DiagID, &*DiagOpts); > - Driver TheDriver("test", "bpf-pc-linux", Diags); > - > - llvm::llvm_shutdown(); > - return 0; > -} > diff --git a/tools/build/feature/test-cxx.cpp b/tools/build/feature/test-cxx.cpp > deleted file mode 100644 > index 396aaedd2418dd65..0000000000000000 > --- a/tools/build/feature/test-cxx.cpp > +++ /dev/null > @@ -1,16 +0,0 @@ > -// SPDX-License-Identifier: GPL-2.0 > -#include > -#include > - > -static void print_str(std::string s) > -{ > - std::cout << s << std::endl; > -} > - > -int main() > -{ > - std::string s("Hello World!"); > - print_str(std::move(s)); > - std::cout << "|" << s << "|" << std::endl; > - return 0; > -} > diff --git a/tools/build/feature/test-llvm-version.cpp b/tools/build/feature/test-llvm-version.cpp > deleted file mode 100644 > index 8a091625446af985..0000000000000000 > --- a/tools/build/feature/test-llvm-version.cpp > +++ /dev/null > @@ -1,12 +0,0 @@ > -// SPDX-License-Identifier: GPL-2.0 > -#include > -#include "llvm/Config/llvm-config.h" > - > -#define NUM_VERSION (((LLVM_VERSION_MAJOR) << 16) + (LLVM_VERSION_MINOR << 8) + LLVM_VERSION_PATCH) > -#define pass int main() {printf("%x\n", NUM_VERSION); return 0;} > - > -#if NUM_VERSION >= 0x030900 > -pass > -#else > -# error This LLVM is not tested yet. > -#endif > diff --git a/tools/build/feature/test-llvm.cpp b/tools/build/feature/test-llvm.cpp > deleted file mode 100644 > index 88a3d1bdd9f6978e..0000000000000000 > --- a/tools/build/feature/test-llvm.cpp > +++ /dev/null > @@ -1,14 +0,0 @@ > -// SPDX-License-Identifier: GPL-2.0 > -#include "llvm/Support/ManagedStatic.h" > -#include "llvm/Support/raw_ostream.h" > -#define NUM_VERSION (((LLVM_VERSION_MAJOR) << 16) + (LLVM_VERSION_MINOR << 8) + LLVM_VERSION_PATCH) > - > -#if NUM_VERSION < 0x030900 > -# error "LLVM version too low" > -#endif > -int main() > -{ > - llvm::errs() << "Hello World!\n"; > - llvm::llvm_shutdown(); > - return 0; > -} > diff --git a/tools/perf/Makefile.config b/tools/perf/Makefile.config > index 1bf8dc53641fa093..e0592ed4c10f5904 100644 > --- a/tools/perf/Makefile.config > +++ b/tools/perf/Makefile.config > @@ -1127,37 +1127,6 @@ ifndef NO_JVMTI > endif > endif > > -USE_CXX = 0 > -USE_CLANGLLVM = 0 > -ifdef LIBCLANGLLVM > - $(call feature_check,cxx) > - ifneq ($(feature-cxx), 1) > - msg := $(warning No g++ found, disable clang and llvm support. Please install g++) > - else > - $(call feature_check,llvm) > - $(call feature_check,llvm-version) > - ifneq ($(feature-llvm), 1) > - msg := $(warning No suitable libLLVM found, disabling builtin clang and LLVM support. Please install llvm-dev(el) (>= 3.9.0)) > - else > - $(call feature_check,clang) > - ifneq ($(feature-clang), 1) > - msg := $(warning No suitable libclang found, disabling builtin clang and LLVM support. Please install libclang-dev(el) (>= 3.9.0)) > - else > - CFLAGS += -DHAVE_LIBCLANGLLVM_SUPPORT > - CXXFLAGS += -DHAVE_LIBCLANGLLVM_SUPPORT -I$(shell $(LLVM_CONFIG) --includedir) > - $(call detected,CONFIG_CXX) > - $(call detected,CONFIG_CLANGLLVM) > - USE_CXX = 1 > - USE_LLVM = 1 > - USE_CLANG = 1 > - ifneq ($(feature-llvm-version),1) > - msg := $(warning This version of LLVM is not tested. May cause build errors) > - endif > - endif > - endif > - endif > -endif > - > ifndef NO_LIBPFM4 > $(call feature_check,libpfm4) > ifeq ($(feature-libpfm4), 1) > diff --git a/tools/perf/Makefile.perf b/tools/perf/Makefile.perf > index 0ed7ee0c1665a8cf..5370d7bf123e76af 100644 > --- a/tools/perf/Makefile.perf > +++ b/tools/perf/Makefile.perf > @@ -99,10 +99,6 @@ include ../scripts/utilities.mak > # Define NO_JVMTI_CMLR (debug only) if you do not want to process CMLR > # data for java source lines. > # > -# Define LIBCLANGLLVM if you DO want builtin clang and llvm support. > -# When selected, pass LLVM_CONFIG=/path/to/llvm-config to `make' if > -# llvm-config is not in $PATH. > -# > # Define CORESIGHT if you DO WANT support for CoreSight trace decoding. > # > # Define NO_AIO if you do not want support of Posix AIO based trace > @@ -425,19 +421,6 @@ endif > EXTLIBS := $(call filter-out,$(EXCLUDE_EXTLIBS),$(EXTLIBS)) > LIBS = -Wl,--whole-archive $(PERFLIBS) $(EXTRA_PERFLIBS) -Wl,--no-whole-archive -Wl,--start-group $(EXTLIBS) -Wl,--end-group > > -ifeq ($(USE_CLANG), 1) > - LIBS += -L$(shell $(LLVM_CONFIG) --libdir) -lclang-cpp > -endif > - > -ifeq ($(USE_LLVM), 1) > - LIBLLVM = $(shell $(LLVM_CONFIG) --libs all) $(shell $(LLVM_CONFIG) --system-libs) > - LIBS += -L$(shell $(LLVM_CONFIG) --libdir) $(LIBLLVM) > -endif > - > -ifeq ($(USE_CXX), 1) > - LIBS += -lstdc++ > -endif > - > export INSTALL SHELL_PATH > > ### Build rules > diff --git a/tools/perf/tests/Build b/tools/perf/tests/Build > index fb9ac5dc4079dab8..52df5923a8b9cc20 100644 > --- a/tools/perf/tests/Build > +++ b/tools/perf/tests/Build > @@ -51,7 +51,6 @@ perf-y += sdt.o > perf-y += is_printable_array.o > perf-y += bitmap.o > perf-y += perf-hooks.o > -perf-y += clang.o > perf-y += unit_number__scnprintf.o > perf-y += mem2node.o > perf-y += maps.o > diff --git a/tools/perf/tests/builtin-test.c b/tools/perf/tests/builtin-test.c > index 6accb5442a731842..0f3691fd31c2536f 100644 > --- a/tools/perf/tests/builtin-test.c > +++ b/tools/perf/tests/builtin-test.c > @@ -108,7 +108,6 @@ static struct test_suite *generic_tests[] = { > &suite__is_printable_array, > &suite__bitmap_print, > &suite__perf_hooks, > - &suite__clang, > &suite__unit_number__scnprint, > &suite__mem2node, > &suite__time_utils, > diff --git a/tools/perf/tests/clang.c b/tools/perf/tests/clang.c > deleted file mode 100644 > index a7111005d5b9f481..0000000000000000 > --- a/tools/perf/tests/clang.c > +++ /dev/null > @@ -1,32 +0,0 @@ > -// SPDX-License-Identifier: GPL-2.0 > -#include "tests.h" > -#include "c++/clang-c.h" > -#include > - > -#ifndef HAVE_LIBCLANGLLVM_SUPPORT > -static int test__clang_to_IR(struct test_suite *test __maybe_unused, > - int subtest __maybe_unused) > -{ > - return TEST_SKIP; > -} > - > -static int test__clang_to_obj(struct test_suite *test __maybe_unused, > - int subtest __maybe_unused) > -{ > - return TEST_SKIP; > -} > -#endif > - > -static struct test_case clang_tests[] = { > - TEST_CASE_REASON("builtin clang compile C source to IR", clang_to_IR, > - "not compiled in"), > - TEST_CASE_REASON("builtin clang compile C source to ELF object", > - clang_to_obj, > - "not compiled in"), > - { .name = NULL, } > -}; > - > -struct test_suite suite__clang = { > - .desc = "builtin clang support", > - .test_cases = clang_tests, > -}; > diff --git a/tools/perf/tests/make b/tools/perf/tests/make > index 58cf96d762d06a68..ea4c341f5af11741 100644 > --- a/tools/perf/tests/make > +++ b/tools/perf/tests/make > @@ -95,7 +95,6 @@ make_with_babeltrace:= LIBBABELTRACE=1 > make_with_coresight := CORESIGHT=1 > make_no_sdt := NO_SDT=1 > make_no_syscall_tbl := NO_SYSCALL_TABLE=1 > -make_with_clangllvm := LIBCLANGLLVM=1 > make_no_libpfm4 := NO_LIBPFM4=1 > make_with_gtk2 := GTK2=1 > make_refcnt_check := EXTRA_CFLAGS="-DREFCNT_CHECKING=1" > diff --git a/tools/perf/util/Build b/tools/perf/util/Build > index 9699e31ff4c04925..ff3b55c7ed43cdad 100644 > --- a/tools/perf/util/Build > +++ b/tools/perf/util/Build > @@ -232,8 +232,6 @@ perf-y += perf-hooks.o > perf-$(CONFIG_LIBBPF) += bpf-event.o > perf-$(CONFIG_LIBBPF) += bpf-utils.o > > -perf-$(CONFIG_CXX) += c++/ > - > perf-$(CONFIG_LIBPFM4) += pfm.o > > CFLAGS_config.o += -DETC_PERFCONFIG="BUILD_STR($(ETC_PERFCONFIG_SQ))" > diff --git a/tools/perf/util/bpf-loader.c b/tools/perf/util/bpf-loader.c > index 50e42698cbb721d1..b54e42f17926b17e 100644 > --- a/tools/perf/util/bpf-loader.c > +++ b/tools/perf/util/bpf-loader.c > @@ -26,7 +26,6 @@ > #include "strfilter.h" > #include "util.h" > #include "llvm-utils.h" > -#include "c++/clang-c.h" > #include "util/hashmap.h" > #include "asm/bug.h" > > @@ -220,16 +219,10 @@ struct bpf_object *bpf__prepare_load(const char *filename, bool source) > void *obj_buf; > size_t obj_buf_sz; > > - perf_clang__init(); > - err = perf_clang__compile_bpf(filename, &obj_buf, &obj_buf_sz); > - perf_clang__cleanup(); > - if (err) { > - pr_debug("bpf: builtin compilation failed: %d, try external compiler\n", err); > - err = llvm__compile_bpf(filename, &obj_buf, &obj_buf_sz); > - if (err) > - return ERR_PTR(-BPF_LOADER_ERRNO__COMPILE); > - } else > - pr_debug("bpf: successful builtin compilation\n"); > + err = llvm__compile_bpf(filename, &obj_buf, &obj_buf_sz); > + if (err) > + return ERR_PTR(-BPF_LOADER_ERRNO__COMPILE); > + > obj = bpf_object__open_mem(obj_buf, obj_buf_sz, &opts); > > if (!IS_ERR_OR_NULL(obj) && llvm_param.dump_obj) > diff --git a/tools/perf/util/c++/Build b/tools/perf/util/c++/Build > deleted file mode 100644 > index 8610d032ac19d8c5..0000000000000000 > --- a/tools/perf/util/c++/Build > +++ /dev/null > @@ -1,5 +0,0 @@ > -perf-$(CONFIG_CLANGLLVM) += clang.o > -perf-$(CONFIG_CLANGLLVM) += clang-test.o > - > -CXXFLAGS_clang.o += -Wno-unused-parameter > -CXXFLAGS_clang-test.o += -Wno-unused-parameter > diff --git a/tools/perf/util/c++/clang-c.h b/tools/perf/util/c++/clang-c.h > deleted file mode 100644 > index d3731a876b6c10c5..0000000000000000 > --- a/tools/perf/util/c++/clang-c.h > +++ /dev/null > @@ -1,43 +0,0 @@ > -/* SPDX-License-Identifier: GPL-2.0 */ > -#ifndef PERF_UTIL_CLANG_C_H > -#define PERF_UTIL_CLANG_C_H > - > -#include /* for size_t */ > - > -#ifdef __cplusplus > -extern "C" { > -#endif > - > -#ifdef HAVE_LIBCLANGLLVM_SUPPORT > -extern void perf_clang__init(void); > -extern void perf_clang__cleanup(void); > - > -struct test_suite; > -extern int test__clang_to_IR(struct test_suite *test, int subtest); > -extern int test__clang_to_obj(struct test_suite *test, int subtest); > - > -extern int perf_clang__compile_bpf(const char *filename, > - void **p_obj_buf, > - size_t *p_obj_buf_sz); > -#else > - > -#include > -#include /* for __maybe_unused */ > - > -static inline void perf_clang__init(void) { } > -static inline void perf_clang__cleanup(void) { } > - > -static inline int > -perf_clang__compile_bpf(const char *filename __maybe_unused, > - void **p_obj_buf __maybe_unused, > - size_t *p_obj_buf_sz __maybe_unused) > -{ > - return -ENOTSUP; > -} > - > -#endif > - > -#ifdef __cplusplus > -} > -#endif > -#endif > diff --git a/tools/perf/util/c++/clang-test.cpp b/tools/perf/util/c++/clang-test.cpp > deleted file mode 100644 > index a4683ca536973c04..0000000000000000 > --- a/tools/perf/util/c++/clang-test.cpp > +++ /dev/null > @@ -1,67 +0,0 @@ > -// SPDX-License-Identifier: GPL-2.0 > -#include "clang.h" > -#include "clang-c.h" > -extern "C" { > -#include "../util.h" > -} > -#include "llvm/IR/Function.h" > -#include "llvm/IR/LLVMContext.h" > - > -#include > -#include > - > -class perf_clang_scope { > -public: > - explicit perf_clang_scope() {perf_clang__init();} > - ~perf_clang_scope() {perf_clang__cleanup();} > -}; > - > -static std::unique_ptr > -__test__clang_to_IR(void) > -{ > - unsigned int kernel_version; > - > - if (fetch_kernel_version(&kernel_version, NULL, 0)) > - return std::unique_ptr(nullptr); > - > - std::string cflag_kver("-DLINUX_VERSION_CODE=" + > - std::to_string(kernel_version)); > - > - std::unique_ptr M = > - perf::getModuleFromSource({cflag_kver.c_str()}, > - "perf-test.c", > - test_llvm__bpf_base_prog); > - return M; > -} > - > -extern "C" { > -int test__clang_to_IR(struct test_suite *test __maybe_unused, > - int subtest __maybe_unused) > -{ > - perf_clang_scope _scope; > - > - auto M = __test__clang_to_IR(); > - if (!M) > - return -1; > - for (llvm::Function& F : *M) > - if (F.getName() == "bpf_func__SyS_epoll_pwait") > - return 0; > - return -1; > -} > - > -int test__clang_to_obj(struct test_suite *test __maybe_unused, > - int subtest __maybe_unused) > -{ > - perf_clang_scope _scope; > - > - auto M = __test__clang_to_IR(); > - if (!M) > - return -1; > - > - auto Buffer = perf::getBPFObjectFromModule(&*M); > - if (!Buffer) > - return -1; > - return 0; > -} > - > -} > diff --git a/tools/perf/util/c++/clang.cpp b/tools/perf/util/c++/clang.cpp > deleted file mode 100644 > index 1aad7d6d34aaa639..0000000000000000 > --- a/tools/perf/util/c++/clang.cpp > +++ /dev/null > @@ -1,225 +0,0 @@ > -// SPDX-License-Identifier: GPL-2.0 > -/* > - * llvm C frontend for perf. Support dynamically compile C file > - * > - * Inspired by clang example code: > - * http://llvm.org/svn/llvm-project/cfe/trunk/examples/clang-interpreter/main.cpp > - * > - * Copyright (C) 2016 Wang Nan > - * Copyright (C) 2016 Huawei Inc. > - */ > - > -#include "clang/Basic/Version.h" > -#include "clang/CodeGen/CodeGenAction.h" > -#include "clang/Frontend/CompilerInvocation.h" > -#include "clang/Frontend/CompilerInstance.h" > -#include "clang/Frontend/TextDiagnosticPrinter.h" > -#include "clang/Tooling/Tooling.h" > -#include "llvm/IR/LegacyPassManager.h" > -#include "llvm/IR/Module.h" > -#include "llvm/Option/Option.h" > -#include "llvm/Support/FileSystem.h" > -#include "llvm/Support/ManagedStatic.h" > -#if CLANG_VERSION_MAJOR >= 14 > -#include "llvm/MC/TargetRegistry.h" > -#else > -#include "llvm/Support/TargetRegistry.h" > -#endif > -#include "llvm/Support/TargetSelect.h" > -#include "llvm/Target/TargetMachine.h" > -#include "llvm/Target/TargetOptions.h" > -#include > - > -#include "clang.h" > -#include "clang-c.h" > - > -namespace perf { > - > -static std::unique_ptr LLVMCtx; > - > -using namespace clang; > - > -static CompilerInvocation * > -createCompilerInvocation(llvm::opt::ArgStringList CFlags, StringRef& Path, > - DiagnosticsEngine& Diags) > -{ > - llvm::opt::ArgStringList CCArgs { > - "-cc1", > - "-triple", "bpf-pc-linux", > - "-fsyntax-only", > - "-O2", > - "-nostdsysteminc", > - "-nobuiltininc", > - "-vectorize-loops", > - "-vectorize-slp", > - "-Wno-unused-value", > - "-Wno-pointer-sign", > - "-x", "c"}; > - > - CCArgs.append(CFlags.begin(), CFlags.end()); > - CompilerInvocation *CI = tooling::newInvocation(&Diags, CCArgs > -#if CLANG_VERSION_MAJOR >= 11 > - ,/*BinaryName=*/nullptr > -#endif > - ); > - > - FrontendOptions& Opts = CI->getFrontendOpts(); > - Opts.Inputs.clear(); > - Opts.Inputs.emplace_back(Path, > - FrontendOptions::getInputKindForExtension("c")); > - return CI; > -} > - > -static std::unique_ptr > -getModuleFromSource(llvm::opt::ArgStringList CFlags, > - StringRef Path, IntrusiveRefCntPtr VFS) > -{ > - CompilerInstance Clang; > - Clang.createDiagnostics(); > - > -#if CLANG_VERSION_MAJOR < 9 > - Clang.setVirtualFileSystem(&*VFS); > -#else > - Clang.createFileManager(&*VFS); > -#endif > - > -#if CLANG_VERSION_MAJOR < 4 > - IntrusiveRefCntPtr CI = > - createCompilerInvocation(std::move(CFlags), Path, > - Clang.getDiagnostics()); > - Clang.setInvocation(&*CI); > -#else > - std::shared_ptr CI( > - createCompilerInvocation(std::move(CFlags), Path, > - Clang.getDiagnostics())); > - Clang.setInvocation(CI); > -#endif > - > - std::unique_ptr Act(new EmitLLVMOnlyAction(&*LLVMCtx)); > - if (!Clang.ExecuteAction(*Act)) > - return std::unique_ptr(nullptr); > - > - return Act->takeModule(); > -} > - > -std::unique_ptr > -getModuleFromSource(llvm::opt::ArgStringList CFlags, > - StringRef Name, StringRef Content) > -{ > - using namespace vfs; > - > - llvm::IntrusiveRefCntPtr OverlayFS( > - new OverlayFileSystem(getRealFileSystem())); > - llvm::IntrusiveRefCntPtr MemFS( > - new InMemoryFileSystem(true)); > - > - /* > - * pushOverlay helps setting working dir for MemFS. Must call > - * before addFile. > - */ > - OverlayFS->pushOverlay(MemFS); > - MemFS->addFile(Twine(Name), 0, llvm::MemoryBuffer::getMemBuffer(Content)); > - > - return getModuleFromSource(std::move(CFlags), Name, OverlayFS); > -} > - > -std::unique_ptr > -getModuleFromSource(llvm::opt::ArgStringList CFlags, StringRef Path) > -{ > - IntrusiveRefCntPtr VFS(vfs::getRealFileSystem()); > - return getModuleFromSource(std::move(CFlags), Path, VFS); > -} > - > -std::unique_ptr> > -getBPFObjectFromModule(llvm::Module *Module) > -{ > - using namespace llvm; > - > - std::string TargetTriple("bpf-pc-linux"); > - std::string Error; > - const Target* Target = TargetRegistry::lookupTarget(TargetTriple, Error); > - if (!Target) { > - llvm::errs() << Error; > - return std::unique_ptr>(nullptr); > - } > - > - llvm::TargetOptions Opt; > - TargetMachine *TargetMachine = > - Target->createTargetMachine(TargetTriple, > - "generic", "", > - Opt, Reloc::Static); > - > - Module->setDataLayout(TargetMachine->createDataLayout()); > - Module->setTargetTriple(TargetTriple); > - > - std::unique_ptr> Buffer(new SmallVector()); > - raw_svector_ostream ostream(*Buffer); > - > - legacy::PassManager PM; > - bool NotAdded; > - NotAdded = TargetMachine->addPassesToEmitFile(PM, ostream > -#if CLANG_VERSION_MAJOR >= 7 > - , /*DwoOut=*/nullptr > -#endif > -#if CLANG_VERSION_MAJOR < 10 > - , TargetMachine::CGFT_ObjectFile > -#else > - , llvm::CGFT_ObjectFile > -#endif > - ); > - if (NotAdded) { > - llvm::errs() << "TargetMachine can't emit a file of this type\n"; > - return std::unique_ptr>(nullptr); > - } > - PM.run(*Module); > - > - return Buffer; > -} > - > -} > - > -extern "C" { > -void perf_clang__init(void) > -{ > - perf::LLVMCtx.reset(new llvm::LLVMContext()); > - LLVMInitializeBPFTargetInfo(); > - LLVMInitializeBPFTarget(); > - LLVMInitializeBPFTargetMC(); > - LLVMInitializeBPFAsmPrinter(); > -} > - > -void perf_clang__cleanup(void) > -{ > - perf::LLVMCtx.reset(nullptr); > - llvm::llvm_shutdown(); > -} > - > -int perf_clang__compile_bpf(const char *filename, > - void **p_obj_buf, > - size_t *p_obj_buf_sz) > -{ > - using namespace perf; > - > - if (!p_obj_buf || !p_obj_buf_sz) > - return -EINVAL; > - > - llvm::opt::ArgStringList CFlags; > - auto M = getModuleFromSource(std::move(CFlags), filename); > - if (!M) > - return -EINVAL; > - auto O = getBPFObjectFromModule(&*M); > - if (!O) > - return -EINVAL; > - > - size_t size = O->size_in_bytes(); > - void *buffer; > - > - buffer = malloc(size); > - if (!buffer) > - return -ENOMEM; > - memcpy(buffer, O->data(), size); > - *p_obj_buf = buffer; > - *p_obj_buf_sz = size; > - return 0; > -} > -} > diff --git a/tools/perf/util/c++/clang.h b/tools/perf/util/c++/clang.h > deleted file mode 100644 > index 6ce33e22f23c084a..0000000000000000 > --- a/tools/perf/util/c++/clang.h > +++ /dev/null > @@ -1,27 +0,0 @@ > -/* SPDX-License-Identifier: GPL-2.0 */ > -#ifndef PERF_UTIL_CLANG_H > -#define PERF_UTIL_CLANG_H > - > -#include "llvm/ADT/StringRef.h" > -#include "llvm/IR/LLVMContext.h" > -#include "llvm/IR/Module.h" > -#include "llvm/Option/Option.h" > -#include > - > -namespace perf { > - > -using namespace llvm; > - > -std::unique_ptr > -getModuleFromSource(opt::ArgStringList CFlags, > - StringRef Name, StringRef Content); > - > -std::unique_ptr > -getModuleFromSource(opt::ArgStringList CFlags, > - StringRef Path); > - > -std::unique_ptr> > -getBPFObjectFromModule(llvm::Module *Module); > - > -} > -#endif > -- > 2.37.1 >