diff options
author | Emese Revfy <re.emese@gmail.com> | 2016-05-23 18:11:37 -0400 |
---|---|---|
committer | Michal Marek <mmarek@suse.com> | 2016-06-07 16:57:10 -0400 |
commit | 543c37cb165049c3be24a0d4733e67caa2b33eef (patch) | |
tree | 91f3e0bb972a6283b607da394268e7e5872292b5 /scripts/Makefile.gcc-plugins | |
parent | 0dae776c6bf31e779c172753f6e2d6426eb42523 (diff) |
Add sancov plugin
The sancov gcc plugin inserts a __sanitizer_cov_trace_pc() call
at the start of basic blocks.
This plugin is a helper plugin for the kcov feature. It supports
all gcc versions with plugin support (from gcc-4.5 on).
It is based on the gcc commit "Add fuzzing coverage support" by Dmitry Vyukov
(https://gcc.gnu.org/viewcvs/gcc?limit_changes=0&view=revision&revision=231296).
Signed-off-by: Emese Revfy <re.emese@gmail.com>
Acked-by: Kees Cook <keescook@chromium.org>
Signed-off-by: Michal Marek <mmarek@suse.com>
Diffstat (limited to 'scripts/Makefile.gcc-plugins')
-rw-r--r-- | scripts/Makefile.gcc-plugins | 21 |
1 files changed, 20 insertions, 1 deletions
diff --git a/scripts/Makefile.gcc-plugins b/scripts/Makefile.gcc-plugins index b4a189c95a8a..5e22b60589c1 100644 --- a/scripts/Makefile.gcc-plugins +++ b/scripts/Makefile.gcc-plugins | |||
@@ -2,10 +2,26 @@ ifdef CONFIG_GCC_PLUGINS | |||
2 | __PLUGINCC := $(call cc-ifversion, -ge, 0408, $(HOSTCXX), $(HOSTCC)) | 2 | __PLUGINCC := $(call cc-ifversion, -ge, 0408, $(HOSTCXX), $(HOSTCC)) |
3 | PLUGINCC := $(shell $(CONFIG_SHELL) $(srctree)/scripts/gcc-plugin.sh "$(__PLUGINCC)" "$(HOSTCXX)" "$(CC)") | 3 | PLUGINCC := $(shell $(CONFIG_SHELL) $(srctree)/scripts/gcc-plugin.sh "$(__PLUGINCC)" "$(HOSTCXX)" "$(CC)") |
4 | 4 | ||
5 | SANCOV_PLUGIN := -fplugin=$(objtree)/scripts/gcc-plugins/sancov_plugin.so | ||
6 | |||
5 | gcc-plugin-$(CONFIG_GCC_PLUGIN_CYC_COMPLEXITY) += cyc_complexity_plugin.so | 7 | gcc-plugin-$(CONFIG_GCC_PLUGIN_CYC_COMPLEXITY) += cyc_complexity_plugin.so |
8 | |||
9 | ifdef CONFIG_GCC_PLUGIN_SANCOV | ||
10 | ifeq ($(CFLAGS_KCOV),) | ||
11 | # It is needed because of the gcc-plugin.sh and gcc version checks. | ||
12 | gcc-plugin-$(CONFIG_GCC_PLUGIN_SANCOV) += sancov_plugin.so | ||
13 | |||
14 | ifneq ($(PLUGINCC),) | ||
15 | CFLAGS_KCOV := $(SANCOV_PLUGIN) | ||
16 | else | ||
17 | $(warning warning: cannot use CONFIG_KCOV: -fsanitize-coverage=trace-pc is not supported by compiler) | ||
18 | endif | ||
19 | endif | ||
20 | endif | ||
21 | |||
6 | GCC_PLUGINS_CFLAGS := $(addprefix -fplugin=$(objtree)/scripts/gcc-plugins/, $(gcc-plugin-y)) | 22 | GCC_PLUGINS_CFLAGS := $(addprefix -fplugin=$(objtree)/scripts/gcc-plugins/, $(gcc-plugin-y)) |
7 | 23 | ||
8 | export PLUGINCC GCC_PLUGINS_CFLAGS GCC_PLUGIN | 24 | export PLUGINCC GCC_PLUGINS_CFLAGS GCC_PLUGIN SANCOV_PLUGIN |
9 | 25 | ||
10 | ifeq ($(PLUGINCC),) | 26 | ifeq ($(PLUGINCC),) |
11 | ifneq ($(GCC_PLUGINS_CFLAGS),) | 27 | ifneq ($(GCC_PLUGINS_CFLAGS),) |
@@ -16,6 +32,9 @@ ifdef CONFIG_GCC_PLUGINS | |||
16 | $(warning warning: your gcc version does not support plugins, you should upgrade it to gcc 4.5 at least) | 32 | $(warning warning: your gcc version does not support plugins, you should upgrade it to gcc 4.5 at least) |
17 | endif | 33 | endif |
18 | endif | 34 | endif |
35 | else | ||
36 | # SANCOV_PLUGIN can be only in CFLAGS_KCOV because avoid duplication. | ||
37 | GCC_PLUGINS_CFLAGS := $(filter-out $(SANCOV_PLUGIN), $(GCC_PLUGINS_CFLAGS)) | ||
19 | endif | 38 | endif |
20 | 39 | ||
21 | KBUILD_CFLAGS += $(GCC_PLUGINS_CFLAGS) | 40 | KBUILD_CFLAGS += $(GCC_PLUGINS_CFLAGS) |