Re: [RFC v4 09/18] gcc-plugins: objtool: Add plugin to detect switch table on arm64

From: Josh Poimboeuf
Date: Thu Aug 22 2019 - 16:05:10 EST


On Fri, Aug 16, 2019 at 01:23:54PM +0100, Raphael Gault wrote:
> This plugins comes into play before the final 2 RTL passes of GCC and

"plugin"

> detects switch-tables that are to be outputed in the ELF and writes
> information in an "objtool_data" section which will be used by objtool.

The section should probably have a ".discard" prefix
(.discard.objtool_data) so it gets discarded at link time.

Also, "objtool_data" is a bit generic. How about
".discard.switch_tables" or something.

>
> Signed-off-by: Raphael Gault <raphael.gault@xxxxxxx>
> ---
> scripts/Makefile.gcc-plugins | 2 +
> scripts/gcc-plugins/Kconfig | 9 +++
> .../arm64_switch_table_detection_plugin.c | 58 +++++++++++++++++++
> 3 files changed, 69 insertions(+)
> create mode 100644 scripts/gcc-plugins/arm64_switch_table_detection_plugin.c
>
> diff --git a/scripts/Makefile.gcc-plugins b/scripts/Makefile.gcc-plugins
> index 5f7df50cfe7a..a56736df9dc2 100644
> --- a/scripts/Makefile.gcc-plugins
> +++ b/scripts/Makefile.gcc-plugins
> @@ -44,6 +44,8 @@ ifdef CONFIG_GCC_PLUGIN_ARM_SSP_PER_TASK
> endif
> export DISABLE_ARM_SSP_PER_TASK_PLUGIN
>
> +gcc-plugin-$(CONFIG_GCC_PLUGIN_SWITCH_TABLES) += arm64_switch_table_detection_plugin.so
> +
> # All the plugin CFLAGS are collected here in case a build target needs to
> # filter them out of the KBUILD_CFLAGS.
> GCC_PLUGINS_CFLAGS := $(strip $(addprefix -fplugin=$(objtree)/scripts/gcc-plugins/, $(gcc-plugin-y)) $(gcc-plugin-cflags-y))
> diff --git a/scripts/gcc-plugins/Kconfig b/scripts/gcc-plugins/Kconfig
> index d33de0b9f4f5..1daeffb55dce 100644
> --- a/scripts/gcc-plugins/Kconfig
> +++ b/scripts/gcc-plugins/Kconfig
> @@ -113,4 +113,13 @@ config GCC_PLUGIN_ARM_SSP_PER_TASK
> bool
> depends on GCC_PLUGINS && ARM
>
> +config GCC_PLUGIN_SWITCH_TABLES
> + bool "GCC Plugin: Identify switch tables at compile time"
> + default y
> + depends on STACK_VALIDATION && ARM64
> + help
> + Plugin to identify switch tables generated at compile time and store
> + them in a .objtool_data section. Objtool will then use that section
> + to analyse the different execution path of the switch table.

This isn't something you want to ask the user about, as objtool for
arm64 requires it. For the same reason, instead of
GCC_PLUGIN_SWITCH_TABLES depending on STACK_VALIDATION, arm64
HAVE_STACK_VALIDATION should depend on GCC_PLUGIN_SWITCH_TABLES.

--
Josh