Re: [PATCH v9 0/4] Introduce GCC plugin infrastructure

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Mon, May 23, 2016 at 3:07 PM, Emese Revfy <re.emese@xxxxxxxxx> wrote:
> This patch set introduce the GCC plugin infrastructure with examples for testing
> and documentation.
>
> GCC plugins are loadable modules that provide extra features to the compiler.
> They are useful for runtime instrumentation and static analysis.
>
> The infrastructure supports all gcc versions from 4.5 to 6.0, building
> out-of-tree modules and building in a separate directory. Cross-compilation
> is supported too but currently only the x86, arm, arm64 and uml architectures enable plugins.
>
> This infrastructure was ported from grsecurity/PaX. Based on work created by the PaX Team.
> It is a CII project supported by the Linux Foundation.
>
> Emese Revfy (4):
>  Shared library support
>  GCC plugin infrastructure
>  Add Cyclomatic complexity plugin
>  Add sancov plugin

Michal, once -rc1 is out, can you carry this for -next? I'm happy to
use my tree for it, if you want me to do it.

-Kees

>
>
> Changes from v8:
>  * Use warnings instead of errors because of allmodconfig/allyesconfig builds
>    with old gcc versions
>     (Suggested-by: Michal Marek <mmarek@xxxxxxxx>)
>  * Order HAVE_GCC_PLUGINS alphabetically
>  * Moved exported variables from the top level Makefile to scripts/Makefile.gcc-plugins
>
> Changes from v7:
>  * Moved the "The GCC plugin infrastructure supports the arm and arm64 architectures too"
>    and the "Documentations of the GCC plugin infrastructre" patches
>    into the "GCC plugin infrastructure" patch
>     (Suggested-by: Masahiro Yamada <yamada.masahiro@xxxxxxxxxxxxx>)
>  * Add gcc-plugin.sh to MAINTAINERS
>     (Suggested-by: Masahiro Yamada <yamada.masahiro@xxxxxxxxxxxxx>)
>  * Makefile.host: Remove *shobjs from multi-depend
>     (Suggested-by: Masahiro Yamada <yamada.masahiro@xxxxxxxxxxxxx>)
>  * Have distclean and mrproper targets clean the *.so files
>     (Suggested-by: Masahiro Yamada <yamada.masahiro@xxxxxxxxxxxxx>)
>  * Simplied gcc-plugin-y to add plugins to HOSTLIBS
>     (Suggested-by: Masahiro Yamada <yamada.masahiro@xxxxxxxxxxxxx>)
>  * Simplified Makefile.host
>     (Suggested-by: Masahiro Yamada <yamada.masahiro@xxxxxxxxxxxxx>)
>  * Clean *.c.[012]*.*
>     (Suggested-by: Michal Marek <mmarek@xxxxxxxx>)
>  * Documentation: gcc plugins have to compilable as C and C++
>  * Enable GCC plugins for UML
>
> Changes from v6:
>  * Disable the sancov plugin whenever KCOV_INSTRUMENT is disabled
>     (Reported-by: Huang Ying <ying.huang@xxxxxxxxxxxxxxx>)
>  * Disable KCOV/sancov plugin because this is not a regular kernel code
>     (Reported-by: Huang Ying <ying.huang@xxxxxxxxxxxxxxx>)
>  * Removed unnecessary gcc plugin cflags
>     (Signed-off-by: Masahiro Yamada <yamada.masahiro@xxxxxxxxxxxxx>)
>  * Removed unnecessary gcc plugin aflags
>
> Changes from v5:
>  * Set important properties on the external fndecl (Add sancov plugin)
>  * Revert documentation change too (Shared library support)
>     (Suggested-by: Kees Cook <keescook@xxxxxxxxxxxx>)
>  * The GCC plugin infrastructure now supports the arm and arm64 architectures too
>     (Signed-off-by: David Brown <david.brown@xxxxxxxxxx>)
>  * Simplify the computation of PLUGINCC (GCC plugin infrastructure)
>     (Suggested-by: Masahiro Yamada <yamada.masahiro@xxxxxxxxxxxxx>)
>  * Simplify the invocation of gcc-plugin.sh (GCC plugin infrastructure)
>     (Suggested-by: Masahiro Yamada <yamada.masahiro@xxxxxxxxxxxxx>)
>  * Make use of multi-depend (Shared library support)
>     (Suggested-by: Masahiro Yamada <yamada.masahiro@xxxxxxxxxxxxx>)
>  * Remove unnecessary exports (GCC plugin infrastructure)
>     (Suggested-by: Masahiro Yamada <yamada.masahiro@xxxxxxxxxxxxx>)
>  * Simplify Makefile by using addprefix (GCC plugin infrastructure)
>     (Suggested-by: Masahiro Yamada <yamada.masahiro@xxxxxxxxxxxxx>)
>  * Moved the gcc plugins from tools/ to scripts/ (GCC plugin infrastructure)
>     (Suggested-by: Masahiro Yamada <yamada.masahiro@xxxxxxxxxxxxx>)
>  * Removed plugins from KBUILD_CFLAGS_32 (GCC plugin infrastructure)
>  * Remove gcc-plugin target everywhere
>     (Suggested-by and partly Written-by: Masahiro Yamada <yamada.masahiro@xxxxxxxxxxxxx>)
>  * There is no leaf gcc attribute in gcc-4.5 (Add sancov plugin)
>  * Added support to the sancov plugin with kcov (Add sancov plugin)
>
> Changes from v4:
>  * Moved shared library support from the GCC plugin infrastructure patch into
>    a different patch
>  * Update gcc-*.h from PaX
>    * Fixed gcc-common.h for gcc 6
>    * Added pass cloning support to the gcc pass generators
>  * Disable all plugins in vdso because it is userland code
>  * Add sancov gcc plugin: another use case for gcc plugin support in the kernel
>    is when there is a feature in the latest gcc version and we would like to use
>    it with older gcc versions as well (e.g., distros).
>
> Changes from v3:
>  * Fix some indentation related warnings
>    (Suggested by checkpatch.pl)
>  * Add maintainer entries
>  * Don't run gcc_plugin.sh when the GCC_PLUGINS option is disabled or unsupported
>    (Reported-by: Fengguang Wu <fengguang.wu@xxxxxxxxx>)
>
> Changes from v2:
>  * Fixed incorrectly encoded characters
>  * Generate the GIMPLE, IPA, SIMPLE_IPA and RTL pass structures
>    (Suggested-by: Rasmus Villemoes <linux@xxxxxxxxxxxxxxxxxx>)
>  * Write plugin related warning messages to stderr instead of stdout
>    (Suggested-by: Kees Cook <keescook@xxxxxxxxxxxx>)
>  * Mention the installation of the gcc plugin headers (Documentation)
>
> Changes from v1:
>  * Move the gcc-plugins make target into a separate Makefile because there may
>    be a lot of plugins (Suggested-by: Rasmus Villemoes)
>  * Simplify the dependencies of the plugin related config option
>    (Suggested-by: Kees Cook <keescook@xxxxxxxxxxxx>)
>  * Removed the unnecessary example plugin
>
> ---
>  .gitignore                                         |   1 +
>  Documentation/dontdiff                             |   1 +
>  Documentation/gcc-plugins.txt                      |  87 +++
>  MAINTAINERS                                        |   9 +
>  Makefile                                           |  24 +-
>  arch/Kconfig                                       |  36 +
>  arch/arm/Kconfig                                   |   1 +
>  arch/arm64/Kconfig                                 |   1 +
>  arch/um/Kconfig.common                             |   1 +
>  arch/x86/Kconfig                                   |   1 +
>  arch/x86/entry/vdso/Makefile                       |   3 +-
>  arch/x86/purgatory/Makefile                        |   2 +
>  lib/Kconfig.debug                                  |   2 +
>  scripts/Makefile                                   |   2 +-
>  scripts/Makefile.build                             |   2 +-
>  scripts/Makefile.clean                             |   4 +-
>  scripts/Makefile.gcc-plugins                       |  43 ++
>  scripts/Makefile.host                              |  55 +-
>  scripts/gcc-plugin.sh                              |  51 ++
>  scripts/gcc-plugins/Makefile                       |  27 +
>  scripts/gcc-plugins/cyc_complexity_plugin.c        |  73 ++
>  scripts/gcc-plugins/gcc-common.h                   | 830 +++++++++++++++++++++
>  scripts/gcc-plugins/gcc-generate-gimple-pass.h     | 175 +++++
>  scripts/gcc-plugins/gcc-generate-ipa-pass.h        | 289 +++++++
>  scripts/gcc-plugins/gcc-generate-rtl-pass.h        | 175 +++++
>  scripts/gcc-plugins/gcc-generate-simple_ipa-pass.h | 175 +++++
>  scripts/gcc-plugins/sancov_plugin.c                | 144 ++++
>  scripts/link-vmlinux.sh                            |   2 +-
>  scripts/package/builddeb                           |   1 +
>  29 files changed, 2200 insertions(+), 17 deletions(-)



-- 
Kees Cook
Chrome OS & Brillo Security
--
To unsubscribe from this list: send the line "unsubscribe linux-kbuild" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Linux&nblp;USB Development]     [Linux Media]     [Video for Linux]     [Linux Audio Users]     [Yosemite Secrets]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux