On Sat, 22 Oct 2016 17:36:34 +0200 Michal Marek <mmarek@xxxxxxxx> wrote: > Dne 20.10.2016 v 10:03 Arnd Bergmann napsal(a): > > On Thursday, October 20, 2016 2:58:27 PM CEST Nicholas Piggin wrote: > >> > >> Yeah, I had the same idea as you and Michal too. It's conceptually nicer, > >> but in practice it turned into a mess. If some architectures wanted to start > >> protecting their .h files and including them into .S for the prototypes, we > >> could start parsing those too. Should we do the quick and dirty way for 4.9? > > > > Let's stay with your approach for now. > > Agreed. My patch 2/2 needs the following incremental patch applied. It is to preprocess the .S file properly as asm the same way the kernel build does, and then building the dummy C from there. Without this, we don't necessarily get proper symbol expansion or get conditional compilation, etc. With it, genksyms should see what the assembler sees. --- scripts/Makefile.build | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/scripts/Makefile.build b/scripts/Makefile.build index 2e512a2..6beeb9e 100644 --- a/scripts/Makefile.build +++ b/scripts/Makefile.build @@ -321,12 +321,19 @@ $(real-objs-m:.o=.s): modkern_aflags := $(KBUILD_AFLAGS_MODULE) $(AFLAGS_MODULE) # or a file that it includes, in order to get versioned symbols. We build a # dummy C file that includes asm-prototypes and the EXPORT_SYMBOL lines from # the .S file (with trailing ';'), and run genksyms on that, to extract vers. +# +# This is convoluted. The .S file must first be preprocessed to run guards and +# expand names, then the resulting exports must be constructed into plain +# EXPORT_SYMBOL(symbol); to build our dummy C file, and that gets preprocessed +# to make the genksyms input. # # These mirror gensymtypes_c and co above, keep them in synch. cmd_gensymtypes_S = \ (echo "\#include <linux/kernel.h>" ; \ echo "\#include <asm/asm-prototypes.h>" ; \ - grep EXPORT_SYMBOL $< | sed 's/$$/;/' ) | \ + $(CPP) $(a_flags) $< | \ + grep ^___EXPORT_SYMBOL | \ + sed 's/___EXPORT_SYMBOL \([a-zA-Z0-9_]*\),.*/EXPORT_SYMBOL(\1);/' ) | \ $(CPP) -D__GENKSYMS__ $(c_flags) -xc - | \ $(GENKSYMS) $(if $(1), -T $(2)) \ $(patsubst y,-s _,$(CONFIG_HAVE_UNDERSCORE_SYMBOL_PREFIX)) \ -- 2.9.3 -- 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