On Wed, Oct 20, 2021 at 10:35:54AM -0700, Kees Cook wrote: > This plugin has no impact on the resulting binary, is disabled > under COMPILE_TEST, and is not enabled on any builds I'm aware of. > Additionally, given the clarified purpose of GCC plugins in the kernel, > remove cyc_complexity. > > Cc: Masahiro Yamada <masahiroy@xxxxxxxxxx> > Cc: Michal Marek <michal.lkml@xxxxxxxxxxx> > Cc: Nick Desaulniers <ndesaulniers@xxxxxxxxxx> > Cc: Jonathan Corbet <corbet@xxxxxxx> > Cc: linux-hardening@xxxxxxxxxxxxxxx > Cc: linux-kbuild@xxxxxxxxxxxxxxx > Cc: linux-doc@xxxxxxxxxxxxxxx > Signed-off-by: Kees Cook <keescook@xxxxxxxxxxxx> Reviewed-by: Nathan Chancellor <nathan@xxxxxxxxxx> One comment below. > --- > Documentation/kbuild/gcc-plugins.rst | 2 - > scripts/Makefile.gcc-plugins | 2 - > scripts/gcc-plugins/Kconfig | 16 ----- > scripts/gcc-plugins/cyc_complexity_plugin.c | 69 --------------------- > 4 files changed, 89 deletions(-) > delete mode 100644 scripts/gcc-plugins/cyc_complexity_plugin.c > > diff --git a/Documentation/kbuild/gcc-plugins.rst b/Documentation/kbuild/gcc-plugins.rst > index 4b28c7a4032f..0ba76719f1b9 100644 > --- a/Documentation/kbuild/gcc-plugins.rst > +++ b/Documentation/kbuild/gcc-plugins.rst > @@ -96,7 +96,6 @@ Enable the GCC plugin infrastructure and some plugin(s) you want to use > in the kernel config:: > > CONFIG_GCC_PLUGINS=y > - CONFIG_GCC_PLUGIN_CYC_COMPLEXITY=y > CONFIG_GCC_PLUGIN_LATENT_ENTROPY=y > ... > There is a comment about the cyc_complexity plugin at the very end of this file that should also be removed it seems: "See the cyc_complexity_plugin.c (CONFIG_GCC_PLUGIN_CYC_COMPLEXITY) GCC plugin." > @@ -115,4 +114,3 @@ The GCC plugins are in scripts/gcc-plugins/. You need to put plugin source files > right under scripts/gcc-plugins/. Creating subdirectories is not supported. > It must be added to scripts/gcc-plugins/Makefile, scripts/Makefile.gcc-plugins > and a relevant Kconfig file. > -See the cyc_complexity_plugin.c (CONFIG_GCC_PLUGIN_CYC_COMPLEXITY) GCC plugin. > diff --git a/scripts/Makefile.gcc-plugins b/scripts/Makefile.gcc-plugins > index 952e46876329..6583ecf2e674 100644 > --- a/scripts/Makefile.gcc-plugins > +++ b/scripts/Makefile.gcc-plugins > @@ -1,7 +1,5 @@ > # SPDX-License-Identifier: GPL-2.0 > > -gcc-plugin-$(CONFIG_GCC_PLUGIN_CYC_COMPLEXITY) += cyc_complexity_plugin.so > - > gcc-plugin-$(CONFIG_GCC_PLUGIN_LATENT_ENTROPY) += latent_entropy_plugin.so > gcc-plugin-cflags-$(CONFIG_GCC_PLUGIN_LATENT_ENTROPY) \ > += -DLATENT_ENTROPY_PLUGIN > diff --git a/scripts/gcc-plugins/Kconfig b/scripts/gcc-plugins/Kconfig > index 3f5d3580ec06..821a725a7f5c 100644 > --- a/scripts/gcc-plugins/Kconfig > +++ b/scripts/gcc-plugins/Kconfig > @@ -19,22 +19,6 @@ menuconfig GCC_PLUGINS > > if GCC_PLUGINS > > -config GCC_PLUGIN_CYC_COMPLEXITY > - bool "Compute the cyclomatic complexity of a function" if EXPERT > - depends on !COMPILE_TEST # too noisy > - help > - The complexity M of a function's control flow graph is defined as: > - M = E - N + 2P > - where > - > - E = the number of edges > - N = the number of nodes > - P = the number of connected components (exit nodes). > - > - Enabling this plugin reports the complexity to stderr during the > - build. It mainly serves as a simple example of how to create a > - gcc plugin for the kernel. > - > config GCC_PLUGIN_SANCOV > bool > # Plugin can be removed once the kernel only supports GCC 6.1.0+ > diff --git a/scripts/gcc-plugins/cyc_complexity_plugin.c b/scripts/gcc-plugins/cyc_complexity_plugin.c > deleted file mode 100644 > index 73124c2b3edd..000000000000 > --- a/scripts/gcc-plugins/cyc_complexity_plugin.c > +++ /dev/null > @@ -1,69 +0,0 @@ > -/* > - * Copyright 2011-2016 by Emese Revfy <re.emese@xxxxxxxxx> > - * Licensed under the GPL v2, or (at your option) v3 > - * > - * Homepage: > - * https://github.com/ephox-gcc-plugins/cyclomatic_complexity > - * > - * https://en.wikipedia.org/wiki/Cyclomatic_complexity > - * The complexity M is then defined as: > - * M = E - N + 2P > - * where > - * > - * E = the number of edges of the graph > - * N = the number of nodes of the graph > - * P = the number of connected components (exit nodes). > - * > - * Usage (4.5 - 5): > - * $ make clean; make run > - */ > - > -#include "gcc-common.h" > - > -__visible int plugin_is_GPL_compatible; > - > -static struct plugin_info cyc_complexity_plugin_info = { > - .version = "20160225", > - .help = "Cyclomatic Complexity\n", > -}; > - > -static unsigned int cyc_complexity_execute(void) > -{ > - int complexity; > - expanded_location xloc; > - > - /* M = E - N + 2P */ > - complexity = n_edges_for_fn(cfun) - n_basic_blocks_for_fn(cfun) + 2; > - > - xloc = expand_location(DECL_SOURCE_LOCATION(current_function_decl)); > - fprintf(stderr, "Cyclomatic Complexity %d %s:%s\n", complexity, > - xloc.file, DECL_NAME_POINTER(current_function_decl)); > - > - return 0; > -} > - > -#define PASS_NAME cyc_complexity > - > -#define NO_GATE > -#define TODO_FLAGS_FINISH TODO_dump_func > - > -#include "gcc-generate-gimple-pass.h" > - > -__visible int plugin_init(struct plugin_name_args *plugin_info, struct plugin_gcc_version *version) > -{ > - const char * const plugin_name = plugin_info->base_name; > - > - PASS_INFO(cyc_complexity, "ssa", 1, PASS_POS_INSERT_AFTER); > - > - if (!plugin_default_version_check(version, &gcc_version)) { > - error(G_("incompatible gcc/plugin versions")); > - return 1; > - } > - > - register_callback(plugin_name, PLUGIN_INFO, NULL, > - &cyc_complexity_plugin_info); > - register_callback(plugin_name, PLUGIN_PASS_MANAGER_SETUP, NULL, > - &cyc_complexity_pass_info); > - > - return 0; > -} > -- > 2.30.2 >