Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1757670AbcDMCfr (ORCPT ); Tue, 12 Apr 2016 22:35:47 -0400 Received: from conssluserg-03.nifty.com ([210.131.2.82]:62825 "EHLO conssluserg-03.nifty.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1757605AbcDMCfp (ORCPT ); Tue, 12 Apr 2016 22:35:45 -0400 DKIM-Filter: OpenDKIM Filter v2.10.3 conssluserg-03.nifty.com u3D2ZQuU000791 X-Nifty-SrcIP: [209.85.161.169] MIME-Version: 1.0 In-Reply-To: <20160407231300.d99272db798388cad1d2e22a@gmail.com> References: <20160407231023.5f1307ffc79f0cdd880eedb7@gmail.com> <20160407231300.d99272db798388cad1d2e22a@gmail.com> Date: Wed, 13 Apr 2016 11:35:26 +0900 X-Gmail-Original-Message-ID: Message-ID: Subject: Re: [PATCH v6 2/6] GCC plugin infrastructure From: Masahiro Yamada To: Emese Revfy Cc: Linux Kbuild mailing list , pageexec@freemail.hu, spender@grsecurity.net, kernel-hardening@lists.openwall.com, Michal Marek , Kees Cook , Rasmus Villemoes , fengguang.wu@intel.com, Dmitry Vyukov , Linux Kernel Mailing List , David Brown Content-Type: text/plain; charset=UTF-8 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 8748 Lines: 246 Hi Emese, 2016-04-08 6:13 GMT+09:00 Emese Revfy : > diff --git a/Makefile b/Makefile > index 173437d..3af7b9e 100644 > --- a/Makefile > +++ b/Makefile > @@ -418,6 +418,8 @@ export KBUILD_AFLAGS_MODULE KBUILD_CFLAGS_MODULE KBUILD_LDFLAGS_MODULE > export KBUILD_AFLAGS_KERNEL KBUILD_CFLAGS_KERNEL > export KBUILD_ARFLAGS > > +export PLUGINCC GCC_PLUGINS_CFLAGS GCC_PLUGINS_AFLAGS > + > # When compiling out-of-tree modules, put MODVERDIR in the module > # tree rather than in the kernel tree. The kernel tree might > # even be read-only. > @@ -548,7 +550,7 @@ ifeq ($(KBUILD_EXTMOD),) > # in parallel > PHONY += scripts > scripts: scripts_basic include/config/auto.conf include/config/tristate.conf \ > - asm-generic > + asm-generic gcc-plugins > $(Q)$(MAKE) $(build)=$(@) > > # Objects we will link into vmlinux / subdirs we need to visit > @@ -623,6 +625,15 @@ endif > # Tell gcc to never replace conditional load with a non-conditional one > KBUILD_CFLAGS += $(call cc-option,--param=allow-store-data-races=0) > > +PHONY += gcc-plugins > +gcc-plugins: scripts_basic > +ifdef CONFIG_GCC_PLUGINS > + $(Q)$(MAKE) $(build)=scripts/gcc-plugins > +endif > + @: > + > +include scripts/Makefile.gcc-plugins > + > ifdef CONFIG_READABLE_ASM > # Disable optimizations that make assembler listings hard to read. > # reorder blocks reorders the control in the function > @@ -949,6 +960,8 @@ endif > > # The actual objects are generated when descending, > # make sure no implicit rule kicks in > +$(filter-out $(init-y),$(vmlinux-deps)): KBUILD_CFLAGS += $(GCC_PLUGINS_CFLAGS) > +$(filter-out $(init-y),$(vmlinux-deps)): KBUILD_AFLAGS += $(GCC_PLUGINS_AFLAGS) > $(sort $(vmlinux-deps)): $(vmlinux-dirs) ; I do not get your intention here. It looks like you are trying to omit plugin flags for init/ directory. (Actually this code is not working, though) Then, you add plug the following lines to init/Makefile +ccflags-y := $(GCC_PLUGINS_CFLAGS) +asflags-y := $(GCC_PLUGINS_AFLAGS) > # Handle descending into subdirectories listed in $(vmlinux-dirs) > @@ -1001,10 +1014,13 @@ prepare1: prepare2 $(version_h) include/generated/utsrelease.h \ > > archprepare: archheaders archscripts prepare1 scripts_basic > > -prepare0: archprepare FORCE > +prepare0: KBUILD_CFLAGS += $(GCC_PLUGINS_CFLAGS) > +prepare0: KBUILD_AFLAGS += $(GCC_PLUGINS_AFLAGS) > +prepare0: archprepare gcc-plugins FORCE > $(Q)$(MAKE) $(build)=. > > # All the preparing.. > +prepare: KBUILD_CFLAGS := $(filter-out $(GCC_PLUGINS_CFLAGS),$(KBUILD_CFLAGS)) > prepare: prepare0 prepare-objtool > > ifdef CONFIG_STACK_VALIDATION > @@ -1137,6 +1153,8 @@ all: modules > # using awk while concatenating to the final file. > > PHONY += modules > +modules: KBUILD_CFLAGS += $(GCC_PLUGINS_CFLAGS) > +modules: KBUILD_AFLAGS += $(GCC_PLUGINS_AFLAGS) > modules: $(vmlinux-dirs) $(if $(KBUILD_BUILTIN),vmlinux) modules.builtin > $(Q)$(AWK) '!x[$$0]++' $(vmlinux-dirs:%=$(objtree)/%/modules.order) > $(objtree)/modules.order > @$(kecho) ' Building modules, stage 2.'; > @@ -1257,7 +1275,7 @@ distclean: mrproper > @find $(srctree) $(RCS_FIND_IGNORE) \ > \( -name '*.orig' -o -name '*.rej' -o -name '*~' \ > -o -name '*.bak' -o -name '#*#' -o -name '.*.orig' \ > - -o -name '.*.rej' -o -name '*%' -o -name 'core' \) \ > + -o -name '.*.rej' -o -name '*.so' -o -name '*%' -o -name 'core' \) \ > -type f -print | xargs rm -f > > > @@ -1426,6 +1444,8 @@ PHONY += $(module-dirs) modules > $(module-dirs): crmodverdir $(objtree)/Module.symvers > $(Q)$(MAKE) $(build)=$(patsubst _module_%,%,$@) > > +modules: KBUILD_CFLAGS += $(GCC_PLUGINS_CFLAGS) > +modules: KBUILD_AFLAGS += $(GCC_PLUGINS_AFLAGS) > modules: $(module-dirs) > @$(kecho) ' Building modules, stage 2.'; > $(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modpost > @@ -1567,10 +1587,14 @@ else > target-dir = $(if $(KBUILD_EXTMOD),$(dir $<),$(dir $@)) > endif > > +%.s: KBUILD_CFLAGS += $(GCC_PLUGINS_CFLAGS) > +%.s: KBUILD_AFLAGS += $(GCC_PLUGINS_AFLAGS) > %.s: %.c prepare scripts FORCE > $(Q)$(MAKE) $(build)=$(build-dir) $(target-dir)$(notdir $@) > %.i: %.c prepare scripts FORCE > $(Q)$(MAKE) $(build)=$(build-dir) $(target-dir)$(notdir $@) > +%.o: KBUILD_CFLAGS += $(GCC_PLUGINS_CFLAGS) > +%.o: KBUILD_AFLAGS += $(GCC_PLUGINS_AFLAGS) > %.o: %.c prepare scripts FORCE > $(Q)$(MAKE) $(build)=$(build-dir) $(target-dir)$(notdir $@) > %.lst: %.c prepare scripts FORCE > @@ -1589,10 +1613,14 @@ endif > $(build)=$(build-dir) > # Make sure the latest headers are built for Documentation > Documentation/: headers_install > +%/: KBUILD_CFLAGS += $(GCC_PLUGINS_CFLAGS) > +%/: KBUILD_AFLAGS += $(GCC_PLUGINS_AFLAGS) > %/: prepare scripts FORCE > $(cmd_crmodverdir) > $(Q)$(MAKE) KBUILD_MODULES=$(if $(CONFIG_MODULES),1) \ > $(build)=$(build-dir) > +%.ko: KBUILD_CFLAGS += $(GCC_PLUGINS_CFLAGS) > +%.ko: KBUILD_AFLAGS += $(GCC_PLUGINS_AFLAGS) > %.ko: prepare scripts FORCE > $(cmd_crmodverdir) > $(Q)$(MAKE) KBUILD_MODULES=$(if $(CONFIG_MODULES),1) \ Why do you need to sprinkle "KBUILD_CFLAGS += $(GCC_PLUGINS_CFLAGS)" here and there? Unless I am missing something, I think the following should work. diff --git a/Makefile b/Makefile index 5d65f4b..f85420b 100644 --- a/Makefile +++ b/Makefile @@ -962,8 +962,6 @@ endif # The actual objects are generated when descending, # make sure no implicit rule kicks in -$(filter-out $(init-y),$(vmlinux-deps)): KBUILD_CFLAGS += $(GCC_PLUGINS_CFLAGS) -$(filter-out $(init-y),$(vmlinux-deps)): KBUILD_AFLAGS += $(GCC_PLUGINS_AFLAGS) $(sort $(vmlinux-deps)): $(vmlinux-dirs) ; # Handle descending into subdirectories listed in $(vmlinux-dirs) @@ -1016,13 +1014,10 @@ prepare1: prepare2 $(version_h) include/generated/utsrelease.h archprepare: archheaders archscripts prepare1 scripts_basic -prepare0: KBUILD_CFLAGS += $(GCC_PLUGINS_CFLAGS) -prepare0: KBUILD_AFLAGS += $(GCC_PLUGINS_AFLAGS) prepare0: archprepare gcc-plugins FORCE $(Q)$(MAKE) $(build)=. # All the preparing.. -prepare: KBUILD_CFLAGS := $(filter-out $(GCC_PLUGINS_CFLAGS),$(KBUILD_CFLAGS)) prepare: prepare0 prepare-objtool ifdef CONFIG_STACK_VALIDATION @@ -1155,8 +1150,6 @@ all: modules # using awk while concatenating to the final file. PHONY += modules -modules: KBUILD_CFLAGS += $(GCC_PLUGINS_CFLAGS) -modules: KBUILD_AFLAGS += $(GCC_PLUGINS_AFLAGS) modules: $(vmlinux-dirs) $(if $(KBUILD_BUILTIN),vmlinux) modules.builtin $(Q)$(AWK) '!x[$$0]++' $(vmlinux-dirs:%=$(objtree)/%/modules.order) > $(objtre @$(kecho) ' Building modules, stage 2.'; @@ -1446,8 +1439,6 @@ PHONY += $(module-dirs) modules $(module-dirs): crmodverdir $(objtree)/Module.symvers $(Q)$(MAKE) $(build)=$(patsubst _module_%,%,$@) -modules: KBUILD_CFLAGS += $(GCC_PLUGINS_CFLAGS) -modules: KBUILD_AFLAGS += $(GCC_PLUGINS_AFLAGS) modules: $(module-dirs) @$(kecho) ' Building modules, stage 2.'; $(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modpost @@ -1589,14 +1580,10 @@ else target-dir = $(if $(KBUILD_EXTMOD),$(dir $<),$(dir $@)) endif -%.s: KBUILD_CFLAGS += $(GCC_PLUGINS_CFLAGS) -%.s: KBUILD_AFLAGS += $(GCC_PLUGINS_AFLAGS) %.s: %.c prepare scripts FORCE $(Q)$(MAKE) $(build)=$(build-dir) $(target-dir)$(notdir $@) %.i: %.c prepare scripts FORCE $(Q)$(MAKE) $(build)=$(build-dir) $(target-dir)$(notdir $@) -%.o: KBUILD_CFLAGS += $(GCC_PLUGINS_CFLAGS) -%.o: KBUILD_AFLAGS += $(GCC_PLUGINS_AFLAGS) %.o: %.c prepare scripts FORCE $(Q)$(MAKE) $(build)=$(build-dir) $(target-dir)$(notdir $@) %.lst: %.c prepare scripts FORCE @@ -1615,14 +1602,10 @@ endif $(build)=$(build-dir) # Make sure the latest headers are built for Documentation Documentation/: headers_install -%/: KBUILD_CFLAGS += $(GCC_PLUGINS_CFLAGS) -%/: KBUILD_AFLAGS += $(GCC_PLUGINS_AFLAGS) %/: prepare scripts FORCE $(cmd_crmodverdir) $(Q)$(MAKE) KBUILD_MODULES=$(if $(CONFIG_MODULES),1) \ $(build)=$(build-dir) -%.ko: KBUILD_CFLAGS += $(GCC_PLUGINS_CFLAGS) -%.ko: KBUILD_AFLAGS += $(GCC_PLUGINS_AFLAGS) %.ko: prepare scripts FORCE $(cmd_crmodverdir) $(Q)$(MAKE) KBUILD_MODULES=$(if $(CONFIG_MODULES),1) \ diff --git a/scripts/Makefile.gcc-plugins b/scripts/Makefile.gcc-plugins index 25a70fb..34d6224 100644 --- a/scripts/Makefile.gcc-plugins +++ b/scripts/Makefile.gcc-plugins @@ -26,4 +26,6 @@ ifdef CONFIG_GCC_PLUGINS endif endif + KBUILD_CFLAGS += $(GCC_PLUGINS_CFLAGS) + endif -- Best Regards Masahiro Yamada