All of lore.kernel.org
 help / color / mirror / Atom feed
From: David Laight <david.laight.linux@gmail.com>
To: Alexandre Chartre <alexandre.chartre@oracle.com>
Cc: linux-kernel@vger.kernel.org, mingo@kernel.org,
	jpoimboe@kernel.org, peterz@infradead.org
Subject: Re: [PATCH v6 26/30 (mawk fix)] objtool: Add function to get the name of a CPU feature
Date: Tue, 25 Nov 2025 13:29:02 +0000	[thread overview]
Message-ID: <20251125132902.0cace2c8@pumpkin> (raw)
In-Reply-To: <20251124164855.1036513-1-alexandre.chartre@oracle.com>

On Mon, 24 Nov 2025 17:48:55 +0100
Alexandre Chartre <alexandre.chartre@oracle.com> wrote:

> Add a function to get the name of a CPU feature. The function is
> architecture dependent and currently only implemented for x86. The
> feature names are automatically generated from the cpufeatures.h
> include file.
> 
> Signed-off-by: Alexandre Chartre <alexandre.chartre@oracle.com>
> Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
> Acked-by: Josh Poimboeuf <jpoimboe@kernel.org>
> Link: https://patch.msgid.link/20251121095340.464045-27-alexandre.chartre@oracle.com
> ---
>  .../x86/tools/gen-cpu-feature-names-x86.awk   | 34 +++++++++++++++++++
>  tools/objtool/.gitignore                      |  1 +
>  tools/objtool/Makefile                        |  1 +
>  tools/objtool/arch/loongarch/special.c        |  5 +++
>  tools/objtool/arch/powerpc/special.c          |  5 +++
>  tools/objtool/arch/x86/Build                  | 10 ++++++
>  tools/objtool/arch/x86/special.c              | 10 ++++++
>  tools/objtool/include/objtool/special.h       |  2 ++
>  8 files changed, 68 insertions(+)
>  create mode 100644 tools/arch/x86/tools/gen-cpu-feature-names-x86.awk
> 
> diff --git a/tools/arch/x86/tools/gen-cpu-feature-names-x86.awk b/tools/arch/x86/tools/gen-cpu-feature-names-x86.awk
> new file mode 100644
> index 0000000000000..cc4c7a3e6c2e2
> --- /dev/null
> +++ b/tools/arch/x86/tools/gen-cpu-feature-names-x86.awk
> @@ -0,0 +1,34 @@
> +#!/bin/awk -f
> +# SPDX-License-Identifier: GPL-2.0
> +#
> +# Copyright (c) 2025, Oracle and/or its affiliates.
> +#
> +# Usage: awk -f gen-cpu-feature-names-x86.awk cpufeatures.h > cpu-feature-names.c
> +#
> +
> +BEGIN {
> +	print "/* cpu feature name array generated from cpufeatures.h */"
> +	print "/* Do not change this code. */"
> +	print
> +	print "static const char *cpu_feature_names[(NCAPINTS+NBUGINTS)*32] = {"

Since this code is #include'd into a .c file the line above (and the final })
can be in that source file.
You only need to generate the initialisers here.

> +
> +	value_expr = "\\([0-9*+ ]+\\)"
> +}
> +
> +/^#define X86_FEATURE_/ {
> +	if (match($0, value_expr)) {
> +		value = substr($0, RSTART + 1, RLENGTH - 2)
> +		print "\t[" value "] = \"" $2 "\","
> +	}

Can't you just do:
	print "\t[" $2 "] = \"" $2 "\","

    David

> +}
> +
> +/^#define X86_BUG_/ {
> +	if (match($0, value_expr)) {
> +		value = substr($0, RSTART + 1, RLENGTH - 2)
> +		print "\t[NCAPINTS*32+(" value ")] = \"" $2 "\","
> +	}
> +}
> +
> +END {
> +	print "};"
> +}
> diff --git a/tools/objtool/.gitignore b/tools/objtool/.gitignore
> index 759303657bd7c..73d883128511f 100644
> --- a/tools/objtool/.gitignore
> +++ b/tools/objtool/.gitignore
> @@ -1,4 +1,5 @@
>  # SPDX-License-Identifier: GPL-2.0-only
> +arch/x86/lib/cpu-feature-names.c
>  arch/x86/lib/inat-tables.c
>  /objtool
>  feature
> diff --git a/tools/objtool/Makefile b/tools/objtool/Makefile
> index df793ca6fc1a1..66397d755fe4b 100644
> --- a/tools/objtool/Makefile
> +++ b/tools/objtool/Makefile
> @@ -125,6 +125,7 @@ $(LIBSUBCMD)-clean:
>  clean: $(LIBSUBCMD)-clean
>  	$(call QUIET_CLEAN, objtool) $(RM) $(OBJTOOL)
>  	$(Q)find $(OUTPUT) -name '*.o' -delete -o -name '\.*.cmd' -delete -o -name '\.*.d' -delete
> +	$(Q)$(RM) $(OUTPUT)arch/x86/lib/cpu-feature-names.c $(OUTPUT)fixdep
>  	$(Q)$(RM) $(OUTPUT)arch/x86/lib/inat-tables.c $(OUTPUT)fixdep
>  	$(Q)$(RM) -- $(OUTPUT)FEATURE-DUMP.objtool
>  	$(Q)$(RM) -r -- $(OUTPUT)feature
> diff --git a/tools/objtool/arch/loongarch/special.c b/tools/objtool/arch/loongarch/special.c
> index a80b75f7b061f..aba774109437f 100644
> --- a/tools/objtool/arch/loongarch/special.c
> +++ b/tools/objtool/arch/loongarch/special.c
> @@ -194,3 +194,8 @@ struct reloc *arch_find_switch_table(struct objtool_file *file,
>  
>  	return rodata_reloc;
>  }
> +
> +const char *arch_cpu_feature_name(int feature_number)
> +{
> +	return NULL;
> +}
> diff --git a/tools/objtool/arch/powerpc/special.c b/tools/objtool/arch/powerpc/special.c
> index 51610689abf72..8f9bf61ca0899 100644
> --- a/tools/objtool/arch/powerpc/special.c
> +++ b/tools/objtool/arch/powerpc/special.c
> @@ -18,3 +18,8 @@ struct reloc *arch_find_switch_table(struct objtool_file *file,
>  {
>  	exit(-1);
>  }
> +
> +const char *arch_cpu_feature_name(int feature_number)
> +{
> +	return NULL;
> +}
> diff --git a/tools/objtool/arch/x86/Build b/tools/objtool/arch/x86/Build
> index 3dedb2fd8f3a0..b95448ee01ee4 100644
> --- a/tools/objtool/arch/x86/Build
> +++ b/tools/objtool/arch/x86/Build
> @@ -12,3 +12,13 @@ $(OUTPUT)arch/x86/lib/inat-tables.c: $(inat_tables_script) $(inat_tables_maps)
>  $(OUTPUT)arch/x86/decode.o: $(OUTPUT)arch/x86/lib/inat-tables.c
>  
>  CFLAGS_decode.o += -I$(OUTPUT)arch/x86/lib
> +
> +cpu_features = ../arch/x86/include/asm/cpufeatures.h
> +cpu_features_script = ../arch/x86/tools/gen-cpu-feature-names-x86.awk
> +
> +$(OUTPUT)arch/x86/lib/cpu-feature-names.c: $(cpu_features_script) $(cpu_features)
> +	$(Q)$(call echo-cmd,gen)$(AWK) -f $(cpu_features_script) $(cpu_features) > $@
> +
> +$(OUTPUT)arch/x86/special.o: $(OUTPUT)arch/x86/lib/cpu-feature-names.c
> +
> +CFLAGS_special.o := -I$(OUTPUT)arch/x86/lib
> diff --git a/tools/objtool/arch/x86/special.c b/tools/objtool/arch/x86/special.c
> index 09300761f1085..e817a3fff4491 100644
> --- a/tools/objtool/arch/x86/special.c
> +++ b/tools/objtool/arch/x86/special.c
> @@ -4,6 +4,10 @@
>  #include <objtool/special.h>
>  #include <objtool/builtin.h>
>  #include <objtool/warn.h>
> +#include <asm/cpufeatures.h>
> +
> +/* cpu feature name array generated from cpufeatures.h */
> +#include "cpu-feature-names.c"
>  
>  void arch_handle_alternative(struct special_alt *alt)
>  {
> @@ -134,3 +138,9 @@ struct reloc *arch_find_switch_table(struct objtool_file *file,
>  	*table_size = 0;
>  	return rodata_reloc;
>  }
> +
> +const char *arch_cpu_feature_name(int feature_number)
> +{
> +	return (feature_number < ARRAY_SIZE(cpu_feature_names)) ?
> +		cpu_feature_names[feature_number] : NULL;
> +}
> diff --git a/tools/objtool/include/objtool/special.h b/tools/objtool/include/objtool/special.h
> index b22410745e4a1..121c3761899c1 100644
> --- a/tools/objtool/include/objtool/special.h
> +++ b/tools/objtool/include/objtool/special.h
> @@ -38,4 +38,6 @@ bool arch_support_alt_relocation(struct special_alt *special_alt,
>  struct reloc *arch_find_switch_table(struct objtool_file *file,
>  				     struct instruction *insn,
>  				     unsigned long *table_size);
> +const char *arch_cpu_feature_name(int feature_number);
> +
>  #endif /* _SPECIAL_H */


  parent reply	other threads:[~2025-11-25 13:29 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-11-24 16:48 [PATCH v6 26/30 (mawk fix)] objtool: Add function to get the name of a CPU feature Alexandre Chartre
2025-11-24 19:35 ` Peter Zijlstra
2025-11-24 19:45   ` Peter Zijlstra
2025-11-25  7:55   ` Alexandre Chartre
2025-11-25 13:29 ` David Laight [this message]
2025-11-25 14:43   ` Alexandre Chartre
2025-11-25 18:34     ` David Laight
2025-11-25 19:36       ` Alexandre Chartre

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20251125132902.0cace2c8@pumpkin \
    --to=david.laight.linux@gmail.com \
    --cc=alexandre.chartre@oracle.com \
    --cc=jpoimboe@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@kernel.org \
    --cc=peterz@infradead.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.