From nobody Fri Dec 19 17:18:01 2025 Received: from mail-pg1-f202.google.com (mail-pg1-f202.google.com [209.85.215.202]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 10EA132ED59 for ; Thu, 4 Dec 2025 21:13:01 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.202 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764882783; cv=none; b=kfq21vCO0vJxjtdx9EyKZa9GW1Kjxkt+v+7e/MKPXBI5jDAKnYsEHgF5+0ApGHHXhwjdkpjvo+kco+0ZzQOz0h89SZpBjIWrQQfao0CirAbUV1EIOVVjKPbhoF5e+X/njJPglIIEWVtgto0nmsST2m867OhYVDjglB3+iPGwLQE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764882783; c=relaxed/simple; bh=7j9U46Ae1Z5AypIdGMd9yPUyiTuV7Qjy+fczd7THRao=; h=Date:Mime-Version:Message-ID:Subject:From:To:Content-Type; b=Z9dJG5YMYZY7BM6MuD1AmTIasFDs2w13JpoNOQ0J8oZ90KH+Bi+SBotPwBJHWyXsSn5yD/1qr0RxcFmXKqMMqXn9KbtNnMSm4+p28fSnEJ2EfyrD9aVceBFXP/pAmyHBdWXp1IT9kwAvhJjZHoqvKmSO0GMc8TedcSUDBrC3yJ4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=watuRLei; arc=none smtp.client-ip=209.85.215.202 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="watuRLei" Received: by mail-pg1-f202.google.com with SMTP id 41be03b00d2f7-bde2d88e5e3so2405984a12.2 for ; Thu, 04 Dec 2025 13:13:01 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1764882781; x=1765487581; darn=vger.kernel.org; h=to:from:subject:message-id:mime-version:date:from:to:cc:subject :date:message-id:reply-to; bh=Qzak/OCzRh0xSld4WaA+fQD3w+DW1Y486K8IXJyVqlM=; b=watuRLeik3gVkZqLJAvV7+3tZN+7aVb2V/+2VCZZdHSgw5esi1Clm+5qHlzzFaUjpm +4iRAW5+JJ0ZLtgcsngOVn9g8D7lEMn6VusG4RCN84HEvmSj3dhDAGVZf6+ovgXx6qfb 1F+PjqXAHUFDHTzkdAJUBOAjeXxpGiMG77W6mCkDjdbMQGlPVvPi+WmFn3vMt1j6wPQZ 2TYMd90thvfwjmIkKUHUgZX6Sbikr3U16UVBtYSMGqI6WrouInm3GnX/H8rmrTibF/GF CLqLqBuoApmTaZqjO8KPvBEwPo/k5SseJQIBnG1OdEVOZrIT/sY7ymAny0Do9DfxW4Ts Putg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1764882781; x=1765487581; h=to:from:subject:message-id:mime-version:date:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=Qzak/OCzRh0xSld4WaA+fQD3w+DW1Y486K8IXJyVqlM=; b=MEfXxFxe7nYqZJ81S8FZSj5x7gS13AS6gZsI+V21gO0WFOa2OWAql+0ifa6MZY8urj FWiiYHdbrzofnekSucJT6kn3FsXkokw6rHDqNDodejkG52JxWdEr6TSx13IwwVJLVf8w Omp63DHAfV/UAhVHPLuSNpdH67AhyZiXZQzlMceJxoU5frR5b3loEz5vUeUcMeBBPxZS 99RLwT6f4c6rkPaUyizjitrjZugB9IK+l9eCqFlGYmxFl7QSisq/7wyRlvx131Ng67hK LGOOPhiTb6TZPdrLy0v95UA1qMNxnXzUYilzlKGbsOeITRPMhrsEaKXLvsVmLaZEvbwM 6EWg== X-Forwarded-Encrypted: i=1; AJvYcCW9pao5htd0C6pyrN7bdHrw5rhPeepm1poCf5dGeE+rr1DLm51xLAn9C+6VY+V1T8ZnFtPd39x3RCrUYrM=@vger.kernel.org X-Gm-Message-State: AOJu0Yy8FmusSB3P3MZUrNvoiqM8pXt9mFzFcrUhaRw+EP7DxSu/yslP u+Y6Kwu8vZSs2edPLqZmCe9FL0gugwu4GLwNJw0KLSoy9F40Ck+Y+w/tYX2Fekv7H9Yv+5CYMlB af639zTt+rw== X-Google-Smtp-Source: AGHT+IF4qlRqyF9crDFtm7CD2Cy9PTsB1TSVNBLHr4Qq6WhGnSJksjq6eS9zHTh4lXVdE4f38OL9D34T5Ssa X-Received: from dyw18.prod.google.com ([2002:a05:7300:8812:b0:2a4:6f7f:e6f0]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:7300:cc9c:b0:2a4:3593:6472 with SMTP id 5a478bee46e88-2ab92ec938dmr4070217eec.34.1764882781288; Thu, 04 Dec 2025 13:13:01 -0800 (PST) Date: Thu, 4 Dec 2025 13:11:43 -0800 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 X-Mailer: git-send-email 2.52.0.223.gf5cc29aaa4-goog Message-ID: <20251204211143.572382-1-irogers@google.com> Subject: [PATCH v1] perf help: Move common_cmds into builtin-help From: Ian Rogers To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , James Clark , Howard Chu , Charlie Jenkins , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" There's a lot of infrastructure for generating a relatively simple array used by one function. Move the array into the function and remove the supporting build logic. At the same time opportunistically const-ify the array. Signed-off-by: Ian Rogers --- tools/perf/Makefile.perf | 11 ++--- tools/perf/builtin-help.c | 51 ++++++++++++++++++--- tools/perf/command-list.txt | 36 --------------- tools/perf/util/Build | 14 ------ tools/perf/util/generate-cmdlist.sh | 70 ----------------------------- 5 files changed, 49 insertions(+), 133 deletions(-) delete mode 100644 tools/perf/command-list.txt delete mode 100755 tools/perf/util/generate-cmdlist.sh diff --git a/tools/perf/Makefile.perf b/tools/perf/Makefile.perf index 80decc7ce13c..a91c5d01f3b4 100644 --- a/tools/perf/Makefile.perf +++ b/tools/perf/Makefile.perf @@ -807,11 +807,6 @@ $(GTK_IN): FORCE prepare $(OUTPUT)libperf-gtk.so: $(GTK_IN) $(PERFLIBS) $(QUIET_LINK)$(CC) -o $@ -shared $(LDFLAGS) $(filter %.o,$^) $(GTK_LIBS) =20 -$(OUTPUT)common-cmds.h: util/generate-cmdlist.sh command-list.txt - -$(OUTPUT)common-cmds.h: $(wildcard Documentation/perf-*.txt) - $(QUIET_GEN). util/generate-cmdlist.sh > $@+ && mv $@+ $@ - $(SCRIPTS) : % : %.sh $(QUIET_GEN)$(INSTALL) '$@.sh' '$(OUTPUT)$@' =20 @@ -849,7 +844,7 @@ endif __build-dir =3D $(subst $(OUTPUT),,$(dir $@)) build-dir =3D $(or $(__build-dir),.) =20 -prepare: $(OUTPUT)PERF-VERSION-FILE $(OUTPUT)common-cmds.h archheaders \ +prepare: $(OUTPUT)PERF-VERSION-FILE archheaders \ arm64-sysreg-defs \ $(syscall_array) \ $(fs_at_flags_array) \ @@ -1053,7 +1048,7 @@ cscope: # However, the environment gets quite big, and some programs have problems # with that. =20 -check: $(OUTPUT)common-cmds.h +check: prepare if sparse; \ then \ for i in *.c */*.c; \ @@ -1296,7 +1291,7 @@ clean:: $(LIBAPI)-clean $(LIBBPF)-clean $(LIBSUBCMD)-= clean $(LIBSYMBOL)-clean $( $(call QUIET_CLEAN, core-progs) $(RM) $(ALL_PROGRAMS) perf perf-read-vdso= 32 \ perf-read-vdsox32 $(OUTPUT)$(LIBJVMTI).so $(call QUIET_CLEAN, core-gen) $(RM) *.spec *.pyc *.pyo */*.pyc */*.pyo= \ - $(OUTPUT)common-cmds.h TAGS tags cscope* $(OUTPUT)PERF-VERSION-FILE \ + TAGS tags cscope* $(OUTPUT)PERF-VERSION-FILE \ $(OUTPUT)FEATURE-DUMP $(OUTPUT)util/*-bison* $(OUTPUT)util/*-flex* \ $(OUTPUT)util/intel-pt-decoder/inat-tables.c \ $(OUTPUT)tests/llvm-src-{base,kbuild,prologue,relocation}.c \ diff --git a/tools/perf/builtin-help.c b/tools/perf/builtin-help.c index 7be6fb6df595..2692b2e40a23 100644 --- a/tools/perf/builtin-help.c +++ b/tools/perf/builtin-help.c @@ -9,7 +9,6 @@ #include "util/strbuf.h" #include "builtin.h" #include -#include "common-cmds.h" #include #include #include @@ -301,16 +300,58 @@ static struct cmdnames main_cmds, other_cmds; =20 void list_common_cmds_help(void) { - unsigned int i, longest =3D 0; + const struct cmdname_help { + const char *name; + const char *help; + } common_cmds[] =3D { + {"annotate", "Read perf.data (created by perf record) and display annota= ted code"}, + {"archive", + "Create archive with object files with build-ids found in perf.data fil= e"}, + {"bench", "General framework for benchmark suites"}, + {"buildid-cache", "Manage build-id cache."}, + {"buildid-list", "List the buildids in a perf.data file"}, + {"c2c", "Shared Data C2C/HITM Analyzer."}, + {"config", "Get and set variables in a configuration file."}, + {"daemon", "Run record sessions on background"}, + {"data", "Data file related processing"}, + {"diff", "Read perf.data files and display the differential profile"}, + {"evlist", "List the event names in a perf.data file"}, + {"ftrace", "simple wrapper for kernel's ftrace functionality"}, + {"inject", "Filter to augment the events stream with additional informat= ion"}, + {"iostat", "Show I/O performance metrics"}, + {"kallsyms", "Searches running kernel for symbols"}, + {"kvm", "Tool to trace/measure kvm guest os"}, + {"list", "List all symbolic event types"}, + {"mem", "Profile memory accesses"}, + {"record", "Run a command and record its profile into perf.data"}, + {"report", "Read perf.data (created by perf record) and display the prof= ile"}, + {"script", "Read perf.data (created by perf record) and display trace ou= tput"}, + {"stat", "Run a command and gather performance counter statistics"}, + {"test", "Runs sanity tests."}, + {"top", "System profiling tool."}, + {"version", "display the version of perf binary"}, + #ifdef HAVE_LIBELF_SUPPORT + {"probe", "Define new dynamic tracepoints"}, + #endif /* HAVE_LIBELF_SUPPORT */ + #ifdef HAVE_LIBTRACEEVENT + {"trace", "strace inspired tool"}, + {"kmem", "Tool to trace/measure kernel memory properties"}, + {"kwork", "Tool to trace/measure kernel work properties (latencies)"}, + {"lock", "Analyze lock events"}, + {"sched", "Tool to trace/measure scheduler properties (latencies)"}, + {"timechart", "Tool to visualize total system behavior during a workload= "}, + #endif /* HAVE_LIBTRACEEVENT */ + }; + size_t longest =3D 0; =20 - for (i =3D 0; i < ARRAY_SIZE(common_cmds); i++) { + for (size_t i =3D 0; i < ARRAY_SIZE(common_cmds); i++) { if (longest < strlen(common_cmds[i].name)) longest =3D strlen(common_cmds[i].name); } =20 puts(" The most commonly used perf commands are:"); - for (i =3D 0; i < ARRAY_SIZE(common_cmds); i++) { - printf(" %-*s ", longest, common_cmds[i].name); + for (size_t i =3D 0; i < ARRAY_SIZE(common_cmds); i++) { + printf(" %-*s ", (int)longest, common_cmds[i].name); puts(common_cmds[i].help); } } diff --git a/tools/perf/command-list.txt b/tools/perf/command-list.txt deleted file mode 100644 index e8d2762adade..000000000000 --- a/tools/perf/command-list.txt +++ /dev/null @@ -1,36 +0,0 @@ -# -# List of known perf commands. -# command name category [deprecated] [common] -# -perf-annotate mainporcelain common -perf-archive mainporcelain common -perf-bench mainporcelain common -perf-buildid-cache mainporcelain common -perf-buildid-list mainporcelain common -perf-data mainporcelain common -perf-diff mainporcelain common -perf-c2c mainporcelain common -perf-config mainporcelain common -perf-evlist mainporcelain common -perf-ftrace mainporcelain common -perf-inject mainporcelain common -perf-iostat mainporcelain common -perf-kallsyms mainporcelain common -perf-kmem mainporcelain traceevent -perf-kvm mainporcelain common -perf-kwork mainporcelain traceevent -perf-list mainporcelain common -perf-lock mainporcelain traceevent -perf-mem mainporcelain common -perf-probe mainporcelain full -perf-record mainporcelain common -perf-report mainporcelain common -perf-sched mainporcelain traceevent -perf-script mainporcelain common -perf-stat mainporcelain common -perf-test mainporcelain common -perf-timechart mainporcelain traceevent -perf-top mainporcelain common -perf-trace mainporcelain audit -perf-version mainporcelain common -perf-daemon mainporcelain common diff --git a/tools/perf/util/Build b/tools/perf/util/Build index 1c2a43e1dc68..eb77d85a9683 100644 --- a/tools/perf/util/Build +++ b/tools/perf/util/Build @@ -418,20 +418,6 @@ $(OUTPUT)util/list_sort.o: ../lib/list_sort.c FORCE $(call rule_mkdir) $(call if_changed_dep,cc_o_c) =20 -ifdef SHELLCHECK - SHELL_TESTS :=3D generate-cmdlist.sh - SHELL_TEST_LOGS :=3D $(SHELL_TESTS:%=3D%.shellcheck_log) -else - SHELL_TESTS :=3D - SHELL_TEST_LOGS :=3D -endif - -$(OUTPUT)%.shellcheck_log: % - $(call rule_mkdir) - $(Q)$(call echo-cmd,test)$(SHELLCHECK) "$<" > $@ || (cat $@ && rm $@ && f= alse) - -perf-util-y +=3D $(SHELL_TEST_LOGS) - PY_TESTS :=3D setup.py ifdef MYPY MYPY_TEST_LOGS :=3D $(PY_TESTS:%=3D%.mypy_log) diff --git a/tools/perf/util/generate-cmdlist.sh b/tools/perf/util/generate= -cmdlist.sh deleted file mode 100755 index 6a73c903d690..000000000000 --- a/tools/perf/util/generate-cmdlist.sh +++ /dev/null @@ -1,70 +0,0 @@ -#!/bin/sh -# SPDX-License-Identifier: GPL-2.0 - -echo "/* Automatically generated by $0 */ -struct cmdname_help -{ - char name[16]; - char help[80]; -}; - -static struct cmdname_help common_cmds[] =3D {" - -sed -n -e 's/^perf-\([^ ]*\)[ ].* common.*/\1/p' command-list.txt | -sort | -while read cmd -do - sed -n ' - /^NAME/,/perf-'"$cmd"'/H - ${ - x - s/.*perf-'"$cmd"' - \(.*\)/ {"'"$cmd"'", "\1"},/ - p - }' "Documentation/perf-$cmd.txt" -done - -echo "#ifdef HAVE_LIBELF_SUPPORT" -sed -n -e 's/^perf-\([^ ]*\)[ ].* full.*/\1/p' command-list.txt | -sort | -while read cmd -do - sed -n ' - /^NAME/,/perf-'"$cmd"'/H - ${ - x - s/.*perf-'"$cmd"' - \(.*\)/ {"'"$cmd"'", "\1"},/ - p - }' "Documentation/perf-$cmd.txt" -done -echo "#endif /* HAVE_LIBELF_SUPPORT */" - -echo "#if defined(HAVE_LIBTRACEEVENT)" -sed -n -e 's/^perf-\([^ ]*\)[ ].* audit*/\1/p' command-list.txt | -sort | -while read cmd -do - sed -n ' - /^NAME/,/perf-'"$cmd"'/H - ${ - x - s/.*perf-'"$cmd"' - \(.*\)/ {"'"$cmd"'", "\1"},/ - p - }' "Documentation/perf-$cmd.txt" -done -echo "#endif /* HAVE_LIBTRACEEVENT */" - -echo "#ifdef HAVE_LIBTRACEEVENT" -sed -n -e 's/^perf-\([^ ]*\)[ ].* traceevent.*/\1/p' command-list.txt | -sort | -while read cmd -do - sed -n ' - /^NAME/,/perf-'"$cmd"'/H - ${ - x - s/.*perf-'"$cmd"' - \(.*\)/ {"'"$cmd"'", "\1"},/ - p - }' "Documentation/perf-$cmd.txt" -done -echo "#endif /* HAVE_LIBTRACEEVENT */" -echo "};" --=20 2.52.0.223.gf5cc29aaa4-goog