linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 1/28] kconfig: support DOS line endings
@ 2006-09-24 21:17 sam
  2006-09-24 21:17 ` [PATCH 2/28] kbuild: consistently decide when to rebuild a target sam
  0 siblings, 1 reply; 35+ messages in thread
From: sam @ 2006-09-24 21:17 UTC (permalink / raw)
  To: linux-kernel; +Cc: Matthew Wilcox, Sam Ravnborg

From: Matthew Wilcox <matthew@wil.cx>

Kconfig doesn't currently handle config files with DOS line endings.
While these are, of course, an abomination, etc, etc, it can be handy
to not have to convert them first.  It's also a tiny patch and even adds
support for lines ending in just \r or even \n\r.

Signed-off-by: Matthew Wilcox <matthew@wil.cx>
Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
---
 scripts/kconfig/confdata.c |    8 ++++++--
 1 files changed, 6 insertions(+), 2 deletions(-)

diff --git a/scripts/kconfig/confdata.c b/scripts/kconfig/confdata.c
index a69d8ac..69f96b3 100644
--- a/scripts/kconfig/confdata.c
+++ b/scripts/kconfig/confdata.c
@@ -193,8 +193,11 @@ load:
 				continue;
 			*p++ = 0;
 			p2 = strchr(p, '\n');
-			if (p2)
-				*p2 = 0;
+			if (p2) {
+				*p2-- = 0;
+				if (*p2 == '\r')
+					*p2 = 0;
+			}
 			if (def == S_DEF_USER) {
 				sym = sym_find(line + 7);
 				if (!sym) {
@@ -266,6 +269,7 @@ load:
 				;
 			}
 			break;
+		case '\r':
 		case '\n':
 			break;
 		default:
-- 
1.4.1


^ permalink raw reply related	[flat|nested] 35+ messages in thread

* [PATCH 2/28] kbuild: consistently decide when to rebuild a target
  2006-09-24 21:17 [PATCH 1/28] kconfig: support DOS line endings sam
@ 2006-09-24 21:17 ` sam
  2006-09-24 21:17   ` [PATCH 3/28] kbuild: add unifdef sam
  0 siblings, 1 reply; 35+ messages in thread
From: sam @ 2006-09-24 21:17 UTC (permalink / raw)
  To: linux-kernel; +Cc: Sam Ravnborg, Sam Ravnborg

From: Sam Ravnborg <sam@mars.ravnborg.org>

Consistently decide when to rebuild a target across all of
if_changed, if_changed_dep, if_changed_rule.
PHONY targets are now treated alike (ignored) for all targets

While add it make Kbuild.include almost readable by factoring out a few
bits to some common variables and reuse this in Makefile.build.

Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
---
 scripts/Kbuild.include |   52 ++++++++++++++++++++++++++++--------------------
 scripts/Makefile.build |    5 +++--
 usr/Makefile           |    2 ++
 3 files changed, 35 insertions(+), 24 deletions(-)

diff --git a/scripts/Kbuild.include b/scripts/Kbuild.include
index bb19c15..1d6ffb2 100644
--- a/scripts/Kbuild.include
+++ b/scripts/Kbuild.include
@@ -8,9 +8,13 @@ empty   :=
 space   := $(empty) $(empty)
 
 ###
+# Name of target with a '.' as filename prefix. foo/bar.o => foo/.bar.o
+dot-target = $(dir $@).$(notdir $@)
+
+###
 # The temporary file to save gcc -MD generated dependencies must not
 # contain a comma
-depfile = $(subst $(comma),_,$(@D)/.$(@F).d)
+depfile = $(subst $(comma),_,$(dot-target).d)
 
 ###
 # filename of target with directory and extension stripped
@@ -119,40 +123,44 @@ # See Documentation/kbuild/makefiles.txt
 ifneq ($(KBUILD_NOCMDDEP),1)
 # Check if both arguments has same arguments. Result in empty string if equal
 # User may override this check using make KBUILD_NOCMDDEP=1
-arg-check = $(strip $(filter-out $(1), $(2)) $(filter-out $(2), $(1)) )
+arg-check = $(strip $(filter-out $(cmd_$(1)), $(cmd_$@)) \
+                    $(filter-out $(cmd_$@),   $(cmd_$(1))) )
 endif
 
 # echo command. Short version is $(quiet) equals quiet, otherwise full command
 echo-cmd = $(if $($(quiet)cmd_$(1)), \
 	echo '  $(call escsq,$($(quiet)cmd_$(1)))';)
 
+# >'< substitution is for echo to work,
+# >$< substitution to preserve $ when reloading .cmd file
+# note: when using inline perl scripts [perl -e '...$$t=1;...']
+# in $(cmd_xxx) double $$ your perl vars
 make-cmd = $(subst \#,\\\#,$(subst $$,$$$$,$(call escsq,$(cmd_$(1)))))
 
-# function to only execute the passed command if necessary
-# >'< substitution is for echo to work, >$< substitution to preserve $ when reloading .cmd file
-# note: when using inline perl scripts [perl -e '...$$t=1;...'] in $(cmd_xxx) double $$ your perl vars
+# Find any prerequisites that is newer than target or that does not exist.
+# PHONY targets skipped in both cases.
+any-prereq = $(filter-out $(PHONY),$?) $(filter-out $(PHONY) $(wildcard $^),$^)
+
+# Execute command if command has changed or prerequisitei(s) are updated
 #
-if_changed = $(if $(strip $(filter-out $(PHONY),$?)          \
-		$(call arg-check, $(cmd_$(1)), $(cmd_$@)) ), \
-	@set -e; \
-	$(echo-cmd) $(cmd_$(1)); \
-	echo 'cmd_$@ := $(make-cmd)' > $(@D)/.$(@F).cmd)
+if_changed = $(if $(strip $(any-prereq) $(arg-check)),                       \
+	@set -e;                                                             \
+	$(echo-cmd) $(cmd_$(1));                                             \
+	echo 'cmd_$@ := $(make-cmd)' > $(dot-target).cmd)
 
 # execute the command and also postprocess generated .d dependencies
 # file
-if_changed_dep = $(if $(strip $(filter-out $(PHONY),$?)  \
-		$(filter-out FORCE $(wildcard $^),$^)    \
-	$(call arg-check, $(cmd_$(1)), $(cmd_$@)) ),     \
-	@set -e; \
-	$(echo-cmd) $(cmd_$(1)); \
-	scripts/basic/fixdep $(depfile) $@ '$(make-cmd)' > $(@D)/.$(@F).tmp; \
-	rm -f $(depfile); \
-	mv -f $(@D)/.$(@F).tmp $(@D)/.$(@F).cmd)
+if_changed_dep = $(if $(strip $(any-prereq) $(arg-check) ),                  \
+	@set -e;                                                             \
+	$(echo-cmd) $(cmd_$(1));                                             \
+	scripts/basic/fixdep $(depfile) $@ '$(make-cmd)' > $(dot-target).tmp;\
+	rm -f $(depfile);                                                    \
+	mv -f $(dot-target).tmp $(dot-target).cmd)
 
 # Usage: $(call if_changed_rule,foo)
 # will check if $(cmd_foo) changed, or any of the prequisites changed,
 # and if so will execute $(rule_foo)
-if_changed_rule = $(if $(strip $(filter-out $(PHONY),$?)            \
-			$(call arg-check, $(cmd_$(1)), $(cmd_$@)) ),\
-			@set -e; \
-			$(rule_$(1)))
+if_changed_rule = $(if $(strip $(any-prereq) $(arg-check) ),                 \
+	@set -e;                                                             \
+	$(rule_$(1)))
+
diff --git a/scripts/Makefile.build b/scripts/Makefile.build
index 3cb445c..e2ad2dc 100644
--- a/scripts/Makefile.build
+++ b/scripts/Makefile.build
@@ -191,9 +191,10 @@ define rule_cc_o_c
 	$(call echo-cmd,checksrc) $(cmd_checksrc)			  \
 	$(call echo-cmd,cc_o_c) $(cmd_cc_o_c);				  \
 	$(cmd_modversions)						  \
-	scripts/basic/fixdep $(depfile) $@ '$(call make-cmd,cc_o_c)' > $(@D)/.$(@F).tmp;  \
+	scripts/basic/fixdep $(depfile) $@ '$(call make-cmd,cc_o_c)' >    \
+	                                              $(dot-target).tmp;  \
 	rm -f $(depfile);						  \
-	mv -f $(@D)/.$(@F).tmp $(@D)/.$(@F).cmd
+	mv -f $(dot-target).tmp $(dot-target).cmd
 endef
 
 # Built-in and composite module parts
diff --git a/usr/Makefile b/usr/Makefile
index 5b31c0b..e338e7b 100644
--- a/usr/Makefile
+++ b/usr/Makefile
@@ -3,6 +3,8 @@ # kbuild file for usr/ - including initr
 #
 
 klibcdirs:;
+PHONY += klibcdirs
+
 
 # Generate builtin.o based on initramfs_data.o
 obj-y := initramfs_data.o
-- 
1.4.1


^ permalink raw reply related	[flat|nested] 35+ messages in thread

* [PATCH 3/28] kbuild: add unifdef
  2006-09-24 21:17 ` [PATCH 2/28] kbuild: consistently decide when to rebuild a target sam
@ 2006-09-24 21:17   ` sam
  2006-09-24 21:18     ` [PATCH 4/28] kbuild: replace use of strlcpy with a dedicated implmentation in unifdef sam
  0 siblings, 1 reply; 35+ messages in thread
From: sam @ 2006-09-24 21:17 UTC (permalink / raw)
  To: linux-kernel; +Cc: Sam Ravnborg, Sam Ravnborg

From: Sam Ravnborg <sam@mars.ravnborg.org>

This patch contains a raw copy of unifdef.c
Next patch will modify it and add infrastructure to use it
Adding unifdef to the kernel is acked by the author.

The reason to add unifdef as part of the kernel source is that it is not
yet a common utility on most distributions.

Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
---
 scripts/unifdef.c |  998 +++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 998 insertions(+), 0 deletions(-)

diff --git a/scripts/unifdef.c b/scripts/unifdef.c
new file mode 100644
index 0000000..5384b43
--- /dev/null
+++ b/scripts/unifdef.c
@@ -0,0 +1,998 @@
+/*
+ * Copyright (c) 2002 - 2005 Tony Finch <dot@dotat.at>.  All rights reserved.
+ *
+ * This code is derived from software contributed to Berkeley by Dave Yost.
+ * It was rewritten to support ANSI C by Tony Finch. The original version of
+ * unifdef carried the following copyright notice. None of its code remains
+ * in this version (though some of the names remain).
+ *
+ * Copyright (c) 1985, 1993
+ *	The Regents of the University of California.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <sys/cdefs.h>
+
+#ifndef lint
+#if 0
+static const char copyright[] =
+"@(#) Copyright (c) 1985, 1993\n\
+	The Regents of the University of California.  All rights reserved.\n";
+#endif
+#ifdef __IDSTRING
+__IDSTRING(Berkeley, "@(#)unifdef.c	8.1 (Berkeley) 6/6/93");
+__IDSTRING(NetBSD, "$NetBSD: unifdef.c,v 1.8 2000/07/03 02:51:36 matt Exp $");
+__IDSTRING(dotat, "$dotat: things/unifdef.c,v 1.171 2005/03/08 12:38:48 fanf2 Exp $");
+#endif
+#endif /* not lint */
+#ifdef __FBSDID
+__FBSDID("$FreeBSD: /repoman/r/ncvs/src/usr.bin/unifdef/unifdef.c,v 1.20 2005/05/21 09:55:09 ru Exp $");
+#endif
+
+/*
+ * unifdef - remove ifdef'ed lines
+ *
+ *  Wishlist:
+ *      provide an option which will append the name of the
+ *        appropriate symbol after #else's and #endif's
+ *      provide an option which will check symbols after
+ *        #else's and #endif's to see that they match their
+ *        corresponding #ifdef or #ifndef
+ *
+ *   The first two items above require better buffer handling, which would
+ *     also make it possible to handle all "dodgy" directives correctly.
+ */
+
+#include <ctype.h>
+#include <err.h>
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+
+size_t strlcpy(char *dst, const char *src, size_t siz);
+
+/* types of input lines: */
+typedef enum {
+	LT_TRUEI,		/* a true #if with ignore flag */
+	LT_FALSEI,		/* a false #if with ignore flag */
+	LT_IF,			/* an unknown #if */
+	LT_TRUE,		/* a true #if */
+	LT_FALSE,		/* a false #if */
+	LT_ELIF,		/* an unknown #elif */
+	LT_ELTRUE,		/* a true #elif */
+	LT_ELFALSE,		/* a false #elif */
+	LT_ELSE,		/* #else */
+	LT_ENDIF,		/* #endif */
+	LT_DODGY,		/* flag: directive is not on one line */
+	LT_DODGY_LAST = LT_DODGY + LT_ENDIF,
+	LT_PLAIN,		/* ordinary line */
+	LT_EOF,			/* end of file */
+	LT_COUNT
+} Linetype;
+
+static char const * const linetype_name[] = {
+	"TRUEI", "FALSEI", "IF", "TRUE", "FALSE",
+	"ELIF", "ELTRUE", "ELFALSE", "ELSE", "ENDIF",
+	"DODGY TRUEI", "DODGY FALSEI",
+	"DODGY IF", "DODGY TRUE", "DODGY FALSE",
+	"DODGY ELIF", "DODGY ELTRUE", "DODGY ELFALSE",
+	"DODGY ELSE", "DODGY ENDIF",
+	"PLAIN", "EOF"
+};
+
+/* state of #if processing */
+typedef enum {
+	IS_OUTSIDE,
+	IS_FALSE_PREFIX,	/* false #if followed by false #elifs */
+	IS_TRUE_PREFIX,		/* first non-false #(el)if is true */
+	IS_PASS_MIDDLE,		/* first non-false #(el)if is unknown */
+	IS_FALSE_MIDDLE,	/* a false #elif after a pass state */
+	IS_TRUE_MIDDLE,		/* a true #elif after a pass state */
+	IS_PASS_ELSE,		/* an else after a pass state */
+	IS_FALSE_ELSE,		/* an else after a true state */
+	IS_TRUE_ELSE,		/* an else after only false states */
+	IS_FALSE_TRAILER,	/* #elifs after a true are false */
+	IS_COUNT
+} Ifstate;
+
+static char const * const ifstate_name[] = {
+	"OUTSIDE", "FALSE_PREFIX", "TRUE_PREFIX",
+	"PASS_MIDDLE", "FALSE_MIDDLE", "TRUE_MIDDLE",
+	"PASS_ELSE", "FALSE_ELSE", "TRUE_ELSE",
+	"FALSE_TRAILER"
+};
+
+/* state of comment parser */
+typedef enum {
+	NO_COMMENT = false,	/* outside a comment */
+	C_COMMENT,		/* in a comment like this one */
+	CXX_COMMENT,		/* between // and end of line */
+	STARTING_COMMENT,	/* just after slash-backslash-newline */
+	FINISHING_COMMENT,	/* star-backslash-newline in a C comment */
+	CHAR_LITERAL,		/* inside '' */
+	STRING_LITERAL		/* inside "" */
+} Comment_state;
+
+static char const * const comment_name[] = {
+	"NO", "C", "CXX", "STARTING", "FINISHING", "CHAR", "STRING"
+};
+
+/* state of preprocessor line parser */
+typedef enum {
+	LS_START,		/* only space and comments on this line */
+	LS_HASH,		/* only space, comments, and a hash */
+	LS_DIRTY		/* this line can't be a preprocessor line */
+} Line_state;
+
+static char const * const linestate_name[] = {
+	"START", "HASH", "DIRTY"
+};
+
+/*
+ * Minimum translation limits from ISO/IEC 9899:1999 5.2.4.1
+ */
+#define	MAXDEPTH        64			/* maximum #if nesting */
+#define	MAXLINE         4096			/* maximum length of line */
+#define	MAXSYMS         4096			/* maximum number of symbols */
+
+/*
+ * Sometimes when editing a keyword the replacement text is longer, so
+ * we leave some space at the end of the tline buffer to accommodate this.
+ */
+#define	EDITSLOP        10
+
+/*
+ * Globals.
+ */
+
+static bool             complement;		/* -c: do the complement */
+static bool             debugging;		/* -d: debugging reports */
+static bool             iocccok;		/* -e: fewer IOCCC errors */
+static bool             killconsts;		/* -k: eval constant #ifs */
+static bool             lnblank;		/* -l: blank deleted lines */
+static bool             lnnum;			/* -n: add #line directives */
+static bool             symlist;		/* -s: output symbol list */
+static bool             text;			/* -t: this is a text file */
+
+static const char      *symname[MAXSYMS];	/* symbol name */
+static const char      *value[MAXSYMS];		/* -Dsym=value */
+static bool             ignore[MAXSYMS];	/* -iDsym or -iUsym */
+static int              nsyms;			/* number of symbols */
+
+static FILE            *input;			/* input file pointer */
+static const char      *filename;		/* input file name */
+static int              linenum;		/* current line number */
+
+static char             tline[MAXLINE+EDITSLOP];/* input buffer plus space */
+static char            *keyword;		/* used for editing #elif's */
+
+static Comment_state    incomment;		/* comment parser state */
+static Line_state       linestate;		/* #if line parser state */
+static Ifstate          ifstate[MAXDEPTH];	/* #if processor state */
+static bool             ignoring[MAXDEPTH];	/* ignore comments state */
+static int              stifline[MAXDEPTH];	/* start of current #if */
+static int              depth;			/* current #if nesting */
+static int              delcount;		/* count of deleted lines */
+static bool             keepthis;		/* don't delete constant #if */
+
+static int              exitstat;		/* program exit status */
+
+static void             addsym(bool, bool, char *);
+static void             debug(const char *, ...);
+static void             done(void);
+static void             error(const char *);
+static int              findsym(const char *);
+static void             flushline(bool);
+static Linetype         getline(void);
+static Linetype         ifeval(const char **);
+static void             ignoreoff(void);
+static void             ignoreon(void);
+static void             keywordedit(const char *);
+static void             nest(void);
+static void             process(void);
+static const char      *skipcomment(const char *);
+static const char      *skipsym(const char *);
+static void             state(Ifstate);
+static int              strlcmp(const char *, const char *, size_t);
+static void             unnest(void);
+static void             usage(void);
+
+#define endsym(c) (!isalpha((unsigned char)c) && !isdigit((unsigned char)c) && c != '_')
+
+/*
+ * The main program.
+ */
+int
+main(int argc, char *argv[])
+{
+	int opt;
+
+	while ((opt = getopt(argc, argv, "i:D:U:I:cdeklnst")) != -1)
+		switch (opt) {
+		case 'i': /* treat stuff controlled by these symbols as text */
+			/*
+			 * For strict backwards-compatibility the U or D
+			 * should be immediately after the -i but it doesn't
+			 * matter much if we relax that requirement.
+			 */
+			opt = *optarg++;
+			if (opt == 'D')
+				addsym(true, true, optarg);
+			else if (opt == 'U')
+				addsym(true, false, optarg);
+			else
+				usage();
+			break;
+		case 'D': /* define a symbol */
+			addsym(false, true, optarg);
+			break;
+		case 'U': /* undef a symbol */
+			addsym(false, false, optarg);
+			break;
+		case 'I':
+			/* no-op for compatibility with cpp */
+			break;
+		case 'c': /* treat -D as -U and vice versa */
+			complement = true;
+			break;
+		case 'd':
+			debugging = true;
+			break;
+		case 'e': /* fewer errors from dodgy lines */
+			iocccok = true;
+			break;
+		case 'k': /* process constant #ifs */
+			killconsts = true;
+			break;
+		case 'l': /* blank deleted lines instead of omitting them */
+			lnblank = true;
+			break;
+		case 'n': /* add #line directive after deleted lines */
+			lnnum = true;
+			break;
+		case 's': /* only output list of symbols that control #ifs */
+			symlist = true;
+			break;
+		case 't': /* don't parse C comments */
+			text = true;
+			break;
+		default:
+			usage();
+		}
+	argc -= optind;
+	argv += optind;
+	if (argc > 1) {
+		errx(2, "can only do one file");
+	} else if (argc == 1 && strcmp(*argv, "-") != 0) {
+		filename = *argv;
+		input = fopen(filename, "r");
+		if (input == NULL)
+			err(2, "can't open %s", filename);
+	} else {
+		filename = "[stdin]";
+		input = stdin;
+	}
+	process();
+	abort(); /* bug */
+}
+
+static void
+usage(void)
+{
+	fprintf(stderr, "usage: unifdef [-cdeklnst] [-Ipath]"
+	    " [-Dsym[=val]] [-Usym] [-iDsym[=val]] [-iUsym] ... [file]\n");
+	exit(2);
+}
+
+/*
+ * A state transition function alters the global #if processing state
+ * in a particular way. The table below is indexed by the current
+ * processing state and the type of the current line.
+ *
+ * Nesting is handled by keeping a stack of states; some transition
+ * functions increase or decrease the depth. They also maintain the
+ * ignore state on a stack. In some complicated cases they have to
+ * alter the preprocessor directive, as follows.
+ *
+ * When we have processed a group that starts off with a known-false
+ * #if/#elif sequence (which has therefore been deleted) followed by a
+ * #elif that we don't understand and therefore must keep, we edit the
+ * latter into a #if to keep the nesting correct.
+ *
+ * When we find a true #elif in a group, the following block will
+ * always be kept and the rest of the sequence after the next #elif or
+ * #else will be discarded. We edit the #elif into a #else and the
+ * following directive to #endif since this has the desired behaviour.
+ *
+ * "Dodgy" directives are split across multiple lines, the most common
+ * example being a multi-line comment hanging off the right of the
+ * directive. We can handle them correctly only if there is no change
+ * from printing to dropping (or vice versa) caused by that directive.
+ * If the directive is the first of a group we have a choice between
+ * failing with an error, or passing it through unchanged instead of
+ * evaluating it. The latter is not the default to avoid questions from
+ * users about unifdef unexpectedly leaving behind preprocessor directives.
+ */
+typedef void state_fn(void);
+
+/* report an error */
+static void Eelif (void) { error("Inappropriate #elif"); }
+static void Eelse (void) { error("Inappropriate #else"); }
+static void Eendif(void) { error("Inappropriate #endif"); }
+static void Eeof  (void) { error("Premature EOF"); }
+static void Eioccc(void) { error("Obfuscated preprocessor control line"); }
+/* plain line handling */
+static void print (void) { flushline(true); }
+static void drop  (void) { flushline(false); }
+/* output lacks group's start line */
+static void Strue (void) { drop();  ignoreoff(); state(IS_TRUE_PREFIX); }
+static void Sfalse(void) { drop();  ignoreoff(); state(IS_FALSE_PREFIX); }
+static void Selse (void) { drop();               state(IS_TRUE_ELSE); }
+/* print/pass this block */
+static void Pelif (void) { print(); ignoreoff(); state(IS_PASS_MIDDLE); }
+static void Pelse (void) { print();              state(IS_PASS_ELSE); }
+static void Pendif(void) { print(); unnest(); }
+/* discard this block */
+static void Dfalse(void) { drop();  ignoreoff(); state(IS_FALSE_TRAILER); }
+static void Delif (void) { drop();  ignoreoff(); state(IS_FALSE_MIDDLE); }
+static void Delse (void) { drop();               state(IS_FALSE_ELSE); }
+static void Dendif(void) { drop();  unnest(); }
+/* first line of group */
+static void Fdrop (void) { nest();  Dfalse(); }
+static void Fpass (void) { nest();  Pelif(); }
+static void Ftrue (void) { nest();  Strue(); }
+static void Ffalse(void) { nest();  Sfalse(); }
+/* variable pedantry for obfuscated lines */
+static void Oiffy (void) { if (!iocccok) Eioccc(); Fpass(); ignoreon(); }
+static void Oif   (void) { if (!iocccok) Eioccc(); Fpass(); }
+static void Oelif (void) { if (!iocccok) Eioccc(); Pelif(); }
+/* ignore comments in this block */
+static void Idrop (void) { Fdrop();  ignoreon(); }
+static void Itrue (void) { Ftrue();  ignoreon(); }
+static void Ifalse(void) { Ffalse(); ignoreon(); }
+/* edit this line */
+static void Mpass (void) { strncpy(keyword, "if  ", 4); Pelif(); }
+static void Mtrue (void) { keywordedit("else\n");  state(IS_TRUE_MIDDLE); }
+static void Melif (void) { keywordedit("endif\n"); state(IS_FALSE_TRAILER); }
+static void Melse (void) { keywordedit("endif\n"); state(IS_FALSE_ELSE); }
+
+static state_fn * const trans_table[IS_COUNT][LT_COUNT] = {
+/* IS_OUTSIDE */
+{ Itrue, Ifalse,Fpass, Ftrue, Ffalse,Eelif, Eelif, Eelif, Eelse, Eendif,
+  Oiffy, Oiffy, Fpass, Oif,   Oif,   Eelif, Eelif, Eelif, Eelse, Eendif,
+  print, done },
+/* IS_FALSE_PREFIX */
+{ Idrop, Idrop, Fdrop, Fdrop, Fdrop, Mpass, Strue, Sfalse,Selse, Dendif,
+  Idrop, Idrop, Fdrop, Fdrop, Fdrop, Mpass, Eioccc,Eioccc,Eioccc,Eioccc,
+  drop,  Eeof },
+/* IS_TRUE_PREFIX */
+{ Itrue, Ifalse,Fpass, Ftrue, Ffalse,Dfalse,Dfalse,Dfalse,Delse, Dendif,
+  Oiffy, Oiffy, Fpass, Oif,   Oif,   Eioccc,Eioccc,Eioccc,Eioccc,Eioccc,
+  print, Eeof },
+/* IS_PASS_MIDDLE */
+{ Itrue, Ifalse,Fpass, Ftrue, Ffalse,Pelif, Mtrue, Delif, Pelse, Pendif,
+  Oiffy, Oiffy, Fpass, Oif,   Oif,   Pelif, Oelif, Oelif, Pelse, Pendif,
+  print, Eeof },
+/* IS_FALSE_MIDDLE */
+{ Idrop, Idrop, Fdrop, Fdrop, Fdrop, Pelif, Mtrue, Delif, Pelse, Pendif,
+  Idrop, Idrop, Fdrop, Fdrop, Fdrop, Eioccc,Eioccc,Eioccc,Eioccc,Eioccc,
+  drop,  Eeof },
+/* IS_TRUE_MIDDLE */
+{ Itrue, Ifalse,Fpass, Ftrue, Ffalse,Melif, Melif, Melif, Melse, Pendif,
+  Oiffy, Oiffy, Fpass, Oif,   Oif,   Eioccc,Eioccc,Eioccc,Eioccc,Pendif,
+  print, Eeof },
+/* IS_PASS_ELSE */
+{ Itrue, Ifalse,Fpass, Ftrue, Ffalse,Eelif, Eelif, Eelif, Eelse, Pendif,
+  Oiffy, Oiffy, Fpass, Oif,   Oif,   Eelif, Eelif, Eelif, Eelse, Pendif,
+  print, Eeof },
+/* IS_FALSE_ELSE */
+{ Idrop, Idrop, Fdrop, Fdrop, Fdrop, Eelif, Eelif, Eelif, Eelse, Dendif,
+  Idrop, Idrop, Fdrop, Fdrop, Fdrop, Eelif, Eelif, Eelif, Eelse, Eioccc,
+  drop,  Eeof },
+/* IS_TRUE_ELSE */
+{ Itrue, Ifalse,Fpass, Ftrue, Ffalse,Eelif, Eelif, Eelif, Eelse, Dendif,
+  Oiffy, Oiffy, Fpass, Oif,   Oif,   Eelif, Eelif, Eelif, Eelse, Eioccc,
+  print, Eeof },
+/* IS_FALSE_TRAILER */
+{ Idrop, Idrop, Fdrop, Fdrop, Fdrop, Dfalse,Dfalse,Dfalse,Delse, Dendif,
+  Idrop, Idrop, Fdrop, Fdrop, Fdrop, Dfalse,Dfalse,Dfalse,Delse, Eioccc,
+  drop,  Eeof }
+/*TRUEI  FALSEI IF     TRUE   FALSE  ELIF   ELTRUE ELFALSE ELSE  ENDIF
+  TRUEI  FALSEI IF     TRUE   FALSE  ELIF   ELTRUE ELFALSE ELSE  ENDIF (DODGY)
+  PLAIN  EOF */
+};
+
+/*
+ * State machine utility functions
+ */
+static void
+done(void)
+{
+	if (incomment)
+		error("EOF in comment");
+	exit(exitstat);
+}
+static void
+ignoreoff(void)
+{
+	if (depth == 0)
+		abort(); /* bug */
+	ignoring[depth] = ignoring[depth-1];
+}
+static void
+ignoreon(void)
+{
+	ignoring[depth] = true;
+}
+static void
+keywordedit(const char *replacement)
+{
+	strlcpy(keyword, replacement, tline + sizeof(tline) - keyword);
+	print();
+}
+static void
+nest(void)
+{
+	depth += 1;
+	if (depth >= MAXDEPTH)
+		error("Too many levels of nesting");
+	stifline[depth] = linenum;
+}
+static void
+unnest(void)
+{
+	if (depth == 0)
+		abort(); /* bug */
+	depth -= 1;
+}
+static void
+state(Ifstate is)
+{
+	ifstate[depth] = is;
+}
+
+/*
+ * Write a line to the output or not, according to command line options.
+ */
+static void
+flushline(bool keep)
+{
+	if (symlist)
+		return;
+	if (keep ^ complement) {
+		if (lnnum && delcount > 0)
+			printf("#line %d\n", linenum);
+		fputs(tline, stdout);
+		delcount = 0;
+	} else {
+		if (lnblank)
+			putc('\n', stdout);
+		exitstat = 1;
+		delcount += 1;
+	}
+}
+
+/*
+ * The driver for the state machine.
+ */
+static void
+process(void)
+{
+	Linetype lineval;
+
+	for (;;) {
+		linenum++;
+		lineval = getline();
+		trans_table[ifstate[depth]][lineval]();
+		debug("process %s -> %s depth %d",
+		    linetype_name[lineval],
+		    ifstate_name[ifstate[depth]], depth);
+	}
+}
+
+/*
+ * Parse a line and determine its type. We keep the preprocessor line
+ * parser state between calls in the global variable linestate, with
+ * help from skipcomment().
+ */
+static Linetype
+getline(void)
+{
+	const char *cp;
+	int cursym;
+	int kwlen;
+	Linetype retval;
+	Comment_state wascomment;
+
+	if (fgets(tline, MAXLINE, input) == NULL)
+		return (LT_EOF);
+	retval = LT_PLAIN;
+	wascomment = incomment;
+	cp = skipcomment(tline);
+	if (linestate == LS_START) {
+		if (*cp == '#') {
+			linestate = LS_HASH;
+			cp = skipcomment(cp + 1);
+		} else if (*cp != '\0')
+			linestate = LS_DIRTY;
+	}
+	if (!incomment && linestate == LS_HASH) {
+		keyword = tline + (cp - tline);
+		cp = skipsym(cp);
+		kwlen = cp - keyword;
+		/* no way can we deal with a continuation inside a keyword */
+		if (strncmp(cp, "\\\n", 2) == 0)
+			Eioccc();
+		if (strlcmp("ifdef", keyword, kwlen) == 0 ||
+		    strlcmp("ifndef", keyword, kwlen) == 0) {
+			cp = skipcomment(cp);
+			if ((cursym = findsym(cp)) < 0)
+				retval = LT_IF;
+			else {
+				retval = (keyword[2] == 'n')
+				    ? LT_FALSE : LT_TRUE;
+				if (value[cursym] == NULL)
+					retval = (retval == LT_TRUE)
+					    ? LT_FALSE : LT_TRUE;
+				if (ignore[cursym])
+					retval = (retval == LT_TRUE)
+					    ? LT_TRUEI : LT_FALSEI;
+			}
+			cp = skipsym(cp);
+		} else if (strlcmp("if", keyword, kwlen) == 0)
+			retval = ifeval(&cp);
+		else if (strlcmp("elif", keyword, kwlen) == 0)
+			retval = ifeval(&cp) - LT_IF + LT_ELIF;
+		else if (strlcmp("else", keyword, kwlen) == 0)
+			retval = LT_ELSE;
+		else if (strlcmp("endif", keyword, kwlen) == 0)
+			retval = LT_ENDIF;
+		else {
+			linestate = LS_DIRTY;
+			retval = LT_PLAIN;
+		}
+		cp = skipcomment(cp);
+		if (*cp != '\0') {
+			linestate = LS_DIRTY;
+			if (retval == LT_TRUE || retval == LT_FALSE ||
+			    retval == LT_TRUEI || retval == LT_FALSEI)
+				retval = LT_IF;
+			if (retval == LT_ELTRUE || retval == LT_ELFALSE)
+				retval = LT_ELIF;
+		}
+		if (retval != LT_PLAIN && (wascomment || incomment)) {
+			retval += LT_DODGY;
+			if (incomment)
+				linestate = LS_DIRTY;
+		}
+		/* skipcomment should have changed the state */
+		if (linestate == LS_HASH)
+			abort(); /* bug */
+	}
+	if (linestate == LS_DIRTY) {
+		while (*cp != '\0')
+			cp = skipcomment(cp + 1);
+	}
+	debug("parser %s comment %s line",
+	    comment_name[incomment], linestate_name[linestate]);
+	return (retval);
+}
+
+/*
+ * These are the binary operators that are supported by the expression
+ * evaluator. Note that if support for division is added then we also
+ * need short-circuiting booleans because of divide-by-zero.
+ */
+static int op_lt(int a, int b) { return (a < b); }
+static int op_gt(int a, int b) { return (a > b); }
+static int op_le(int a, int b) { return (a <= b); }
+static int op_ge(int a, int b) { return (a >= b); }
+static int op_eq(int a, int b) { return (a == b); }
+static int op_ne(int a, int b) { return (a != b); }
+static int op_or(int a, int b) { return (a || b); }
+static int op_and(int a, int b) { return (a && b); }
+
+/*
+ * An evaluation function takes three arguments, as follows: (1) a pointer to
+ * an element of the precedence table which lists the operators at the current
+ * level of precedence; (2) a pointer to an integer which will receive the
+ * value of the expression; and (3) a pointer to a char* that points to the
+ * expression to be evaluated and that is updated to the end of the expression
+ * when evaluation is complete. The function returns LT_FALSE if the value of
+ * the expression is zero, LT_TRUE if it is non-zero, or LT_IF if the
+ * expression could not be evaluated.
+ */
+struct ops;
+
+typedef Linetype eval_fn(const struct ops *, int *, const char **);
+
+static eval_fn eval_table, eval_unary;
+
+/*
+ * The precedence table. Expressions involving binary operators are evaluated
+ * in a table-driven way by eval_table. When it evaluates a subexpression it
+ * calls the inner function with its first argument pointing to the next
+ * element of the table. Innermost expressions have special non-table-driven
+ * handling.
+ */
+static const struct ops {
+	eval_fn *inner;
+	struct op {
+		const char *str;
+		int (*fn)(int, int);
+	} op[5];
+} eval_ops[] = {
+	{ eval_table, { { "||", op_or } } },
+	{ eval_table, { { "&&", op_and } } },
+	{ eval_table, { { "==", op_eq },
+			{ "!=", op_ne } } },
+	{ eval_unary, { { "<=", op_le },
+			{ ">=", op_ge },
+			{ "<", op_lt },
+			{ ">", op_gt } } }
+};
+
+/*
+ * Function for evaluating the innermost parts of expressions,
+ * viz. !expr (expr) defined(symbol) symbol number
+ * We reset the keepthis flag when we find a non-constant subexpression.
+ */
+static Linetype
+eval_unary(const struct ops *ops, int *valp, const char **cpp)
+{
+	const char *cp;
+	char *ep;
+	int sym;
+
+	cp = skipcomment(*cpp);
+	if (*cp == '!') {
+		debug("eval%d !", ops - eval_ops);
+		cp++;
+		if (eval_unary(ops, valp, &cp) == LT_IF)
+			return (LT_IF);
+		*valp = !*valp;
+	} else if (*cp == '(') {
+		cp++;
+		debug("eval%d (", ops - eval_ops);
+		if (eval_table(eval_ops, valp, &cp) == LT_IF)
+			return (LT_IF);
+		cp = skipcomment(cp);
+		if (*cp++ != ')')
+			return (LT_IF);
+	} else if (isdigit((unsigned char)*cp)) {
+		debug("eval%d number", ops - eval_ops);
+		*valp = strtol(cp, &ep, 0);
+		cp = skipsym(cp);
+	} else if (strncmp(cp, "defined", 7) == 0 && endsym(cp[7])) {
+		cp = skipcomment(cp+7);
+		debug("eval%d defined", ops - eval_ops);
+		if (*cp++ != '(')
+			return (LT_IF);
+		cp = skipcomment(cp);
+		sym = findsym(cp);
+		if (sym < 0)
+			return (LT_IF);
+		*valp = (value[sym] != NULL);
+		cp = skipsym(cp);
+		cp = skipcomment(cp);
+		if (*cp++ != ')')
+			return (LT_IF);
+		keepthis = false;
+	} else if (!endsym(*cp)) {
+		debug("eval%d symbol", ops - eval_ops);
+		sym = findsym(cp);
+		if (sym < 0)
+			return (LT_IF);
+		if (value[sym] == NULL)
+			*valp = 0;
+		else {
+			*valp = strtol(value[sym], &ep, 0);
+			if (*ep != '\0' || ep == value[sym])
+				return (LT_IF);
+		}
+		cp = skipsym(cp);
+		keepthis = false;
+	} else {
+		debug("eval%d bad expr", ops - eval_ops);
+		return (LT_IF);
+	}
+
+	*cpp = cp;
+	debug("eval%d = %d", ops - eval_ops, *valp);
+	return (*valp ? LT_TRUE : LT_FALSE);
+}
+
+/*
+ * Table-driven evaluation of binary operators.
+ */
+static Linetype
+eval_table(const struct ops *ops, int *valp, const char **cpp)
+{
+	const struct op *op;
+	const char *cp;
+	int val;
+
+	debug("eval%d", ops - eval_ops);
+	cp = *cpp;
+	if (ops->inner(ops+1, valp, &cp) == LT_IF)
+		return (LT_IF);
+	for (;;) {
+		cp = skipcomment(cp);
+		for (op = ops->op; op->str != NULL; op++)
+			if (strncmp(cp, op->str, strlen(op->str)) == 0)
+				break;
+		if (op->str == NULL)
+			break;
+		cp += strlen(op->str);
+		debug("eval%d %s", ops - eval_ops, op->str);
+		if (ops->inner(ops+1, &val, &cp) == LT_IF)
+			return (LT_IF);
+		*valp = op->fn(*valp, val);
+	}
+
+	*cpp = cp;
+	debug("eval%d = %d", ops - eval_ops, *valp);
+	return (*valp ? LT_TRUE : LT_FALSE);
+}
+
+/*
+ * Evaluate the expression on a #if or #elif line. If we can work out
+ * the result we return LT_TRUE or LT_FALSE accordingly, otherwise we
+ * return just a generic LT_IF.
+ */
+static Linetype
+ifeval(const char **cpp)
+{
+	int ret;
+	int val;
+
+	debug("eval %s", *cpp);
+	keepthis = killconsts ? false : true;
+	ret = eval_table(eval_ops, &val, cpp);
+	debug("eval = %d", val);
+	return (keepthis ? LT_IF : ret);
+}
+
+/*
+ * Skip over comments, strings, and character literals and stop at the
+ * next character position that is not whitespace. Between calls we keep
+ * the comment state in the global variable incomment, and we also adjust
+ * the global variable linestate when we see a newline.
+ * XXX: doesn't cope with the buffer splitting inside a state transition.
+ */
+static const char *
+skipcomment(const char *cp)
+{
+	if (text || ignoring[depth]) {
+		for (; isspace((unsigned char)*cp); cp++)
+			if (*cp == '\n')
+				linestate = LS_START;
+		return (cp);
+	}
+	while (*cp != '\0')
+		/* don't reset to LS_START after a line continuation */
+		if (strncmp(cp, "\\\n", 2) == 0)
+			cp += 2;
+		else switch (incomment) {
+		case NO_COMMENT:
+			if (strncmp(cp, "/\\\n", 3) == 0) {
+				incomment = STARTING_COMMENT;
+				cp += 3;
+			} else if (strncmp(cp, "/*", 2) == 0) {
+				incomment = C_COMMENT;
+				cp += 2;
+			} else if (strncmp(cp, "//", 2) == 0) {
+				incomment = CXX_COMMENT;
+				cp += 2;
+			} else if (strncmp(cp, "\'", 1) == 0) {
+				incomment = CHAR_LITERAL;
+				linestate = LS_DIRTY;
+				cp += 1;
+			} else if (strncmp(cp, "\"", 1) == 0) {
+				incomment = STRING_LITERAL;
+				linestate = LS_DIRTY;
+				cp += 1;
+			} else if (strncmp(cp, "\n", 1) == 0) {
+				linestate = LS_START;
+				cp += 1;
+			} else if (strchr(" \t", *cp) != NULL) {
+				cp += 1;
+			} else
+				return (cp);
+			continue;
+		case CXX_COMMENT:
+			if (strncmp(cp, "\n", 1) == 0) {
+				incomment = NO_COMMENT;
+				linestate = LS_START;
+			}
+			cp += 1;
+			continue;
+		case CHAR_LITERAL:
+		case STRING_LITERAL:
+			if ((incomment == CHAR_LITERAL && cp[0] == '\'') ||
+			    (incomment == STRING_LITERAL && cp[0] == '\"')) {
+				incomment = NO_COMMENT;
+				cp += 1;
+			} else if (cp[0] == '\\') {
+				if (cp[1] == '\0')
+					cp += 1;
+				else
+					cp += 2;
+			} else if (strncmp(cp, "\n", 1) == 0) {
+				if (incomment == CHAR_LITERAL)
+					error("unterminated char literal");
+				else
+					error("unterminated string literal");
+			} else
+				cp += 1;
+			continue;
+		case C_COMMENT:
+			if (strncmp(cp, "*\\\n", 3) == 0) {
+				incomment = FINISHING_COMMENT;
+				cp += 3;
+			} else if (strncmp(cp, "*/", 2) == 0) {
+				incomment = NO_COMMENT;
+				cp += 2;
+			} else
+				cp += 1;
+			continue;
+		case STARTING_COMMENT:
+			if (*cp == '*') {
+				incomment = C_COMMENT;
+				cp += 1;
+			} else if (*cp == '/') {
+				incomment = CXX_COMMENT;
+				cp += 1;
+			} else {
+				incomment = NO_COMMENT;
+				linestate = LS_DIRTY;
+			}
+			continue;
+		case FINISHING_COMMENT:
+			if (*cp == '/') {
+				incomment = NO_COMMENT;
+				cp += 1;
+			} else
+				incomment = C_COMMENT;
+			continue;
+		default:
+			abort(); /* bug */
+		}
+	return (cp);
+}
+
+/*
+ * Skip over an identifier.
+ */
+static const char *
+skipsym(const char *cp)
+{
+	while (!endsym(*cp))
+		++cp;
+	return (cp);
+}
+
+/*
+ * Look for the symbol in the symbol table. If is is found, we return
+ * the symbol table index, else we return -1.
+ */
+static int
+findsym(const char *str)
+{
+	const char *cp;
+	int symind;
+
+	cp = skipsym(str);
+	if (cp == str)
+		return (-1);
+	if (symlist) {
+		printf("%.*s\n", (int)(cp-str), str);
+		/* we don't care about the value of the symbol */
+		return (0);
+	}
+	for (symind = 0; symind < nsyms; ++symind) {
+		if (strlcmp(symname[symind], str, cp-str) == 0) {
+			debug("findsym %s %s", symname[symind],
+			    value[symind] ? value[symind] : "");
+			return (symind);
+		}
+	}
+	return (-1);
+}
+
+/*
+ * Add a symbol to the symbol table.
+ */
+static void
+addsym(bool ignorethis, bool definethis, char *sym)
+{
+	int symind;
+	char *val;
+
+	symind = findsym(sym);
+	if (symind < 0) {
+		if (nsyms >= MAXSYMS)
+			errx(2, "too many symbols");
+		symind = nsyms++;
+	}
+	symname[symind] = sym;
+	ignore[symind] = ignorethis;
+	val = sym + (skipsym(sym) - sym);
+	if (definethis) {
+		if (*val == '=') {
+			value[symind] = val+1;
+			*val = '\0';
+		} else if (*val == '\0')
+			value[symind] = "";
+		else
+			usage();
+	} else {
+		if (*val != '\0')
+			usage();
+		value[symind] = NULL;
+	}
+}
+
+/*
+ * Compare s with n characters of t.
+ * The same as strncmp() except that it checks that s[n] == '\0'.
+ */
+static int
+strlcmp(const char *s, const char *t, size_t n)
+{
+	while (n-- && *t != '\0')
+		if (*s != *t)
+			return ((unsigned char)*s - (unsigned char)*t);
+		else
+			++s, ++t;
+	return ((unsigned char)*s);
+}
+
+/*
+ * Diagnostics.
+ */
+static void
+debug(const char *msg, ...)
+{
+	va_list ap;
+
+	if (debugging) {
+		va_start(ap, msg);
+		vwarnx(msg, ap);
+		va_end(ap);
+	}
+}
+
+static void
+error(const char *msg)
+{
+	if (depth == 0)
+		warnx("%s: %d: %s", filename, linenum, msg);
+	else
+		warnx("%s: %d: %s (#if line %d depth %d)",
+		    filename, linenum, msg, stifline[depth], depth);
+	errx(2, "output may be truncated");
+}
-- 
1.4.1


^ permalink raw reply related	[flat|nested] 35+ messages in thread

* [PATCH 4/28] kbuild: replace use of strlcpy with a dedicated implmentation in unifdef
  2006-09-24 21:17   ` [PATCH 3/28] kbuild: add unifdef sam
@ 2006-09-24 21:18     ` sam
  2006-09-24 21:18       ` [PATCH 5/28] kbuild: use in-kernel unifdef sam
  0 siblings, 1 reply; 35+ messages in thread
From: sam @ 2006-09-24 21:18 UTC (permalink / raw)
  To: linux-kernel; +Cc: Sam Ravnborg, Sam Ravnborg

From: Sam Ravnborg <sam@mars.ravnborg.org>

Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
---
 scripts/unifdef.c |    9 ++++++++-
 1 files changed, 8 insertions(+), 1 deletions(-)

diff --git a/scripts/unifdef.c b/scripts/unifdef.c
index 5384b43..552025e 100644
--- a/scripts/unifdef.c
+++ b/scripts/unifdef.c
@@ -450,7 +450,14 @@ ignoreon(void)
 static void
 keywordedit(const char *replacement)
 {
-	strlcpy(keyword, replacement, tline + sizeof(tline) - keyword);
+	size_t size = tline + sizeof(tline) - keyword;
+	char *dst = keyword;
+	const char *src = replacement;
+	if (size != 0) {
+		while ((--size != 0) && (*src != '\0'))
+			*dst++ = *src++;
+		*dst = '\0';
+	}
 	print();
 }
 static void
-- 
1.4.1


^ permalink raw reply related	[flat|nested] 35+ messages in thread

* [PATCH 5/28] kbuild: use in-kernel unifdef
  2006-09-24 21:18     ` [PATCH 4/28] kbuild: replace use of strlcpy with a dedicated implmentation in unifdef sam
@ 2006-09-24 21:18       ` sam
  2006-09-24 21:18         ` [PATCH 6/28] remove RPM_BUILD_ROOT from asm-offsets.h sam
  0 siblings, 1 reply; 35+ messages in thread
From: sam @ 2006-09-24 21:18 UTC (permalink / raw)
  To: linux-kernel; +Cc: Sam Ravnborg, Sam Ravnborg

From: Sam Ravnborg <sam@mars.ravnborg.org>

Let headers_install use in-kernel unifdef

Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
---
 Makefile                     |    4 ++--
 scripts/Makefile             |    3 +++
 scripts/Makefile.headersinst |    2 +-
 3 files changed, 6 insertions(+), 3 deletions(-)

diff --git a/Makefile b/Makefile
index edfc2fd..b06b1ea 100644
--- a/Makefile
+++ b/Makefile
@@ -893,8 +893,8 @@ INSTALL_HDR_PATH=$(objtree)/usr
 export INSTALL_HDR_PATH
 
 PHONY += headers_install
-headers_install: include/linux/version.h
-	$(Q)unifdef -Ux /dev/null
+headers_install: include/linux/version.h scripts_basic FORCE
+	$(Q)$(MAKE) $(build)=scripts scripts/unifdef
 	$(Q)rm -rf $(INSTALL_HDR_PATH)/include
 	$(Q)$(MAKE) -rR -f $(srctree)/scripts/Makefile.headersinst obj=include
 
diff --git a/scripts/Makefile b/scripts/Makefile
index 6f6b48f..d531a1f 100644
--- a/scripts/Makefile
+++ b/scripts/Makefile
@@ -15,6 +15,9 @@ hostprogs-$(CONFIG_IKCONFIG)     += bin2
 
 always		:= $(hostprogs-y)
 
+# The following hostprogs-y programs are only build on demand
+hostprogs-y += unifdef
+
 subdir-$(CONFIG_MODVERSIONS) += genksyms
 subdir-$(CONFIG_MODULES)     += mod
 
diff --git a/scripts/Makefile.headersinst b/scripts/Makefile.headersinst
index 12e1daf..8c02d2d 100644
--- a/scripts/Makefile.headersinst
+++ b/scripts/Makefile.headersinst
@@ -7,7 +7,7 @@ # objhdr-y are generated files that will
 #
 # ==========================================================================
 
-UNIFDEF := unifdef -U__KERNEL__
+UNIFDEF := scripts/unifdef -U__KERNEL__
 
 # Eliminate the contents of (and inclusions of) compiler.h
 HDRSED  := sed 	-e "s/ inline / __inline__ /g" \
-- 
1.4.1


^ permalink raw reply related	[flat|nested] 35+ messages in thread

* [PATCH 6/28] remove RPM_BUILD_ROOT from asm-offsets.h
  2006-09-24 21:18       ` [PATCH 5/28] kbuild: use in-kernel unifdef sam
@ 2006-09-24 21:18         ` sam
  2006-09-24 21:18           ` [PATCH 7/28] kconfig: linguistic fixes for Documentation/kbuild/kconfig-language.txt sam
  0 siblings, 1 reply; 35+ messages in thread
From: sam @ 2006-09-24 21:18 UTC (permalink / raw)
  To: linux-kernel; +Cc: Olaf Hering, Andrew Morton, Sam Ravnborg

From: Olaf Hering <olh@suse.de>

No file in rpm binary package should have the RPM_BUILD_ROOT string in it.
To simplify building of external modules, our kernel-source package
contains some temp files from the Kbuild system.  asm/asm-offsets.h is one
of the files that contains the absolute path if make O=$O is used.

  * This file was generated by /var/tmp/kernel-source-2.6.14_rc4-build/usr/src/linux-2.6.14-rc4-2/Kbuild

Remove the $RPM_BUILD_ROOT string in the shipped tempfile.

Signed-off-by: Olaf Hering <olh@suse.de>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
---
 Kbuild |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/Kbuild b/Kbuild
index 2d4f95e..0451f69 100644
--- a/Kbuild
+++ b/Kbuild
@@ -28,7 +28,7 @@ define cmd_offsets
 	 echo "/*"; \
 	 echo " * DO NOT MODIFY."; \
 	 echo " *"; \
-	 echo " * This file was generated by $(srctree)/Kbuild"; \
+	 echo " * This file was generated by Kbuild"; \
 	 echo " *"; \
 	 echo " */"; \
 	 echo ""; \
-- 
1.4.1


^ permalink raw reply related	[flat|nested] 35+ messages in thread

* [PATCH 7/28] kconfig: linguistic fixes for Documentation/kbuild/kconfig-language.txt
  2006-09-24 21:18         ` [PATCH 6/28] remove RPM_BUILD_ROOT from asm-offsets.h sam
@ 2006-09-24 21:18           ` sam
  2006-09-24 21:18             ` [PATCH 8/28] kbuild: linguistic fixes for Documentation/kbuild/modules.txt sam
  0 siblings, 1 reply; 35+ messages in thread
From: sam @ 2006-09-24 21:18 UTC (permalink / raw)
  To: linux-kernel; +Cc: Jan Engelhardt, Jan Engelhardt, Sam Ravnborg

From: Jan Engelhardt <jengelh@linux01.gwdg.de>

I have done a look-through through Documentation/kbuild/ and my corrections
(proposed) are attached.

Cc'ed are original author Michael (responsible for comitting changes to
these files?), Sam (kbuild maintainer), Adrian (-trivial maintainer).

Signed-off-by: Jan Engelhardt <jengelh@gmx.de>
Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
---
 Documentation/kbuild/kconfig-language.txt |   12 ++++++------
 1 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/Documentation/kbuild/kconfig-language.txt b/Documentation/kbuild/kconfig-language.txt
index ca1967f..003fccc 100644
--- a/Documentation/kbuild/kconfig-language.txt
+++ b/Documentation/kbuild/kconfig-language.txt
@@ -67,19 +67,19 @@ applicable everywhere (see syntax).
 - default value: "default" <expr> ["if" <expr>]
   A config option can have any number of default values. If multiple
   default values are visible, only the first defined one is active.
-  Default values are not limited to the menu entry, where they are
-  defined, this means the default can be defined somewhere else or be
+  Default values are not limited to the menu entry where they are
+  defined. This means the default can be defined somewhere else or be
   overridden by an earlier definition.
   The default value is only assigned to the config symbol if no other
   value was set by the user (via the input prompt above). If an input
   prompt is visible the default value is presented to the user and can
   be overridden by him.
-  Optionally dependencies only for this default value can be added with
+  Optionally, dependencies only for this default value can be added with
   "if".
 
 - dependencies: "depends on"/"requires" <expr>
   This defines a dependency for this menu entry. If multiple
-  dependencies are defined they are connected with '&&'. Dependencies
+  dependencies are defined, they are connected with '&&'. Dependencies
   are applied to all other options within this menu entry (which also
   accept an "if" expression), so these two examples are equivalent:
 
@@ -153,7 +153,7 @@ Nonconstant symbols are the most common 
 'config' statement. Nonconstant symbols consist entirely of alphanumeric
 characters or underscores.
 Constant symbols are only part of expressions. Constant symbols are
-always surrounded by single or double quotes. Within the quote any
+always surrounded by single or double quotes. Within the quote, any
 other character is allowed and the quotes can be escaped using '\'.
 
 Menu structure
@@ -237,7 +237,7 @@ choices:
 	<choice block>
 	"endchoice"
 
-This defines a choice group and accepts any of above attributes as
+This defines a choice group and accepts any of the above attributes as
 options. A choice can only be of type bool or tristate, while a boolean
 choice only allows a single config entry to be selected, a tristate
 choice also allows any number of config entries to be set to 'm'. This
-- 
1.4.1


^ permalink raw reply related	[flat|nested] 35+ messages in thread

* [PATCH 8/28] kbuild: linguistic fixes for Documentation/kbuild/modules.txt
  2006-09-24 21:18           ` [PATCH 7/28] kconfig: linguistic fixes for Documentation/kbuild/kconfig-language.txt sam
@ 2006-09-24 21:18             ` sam
  2006-09-24 21:18               ` [PATCH 9/28] kbuild: linguistic fixes for Documentation/kbuild/makefiles.txt sam
  0 siblings, 1 reply; 35+ messages in thread
From: sam @ 2006-09-24 21:18 UTC (permalink / raw)
  To: linux-kernel; +Cc: Jan Engelhardt, Jan Engelhardt, Sam Ravnborg

From: Jan Engelhardt <jengelh@linux01.gwdg.de>

I have done a look-through through Documentation/kbuild/ and my corrections
(proposed) are attached.

Cc'ed are original author Michael (responsible for comitting changes to
these files?), Sam (kbuild maintainer), Adrian (-trivial maintainer).

Signed-off-by: Jan Engelhardt <jengelh@gmx.de>
Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
---
 Documentation/kbuild/modules.txt |  119 +++++++++++++++++++-------------------
 1 files changed, 60 insertions(+), 59 deletions(-)

diff --git a/Documentation/kbuild/modules.txt b/Documentation/kbuild/modules.txt
index 61fc079..a2a178d 100644
--- a/Documentation/kbuild/modules.txt
+++ b/Documentation/kbuild/modules.txt
@@ -1,7 +1,7 @@
 
 In this document you will find information about:
 - how to build external modules
-- how to make your module use kbuild infrastructure
+- how to make your module use the kbuild infrastructure
 - how kbuild will install a kernel
 - how to install modules in a non-standard location
 
@@ -36,13 +36,13 @@ In this document you will find informati
 
 kbuild includes functionality for building modules both
 within the kernel source tree and outside the kernel source tree.
-The latter is usually referred to as external modules and is used
-both during development and for modules that are not planned to be
-included in the kernel tree.
+The latter is usually referred to as external or "out-of-tree"
+modules and is used both during development and for modules that
+are not planned to be included in the kernel tree.
 
 What is covered within this file is mainly information to authors
-of modules. The author of an external modules should supply
-a makefile that hides most of the complexity so one only has to type
+of modules. The author of an external module should supply
+a makefile that hides most of the complexity, so one only has to type
 'make' to build the module. A complete example will be present in
 chapter 4, "Creating a kbuild file for an external module".
 
@@ -137,7 +137,7 @@ when building an external module.
 	      module versioning work.
 
 --- 2.5 Building separate files for a module
-	It is possible to build single files which is part of a module.
+	It is possible to build single files which are part of a module.
 	This works equal for the kernel, a module and even for external
 	modules.
 	Examples (module foo.ko, consist of bar.o, baz.o):
@@ -151,7 +151,7 @@ when building an external module.
 
 This example shows the actual commands to be executed when building
 an external module for the currently running kernel.
-In the example below the distribution is supposed to use the
+In the example below, the distribution is supposed to use the
 facility to locate output files for a kernel compile in a different
 directory than the kernel source - but the examples will also work
 when the source and the output files are mixed in the same directory.
@@ -170,7 +170,7 @@ the following commands to build the modu
 	        O=/lib/modules/`uname-r`/build        \
 	        M=`pwd`
 
-Then to install the module use the following command:
+Then, to install the module use the following command:
 
 	make -C /usr/src/`uname -r`/source            \
 	        O=/lib/modules/`uname-r`/build        \
@@ -230,7 +230,7 @@ following files:
 
 		endif
 
-	In example 1 the check for KERNELRELEASE is used to separate
+	In example 1, the check for KERNELRELEASE is used to separate
 	the two parts of the Makefile. kbuild will only see the two
 	assignments whereas make will see everything except the two
 	kbuild assignments.
@@ -255,7 +255,7 @@ following files:
 			echo "X" > 8123_bin_shipped
 
 
-	In example 2 we are down to two fairly simple files and for simple
+	In example 2, we are down to two fairly simple files and for simple
 	files as used in this example the split is questionable. But some
 	external modules use Makefiles of several hundred lines and here it
 	really pays off to separate the kbuild part from the rest.
@@ -282,9 +282,9 @@ following files:
 
 		endif
 
-		The trick here is to include the Kbuild file from Makefile so
-		if an older version of kbuild picks up the Makefile the Kbuild
-		file will be included.
+	The trick here is to include the Kbuild file from Makefile, so
+	if an older version of kbuild picks up the Makefile, the Kbuild
+	file will be included.
 
 --- 4.2 Binary blobs included in a module
 
@@ -301,18 +301,19 @@ following files:
 		obj-m  := 8123.o
 		8123-y := 8123_if.o 8123_pci.o 8123_bin.o
 
-	In example 4 there is no distinction between the ordinary .c/.h files
+	In example 4, there is no distinction between the ordinary .c/.h files
 	and the binary file. But kbuild will pick up different rules to create
 	the .o file.
 
 
 === 5. Include files
 
-Include files are a necessity when a .c file uses something from another .c
-files (not strictly in the sense of .c but if good programming practice is
-used). Any module that consist of more than one .c file will have a .h file
+Include files are a necessity when a .c file uses something from other .c
+files (not strictly in the sense of C, but if good programming practice is
+used). Any module that consists of more than one .c file will have a .h file
 for one of the .c files. 
-- If the .h file only describes a module internal interface then the .h file
+
+- If the .h file only describes a module internal interface, then the .h file
   shall be placed in the same directory as the .c files.
 - If the .h files describe an interface used by other parts of the kernel
   located in different directories, the .h files shall be located in
@@ -323,11 +324,11 @@ under include/ such as include/scsi. Ano
 .h files which are located under include/asm-$(ARCH)/*.
 
 External modules have a tendency to locate include files in a separate include/
-directory and therefore needs to deal with this in their kbuild file.
+directory and therefore need to deal with this in their kbuild file.
 
 --- 5.1 How to include files from the kernel include dir
 
-	When a module needs to include a file from include/linux/ then one
+	When a module needs to include a file from include/linux/, then one
 	just uses:
 
 		#include <linux/modules.h>
@@ -348,7 +349,7 @@ directory and therefore needs to deal wi
 	The trick here is to use either EXTRA_CFLAGS (take effect for all .c
 	files) or CFLAGS_$F.o (take effect only for a single file).
 
-	In our example if we move 8123_if.h to a subdirectory named include/
+	In our example, if we move 8123_if.h to a subdirectory named include/
 	the resulting Kbuild file would look like:
 
 		--> filename: Kbuild
@@ -362,9 +363,9 @@ directory and therefore needs to deal wi
 
 --- 5.3 External modules using several directories
 
-	If an external module does not follow the usual kernel style but
-	decide to spread files over several directories then kbuild can
-	support this too.
+	If an external module does not follow the usual kernel style, but
+	decides to spread files over several directories, then kbuild can
+	handle this too.
 
 	Consider the following example:
 	
@@ -374,7 +375,7 @@ directory and therefore needs to deal wi
 	|   +- hal/include/hardwareif.h
 	+- include/complex.h
 	
-	To build a single module named complex.ko we then need the following
+	To build a single module named complex.ko, we then need the following
 	kbuild file:
 
 	Kbuild:
@@ -387,12 +388,12 @@ directory and therefore needs to deal wi
 
 
 	kbuild knows how to handle .o files located in another directory -
-	although this is NOT reccommended practice. The syntax is to specify
+	although this is NOT recommended practice. The syntax is to specify
 	the directory relative to the directory where the Kbuild file is
 	located.
 
-	To find the .h files we have to explicitly tell kbuild where to look
-	for the .h files. When kbuild executes current directory is always
+	To find the .h files, we have to explicitly tell kbuild where to look
+	for the .h files. When kbuild executes, the current directory is always
 	the root of the kernel tree (argument to -C) and therefore we have to
 	tell kbuild how to find the .h files using absolute paths.
 	$(src) will specify the absolute path to the directory where the
@@ -412,7 +413,7 @@ External modules are installed in the di
 
 --- 6.1 INSTALL_MOD_PATH
 
-	Above are the default directories, but as always some level of
+	Above are the default directories, but as always, some level of
 	customization is possible. One can prefix the path using the variable
 	INSTALL_MOD_PATH:
 
@@ -420,17 +421,17 @@ External modules are installed in the di
 		=> Install dir: /frodo/lib/modules/$(KERNELRELEASE)/kernel
 
 	INSTALL_MOD_PATH may be set as an ordinary shell variable or as in the
-	example above be specified on the command line when calling make.
+	example above, can be specified on the command line when calling make.
 	INSTALL_MOD_PATH has effect both when installing modules included in
 	the kernel as well as when installing external modules.
 
 --- 6.2 INSTALL_MOD_DIR
 
-	When installing external modules they are default installed in a
+	When installing external modules they are by default installed to a
 	directory under /lib/modules/$(KERNELRELEASE)/extra, but one may wish
 	to locate modules for a specific functionality in a separate
-	directory. For this purpose one can use INSTALL_MOD_DIR to specify an
-	alternative name than 'extra'.
+	directory. For this purpose, one can use INSTALL_MOD_DIR to specify an
+	alternative name to 'extra'.
 
 		$ make INSTALL_MOD_DIR=gandalf -C KERNELDIR \
 			M=`pwd` modules_install
@@ -444,16 +445,16 @@ Module versioning is enabled by the CONF
 Module versioning is used as a simple ABI consistency check. The Module
 versioning creates a CRC value of the full prototype for an exported symbol and
 when a module is loaded/used then the CRC values contained in the kernel are
-compared with similar values in the module. If they are not equal then the
+compared with similar values in the module. If they are not equal, then the
 kernel refuses to load the module.
 
 Module.symvers contains a list of all exported symbols from a kernel build.
 
 --- 7.1 Symbols fron the kernel (vmlinux + modules)
 
-	During a kernel build a file named Module.symvers will be generated.
+	During a kernel build, a file named Module.symvers will be generated.
 	Module.symvers contains all exported symbols from the kernel and
-	compiled modules. For each symbols the corresponding CRC value
+	compiled modules. For each symbols, the corresponding CRC value
 	is stored too.
 
 	The syntax of the Module.symvers file is:
@@ -461,27 +462,27 @@ Module.symvers contains a list of all ex
 	Sample:
 		0x2d036834  scsi_remove_host   drivers/scsi/scsi_mod
 
-	For a kernel build without CONFIG_MODVERSIONING enabled the crc
+	For a kernel build without CONFIG_MODVERSIONING enabled, the crc
 	would read: 0x00000000
 
-	Module.symvers serve two purposes.
-	1) It list all exported symbols both from vmlinux and all modules
-	2) It list CRC if CONFIG_MODVERSION is enabled
+	Module.symvers serves two purposes:
+	1) It lists all exported symbols both from vmlinux and all modules
+	2) It lists the CRC if CONFIG_MODVERSION is enabled
 
 --- 7.2 Symbols and external modules
 
-	When building an external module the build system needs access to
+	When building an external module, the build system needs access to
 	the symbols from the kernel to check if all external symbols are
 	defined. This is done in the MODPOST step and to obtain all
-	symbols modpost reads Module.symvers from the kernel.
+	symbols, modpost reads Module.symvers from the kernel.
 	If a Module.symvers file is present in the directory where
-	the external module is being build this file will be read too.
-	During the MODPOST step a new Module.symvers file will be written
-	containing all exported symbols that was not defined in the kernel.
+	the external module is being built, this file will be read too.
+	During the MODPOST step, a new Module.symvers file will be written
+	containing all exported symbols that were not defined in the kernel.
 	
 --- 7.3 Symbols from another external module
 
-	Sometimes one external module uses exported symbols from another
+	Sometimes, an external module uses exported symbols from another
 	external module. Kbuild needs to have full knowledge on all symbols
 	to avoid spitting out warnings about undefined symbols.
 	Two solutions exist to let kbuild know all symbols of more than
@@ -490,9 +491,9 @@ Module.symvers contains a list of all ex
 	impractical in certain situations.
 
 	Use a top-level Kbuild file
-		If you have two modules: 'foo', 'bar' and 'foo' needs symbols
-		from 'bar' then one can use a common top-level kbuild file so
-		both modules are compiled in same build.
+		If you have two modules: 'foo' and 'bar', and 'foo' needs
+		symbols from 'bar', then one can use a common top-level kbuild
+		file so both modules are compiled in same build.
 
 		Consider following directory layout:
 		./foo/ <= contains the foo module
@@ -509,15 +510,15 @@ Module.symvers contains a list of all ex
 		knowledge on symbols from both modules.
 
 	Use an extra Module.symvers file
-		When an external module is build a Module.symvers file is
+		When an external module is built, a Module.symvers file is
 		generated containing all exported symbols which are not
 		defined in the kernel.
-		To get access to symbols from module 'bar' one can copy the
+		To get access to symbols from module 'bar', one can copy the
 		Module.symvers file from the compilation of the 'bar' module
-		to the directory where the 'foo' module is build.
-		During the module build kbuild will read the Module.symvers
+		to the directory where the 'foo' module is built.
+		During the module build, kbuild will read the Module.symvers
 		file in the directory of the external module and when the
-		build is finished a new Module.symvers file is created
+		build is finished, a new Module.symvers file is created
 		containing the sum of all symbols defined and not part of the
 		kernel.
 		
@@ -525,7 +526,7 @@ Module.symvers contains a list of all ex
 
 --- 8.1 Testing for CONFIG_FOO_BAR
 
-	Modules often needs to check for certain CONFIG_ options to decide if
+	Modules often need to check for certain CONFIG_ options to decide if
 	a specific feature shall be included in the module. When kbuild is used
 	this is done by referencing the CONFIG_ variable directly.
 
@@ -537,7 +538,7 @@ Module.symvers contains a list of all ex
 
 	External modules have traditionally used grep to check for specific
 	CONFIG_ settings directly in .config. This usage is broken.
-	As introduced before external modules shall use kbuild when building
-	and therefore can use the same methods as in-kernel modules when testing
-	for CONFIG_ definitions.
+	As introduced before, external modules shall use kbuild when building
+	and therefore can use the same methods as in-kernel modules when
+	testing for CONFIG_ definitions.
 
-- 
1.4.1


^ permalink raw reply related	[flat|nested] 35+ messages in thread

* [PATCH 9/28] kbuild: linguistic fixes for Documentation/kbuild/makefiles.txt
  2006-09-24 21:18             ` [PATCH 8/28] kbuild: linguistic fixes for Documentation/kbuild/modules.txt sam
@ 2006-09-24 21:18               ` sam
  2006-09-24 21:18                 ` [PATCH 10/28] kbuild: ignore references from ".pci_fixup" to ".init.text" sam
  0 siblings, 1 reply; 35+ messages in thread
From: sam @ 2006-09-24 21:18 UTC (permalink / raw)
  To: linux-kernel; +Cc: Jan Engelhardt, Jan Engelhardt, Sam Ravnborg

From: Jan Engelhardt <jengelh@linux01.gwdg.de>

I have done a look-through through Documentation/kbuild/ and my corrections
(proposed) are attached.

Cc'ed are original author Michael (responsible for comitting changes to
these files?), Sam (kbuild maintainer), Adrian (-trivial maintainer).

Signed-off-by: Jan Engelhardt <jengelh@gmx.de>
Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
---
 Documentation/kbuild/makefiles.txt |  184 ++++++++++++++++++------------------
 1 files changed, 94 insertions(+), 90 deletions(-)

diff --git a/Documentation/kbuild/makefiles.txt b/Documentation/kbuild/makefiles.txt
index 0706699..3d2f88e 100644
--- a/Documentation/kbuild/makefiles.txt
+++ b/Documentation/kbuild/makefiles.txt
@@ -86,7 +86,7 @@ any kernel Makefiles (or any other sourc
 
 *Normal developers* are people who work on features such as device
 drivers, file systems, and network protocols.  These people need to
-maintain the kbuild Makefiles for the subsystem that they are
+maintain the kbuild Makefiles for the subsystem they are
 working on.  In order to do this effectively, they need some overall
 knowledge about the kernel Makefiles, plus detailed knowledge about the
 public interface for kbuild.
@@ -104,10 +104,10 @@ This document is aimed towards normal de
 === 3 The kbuild files
 
 Most Makefiles within the kernel are kbuild Makefiles that use the
-kbuild infrastructure. This chapter introduce the syntax used in the
+kbuild infrastructure. This chapter introduces the syntax used in the
 kbuild makefiles.
 The preferred name for the kbuild files are 'Makefile' but 'Kbuild' can
-be used and if both a 'Makefile' and a 'Kbuild' file exists then the 'Kbuild'
+be used and if both a 'Makefile' and a 'Kbuild' file exists, then the 'Kbuild'
 file will be used.
 
 Section 3.1 "Goal definitions" is a quick intro, further chapters provide
@@ -124,7 +124,7 @@ more details, with real examples.
 	Example:
 		obj-y += foo.o
 
-	This tell kbuild that there is one object in that directory named
+	This tell kbuild that there is one object in that directory, named
 	foo.o. foo.o will be built from foo.c or foo.S.
 
 	If foo.o shall be built as a module, the variable obj-m is used.
@@ -140,7 +140,7 @@ more details, with real examples.
 --- 3.2 Built-in object goals - obj-y
 
 	The kbuild Makefile specifies object files for vmlinux
-	in the lists $(obj-y).  These lists depend on the kernel
+	in the $(obj-y) lists.  These lists depend on the kernel
 	configuration.
 
 	Kbuild compiles all the $(obj-y) files.  It then calls
@@ -154,8 +154,8 @@ more details, with real examples.
 	Link order is significant, because certain functions
 	(module_init() / __initcall) will be called during boot in the
 	order they appear. So keep in mind that changing the link
-	order may e.g.  change the order in which your SCSI
-	controllers are detected, and thus you disks are renumbered.
+	order may e.g. change the order in which your SCSI
+	controllers are detected, and thus your disks are renumbered.
 
 	Example:
 		#drivers/isdn/i4l/Makefile
@@ -206,8 +206,8 @@ more details, with real examples.
 	 	ext2-y                       := balloc.o bitmap.o
 	        ext2-$(CONFIG_EXT2_FS_XATTR) += xattr.o
 	
-	In this example xattr.o is only part of the composite object
-	ext2.o, if $(CONFIG_EXT2_FS_XATTR) evaluates to 'y'.
+	In this example, xattr.o is only part of the composite object
+	ext2.o if $(CONFIG_EXT2_FS_XATTR) evaluates to 'y'.
 
 	Note: Of course, when you are building objects into the kernel,
 	the syntax above will also work. So, if you have CONFIG_EXT2_FS=y,
@@ -221,16 +221,16 @@ more details, with real examples.
 
 --- 3.5 Library file goals - lib-y
 
-	Objects listed with obj-* are used for modules or
+	Objects listed with obj-* are used for modules, or
 	combined in a built-in.o for that specific directory.
 	There is also the possibility to list objects that will
 	be included in a library, lib.a.
 	All objects listed with lib-y are combined in a single
 	library for that directory.
-	Objects that are listed in obj-y and additional listed in
+	Objects that are listed in obj-y and additionaly listed in
 	lib-y will not be included in the library, since they will anyway
 	be accessible.
-	For consistency objects listed in lib-m will be included in lib.a. 
+	For consistency, objects listed in lib-m will be included in lib.a.
 
 	Note that the same kbuild makefile may list files to be built-in
 	and to be part of a library. Therefore the same directory
@@ -241,11 +241,11 @@ more details, with real examples.
 		lib-y    := checksum.o delay.o
 
 	This will create a library lib.a based on checksum.o and delay.o.
-	For kbuild to actually recognize that there is a lib.a being build
+	For kbuild to actually recognize that there is a lib.a being built,
 	the directory shall be listed in libs-y.
 	See also "6.3 List directories to visit when descending".
  
-	Usage of lib-y is normally restricted to lib/ and arch/*/lib.
+	Use of lib-y is normally restricted to lib/ and arch/*/lib.
 
 --- 3.6 Descending down in directories
 
@@ -255,7 +255,7 @@ more details, with real examples.
 	invoke make recursively in subdirectories, provided you let it know of
 	them.
 
-	To do so obj-y and obj-m are used.
+	To do so, obj-y and obj-m are used.
 	ext2 lives in a separate directory, and the Makefile present in fs/
 	tells kbuild to descend down using the following assignment.
 
@@ -353,8 +353,8 @@ more details, with real examples.
 	Special rules are used when the kbuild infrastructure does
 	not provide the required support. A typical example is
 	header files generated during the build process.
-	Another example is the architecture specific Makefiles which
-	needs special rules to prepare boot images etc.
+	Another example are the architecture specific Makefiles which
+	need special rules to prepare boot images etc.
 
 	Special rules are written as normal Make rules.
 	Kbuild is not executing in the directory where the Makefile is
@@ -387,22 +387,22 @@ more details, with real examples.
 
 --- 3.11 $(CC) support functions
 
-	The kernel may be build with several different versions of
+	The kernel may be built with several different versions of
 	$(CC), each supporting a unique set of features and options.
 	kbuild provide basic support to check for valid options for $(CC).
 	$(CC) is useally the gcc compiler, but other alternatives are
 	available.
 
     as-option
-    	as-option is used to check if $(CC) when used to compile
-	assembler (*.S) files supports the given option. An optional
-	second option may be specified if first option are not supported.
+	as-option is used to check if $(CC) -- when used to compile
+	assembler (*.S) files -- supports the given option. An optional
+	second option may be specified if the first option is not supported.
 
 	Example:
 		#arch/sh/Makefile
 		cflags-y += $(call as-option,-Wa$(comma)-isa=$(isa-y),)
 
-	In the above example cflags-y will be assinged the the option
+	In the above example, cflags-y will be assigned the option
 	-Wa$(comma)-isa=$(isa-y) if it is supported by $(CC).
 	The second argument is optional, and if supplied will be used
 	if first argument is not supported.
@@ -422,7 +422,7 @@ more details, with real examples.
 	if first argument is not supported.
 
     cc-option
-	cc-option is used to check if $(CC) support a given option, and not
+	cc-option is used to check if $(CC) supports a given option, and not
 	supported to use an optional second option.
 
 	Example:
@@ -430,8 +430,8 @@ more details, with real examples.
 		cflags-y += $(call cc-option,-march=pentium-mmx,-march=i586)
 
 	In the above example cflags-y will be assigned the option
-	-march=pentium-mmx if supported by $(CC), otherwise -march-i586.
-	The second argument to cc-option is optional, and if omitted
+	-march=pentium-mmx if supported by $(CC), otherwise -march=i586.
+	The second argument to cc-option is optional, and if omitted,
 	cflags-y will be assigned no value if first option is not supported.
 
    cc-option-yn
@@ -444,14 +444,15 @@ more details, with real examples.
 		aflags-$(biarch) += -a32
 		cflags-$(biarch) += -m32
 	
-	In the above example $(biarch) is set to y if $(CC) supports the -m32
-	option. When $(biarch) equals to y the expanded variables $(aflags-y)
-	and $(cflags-y) will be assigned the values -a32 and -m32.
+	In the above example, $(biarch) is set to y if $(CC) supports the -m32
+	option. When $(biarch) equals 'y', the expanded variables $(aflags-y)
+	and $(cflags-y) will be assigned the values -a32 and -m32,
+	respectively.
 
     cc-option-align
-	gcc version >= 3.0 shifted type of options used to speify
-	alignment of functions, loops etc. $(cc-option-align) whrn used
-	as prefix to the align options will select the right prefix:
+	gcc versions >= 3.0 changed the type of options used to specify
+	alignment of functions, loops etc. $(cc-option-align), when used
+	as prefix to the align options, will select the right prefix:
 	gcc < 3.00
 		cc-option-align = -malign
 	gcc >= 3.00
@@ -460,15 +461,15 @@ more details, with real examples.
 	Example:
 		CFLAGS += $(cc-option-align)-functions=4
 
-	In the above example the option -falign-functions=4 is used for
-	gcc >= 3.00. For gcc < 3.00 -malign-functions=4 is used.
+	In the above example, the option -falign-functions=4 is used for
+	gcc >= 3.00. For gcc < 3.00, -malign-functions=4 is used.
 	
     cc-version
-	cc-version return a numerical version of the $(CC) compiler version.
+	cc-version returns a numerical version of the $(CC) compiler version.
 	The format is <major><minor> where both are two digits. So for example
 	gcc 3.41 would return 0341.
 	cc-version is useful when a specific $(CC) version is faulty in one
-	area, for example the -mregparm=3 were broken in some gcc version
+	area, for example -mregparm=3 was broken in some gcc versions
 	even though the option was accepted by gcc.
 
 	Example:
@@ -477,18 +478,18 @@ more details, with real examples.
 		if [ $(call cc-version) -ge 0300 ] ; then \
 			echo "-mregparm=3"; fi ;)
 
-	In the above example -mregparm=3 is only used for gcc version greater
+	In the above example, -mregparm=3 is only used for gcc version greater
 	than or equal to gcc 3.0.
 
     cc-ifversion
-	cc-ifversion test the version of $(CC) and equals last argument if
+	cc-ifversion tests the version of $(CC) and equals last argument if
 	version expression is true.
 
 	Example:
 		#fs/reiserfs/Makefile
 		EXTRA_CFLAGS := $(call cc-ifversion, -lt, 0402, -O1)
 
-	In this example EXTRA_CFLAGS will be assigned the value -O1 if the
+	In this example, EXTRA_CFLAGS will be assigned the value -O1 if the
 	$(CC) version is less than 4.2.
 	cc-ifversion takes all the shell operators: 
 	-eq, -ne, -lt, -le, -gt, and -ge
@@ -529,7 +530,7 @@ Both possibilities are described in the 
 	Host programs can be made up based on composite objects.
 	The syntax used to define composite objects for host programs is
 	similar to the syntax used for kernel objects.
-	$(<executeable>-objs) list all objects used to link the final
+	$(<executeable>-objs) lists all objects used to link the final
 	executable.
 
 	Example:
@@ -538,9 +539,9 @@ Both possibilities are described in the 
 		lxdialog-objs := checklist.o lxdialog.o
 
 	Objects with extension .o are compiled from the corresponding .c
-	files. In the above example checklist.c is compiled to checklist.o
+	files. In the above example, checklist.c is compiled to checklist.o
 	and lxdialog.c is compiled to lxdialog.o.
-	Finally the two .o files are linked to the executable, lxdialog.
+	Finally, the two .o files are linked to the executable, lxdialog.
 	Note: The syntax <executable>-y is not permitted for host-programs.
 
 --- 4.3 Defining shared libraries  
@@ -594,7 +595,7 @@ Both possibilities are described in the 
 	The programs will always be compiled utilising $(HOSTCC) passed
 	the options specified in $(HOSTCFLAGS).
 	To set flags that will take effect for all host programs created
-	in that Makefile use the variable HOST_EXTRACFLAGS.
+	in that Makefile, use the variable HOST_EXTRACFLAGS.
 
 	Example:
 		#scripts/lxdialog/Makefile
@@ -613,7 +614,8 @@ Both possibilities are described in the 
 		#scripts/kconfig/Makefile
 		HOSTLOADLIBES_qconf := -L$(QTDIR)/lib
 
-	When linking qconf it will be passed the extra option "-L$(QTDIR)/lib".
+	When linking qconf, it will be passed the extra option
+	"-L$(QTDIR)/lib".
  
 --- 4.6 When host programs are actually built
 
@@ -648,7 +650,7 @@ Both possibilities are described in the 
 
 --- 4.7 Using hostprogs-$(CONFIG_FOO)
 
-	A typcal pattern in a Kbuild file lok like this:
+	A typcal pattern in a Kbuild file looks like this:
 
 	Example:
 		#scripts/Makefile
@@ -656,13 +658,13 @@ Both possibilities are described in the 
 
 	Kbuild knows about both 'y' for built-in and 'm' for module.
 	So if a config symbol evaluate to 'm', kbuild will still build
-	the binary. In other words Kbuild handle hostprogs-m exactly
-	like hostprogs-y. But only hostprogs-y is recommend used
-	when no CONFIG symbol are involved.
+	the binary. In other words, Kbuild handles hostprogs-m exactly
+	like hostprogs-y. But only hostprogs-y is recommended to be used
+	when no CONFIG symbols are involved.
 
 === 5 Kbuild clean infrastructure
 
-"make clean" deletes most generated files in the src tree where the kernel
+"make clean" deletes most generated files in the obj tree where the kernel
 is compiled. This includes generated files such as host programs.
 Kbuild knows targets listed in $(hostprogs-y), $(hostprogs-m), $(always),
 $(extra-y) and $(targets). They are all deleted during "make clean".
@@ -723,29 +725,29 @@ be visited during "make clean".
 
 The top level Makefile sets up the environment and does the preparation,
 before starting to descend down in the individual directories.
-The top level makefile contains the generic part, whereas the
-arch/$(ARCH)/Makefile contains what is required to set-up kbuild
-to the said architecture.
-To do so arch/$(ARCH)/Makefile sets a number of variables, and defines
+The top level makefile contains the generic part, whereas
+arch/$(ARCH)/Makefile contains what is required to set up kbuild
+for said architecture.
+To do so, arch/$(ARCH)/Makefile sets up a number of variables and defines
 a few targets.
 
-When kbuild executes the following steps are followed (roughly):
-1) Configuration of the kernel => produced .config
+When kbuild executes, the following steps are followed (roughly):
+1) Configuration of the kernel => produce .config
 2) Store kernel version in include/linux/version.h
 3) Symlink include/asm to include/asm-$(ARCH)
 4) Updating all other prerequisites to the target prepare:
    - Additional prerequisites are specified in arch/$(ARCH)/Makefile
 5) Recursively descend down in all directories listed in
    init-* core* drivers-* net-* libs-* and build all targets.
-   - The value of the above variables are extended in arch/$(ARCH)/Makefile.
+   - The values of the above variables are expanded in arch/$(ARCH)/Makefile.
 6) All object files are then linked and the resulting file vmlinux is 
-   located at the root of the src tree.
+   located at the root of the obj tree.
    The very first objects linked are listed in head-y, assigned by
    arch/$(ARCH)/Makefile.
-7) Finally the architecture specific part does any required post processing
+7) Finally, the architecture specific part does any required post processing
    and builds the final bootimage.
    - This includes building boot records
-   - Preparing initrd images and the like
+   - Preparing initrd images and thelike
 
 
 --- 6.1 Set variables to tweak the build to the architecture
@@ -770,7 +772,7 @@ When kbuild executes the following steps
     LDFLAGS_vmlinux	Options for $(LD) when linking vmlinux
 
 	LDFLAGS_vmlinux is used to specify additional flags to pass to
-	the linker when linking the final vmlinux.
+	the linker when linking the final vmlinux image.
 	LDFLAGS_vmlinux uses the LDFLAGS_$@ support.
 
 	Example:
@@ -780,7 +782,7 @@ When kbuild executes the following steps
     OBJCOPYFLAGS	objcopy flags
 
 	When $(call if_changed,objcopy) is used to translate a .o file,
-	then the flags specified in OBJCOPYFLAGS will be used.
+	the flags specified in OBJCOPYFLAGS will be used.
 	$(call if_changed,objcopy) is often used to generate raw binaries on
 	vmlinux.
 
@@ -792,7 +794,7 @@ When kbuild executes the following steps
 		$(obj)/image: vmlinux FORCE
 			$(call if_changed,objcopy)
 
-	In this example the binary $(obj)/image is a binary version of
+	In this example, the binary $(obj)/image is a binary version of
 	vmlinux. The usage of $(call if_changed,xxx) will be described later.
 
     AFLAGS		$(AS) assembler flags
@@ -809,7 +811,7 @@ When kbuild executes the following steps
 	Default value - see top level Makefile
 	Append or modify as required per architecture.
 
-	Often the CFLAGS variable depends on the configuration.
+	Often, the CFLAGS variable depends on the configuration.
 
 	Example:
 		#arch/i386/Makefile
@@ -830,7 +832,7 @@ When kbuild executes the following steps
 		...
 
 
-	The first examples utilises the trick that a config option expands
+	The first example utilises the trick that a config option expands
 	to 'y' when selected.
 
     CFLAGS_KERNEL	$(CC) options specific for built-in
@@ -846,15 +848,15 @@ When kbuild executes the following steps
  
 --- 6.2 Add prerequisites to archprepare:
 
-	The archprepare: rule is used to list prerequisites that needs to be
+	The archprepare: rule is used to list prerequisites that need to be
 	built before starting to descend down in the subdirectories.
-	This is usual header files containing assembler constants.
+	This is usually used for header files containing assembler constants.
 
 		Example:
 		#arch/arm/Makefile
 		archprepare: maketools
 
-	In this example the file target maketools will be processed
+	In this example, the file target maketools will be processed
 	before descending down in the subdirectories.
 	See also chapter XXX-TODO that describe how kbuild supports
 	generating offset header files.
@@ -870,15 +872,16 @@ When kbuild executes the following steps
 	
     head-y, init-y, core-y, libs-y, drivers-y, net-y
 
-	$(head-y) list objects to be linked first in vmlinux.
-	$(libs-y) list directories where a lib.a archive can be located.
-	The rest list directories where a built-in.o object file can be located.
+	$(head-y) lists objects to be linked first in vmlinux.
+	$(libs-y) lists directories where a lib.a archive can be located.
+	The rest lists directories where a built-in.o object file can be
+	located.
 
 	$(init-y) objects will be located after $(head-y).
 	Then the rest follows in this order:
 	$(core-y), $(libs-y), $(drivers-y) and $(net-y).
 
-	The top level Makefile define values for all generic directories,
+	The top level Makefile defines values for all generic directories,
 	and arch/$(ARCH)/Makefile only adds architecture specific directories.
 
 	Example:
@@ -915,9 +918,9 @@ When kbuild executes the following steps
 	"$(Q)$(MAKE) $(build)=<dir>" is the recommended way to invoke
 	make in a subdirectory.
 
-	There are no rules for naming of the architecture specific targets,
+	There are no rules for naming architecture specific targets,
 	but executing "make help" will list all relevant targets.
-	To support this $(archhelp) must be defined.
+	To support this, $(archhelp) must be defined.
 
 	Example:
 		#arch/i386/Makefile
@@ -928,8 +931,8 @@ When kbuild executes the following steps
 	When make is executed without arguments, the first goal encountered
 	will be built. In the top level Makefile the first goal present
 	is all:.
-	An architecture shall always per default build a bootable image.
-	In "make help" the default goal is highlighted with a '*'.
+	An architecture shall always, per default, build a bootable image.
+	In "make help", the default goal is highlighted with a '*'.
 	Add a new prerequisite to all: to select a default goal different
 	from vmlinux.
 
@@ -955,7 +958,7 @@ When kbuild executes the following steps
 		#arch/i386/kernel/Makefile
 		extra-y := head.o init_task.o
 
-	In this example extra-y is used to list object files that
+	In this example, extra-y is used to list object files that
 	shall be built, but shall not be linked as part of built-in.o.
 
 	
@@ -972,8 +975,8 @@ When kbuild executes the following steps
 		target: source(s) FORCE
 			$(call if_changed,ld/objcopy/gzip)
 
-	When the rule is evaluated it is checked to see if any files
-	needs an update, or the commandline has changed since last
+	When the rule is evaluated, it is checked to see if any files
+	needs an update, or the command line has changed since the last
 	invocation. The latter will force a rebuild if any options
 	to the executable have changed.
 	Any target that utilises if_changed must be listed in $(targets),
@@ -991,7 +994,7 @@ When kbuild executes the following steps
 	#WRONG!#	$(call if_changed, ld/objcopy/gzip)
 
     ld
-	Link target. Often LDFLAGS_$@ is used to set specific options to ld.
+	Link target. Often, LDFLAGS_$@ is used to set specific options to ld.
 	
     objcopy
 	Copy binary. Uses OBJCOPYFLAGS usually specified in
@@ -1010,10 +1013,10 @@ When kbuild executes the following steps
 		$(obj)/setup $(obj)/bootsect: %: %.o FORCE
 			$(call if_changed,ld)
 
-	In this example there are two possible targets, requiring different
-	options to the linker. the linker options are specified using the
+	In this example, there are two possible targets, requiring different
+	options to the linker. The linker options are specified using the
 	LDFLAGS_$@ syntax - one for each potential target.
-	$(targets) are assinged all potential targets, herby kbuild knows
+	$(targets) are assinged all potential targets, by which kbuild knows
 	the targets and will:
 		1) check for commandline changes
 		2) delete target during make clean
@@ -1027,7 +1030,7 @@ When kbuild executes the following steps
 
 --- 6.7 Custom kbuild commands
 
-	When kbuild is executing with KBUILD_VERBOSE=0 then only a shorthand
+	When kbuild is executing with KBUILD_VERBOSE=0, then only a shorthand
 	of a command is normally displayed.
 	To enable this behaviour for custom commands kbuild requires
 	two variables to be set:
@@ -1045,7 +1048,7 @@ When kbuild executes the following steps
 			$(call if_changed,image)
 			@echo 'Kernel: $@ is ready'
 
-	When updating the $(obj)/bzImage target the line:
+	When updating the $(obj)/bzImage target, the line
 
 	BUILD    arch/i386/boot/bzImage
 
@@ -1054,11 +1057,11 @@ When kbuild executes the following steps
 
 --- 6.8 Preprocessing linker scripts
 
-	When the vmlinux image is build the linker script:
+	When the vmlinux image is built, the linker script
 	arch/$(ARCH)/kernel/vmlinux.lds is used.
 	The script is a preprocessed variant of the file vmlinux.lds.S
 	located in the same directory.
-	kbuild knows .lds file and includes a rule *lds.S -> *lds.
+	kbuild knows .lds files and includes a rule *lds.S -> *lds.
 	
 	Example:
 		#arch/i386/kernel/Makefile
@@ -1068,11 +1071,11 @@ When kbuild executes the following steps
 		export CPPFLAGS_vmlinux.lds += -P -C -U$(ARCH)
 		
 	The assigment to $(always) is used to tell kbuild to build the
-	target: vmlinux.lds.
-	The assignment to $(CPPFLAGS_vmlinux.lds) tell kbuild to use the
+	target vmlinux.lds.
+	The assignment to $(CPPFLAGS_vmlinux.lds) tells kbuild to use the
 	specified options when building the target vmlinux.lds.
 	
-	When building the *.lds target kbuild used the variakles:
+	When building the *.lds target, kbuild uses the variables:
 	CPPFLAGS	: Set in top-level Makefile
 	EXTRA_CPPFLAGS	: May be set in the kbuild makefile
 	CPPFLAGS_$(@F)  : Target specific flags.
@@ -1147,7 +1150,7 @@ The top Makefile exports the following v
 
 === 8 Makefile language
 
-The kernel Makefiles are designed to run with GNU Make.  The Makefiles
+The kernel Makefiles are designed to be run with GNU Make.  The Makefiles
 use only the documented features of GNU Make, but they do use many
 GNU extensions.
 
@@ -1169,10 +1172,11 @@ is the right choice.
 Original version made by Michael Elizabeth Chastain, <mailto:mec@shout.net>
 Updates by Kai Germaschewski <kai@tp1.ruhr-uni-bochum.de>
 Updates by Sam Ravnborg <sam@ravnborg.org>
+Language QA by Jan Engelhardt <jengelh@gmx.de>
 
 === 10 TODO
 
-- Describe how kbuild support shipped files with _shipped.
+- Describe how kbuild supports shipped files with _shipped.
 - Generating offset header files.
 - Add more variables to section 7?
 
-- 
1.4.1


^ permalink raw reply related	[flat|nested] 35+ messages in thread

* [PATCH 10/28] kbuild: ignore references from ".pci_fixup" to ".init.text"
  2006-09-24 21:18               ` [PATCH 9/28] kbuild: linguistic fixes for Documentation/kbuild/makefiles.txt sam
@ 2006-09-24 21:18                 ` sam
  2006-09-24 21:18                   ` [PATCH 11/28] kbuild: modpost on vmlinux regardless of CONFIG_MODULES sam
  0 siblings, 1 reply; 35+ messages in thread
From: sam @ 2006-09-24 21:18 UTC (permalink / raw)
  To: linux-kernel; +Cc: Magnus Damm

From: Magnus Damm <magnus@valinux.co.jp>

The modpost code is extended to ignore references
from ".pci_fixup" to ".init.text".

Signed-off-by: Magnus Damm <magnus@valinux.co.jp>
---
 scripts/mod/modpost.c |   16 ++++++++++++----
 1 files changed, 12 insertions(+), 4 deletions(-)

diff --git a/scripts/mod/modpost.c b/scripts/mod/modpost.c
index dfde0e8..5028d46 100644
--- a/scripts/mod/modpost.c
+++ b/scripts/mod/modpost.c
@@ -581,8 +581,8 @@ static int strrcmp(const char *s, const 
  *   fromsec = .data
  *   atsym = *driver, *_template, *_sht, *_ops, *_probe, *probe_one
  **/
-static int secref_whitelist(const char *tosec, const char *fromsec,
-			    const char *atsym)
+static int secref_whitelist(const char *modname, const char *tosec,
+			    const char *fromsec, const char *atsym)
 {
 	int f1 = 1, f2 = 1;
 	const char **s;
@@ -618,8 +618,15 @@ static int secref_whitelist(const char *
 	for (s = pat2sym; *s; s++)
 		if (strrcmp(atsym, *s) == 0)
 			f1 = 1;
+	if (f1 && f2)
+		return 1;
 
-	return f1 && f2;
+	/* Whitelist all references from .pci_fixup section if vmlinux */
+	if (is_vmlinux(modname)) {
+		if ((strcmp(fromsec, ".pci_fixup") == 0) &&
+		    (strcmp(tosec, ".init.text") == 0))
+		return 1;
+	}
 }
 
 /**
@@ -726,7 +733,8 @@ static void warn_sec_mismatch(const char
 
 	/* check whitelist - we may ignore it */
 	if (before &&
-	    secref_whitelist(secname, fromsec, elf->strtab + before->st_name))
+	    secref_whitelist(modname, secname, fromsec,
+			     elf->strtab + before->st_name))
 		return;
 
 	if (before && after) {
-- 
1.4.1


^ permalink raw reply related	[flat|nested] 35+ messages in thread

* [PATCH 11/28] kbuild: modpost on vmlinux regardless of CONFIG_MODULES
  2006-09-24 21:18                 ` [PATCH 10/28] kbuild: ignore references from ".pci_fixup" to ".init.text" sam
@ 2006-09-24 21:18                   ` sam
  2006-09-24 21:18                     ` [PATCH 12/28] kbuild: make V=2 tell why a target is rebuild sam
  0 siblings, 1 reply; 35+ messages in thread
From: sam @ 2006-09-24 21:18 UTC (permalink / raw)
  To: linux-kernel; +Cc: Sam Ravnborg, Sam Ravnborg

From: Sam Ravnborg <sam@mars.ravnborg.org>

Based on patch from: Magnus Damm <magnus@valinux.co.jp>
This has the advantage that all section mismatch checks are run regardless
of modules being enabled or not.

When running modpost on vmlinux output:
MODPOST vmlinux

When running modpost on modules output count of modules like this:
MODPOST 5 modules

Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
---
 Makefile                 |    1 +
 scripts/Makefile         |    2 +-
 scripts/Makefile.modpost |   12 +++++++++---
 3 files changed, 11 insertions(+), 4 deletions(-)

diff --git a/Makefile b/Makefile
index b06b1ea..22451c2 100644
--- a/Makefile
+++ b/Makefile
@@ -736,6 +736,7 @@ endif # ifdef CONFIG_KALLSYMS
 # vmlinux image - including updated kernel symbols
 vmlinux: $(vmlinux-lds) $(vmlinux-init) $(vmlinux-main) $(kallsyms.o) FORCE
 	$(call if_changed_rule,vmlinux__)
+	$(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modpost $@
 	$(Q)rm -f .old_version
 
 # The actual objects are generated when descending, 
diff --git a/scripts/Makefile b/scripts/Makefile
index d531a1f..ea41de8 100644
--- a/scripts/Makefile
+++ b/scripts/Makefile
@@ -19,7 +19,7 @@ # The following hostprogs-y programs are
 hostprogs-y += unifdef
 
 subdir-$(CONFIG_MODVERSIONS) += genksyms
-subdir-$(CONFIG_MODULES)     += mod
+subdir-y                     += mod
 
 # Let clean descend into subdirs
 subdir-	+= basic kconfig package
diff --git a/scripts/Makefile.modpost b/scripts/Makefile.modpost
index 0a64688..9137df2 100644
--- a/scripts/Makefile.modpost
+++ b/scripts/Makefile.modpost
@@ -51,19 +51,25 @@ _modpost: $(modules)
 
 # Step 2), invoke modpost
 #  Includes step 3,4
-quiet_cmd_modpost = MODPOST
+quiet_cmd_modpost = MODPOST $(words $(filter-out vmlinux FORCE, $^)) modules
       cmd_modpost = scripts/mod/modpost            \
         $(if $(CONFIG_MODVERSIONS),-m)             \
 	$(if $(CONFIG_MODULE_SRCVERSION_ALL),-a,)  \
 	$(if $(KBUILD_EXTMOD),-i,-o) $(kernelsymfile) \
 	$(if $(KBUILD_EXTMOD),-I $(modulesymfile)) \
 	$(if $(KBUILD_EXTMOD),-o $(modulesymfile)) \
-	$(filter-out FORCE,$^)
+	$(wildcard vmlinux) $(filter-out FORCE,$^)
 
 PHONY += __modpost
-__modpost: $(wildcard vmlinux) $(modules:.ko=.o) FORCE
+__modpost: $(modules:.ko=.o) FORCE
 	$(call cmd,modpost)
 
+quiet_cmd_kernel-mod = MODPOST $@
+      cmd_kernel-mod = $(cmd_modpost)
+
+vmlinux: FORCE
+	$(call cmd,kernel-mod)
+
 # Declare generated files as targets for modpost
 $(symverfile):         __modpost ;
 $(modules:.ko=.mod.c): __modpost ;
-- 
1.4.1


^ permalink raw reply related	[flat|nested] 35+ messages in thread

* [PATCH 12/28] kbuild: make V=2 tell why a target is rebuild
  2006-09-24 21:18                   ` [PATCH 11/28] kbuild: modpost on vmlinux regardless of CONFIG_MODULES sam
@ 2006-09-24 21:18                     ` sam
  2006-09-24 21:18                       ` [PATCH 13/28] kbuild: make -rR is now default sam
  0 siblings, 1 reply; 35+ messages in thread
From: sam @ 2006-09-24 21:18 UTC (permalink / raw)
  To: linux-kernel; +Cc: Sam Ravnborg, Sam Ravnborg

From: Sam Ravnborg <sam@mars.ravnborg.org>

tell why a a target got build
   enabled by make V=2
      Output (listed in the order they are checked):
         (1) - due to target is PHONY
         (2) - due to target missing
         (3) - due to: file1.h file2.h
         (4) - due to command line change
         (5) - due to missing .cmd file
         (6) - due to target not in $(targets)
(1) We always build PHONY targets
(2) No target, so we better build it
(3) Prerequisite is newer than target
(4) The command line stored in the file named dir/.target.cmd
    differed from actual command line. This happens when compiler
    options changes
(5) No dir/.target.cmd file (used to store command line)
(6) No dir/.target.cmd file and target not listed in $(targets)
    This is a good hint that there is a bug in the kbuild file

This patch is inspired by a patch from: Milton Miller <miltonm@bga.com>

Cc: Milton Miller <miltonm@bga.com>
Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
---
 Makefile               |    1 +
 scripts/Kbuild.include |   41 ++++++++++++++++++++++++++++++++++++++++-
 2 files changed, 41 insertions(+), 1 deletions(-)

diff --git a/Makefile b/Makefile
index 22451c2..440a133 100644
--- a/Makefile
+++ b/Makefile
@@ -1101,6 +1101,7 @@ help:
 		echo '')
 
 	@echo  '  make V=0|1 [targets] 0 => quiet build (default), 1 => verbose build'
+	@echo  '  make V=2   [targets] 2 => give reason for rebuild of target'
 	@echo  '  make O=dir [targets] Locate all output files in "dir", including .config'
 	@echo  '  make C=1   [targets] Check all c source with $$CHECK (sparse by default)'
 	@echo  '  make C=2   [targets] Force check of all c source with $$CHECK'
diff --git a/scripts/Kbuild.include b/scripts/Kbuild.include
index 1d6ffb2..3d52389 100644
--- a/scripts/Kbuild.include
+++ b/scripts/Kbuild.include
@@ -129,7 +129,7 @@ endif
 
 # echo command. Short version is $(quiet) equals quiet, otherwise full command
 echo-cmd = $(if $($(quiet)cmd_$(1)), \
-	echo '  $(call escsq,$($(quiet)cmd_$(1)))';)
+	echo '  $(call escsq,$($(quiet)cmd_$(1)))$(echo-why)';)
 
 # >'< substitution is for echo to work,
 # >$< substitution to preserve $ when reloading .cmd file
@@ -164,3 +164,42 @@ if_changed_rule = $(if $(strip $(any-pre
 	@set -e;                                                             \
 	$(rule_$(1)))
 
+###
+# why - tell why a a target got build
+#       enabled by make V=2
+#       Output (listed in the order they are checked):
+#          (1) - due to target is PHONY
+#          (2) - due to target missing
+#          (3) - due to: file1.h file2.h
+#          (4) - due to command line change
+#          (5) - due to missing .cmd file
+#          (6) - due to target not in $(targets)
+# (1) PHONY targets are always build
+# (2) No target, so we better build it
+# (3) Prerequisite is newer than target
+# (4) The command line stored in the file named dir/.target.cmd
+#     differed from actual command line. This happens when compiler
+#     options changes
+# (5) No dir/.target.cmd file (used to store command line)
+# (6) No dir/.target.cmd file and target not listed in $(targets)
+#     This is a good hint that there is a bug in the kbuild file
+ifeq ($(KBUILD_VERBOSE),2)
+why =                                                                        \
+    $(if $(filter $@, $(PHONY)),- due to target is PHONY,                    \
+        $(if $(wildcard $@),                                                 \
+            $(if $(strip $(any-prereq)),- due to: $(any-prereq),             \
+                $(if $(arg-check),                                           \
+                    $(if $(cmd_$@),- due to command line change,             \
+                        $(if $(filter $@, $(targets)),                       \
+                            - due to missing .cmd file,                      \
+                            - due to $(notdir $@) not in $$(targets)         \
+                         )                                                   \
+                     )                                                       \
+                 )                                                           \
+             ),                                                              \
+             - due to target missing                                         \
+         )                                                                   \
+     )
+
+echo-why = $(call escsq, $(strip $(why)))
+endif
-- 
1.4.1


^ permalink raw reply related	[flat|nested] 35+ messages in thread

* [PATCH 13/28] kbuild: make -rR is now default
  2006-09-24 21:18                     ` [PATCH 12/28] kbuild: make V=2 tell why a target is rebuild sam
@ 2006-09-24 21:18                       ` sam
  2006-09-24 21:18                         ` [PATCH 14/28] kbuild: preperly align SYSMAP output sam
  2006-09-25  6:24                         ` [PATCH 13/28] kbuild: make -rR is now default Jan Engelhardt
  0 siblings, 2 replies; 35+ messages in thread
From: sam @ 2006-09-24 21:18 UTC (permalink / raw)
  To: linux-kernel; +Cc: Sam Ravnborg, Sam Ravnborg

From: Sam Ravnborg <sam@mars.ravnborg.org>

Do not specify -rR anymore - it is default.

Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
---
 Makefile |   14 +++++++-------
 1 files changed, 7 insertions(+), 7 deletions(-)

diff --git a/Makefile b/Makefile
index 440a133..ccbc8c0 100644
--- a/Makefile
+++ b/Makefile
@@ -897,11 +897,11 @@ PHONY += headers_install
 headers_install: include/linux/version.h scripts_basic FORCE
 	$(Q)$(MAKE) $(build)=scripts scripts/unifdef
 	$(Q)rm -rf $(INSTALL_HDR_PATH)/include
-	$(Q)$(MAKE) -rR -f $(srctree)/scripts/Makefile.headersinst obj=include
+	$(Q)$(MAKE) -f $(srctree)/scripts/Makefile.headersinst obj=include
 
 PHONY += headers_check
 headers_check: headers_install
-	$(Q)$(MAKE) -rR -f $(srctree)/scripts/Makefile.headersinst obj=include HDRCHECK=1
+	$(Q)$(MAKE) -f $(srctree)/scripts/Makefile.headersinst obj=include HDRCHECK=1
 
 # ---------------------------------------------------------------------------
 # Modules
@@ -917,7 +917,7 @@ #	Build modules
 PHONY += modules
 modules: $(vmlinux-dirs) $(if $(KBUILD_BUILTIN),vmlinux)
 	@echo '  Building modules, stage 2.';
-	$(Q)$(MAKE) -rR -f $(srctree)/scripts/Makefile.modpost
+	$(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modpost
 
 
 # Target to prepare building external modules
@@ -943,7 +943,7 @@ _modinst_:
 		rm -f $(MODLIB)/build ; \
 		ln -s $(objtree) $(MODLIB)/build ; \
 	fi
-	$(Q)$(MAKE) -rR -f $(srctree)/scripts/Makefile.modinst
+	$(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modinst
 
 # If System.map exists, run depmod.  This deliberately does not have a
 # dependency on System.map since that would run the dependency tree on
@@ -1156,7 +1156,7 @@ PHONY += $(module-dirs) modules
 
 modules: $(module-dirs)
 	@echo '  Building modules, stage 2.';
-	$(Q)$(MAKE) -rR -f $(srctree)/scripts/Makefile.modpost
+	$(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modpost
 
 PHONY += modules_install
 modules_install: _emodinst_ _emodinst_post
@@ -1165,7 +1165,7 @@ install-dir := $(if $(INSTALL_MOD_DIR),$
 PHONY += _emodinst_
 _emodinst_:
 	$(Q)mkdir -p $(MODLIB)/$(install-dir)
-	$(Q)$(MAKE) -rR -f $(srctree)/scripts/Makefile.modinst
+	$(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modinst
 
 # Run depmod only is we have System.map and depmod is executable
 quiet_cmd_depmod = DEPMOD  $(KERNELRELEASE)
@@ -1381,7 +1381,7 @@ # Modules
 %.ko: prepare scripts FORCE
 	$(Q)$(MAKE) KBUILD_MODULES=$(if $(CONFIG_MODULES),1)   \
 	$(build)=$(build-dir) $(@:.ko=.o)
-	$(Q)$(MAKE) -rR -f $(srctree)/scripts/Makefile.modpost
+	$(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modpost
 
 # FIXME Should go into a make.lib or something 
 # ===========================================================================
-- 
1.4.1


^ permalink raw reply related	[flat|nested] 35+ messages in thread

* [PATCH 14/28] kbuild: preperly align SYSMAP output
  2006-09-24 21:18                       ` [PATCH 13/28] kbuild: make -rR is now default sam
@ 2006-09-24 21:18                         ` sam
  2006-09-24 21:18                           ` [PATCH 15/28] kbuild: add missing return statement in modpost.c:secref_whitelist() sam
  2006-09-25  6:24                         ` [PATCH 13/28] kbuild: make -rR is now default Jan Engelhardt
  1 sibling, 1 reply; 35+ messages in thread
From: sam @ 2006-09-24 21:18 UTC (permalink / raw)
  To: linux-kernel; +Cc: Sam Ravnborg, Sam Ravnborg

From: Sam Ravnborg <sam@mars.ravnborg.org>

Align filenames for SYSMAP with other filenames

Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
---
 Makefile |   22 +++++++++++-----------
 1 files changed, 11 insertions(+), 11 deletions(-)

diff --git a/Makefile b/Makefile
index ccbc8c0..fc67adc 100644
--- a/Makefile
+++ b/Makefile
@@ -639,12 +639,12 @@ define rule_vmlinux__
 	$(call cmd,vmlinux__)
 	$(Q)echo 'cmd_$@ := $(cmd_vmlinux__)' > $(@D)/.$(@F).cmd
 
-	$(Q)$(if $($(quiet)cmd_sysmap),                 \
-	  echo '  $($(quiet)cmd_sysmap) System.map' &&) \
-	$(cmd_sysmap) $@ System.map;                    \
-	if [ $$? -ne 0 ]; then                          \
-		rm -f $@;                               \
-		/bin/false;                             \
+	$(Q)$(if $($(quiet)cmd_sysmap),                                      \
+	  echo '  $($(quiet)cmd_sysmap)  System.map' &&)                     \
+	$(cmd_sysmap) $@ System.map;                                         \
+	if [ $$? -ne 0 ]; then                                               \
+		rm -f $@;                                                    \
+		/bin/false;                                                  \
 	fi;
 	$(verify_kallsyms)
 endef
@@ -677,12 +677,12 @@ endif
 kallsyms.o := .tmp_kallsyms$(last_kallsyms).o
 
 define verify_kallsyms
-	$(Q)$(if $($(quiet)cmd_sysmap),                       \
-	  echo '  $($(quiet)cmd_sysmap) .tmp_System.map' &&)  \
+	$(Q)$(if $($(quiet)cmd_sysmap),                                      \
+	  echo '  $($(quiet)cmd_sysmap)  .tmp_System.map' &&)                \
 	  $(cmd_sysmap) .tmp_vmlinux$(last_kallsyms) .tmp_System.map
-	$(Q)cmp -s System.map .tmp_System.map ||              \
-		(echo Inconsistent kallsyms data;             \
-		 echo Try setting CONFIG_KALLSYMS_EXTRA_PASS; \
+	$(Q)cmp -s System.map .tmp_System.map ||                             \
+		(echo Inconsistent kallsyms data;                            \
+		 echo Try setting CONFIG_KALLSYMS_EXTRA_PASS;                \
 		 rm .tmp_kallsyms* ; /bin/false )
 endef
 
-- 
1.4.1


^ permalink raw reply related	[flat|nested] 35+ messages in thread

* [PATCH 15/28] kbuild: add missing return statement in modpost.c:secref_whitelist()
  2006-09-24 21:18                         ` [PATCH 14/28] kbuild: preperly align SYSMAP output sam
@ 2006-09-24 21:18                           ` sam
  2006-09-24 21:18                             ` [PATCH 16/28] kbuild: create output directory for hostprogs with O=.. build sam
  0 siblings, 1 reply; 35+ messages in thread
From: sam @ 2006-09-24 21:18 UTC (permalink / raw)
  To: linux-kernel; +Cc: Sam Ravnborg, Sam Ravnborg

From: Sam Ravnborg <sam@mars.ravnborg.org>

Noticed by: Magnus Damm <magnus@valinux.co.jp>

Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
---
 scripts/mod/modpost.c |    1 +
 1 files changed, 1 insertions(+), 0 deletions(-)

diff --git a/scripts/mod/modpost.c b/scripts/mod/modpost.c
index 5028d46..16a1935 100644
--- a/scripts/mod/modpost.c
+++ b/scripts/mod/modpost.c
@@ -627,6 +627,7 @@ static int secref_whitelist(const char *
 		    (strcmp(tosec, ".init.text") == 0))
 		return 1;
 	}
+	return 0;
 }
 
 /**
-- 
1.4.1


^ permalink raw reply related	[flat|nested] 35+ messages in thread

* [PATCH 16/28] kbuild: create output directory for hostprogs with O=.. build
  2006-09-24 21:18                           ` [PATCH 15/28] kbuild: add missing return statement in modpost.c:secref_whitelist() sam
@ 2006-09-24 21:18                             ` sam
  2006-09-24 21:18                               ` [PATCH 17/28] kbuild: remove debug left-over from Makefile.host sam
  0 siblings, 1 reply; 35+ messages in thread
From: sam @ 2006-09-24 21:18 UTC (permalink / raw)
  To: linux-kernel; +Cc: Sam Ravnborg, Sam Ravnborg

From: Sam Ravnborg <sam@mars.ravnborg.org>

hostprogs-y only supported creating output directory for the final
program. Extend this to also cover the situation where a .o
file (used when host program is made from compositie objects) is
locate in another directory.
First user of this is the built-in lxdialog that.

Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
---
 scripts/Makefile.host |   21 ++++++++++++++++-----
 1 files changed, 16 insertions(+), 5 deletions(-)

diff --git a/scripts/Makefile.host b/scripts/Makefile.host
index 060f4c5..d74dd0f 100644
--- a/scripts/Makefile.host
+++ b/scripts/Makefile.host
@@ -32,11 +32,6 @@ # Note: Shared libraries consisting of C
 
 __hostprogs := $(sort $(hostprogs-y) $(hostprogs-m))
 
-# hostprogs-y := tools/build may have been specified. Retreive directory
-host-objdirs := $(foreach f,$(__hostprogs), $(if $(dir $(f)),$(dir $(f))))
-host-objdirs := $(strip $(sort $(filter-out ./,$(host-objdirs))))
-
-
 # C code
 # Executables compiled from a single .c file
 host-csingle	:= $(foreach m,$(__hostprogs),$(if $($(m)-objs),,$(m)))
@@ -65,6 +60,21 @@ host-cobjs	:= $(filter-out %.so,$(host-c
 #Object (.o) files used by the shared libaries
 host-cshobjs	:= $(sort $(foreach m,$(host-cshlib),$($(m:.so=-objs))))
 
+# output directory for programs/.o files
+# hostprogs-y := tools/build may have been specified. Retreive directory
+host-objdirs := $(foreach f,$(__hostprogs), $(if $(dir $(f)),$(dir $(f))))
+# directory of .o files from prog-objs notation
+host-objdirs += $(foreach f,$(host-cmulti),                  \
+                    $(foreach m,$($(f)-objs),                \
+                        $(if $(dir $(m)),$(dir $(m)))))
+# directory of .o files from prog-cxxobjs notation
+host-objdirs += $(foreach f,$(host-cxxmulti),                  \
+                    $(foreach m,$($(f)-cxxobjs),                \
+                        $(if $(dir $(m)),$(dir $(m)))))
+
+host-objdirs := $(strip $(sort $(filter-out ./,$(host-objdirs))))
+
+
 __hostprogs     := $(addprefix $(obj)/,$(__hostprogs))
 host-csingle	:= $(addprefix $(obj)/,$(host-csingle))
 host-cmulti	:= $(addprefix $(obj)/,$(host-cmulti))
@@ -75,6 +85,7 @@ host-cshlib	:= $(addprefix $(obj)/,$(hos
 host-cshobjs	:= $(addprefix $(obj)/,$(host-cshobjs))
 host-objdirs    := $(addprefix $(obj)/,$(host-objdirs))
 
+$(warning host-objdirs=$(host-objdirs))
 obj-dirs += $(host-objdirs)
 
 #####
-- 
1.4.1


^ permalink raw reply related	[flat|nested] 35+ messages in thread

* [PATCH 17/28] kbuild: remove debug left-over from Makefile.host
  2006-09-24 21:18                             ` [PATCH 16/28] kbuild: create output directory for hostprogs with O=.. build sam
@ 2006-09-24 21:18                               ` sam
  2006-09-24 21:18                                 ` [PATCH 18/28] kbuild: fail kernel compilation in case of unresolved module symbols sam
  0 siblings, 1 reply; 35+ messages in thread
From: sam @ 2006-09-24 21:18 UTC (permalink / raw)
  To: linux-kernel; +Cc: Sam Ravnborg, Sam Ravnborg

From: Sam Ravnborg <sam@mars.ravnborg.org>

Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
---
 scripts/Makefile.host |    1 -
 1 files changed, 0 insertions(+), 1 deletions(-)

diff --git a/scripts/Makefile.host b/scripts/Makefile.host
index d74dd0f..575afbe 100644
--- a/scripts/Makefile.host
+++ b/scripts/Makefile.host
@@ -85,7 +85,6 @@ host-cshlib	:= $(addprefix $(obj)/,$(hos
 host-cshobjs	:= $(addprefix $(obj)/,$(host-cshobjs))
 host-objdirs    := $(addprefix $(obj)/,$(host-objdirs))
 
-$(warning host-objdirs=$(host-objdirs))
 obj-dirs += $(host-objdirs)
 
 #####
-- 
1.4.1


^ permalink raw reply related	[flat|nested] 35+ messages in thread

* [PATCH 18/28] kbuild: fail kernel compilation in case of unresolved module symbols
  2006-09-24 21:18                               ` [PATCH 17/28] kbuild: remove debug left-over from Makefile.host sam
@ 2006-09-24 21:18                                 ` sam
  2006-09-24 21:18                                   ` [PATCH 19/28] kbuild: update help in top level Makefile sam
  2006-09-24 22:20                                   ` [PATCH 18/28] kbuild: fail kernel compilation in case of unresolved module symbols Al Viro
  0 siblings, 2 replies; 35+ messages in thread
From: sam @ 2006-09-24 21:18 UTC (permalink / raw)
  To: linux-kernel; +Cc: Kirill Korotaev, Andrey Mirkin, Andrew Morton, Sam Ravnborg

From: Kirill Korotaev <dev@openvz.org>

At stage 2 modpost utility is used to check modules.  In case of unresolved
symbols modpost only prints warning.

IMHO it is a good idea to fail compilation process in case of unresolved
symbols (at least in modules coming with kernel), since usually such errors
are left unnoticed, but kernel modules are broken.

- new option '-w' is added to modpost:
  if option is specified, modpost only warns about unresolved symbols

- modpost is called with '-w' for external modules in Makefile.modpost

Signed-off-by: Andrey Mirkin <amirkin@sw.ru>
Signed-off-by: Kirill Korotaev <dev@openvz.org>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
---
 scripts/Makefile.modpost |    1 +
 scripts/mod/modpost.c    |   25 +++++++++++++++++++------
 2 files changed, 20 insertions(+), 6 deletions(-)

diff --git a/scripts/Makefile.modpost b/scripts/Makefile.modpost
index 9137df2..4b2721c 100644
--- a/scripts/Makefile.modpost
+++ b/scripts/Makefile.modpost
@@ -58,6 +58,7 @@ quiet_cmd_modpost = MODPOST $(words $(fi
 	$(if $(KBUILD_EXTMOD),-i,-o) $(kernelsymfile) \
 	$(if $(KBUILD_EXTMOD),-I $(modulesymfile)) \
 	$(if $(KBUILD_EXTMOD),-o $(modulesymfile)) \
+	$(if $(KBUILD_EXTMOD),-w) \
 	$(wildcard vmlinux) $(filter-out FORCE,$^)
 
 PHONY += __modpost
diff --git a/scripts/mod/modpost.c b/scripts/mod/modpost.c
index 16a1935..4127796 100644
--- a/scripts/mod/modpost.c
+++ b/scripts/mod/modpost.c
@@ -23,6 +23,8 @@ int have_vmlinux = 0;
 static int all_versions = 0;
 /* If we are modposting external module set to 1 */
 static int external_module = 0;
+/* Only warn about unresolved symbols */
+static int warn_unresolved = 0;
 /* How a symbol is exported */
 enum export {
 	export_plain,      export_unused,     export_gpl,
@@ -1196,16 +1198,19 @@ static void add_header(struct buffer *b,
 /**
  * Record CRCs for unresolved symbols
  **/
-static void add_versions(struct buffer *b, struct module *mod)
+static int add_versions(struct buffer *b, struct module *mod)
 {
 	struct symbol *s, *exp;
+	int err = 0;
 
 	for (s = mod->unres; s; s = s->next) {
 		exp = find_symbol(s->name);
 		if (!exp || exp->module == mod) {
-			if (have_vmlinux && !s->weak)
+			if (have_vmlinux && !s->weak) {
 				warn("\"%s\" [%s.ko] undefined!\n",
 				     s->name, mod->name);
+				err = warn_unresolved ? 0 : 1;
+			}
 			continue;
 		}
 		s->module = exp->module;
@@ -1214,7 +1219,7 @@ static void add_versions(struct buffer *
 	}
 
 	if (!modversions)
-		return;
+		return err;
 
 	buf_printf(b, "\n");
 	buf_printf(b, "static const struct modversion_info ____versions[]\n");
@@ -1234,6 +1239,8 @@ static void add_versions(struct buffer *
 	}
 
 	buf_printf(b, "};\n");
+
+	return err;
 }
 
 static void add_depends(struct buffer *b, struct module *mod,
@@ -1411,8 +1418,9 @@ int main(int argc, char **argv)
 	char *kernel_read = NULL, *module_read = NULL;
 	char *dump_write = NULL;
 	int opt;
+	int err;
 
-	while ((opt = getopt(argc, argv, "i:I:mo:a")) != -1) {
+	while ((opt = getopt(argc, argv, "i:I:mo:aw")) != -1) {
 		switch(opt) {
 			case 'i':
 				kernel_read = optarg;
@@ -1430,6 +1438,9 @@ int main(int argc, char **argv)
 			case 'a':
 				all_versions = 1;
 				break;
+			case 'w':
+				warn_unresolved = 1;
+				break;
 			default:
 				exit(1);
 		}
@@ -1450,6 +1461,8 @@ int main(int argc, char **argv)
 		check_exports(mod);
 	}
 
+	err = 0;
+
 	for (mod = modules; mod; mod = mod->next) {
 		if (mod->skip)
 			continue;
@@ -1457,7 +1470,7 @@ int main(int argc, char **argv)
 		buf.pos = 0;
 
 		add_header(&buf, mod);
-		add_versions(&buf, mod);
+		err |= add_versions(&buf, mod);
 		add_depends(&buf, mod, modules);
 		add_moddevtable(&buf, mod);
 		add_srcversion(&buf, mod);
@@ -1469,5 +1482,5 @@ int main(int argc, char **argv)
 	if (dump_write)
 		write_dump(dump_write);
 
-	return 0;
+	return err;
 }
-- 
1.4.1


^ permalink raw reply related	[flat|nested] 35+ messages in thread

* [PATCH 19/28] kbuild: update help in top level Makefile
  2006-09-24 21:18                                 ` [PATCH 18/28] kbuild: fail kernel compilation in case of unresolved module symbols sam
@ 2006-09-24 21:18                                   ` sam
  2006-09-24 21:18                                     ` [PATCH 20/28] Documentaion: update Documentation/Changes with minimum versions sam
  2006-09-24 22:20                                   ` [PATCH 18/28] kbuild: fail kernel compilation in case of unresolved module symbols Al Viro
  1 sibling, 1 reply; 35+ messages in thread
From: sam @ 2006-09-24 21:18 UTC (permalink / raw)
  To: linux-kernel; +Cc: Robert P. J. Day, Sam Ravnborg

From: Robert P. J. Day <rpjday@mindspring.com>

Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
---
 Makefile                 |    1 +
 scripts/kconfig/Makefile |    1 +
 2 files changed, 2 insertions(+), 0 deletions(-)

diff --git a/Makefile b/Makefile
index fc67adc..0d4a4dc 100644
--- a/Makefile
+++ b/Makefile
@@ -1060,6 +1060,7 @@ help:
 	@echo  'Cleaning targets:'
 	@echo  '  clean		  - remove most generated files but keep the config'
 	@echo  '  mrproper	  - remove all generated files + config + various backup files'
+	@echo  '  distclean	  - mrproper + patch files'
 	@echo  ''
 	@echo  'Configuration targets:'
 	@$(MAKE) -f $(srctree)/scripts/kconfig/Makefile help
diff --git a/scripts/kconfig/Makefile b/scripts/kconfig/Makefile
index e6499db..a90d3cc 100644
--- a/scripts/kconfig/Makefile
+++ b/scripts/kconfig/Makefile
@@ -74,6 +74,7 @@ help:
 	@echo  '  xconfig	  - Update current config utilising a QT based front-end'
 	@echo  '  gconfig	  - Update current config utilising a GTK based front-end'
 	@echo  '  oldconfig	  - Update current config utilising a provided .config as base'
+	@echo  '  silentoldconfig - Same as oldconfig, but quietly'
 	@echo  '  randconfig	  - New config with random answer to all options'
 	@echo  '  defconfig	  - New config with default answer to all options'
 	@echo  '  allmodconfig	  - New config selecting modules when possible'
-- 
1.4.1


^ permalink raw reply related	[flat|nested] 35+ messages in thread

* [PATCH 20/28] Documentaion: update Documentation/Changes with minimum versions
  2006-09-24 21:18                                   ` [PATCH 19/28] kbuild: update help in top level Makefile sam
@ 2006-09-24 21:18                                     ` sam
  2006-09-24 21:18                                       ` [PATCH 21/28] kbuild: clarify "make C=" build option sam
  0 siblings, 1 reply; 35+ messages in thread
From: sam @ 2006-09-24 21:18 UTC (permalink / raw)
  To: linux-kernel; +Cc: Robert P. J. Day, Sam Ravnborg

From: Robert P. J. Day <rpjday@mindspring.com>

Based on conversations with greg kh (and noticing a simple typo),
these are the actual minimal versions for 2.6.18.

Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
---
 Documentation/Changes |    7 +++----
 1 files changed, 3 insertions(+), 4 deletions(-)

diff --git a/Documentation/Changes b/Documentation/Changes
index 4882720..abee7f5 100644
--- a/Documentation/Changes
+++ b/Documentation/Changes
@@ -37,15 +37,14 @@ o  e2fsprogs              1.29          
 o  jfsutils               1.1.3                   # fsck.jfs -V
 o  reiserfsprogs          3.6.3                   # reiserfsck -V 2>&1|grep reiserfsprogs
 o  xfsprogs               2.6.0                   # xfs_db -V
-o  pcmciautils            004
-o  pcmcia-cs              3.1.21                  # cardmgr -V
+o  pcmciautils            004                     # pccardctl -V
 o  quota-tools            3.09                    # quota -V
 o  PPP                    2.4.0                   # pppd --version
 o  isdn4k-utils           3.1pre1                 # isdnctrl 2>&1|grep version
 o  nfs-utils              1.0.5                   # showmount --version
 o  procps                 3.2.0                   # ps --version
 o  oprofile               0.9                     # oprofiled --version
-o  udev                   071                     # udevinfo -V
+o  udev                   081                     # udevinfo -V
 
 Kernel compilation
 ==================
@@ -268,7 +267,7 @@ active clients.
 
 To enable this new functionality, you need to:
 
-  mount -t nfsd nfsd /proc/fs/nfs
+  mount -t nfsd nfsd /proc/fs/nfsd
 
 before running exportfs or mountd.  It is recommended that all NFS
 services be protected from the internet-at-large by a firewall where
-- 
1.4.1


^ permalink raw reply related	[flat|nested] 35+ messages in thread

* [PATCH 21/28] kbuild: clarify "make C=" build option
  2006-09-24 21:18                                     ` [PATCH 20/28] Documentaion: update Documentation/Changes with minimum versions sam
@ 2006-09-24 21:18                                       ` sam
  2006-09-24 21:18                                         ` [PATCH 22/28] kbuild: fix for some typos in Documentation/makefiles.txt sam
  0 siblings, 1 reply; 35+ messages in thread
From: sam @ 2006-09-24 21:18 UTC (permalink / raw)
  To: linux-kernel; +Cc: Robert P. J. Day, Sam Ravnborg

From: Robert P. J. Day <rpjday@mindspring.com>

Clarify the use of "make C=" in the top-level Makefile, and fix a
typo in the Documentation file.

Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
---
 Documentation/sparse.txt |    8 ++++----
 Makefile                 |   12 +++++++++---
 2 files changed, 13 insertions(+), 7 deletions(-)

diff --git a/Documentation/sparse.txt b/Documentation/sparse.txt
index 5a311c3..f9c99c9 100644
--- a/Documentation/sparse.txt
+++ b/Documentation/sparse.txt
@@ -69,10 +69,10 @@ recompiled, or use "make C=2" to run spa
 be recompiled or not.  The latter is a fast way to check the whole tree if you
 have already built it.
 
-The optional make variable CF can be used to pass arguments to sparse.  The
-build system passes -Wbitwise to sparse automatically.  To perform endianness
-checks, you may define __CHECK_ENDIAN__:
+The optional make variable CHECKFLAGS can be used to pass arguments to sparse.
+The build system passes -Wbitwise to sparse automatically.  To perform
+endianness checks, you may define __CHECK_ENDIAN__:
 
-        make C=2 CF="-D__CHECK_ENDIAN__"
+        make C=2 CHECKFLAGS="-D__CHECK_ENDIAN__"
 
 These checks are disabled by default as they generate a host of warnings.
diff --git a/Makefile b/Makefile
index 0d4a4dc..cd50298 100644
--- a/Makefile
+++ b/Makefile
@@ -41,9 +41,15 @@ ifndef KBUILD_VERBOSE
   KBUILD_VERBOSE = 0
 endif
 
-# Call checker as part of compilation of C files
-# Use 'make C=1' to enable checking (sparse, by default)
-# Override with 'make C=1 CHECK=checker_executable CHECKFLAGS=....'
+# Call a source code checker (by default, "sparse") as part of the
+# C compilation.
+#
+# Use 'make C=1' to enable checking of only re-compiled files.
+# Use 'make C=2' to enable checking of *all* source files, regardless
+# of whether they are re-compiled or not.
+#
+# See the file "Documentation/sparse.txt" for more details, including
+# where to get the "sparse" utility.
 
 ifdef C
   ifeq ("$(origin C)", "command line")
-- 
1.4.1


^ permalink raw reply related	[flat|nested] 35+ messages in thread

* [PATCH 22/28] kbuild: fix for some typos in Documentation/makefiles.txt
  2006-09-24 21:18                                       ` [PATCH 21/28] kbuild: clarify "make C=" build option sam
@ 2006-09-24 21:18                                         ` sam
  2006-09-24 21:18                                           ` [PATCH 23/28] kbuild: Extend kbuild/defconfig tags support to exuberant ctags sam
  0 siblings, 1 reply; 35+ messages in thread
From: sam @ 2006-09-24 21:18 UTC (permalink / raw)
  To: linux-kernel; +Cc: Bryce Harrington, Sam Ravnborg

From: Bryce Harrington <bryce@osdl.org>

I noticed a few typos while reading makefiles.txt to learn about the
kbuild system.  Attached is a patch against 2.6.18 to fix them.
Remove trailing whitespace while we are there..

Signed-off-by:  Bryce Harrington <bryce@osdl.org>
Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
---
 Documentation/kbuild/makefiles.txt |   83 +++++++++++++++++++-----------------
 1 files changed, 43 insertions(+), 40 deletions(-)

diff --git a/Documentation/kbuild/makefiles.txt b/Documentation/kbuild/makefiles.txt
index 3d2f88e..b7d6abb 100644
--- a/Documentation/kbuild/makefiles.txt
+++ b/Documentation/kbuild/makefiles.txt
@@ -22,7 +22,7 @@ This document describes the Linux kernel
 	=== 4 Host Program support
 	   --- 4.1 Simple Host Program
 	   --- 4.2 Composite Host Programs
-	   --- 4.3 Defining shared libraries  
+	   --- 4.3 Defining shared libraries
 	   --- 4.4 Using C++ for host programs
 	   --- 4.5 Controlling compiler options for host programs
 	   --- 4.6 When host programs are actually built
@@ -69,7 +69,7 @@ architecture-specific information to the
 
 Each subdirectory has a kbuild Makefile which carries out the commands
 passed down from above. The kbuild Makefile uses information from the
-.config file to construct various file lists used by kbuild to build 
+.config file to construct various file lists used by kbuild to build
 any built-in or modular targets.
 
 scripts/Makefile.* contains all the definitions/rules etc. that
@@ -203,9 +203,9 @@ more details, with real examples.
 	Example:
 		#fs/ext2/Makefile
 	        obj-$(CONFIG_EXT2_FS)        += ext2.o
-	 	ext2-y                       := balloc.o bitmap.o
+		ext2-y                       := balloc.o bitmap.o
 	        ext2-$(CONFIG_EXT2_FS_XATTR) += xattr.o
-	
+
 	In this example, xattr.o is only part of the composite object
 	ext2.o if $(CONFIG_EXT2_FS_XATTR) evaluates to 'y'.
 
@@ -244,7 +244,7 @@ more details, with real examples.
 	For kbuild to actually recognize that there is a lib.a being built,
 	the directory shall be listed in libs-y.
 	See also "6.3 List directories to visit when descending".
- 
+
 	Use of lib-y is normally restricted to lib/ and arch/*/lib.
 
 --- 3.6 Descending down in directories
@@ -408,7 +408,7 @@ more details, with real examples.
 	if first argument is not supported.
 
     ld-option
-    	ld-option is used to check if $(CC) when used to link object files
+	ld-option is used to check if $(CC) when used to link object files
 	supports the given option.  An optional second option may be
 	specified if first option are not supported.
 
@@ -435,7 +435,7 @@ more details, with real examples.
 	cflags-y will be assigned no value if first option is not supported.
 
    cc-option-yn
-   	cc-option-yn is used to check if gcc supports a given option
+	cc-option-yn is used to check if gcc supports a given option
 	and return 'y' if supported, otherwise 'n'.
 
 	Example:
@@ -443,7 +443,7 @@ more details, with real examples.
 		biarch := $(call cc-option-yn, -m32)
 		aflags-$(biarch) += -a32
 		cflags-$(biarch) += -m32
-	
+
 	In the above example, $(biarch) is set to y if $(CC) supports the -m32
 	option. When $(biarch) equals 'y', the expanded variables $(aflags-y)
 	and $(cflags-y) will be assigned the values -a32 and -m32,
@@ -457,13 +457,13 @@ more details, with real examples.
 		cc-option-align = -malign
 	gcc >= 3.00
 		cc-option-align = -falign
-	
+
 	Example:
 		CFLAGS += $(cc-option-align)-functions=4
 
 	In the above example, the option -falign-functions=4 is used for
 	gcc >= 3.00. For gcc < 3.00, -malign-functions=4 is used.
-	
+
     cc-version
 	cc-version returns a numerical version of the $(CC) compiler version.
 	The format is <major><minor> where both are two digits. So for example
@@ -491,7 +491,7 @@ more details, with real examples.
 
 	In this example, EXTRA_CFLAGS will be assigned the value -O1 if the
 	$(CC) version is less than 4.2.
-	cc-ifversion takes all the shell operators: 
+	cc-ifversion takes all the shell operators:
 	-eq, -ne, -lt, -le, -gt, and -ge
 	The third parameter may be a text as in this example, but it may also
 	be an expanded variable or a macro.
@@ -507,7 +507,7 @@ The first step is to tell kbuild that a 
 done utilising the variable hostprogs-y.
 
 The second step is to add an explicit dependency to the executable.
-This can be done in two ways. Either add the dependency in a rule, 
+This can be done in two ways. Either add the dependency in a rule,
 or utilise the variable $(always).
 Both possibilities are described in the following.
 
@@ -524,7 +524,7 @@ Both possibilities are described in the 
 	Kbuild assumes in the above example that bin2hex is made from a single
 	c-source file named bin2hex.c located in the same directory as
 	the Makefile.
-  
+
 --- 4.2 Composite Host Programs
 
 	Host programs can be made up based on composite objects.
@@ -535,7 +535,7 @@ Both possibilities are described in the 
 
 	Example:
 		#scripts/lxdialog/Makefile
-		hostprogs-y   := lxdialog  
+		hostprogs-y   := lxdialog
 		lxdialog-objs := checklist.o lxdialog.o
 
 	Objects with extension .o are compiled from the corresponding .c
@@ -544,8 +544,8 @@ Both possibilities are described in the 
 	Finally, the two .o files are linked to the executable, lxdialog.
 	Note: The syntax <executable>-y is not permitted for host-programs.
 
---- 4.3 Defining shared libraries  
-  
+--- 4.3 Defining shared libraries
+
 	Objects with extension .so are considered shared libraries, and
 	will be compiled as position independent objects.
 	Kbuild provides support for shared libraries, but the usage
@@ -558,7 +558,7 @@ Both possibilities are described in the 
 		hostprogs-y     := conf
 		conf-objs       := conf.o libkconfig.so
 		libkconfig-objs := expr.o type.o
-  
+
 	Shared libraries always require a corresponding -objs line, and
 	in the example above the shared library libkconfig is composed by
 	the two objects expr.o and type.o.
@@ -579,7 +579,7 @@ Both possibilities are described in the 
 
 	In the example above the executable is composed of the C++ file
 	qconf.cc - identified by $(qconf-cxxobjs).
-	
+
 	If qconf is composed by a mixture of .c and .cc files, then an
 	additional line can be used to identify this.
 
@@ -588,7 +588,7 @@ Both possibilities are described in the 
 		hostprogs-y   := qconf
 		qconf-cxxobjs := qconf.o
 		qconf-objs    := check.o
-	
+
 --- 4.5 Controlling compiler options for host programs
 
 	When compiling host programs, it is possible to set specific flags.
@@ -600,23 +600,23 @@ Both possibilities are described in the 
 	Example:
 		#scripts/lxdialog/Makefile
 		HOST_EXTRACFLAGS += -I/usr/include/ncurses
-  
+
 	To set specific flags for a single file the following construction
 	is used:
 
 	Example:
 		#arch/ppc64/boot/Makefile
 		HOSTCFLAGS_piggyback.o := -DKERNELBASE=$(KERNELBASE)
-  
+
 	It is also possible to specify additional options to the linker.
-  
+
 	Example:
 		#scripts/kconfig/Makefile
 		HOSTLOADLIBES_qconf := -L$(QTDIR)/lib
 
 	When linking qconf, it will be passed the extra option
 	"-L$(QTDIR)/lib".
- 
+
 --- 4.6 When host programs are actually built
 
 	Kbuild will only build host-programs when they are referenced
@@ -631,7 +631,7 @@ Both possibilities are described in the 
 		$(obj)/devlist.h: $(src)/pci.ids $(obj)/gen-devlist
 			( cd $(obj); ./gen-devlist ) < $<
 
-	The target $(obj)/devlist.h will not be built before 
+	The target $(obj)/devlist.h will not be built before
 	$(obj)/gen-devlist is updated. Note that references to
 	the host programs in special rules must be prefixed with $(obj).
 
@@ -650,7 +650,7 @@ Both possibilities are described in the 
 
 --- 4.7 Using hostprogs-$(CONFIG_FOO)
 
-	A typcal pattern in a Kbuild file looks like this:
+	A typical pattern in a Kbuild file looks like this:
 
 	Example:
 		#scripts/Makefile
@@ -682,7 +682,8 @@ When executing "make clean", the two fil
 be deleted. Kbuild will assume files to be in same relative directory as the
 Makefile except if an absolute path is specified (path starting with '/').
 
-To delete a directory hirachy use:
+To delete a directory hierarchy use:
+
 	Example:
 		#scripts/package/Makefile
 		clean-dirs := $(objtree)/debian/
@@ -740,7 +741,7 @@ When kbuild executes, the following step
 5) Recursively descend down in all directories listed in
    init-* core* drivers-* net-* libs-* and build all targets.
    - The values of the above variables are expanded in arch/$(ARCH)/Makefile.
-6) All object files are then linked and the resulting file vmlinux is 
+6) All object files are then linked and the resulting file vmlinux is
    located at the root of the obj tree.
    The very first objects linked are listed in head-y, assigned by
    arch/$(ARCH)/Makefile.
@@ -762,7 +763,7 @@ When kbuild executes, the following step
 		LDFLAGS         := -m elf_s390
 	Note: EXTRA_LDFLAGS and LDFLAGS_$@ can be used to further customise
 	the flags used. See chapter 7.
-	
+
     LDFLAGS_MODULE	Options for $(LD) when linking modules
 
 	LDFLAGS_MODULE is used to set specific flags for $(LD) when
@@ -845,7 +846,7 @@ When kbuild executes, the following step
 	$(CFLAGS_MODULE) contains extra C compiler flags used to compile code
 	for loadable kernel modules.
 
- 
+
 --- 6.2 Add prerequisites to archprepare:
 
 	The archprepare: rule is used to list prerequisites that need to be
@@ -869,7 +870,7 @@ When kbuild executes, the following step
 	corresponding arch-specific section for modules; the module-building
 	machinery is all architecture-independent.
 
-	
+
     head-y, init-y, core-y, libs-y, drivers-y, net-y
 
 	$(head-y) lists objects to be linked first in vmlinux.
@@ -926,7 +927,7 @@ When kbuild executes, the following step
 		#arch/i386/Makefile
 		define archhelp
 		  echo  '* bzImage      - Image (arch/$(ARCH)/boot/bzImage)'
-		endef
+		endif
 
 	When make is executed without arguments, the first goal encountered
 	will be built. In the top level Makefile the first goal present
@@ -938,7 +939,7 @@ When kbuild executes, the following step
 
 	Example:
 		#arch/i386/Makefile
-		all: bzImage 
+		all: bzImage
 
 	When "make" is executed without arguments, bzImage will be built.
 
@@ -961,7 +962,7 @@ When kbuild executes, the following step
 	In this example, extra-y is used to list object files that
 	shall be built, but shall not be linked as part of built-in.o.
 
-	
+
 --- 6.6 Commands useful for building a boot image
 
 	Kbuild provides a few macros that are useful when building a
@@ -995,7 +996,7 @@ When kbuild executes, the following step
 
     ld
 	Link target. Often, LDFLAGS_$@ is used to set specific options to ld.
-	
+
     objcopy
 	Copy binary. Uses OBJCOPYFLAGS usually specified in
 	arch/$(ARCH)/Makefile.
@@ -1053,7 +1054,7 @@ When kbuild executes, the following step
 	BUILD    arch/i386/boot/bzImage
 
 	will be displayed with "make KBUILD_VERBOSE=0".
-	
+
 
 --- 6.8 Preprocessing linker scripts
 
@@ -1062,19 +1063,19 @@ When kbuild executes, the following step
 	The script is a preprocessed variant of the file vmlinux.lds.S
 	located in the same directory.
 	kbuild knows .lds files and includes a rule *lds.S -> *lds.
-	
+
 	Example:
 		#arch/i386/kernel/Makefile
 		always := vmlinux.lds
-	
+
 		#Makefile
 		export CPPFLAGS_vmlinux.lds += -P -C -U$(ARCH)
-		
-	The assigment to $(always) is used to tell kbuild to build the
+
+	The assignment to $(always) is used to tell kbuild to build the
 	target vmlinux.lds.
 	The assignment to $(CPPFLAGS_vmlinux.lds) tells kbuild to use the
 	specified options when building the target vmlinux.lds.
-	
+
 	When building the *.lds target, kbuild uses the variables:
 	CPPFLAGS	: Set in top-level Makefile
 	EXTRA_CPPFLAGS	: May be set in the kbuild makefile
@@ -1180,3 +1181,5 @@ Language QA by Jan Engelhardt <jengelh@g
 - Generating offset header files.
 - Add more variables to section 7?
 
+
+
-- 
1.4.1


^ permalink raw reply related	[flat|nested] 35+ messages in thread

* [PATCH 23/28] kbuild: Extend kbuild/defconfig tags support to exuberant ctags
  2006-09-24 21:18                                         ` [PATCH 22/28] kbuild: fix for some typos in Documentation/makefiles.txt sam
@ 2006-09-24 21:18                                           ` sam
  2006-09-24 21:18                                             ` [PATCH 24/28] kbuild: fixup Documentation/kbuild/modules.txt sam
  0 siblings, 1 reply; 35+ messages in thread
From: sam @ 2006-09-24 21:18 UTC (permalink / raw)
  To: linux-kernel; +Cc: Aron Griffis, Sam Ravnborg

From: Aron Griffis <aron@hp.com>

The following patch extends kbuild/defconfig tags support to exuberant
ctags.  The previous support is only for emacs ctags/etags programs.

This patch also corrects the kconfig regex for the emacs invocation.
Previously it would miss some instances because it assumed /^config
instead of /^[ \t]*config

Signed-off-by: Aron Griffis <aron@hp.com>
Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
---
 Makefile |   44 +++++++++++++++++++++++++++-----------------
 1 files changed, 27 insertions(+), 17 deletions(-)

diff --git a/Makefile b/Makefile
index cd50298..13bc589 100644
--- a/Makefile
+++ b/Makefile
@@ -1273,6 +1273,31 @@ define all-defconfigs
 	$(call find-sources,'defconfig')
 endef
 
+define xtags
+	if $1 --version 2>&1 | grep -iq exuberant; then \
+	    $(all-sources) | xargs $1 -a \
+		-I __initdata,__exitdata,__acquires,__releases \
+		-I EXPORT_SYMBOL,EXPORT_SYMBOL_GPL \
+		--extra=+f --c-kinds=+px; \
+	    $(all-kconfigs) | xargs $1 -a \
+		--langdef=kconfig \
+		--language-force=kconfig \
+		--regex-kconfig='/^[[:blank:]]*config[[:blank:]]+([[:alnum:]_]+)/\1/'; \
+	    $(all-defconfigs) | xargs $1 -a \
+		--langdef=dotconfig \
+		--language-force=dotconfig \
+		--regex-dotconfig='/^#?[[:blank:]]*(CONFIG_[[:alnum:]_]+)/\1/'; \
+	elif $1 --version 2>&1 | grep -iq emacs; then \
+	    $(all-sources) | xargs $1 -a; \
+	    $(all-kconfigs) | xargs $1 -a \
+		--regex='/^[ \t]*config[ \t]+\([a-zA-Z0-9_]+\)/\1/'; \
+	    $(all-defconfigs) | xargs $1 -a \
+		--regex='/^#?[ \t]?\(CONFIG_[a-zA-Z0-9_]+\)/\1/'; \
+	else \
+	    $(all-sources) | xargs $1 -a; \
+	fi
+endef
+
 quiet_cmd_cscope-file = FILELST cscope.files
       cmd_cscope-file = (echo \-k; echo \-q; $(all-sources)) > cscope.files
 
@@ -1286,31 +1311,16 @@ cscope: FORCE
 quiet_cmd_TAGS = MAKE   $@
 define cmd_TAGS
 	rm -f $@; \
-	ETAGSF=`etags --version | grep -i exuberant >/dev/null &&     \
-                echo "-I __initdata,__exitdata,__acquires,__releases  \
-                      -I EXPORT_SYMBOL,EXPORT_SYMBOL_GPL              \
-                      --extra=+f --c-kinds=+px"`;                     \
-                $(all-sources) | xargs etags $$ETAGSF -a;             \
-	if test "x$$ETAGSF" = x; then                                 \
-		$(all-kconfigs) | xargs etags -a                      \
-		--regex='/^config[ \t]+\([a-zA-Z0-9_]+\)/\1/';        \
-		$(all-defconfigs) | xargs etags -a                    \
-		--regex='/^#?[ \t]?\(CONFIG_[a-zA-Z0-9_]+\)/\1/';     \
-	fi
+	$(call xtags,etags)
 endef
 
 TAGS: FORCE
 	$(call cmd,TAGS)
 
-
 quiet_cmd_tags = MAKE   $@
 define cmd_tags
 	rm -f $@; \
-	CTAGSF=`ctags --version | grep -i exuberant >/dev/null &&     \
-                echo "-I __initdata,__exitdata,__acquires,__releases  \
-                      -I EXPORT_SYMBOL,EXPORT_SYMBOL_GPL              \
-                      --extra=+f --c-kinds=+px"`;                     \
-                $(all-sources) | xargs ctags $$CTAGSF -a
+	$(call xtags,ctags)
 endef
 
 tags: FORCE
-- 
1.4.1


^ permalink raw reply related	[flat|nested] 35+ messages in thread

* [PATCH 24/28] kbuild: fixup Documentation/kbuild/modules.txt
  2006-09-24 21:18                                           ` [PATCH 23/28] kbuild: Extend kbuild/defconfig tags support to exuberant ctags sam
@ 2006-09-24 21:18                                             ` sam
  2006-09-24 21:18                                               ` [PATCH 25/28] kbuild: correct and clarify versioning info in Makefile sam
  0 siblings, 1 reply; 35+ messages in thread
From: sam @ 2006-09-24 21:18 UTC (permalink / raw)
  To: linux-kernel; +Cc: Robert P. J. Day, Sam Ravnborg

From: Robert P. J. Day <rpjday@mindspring.com>

Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
---
 Documentation/kbuild/modules.txt |   46 +++++++++++++++++++-------------------
 1 files changed, 23 insertions(+), 23 deletions(-)

diff --git a/Documentation/kbuild/modules.txt b/Documentation/kbuild/modules.txt
index a2a178d..2e7702e 100644
--- a/Documentation/kbuild/modules.txt
+++ b/Documentation/kbuild/modules.txt
@@ -24,7 +24,7 @@ In this document you will find informati
 	   --- 6.1 INSTALL_MOD_PATH
 	   --- 6.2 INSTALL_MOD_DIR
 	=== 7. Module versioning & Module.symvers
-	   --- 7.1 Symbols fron the kernel (vmlinux + modules)
+	   --- 7.1 Symbols from the kernel (vmlinux + modules)
 	   --- 7.2 Symbols and external modules
 	   --- 7.3 Symbols from another external module
 	=== 8. Tips & Tricks
@@ -63,14 +63,15 @@ when building an external module.
 	For the running kernel use:
 		make -C /lib/modules/`uname -r`/build M=`pwd`
 
-	For the above command to succeed the kernel must have been built with
-	modules enabled.
+	For the above command to succeed, the kernel must have been
+	built with modules enabled.
 
 	To install the modules that were just built:
 
 		make -C <path-to-kernel> M=`pwd` modules_install
 
-	More complex examples later, the above should get you going.
+	More complex examples will be shown later, the above should
+	be enough to get you started.
 
 --- 2.2 Available targets
 
@@ -89,13 +90,13 @@ when building an external module.
 		Same functionality as if no target was specified.
 		See description above.
 
-	make -C $KDIR M=$PWD modules_install
+	make -C $KDIR M=`pwd` modules_install
 		Install the external module(s).
 		Installation default is in /lib/modules/<kernel-version>/extra,
 		but may be prefixed with INSTALL_MOD_PATH - see separate
 		chapter.
 
-	make -C $KDIR M=$PWD clean
+	make -C $KDIR M=`pwd` clean
 		Remove all generated files for the module - the kernel
 		source directory is not modified.
 
@@ -129,23 +130,22 @@ when building an external module.
 
 	To make sure the kernel contains the information required to
 	build external modules the target 'modules_prepare' must be used.
-	'module_prepare' solely exists as a simple way to prepare
-	a kernel for building external modules.
+	'module_prepare' exists solely as a simple way to prepare
+	a kernel source tree for building external modules.
 	Note: modules_prepare will not build Module.symvers even if
-	      CONFIG_MODULEVERSIONING is set.
-	      Therefore a full kernel build needs to be executed to make
-	      module versioning work.
+	CONFIG_MODULEVERSIONING is set. Therefore a full kernel build
+	needs to be executed to make module versioning work.
 
 --- 2.5 Building separate files for a module
 	It is possible to build single files which are part of a module.
-	This works equal for the kernel, a module and even for external
-	modules.
+	This works equally well for the kernel, a module and even for
+	external modules.
 	Examples (module foo.ko, consist of bar.o, baz.o):
 		make -C $KDIR M=`pwd` bar.lst
 		make -C $KDIR M=`pwd` bar.o
 		make -C $KDIR M=`pwd` foo.ko
 		make -C $KDIR M=`pwd` /
-	
+
 
 === 3. Example commands
 
@@ -177,7 +177,7 @@ Then, to install the module use the foll
 	        M=`pwd`                               \
 		modules_install
 
-If one looks closely you will see that this is the same commands as
+If you look closely you will see that this is the same command as
 listed before - with the directories spelled out.
 
 The above are rather long commands, and the following chapter
@@ -311,7 +311,7 @@ following files:
 Include files are a necessity when a .c file uses something from other .c
 files (not strictly in the sense of C, but if good programming practice is
 used). Any module that consists of more than one .c file will have a .h file
-for one of the .c files. 
+for one of the .c files.
 
 - If the .h file only describes a module internal interface, then the .h file
   shall be placed in the same directory as the .c files.
@@ -368,13 +368,13 @@ directory and therefore need to deal wit
 	handle this too.
 
 	Consider the following example:
-	
+
 	|
 	+- src/complex_main.c
 	|   +- hal/hardwareif.c
 	|   +- hal/include/hardwareif.h
 	+- include/complex.h
-	
+
 	To build a single module named complex.ko, we then need the following
 	kbuild file:
 
@@ -462,12 +462,12 @@ Module.symvers contains a list of all ex
 	Sample:
 		0x2d036834  scsi_remove_host   drivers/scsi/scsi_mod
 
-	For a kernel build without CONFIG_MODVERSIONING enabled, the crc
+	For a kernel build without CONFIG_MODVERSIONS enabled, the crc
 	would read: 0x00000000
 
 	Module.symvers serves two purposes:
 	1) It lists all exported symbols both from vmlinux and all modules
-	2) It lists the CRC if CONFIG_MODVERSION is enabled
+	2) It lists the CRC if CONFIG_MODVERSIONS is enabled
 
 --- 7.2 Symbols and external modules
 
@@ -479,7 +479,7 @@ Module.symvers contains a list of all ex
 	the external module is being built, this file will be read too.
 	During the MODPOST step, a new Module.symvers file will be written
 	containing all exported symbols that were not defined in the kernel.
-	
+
 --- 7.3 Symbols from another external module
 
 	Sometimes, an external module uses exported symbols from another
@@ -499,7 +499,7 @@ Module.symvers contains a list of all ex
 		./foo/ <= contains the foo module
 		./bar/ <= contains the bar module
 		The top-level Kbuild file would then look like:
-		
+
 		#./Kbuild: (this file may also be named Makefile)
 			obj-y := foo/ bar/
 
@@ -521,7 +521,7 @@ Module.symvers contains a list of all ex
 		build is finished, a new Module.symvers file is created
 		containing the sum of all symbols defined and not part of the
 		kernel.
-		
+
 === 8. Tips & Tricks
 
 --- 8.1 Testing for CONFIG_FOO_BAR
-- 
1.4.1


^ permalink raw reply related	[flat|nested] 35+ messages in thread

* [PATCH 25/28] kbuild: correct and clarify versioning info in Makefile
  2006-09-24 21:18                                             ` [PATCH 24/28] kbuild: fixup Documentation/kbuild/modules.txt sam
@ 2006-09-24 21:18                                               ` sam
  2006-09-24 21:18                                                 ` [PATCH 26/28] kbuild: fix "mkdir -p" usage in scripts/package/mkspec sam
  0 siblings, 1 reply; 35+ messages in thread
From: sam @ 2006-09-24 21:18 UTC (permalink / raw)
  To: linux-kernel; +Cc: Robert P. J. Day, Sam Ravnborg

From: Robert P. J. Day <rpjday@mindspring.com>

The attached patch clarifies the creation of KERNELRELEASE and
corrects an error regarding the use of $(LOCALVERSION).

Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
---
 Makefile |   32 +++++++++++++++++++++++++++-----
 1 files changed, 27 insertions(+), 5 deletions(-)

diff --git a/Makefile b/Makefile
index 13bc589..241fed3 100644
--- a/Makefile
+++ b/Makefile
@@ -760,12 +760,34 @@ PHONY += $(vmlinux-dirs)
 	$(Q)$(MAKE) $(build)=$@
 
 # Build the kernel release string
-# The KERNELRELEASE is stored in a file named include/config/kernel.release
-# to be used when executing for example make install or make modules_install
 #
-# Take the contents of any files called localversion* and the config
-# variable CONFIG_LOCALVERSION and append them to KERNELRELEASE.
-# LOCALVERSION from the command line override all of this
+# The KERNELRELEASE value built here is stored in the file
+# include/config/kernel.release, and is used when executing several
+# make targets, such as "make install" or "make modules_install."
+#
+# The eventual kernel release string consists of the following fields,
+# shown in a hierarchical format to show how smaller parts are concatenated
+# to form the larger and final value, with values coming from places like
+# the Makefile, kernel config options, make command line options and/or
+# SCM tag information.
+#
+#	$(KERNELVERSION)
+#	  $(VERSION)			eg, 2
+#	  $(PATCHLEVEL)			eg, 6
+#	  $(SUBLEVEL)			eg, 18
+#	  $(EXTRAVERSION)		eg, -rc6
+#	$(localver-full)
+#	  $(localver)
+#	    localversion*		(all localversion* files)
+#	    $(CONFIG_LOCALVERSION)	(from kernel config setting)
+#	  $(localver-auto)		(only if CONFIG_LOCALVERSION_AUTO is set)
+#	    ./scripts/setlocalversion	(SCM tag, if one exists)
+#	    $(LOCALVERSION)		(from make command line if provided)
+#
+#  Note how the final $(localver-auto) string is included *only* if the
+# kernel config option CONFIG_LOCALVERSION_AUTO is selected.  Also, at the
+# moment, only git is supported but other SCMs can edit the script
+# scripts/setlocalversion and add the appropriate checks as needed.
 
 nullstring :=
 space      := $(nullstring) # end of line
-- 
1.4.1


^ permalink raw reply related	[flat|nested] 35+ messages in thread

* [PATCH 26/28] kbuild: fix "mkdir -p" usage in scripts/package/mkspec
  2006-09-24 21:18                                               ` [PATCH 25/28] kbuild: correct and clarify versioning info in Makefile sam
@ 2006-09-24 21:18                                                 ` sam
  2006-09-24 21:18                                                   ` [PATCH 27/28] dontdiff: add utsrelease.h sam
  0 siblings, 1 reply; 35+ messages in thread
From: sam @ 2006-09-24 21:18 UTC (permalink / raw)
  To: linux-kernel; +Cc: Rolf Eike Beer, Sam Ravnborg

From: Rolf Eike Beer <eike-kernel@sf-tec.de>

"mkdir -p" does not only mean not to complain if the directory already
exists, but also to create the parent directories if needed. This patch
removes "lib" from the list of directories to create as we will also create
"lib/modules".

Signed-off-by: Rolf Eike Beer <eike-kernel@sf-tec.de>
Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
---
 scripts/package/mkspec |    4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/scripts/package/mkspec b/scripts/package/mkspec
index df89284..ffd61fe 100755
--- a/scripts/package/mkspec
+++ b/scripts/package/mkspec
@@ -63,9 +63,9 @@ fi
 
 echo "%install"
 echo "%ifarch ia64"
-echo 'mkdir -p $RPM_BUILD_ROOT/boot/efi $RPM_BUILD_ROOT/lib $RPM_BUILD_ROOT/lib/modules'
+echo 'mkdir -p $RPM_BUILD_ROOT/boot/efi $RPM_BUILD_ROOT/lib/modules'
 echo "%else"
-echo 'mkdir -p $RPM_BUILD_ROOT/boot $RPM_BUILD_ROOT/lib $RPM_BUILD_ROOT/lib/modules'
+echo 'mkdir -p $RPM_BUILD_ROOT/boot $RPM_BUILD_ROOT/lib/modules'
 echo "%endif"
 
 echo 'INSTALL_MOD_PATH=$RPM_BUILD_ROOT make %{_smp_mflags} modules_install'
-- 
1.4.1


^ permalink raw reply related	[flat|nested] 35+ messages in thread

* [PATCH 27/28] dontdiff: add utsrelease.h
  2006-09-24 21:18                                                 ` [PATCH 26/28] kbuild: fix "mkdir -p" usage in scripts/package/mkspec sam
@ 2006-09-24 21:18                                                   ` sam
  2006-09-24 21:18                                                     ` [PATCH 28/28] kbuild: add distclean info to 'make help' and more details for 'clean' sam
  0 siblings, 1 reply; 35+ messages in thread
From: sam @ 2006-09-24 21:18 UTC (permalink / raw)
  To: linux-kernel; +Cc: Randy Dunlap, Sam Ravnborg

From: Randy Dunlap <rdunlap@xenotime.net>

Add auto-generated utsrelease.h to dontdiff file.

Signed-off-by: Randy Dunlap <rdunlap@xenotime.net>
Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
---
 Documentation/dontdiff |    1 +
 1 files changed, 1 insertions(+), 0 deletions(-)

diff --git a/Documentation/dontdiff b/Documentation/dontdiff
index 24adfe9..63c2d0c 100644
--- a/Documentation/dontdiff
+++ b/Documentation/dontdiff
@@ -135,6 +135,7 @@ tags
 times.h*
 tkparse
 trix_boot.h
+utsrelease.h*
 version.h*
 vmlinux
 vmlinux-*
-- 
1.4.1


^ permalink raw reply related	[flat|nested] 35+ messages in thread

* [PATCH 28/28] kbuild: add distclean info to 'make help' and more details for 'clean'
  2006-09-24 21:18                                                   ` [PATCH 27/28] dontdiff: add utsrelease.h sam
@ 2006-09-24 21:18                                                     ` sam
  0 siblings, 0 replies; 35+ messages in thread
From: sam @ 2006-09-24 21:18 UTC (permalink / raw)
  To: linux-kernel; +Cc: Jesper Juhl, Sam Ravnborg

From: Jesper Juhl <jesper.juhl@gmail.com>

Add distclean info, that was previously missing, to 'make help'.
Also add a few more details to the 'make clean' help text.

Signed-off-by: Jesper Juhl <jesper.juhl@gmail.com>
Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
---
 Makefile |    5 +++--
 1 files changed, 3 insertions(+), 2 deletions(-)

diff --git a/Makefile b/Makefile
index 241fed3..fce530a 100644
--- a/Makefile
+++ b/Makefile
@@ -1086,9 +1086,10 @@ boards := $(notdir $(boards))
 
 help:
 	@echo  'Cleaning targets:'
-	@echo  '  clean		  - remove most generated files but keep the config'
+	@echo  '  clean		  - remove most generated files but keep the config and'
+	@echo  '                    enough build support to build external modules'
 	@echo  '  mrproper	  - remove all generated files + config + various backup files'
-	@echo  '  distclean	  - mrproper + patch files'
+	@echo  '  distclean	  - mrproper + remove editor backup and patch files'
 	@echo  ''
 	@echo  'Configuration targets:'
 	@$(MAKE) -f $(srctree)/scripts/kconfig/Makefile help
-- 
1.4.1


^ permalink raw reply related	[flat|nested] 35+ messages in thread

* Re: [PATCH 18/28] kbuild: fail kernel compilation in case of unresolved module symbols
  2006-09-24 21:18                                 ` [PATCH 18/28] kbuild: fail kernel compilation in case of unresolved module symbols sam
  2006-09-24 21:18                                   ` [PATCH 19/28] kbuild: update help in top level Makefile sam
@ 2006-09-24 22:20                                   ` Al Viro
  2006-09-24 22:35                                     ` Sam Ravnborg
  1 sibling, 1 reply; 35+ messages in thread
From: Al Viro @ 2006-09-24 22:20 UTC (permalink / raw)
  To: sam; +Cc: linux-kernel, Kirill Korotaev, Andrey Mirkin, Andrew Morton

On Sun, Sep 24, 2006 at 11:18:14PM +0200, sam@ravnborg.org wrote:
> From: Kirill Korotaev <dev@openvz.org>
> 
> At stage 2 modpost utility is used to check modules.  In case of unresolved
> symbols modpost only prints warning.
> 
> IMHO it is a good idea to fail compilation process in case of unresolved
> symbols (at least in modules coming with kernel), since usually such errors
> are left unnoticed, but kernel modules are broken.
> 
> - new option '-w' is added to modpost:
>   if option is specified, modpost only warns about unresolved symbols
> 
> - modpost is called with '-w' for external modules in Makefile.modpost

Oh, joy...  Could you add a way to tell kbuild that old behaviour is,
in fact, desired?  make MODPOST_FLAGS=-w or something along these lines...

^ permalink raw reply	[flat|nested] 35+ messages in thread

* Re: [PATCH 18/28] kbuild: fail kernel compilation in case of unresolved module symbols
  2006-09-24 22:20                                   ` [PATCH 18/28] kbuild: fail kernel compilation in case of unresolved module symbols Al Viro
@ 2006-09-24 22:35                                     ` Sam Ravnborg
  2006-09-24 22:36                                       ` Al Viro
  0 siblings, 1 reply; 35+ messages in thread
From: Sam Ravnborg @ 2006-09-24 22:35 UTC (permalink / raw)
  To: Al Viro; +Cc: linux-kernel, Kirill Korotaev, Andrey Mirkin, Andrew Morton

On Sun, Sep 24, 2006 at 11:20:26PM +0100, Al Viro wrote:
> On Sun, Sep 24, 2006 at 11:18:14PM +0200, sam@ravnborg.org wrote:
> > From: Kirill Korotaev <dev@openvz.org>
> > 
> > At stage 2 modpost utility is used to check modules.  In case of unresolved
> > symbols modpost only prints warning.
> > 
> > IMHO it is a good idea to fail compilation process in case of unresolved
> > symbols (at least in modules coming with kernel), since usually such errors
> > are left unnoticed, but kernel modules are broken.
> > 
> > - new option '-w' is added to modpost:
> >   if option is specified, modpost only warns about unresolved symbols
> > 
> > - modpost is called with '-w' for external modules in Makefile.modpost
> 
> Oh, joy...  Could you add a way to tell kbuild that old behaviour is,
> in fact, desired?  make MODPOST_FLAGS=-w or something along these lines...

On what architectures do you see lots of these warnings - maybe fixable?
Otherwise I could do something like this:

diff --git a/scripts/Makefile.modpost b/scripts/Makefile.modpost
index 4b2721c..e9efe61 100644
--- a/scripts/Makefile.modpost
+++ b/scripts/Makefile.modpost
@@ -58,7 +58,7 @@ quiet_cmd_modpost = MODPOST $(words $(fi
 	$(if $(KBUILD_EXTMOD),-i,-o) $(kernelsymfile) \
 	$(if $(KBUILD_EXTMOD),-I $(modulesymfile)) \
 	$(if $(KBUILD_EXTMOD),-o $(modulesymfile)) \
-	$(if $(KBUILD_EXTMOD),-w) \
+	$(if $(KBUILD_EXTMOD)$(KBUILD_MODPOST_WARN),-w) \
 	$(wildcard vmlinux) $(filter-out FORCE,$^)
 
 PHONY += __modpost

Then:
make KBUILD_MODPOST_WARN=1

would warn and not fail.

Note: I beleive the patch has been in -mm for a while.
      Got the patch via akpm

	Sam

^ permalink raw reply related	[flat|nested] 35+ messages in thread

* Re: [PATCH 18/28] kbuild: fail kernel compilation in case of unresolved module symbols
  2006-09-24 22:35                                     ` Sam Ravnborg
@ 2006-09-24 22:36                                       ` Al Viro
  2006-09-24 22:47                                         ` Sam Ravnborg
  0 siblings, 1 reply; 35+ messages in thread
From: Al Viro @ 2006-09-24 22:36 UTC (permalink / raw)
  To: Sam Ravnborg; +Cc: linux-kernel, Kirill Korotaev, Andrey Mirkin, Andrew Morton

On Mon, Sep 25, 2006 at 12:35:34AM +0200, Sam Ravnborg wrote:
> On what architectures do you see lots of these warnings - maybe fixable?
> Otherwise I could do something like this:

Try allmodconfig someday...

aviro@icy:/usr/src/cross-kernel/volatile/work$ grep -l WARNING.*undefined ../logs/*/X4c
../logs/alpha-SMP/X4c
../logs/alpha/X4c
../logs/arm/X4c
../logs/armv/X4c
../logs/chestnut/X4c
../logs/frv/X4c
../logs/ia64/X4c
../logs/m32r/X4c
../logs/m68k/X4c
../logs/ppc/X4c
../logs/ppc44x/X4c
../logs/ppc64/X4c
../logs/s390/X4c
../logs/s390x/X4c
../logs/sparc32/X4c
../logs/sparc64/X4c
../logs/sun3/X4c
../logs/sun4/X4c
../logs/uml-i386/X4c

That's out of 25 targets.  The only variants that do _NOT_ trigger are
amd64, amd64-UP, i386 and uml-amd64.

I more or less agree with rationale behind making that default, but I'd
very much appreciate a way to override that.  For now I've just made the
-w line unconditional, but the fewer infrastructure patches I've to carry...

^ permalink raw reply	[flat|nested] 35+ messages in thread

* Re: [PATCH 18/28] kbuild: fail kernel compilation in case of unresolved module symbols
  2006-09-24 22:36                                       ` Al Viro
@ 2006-09-24 22:47                                         ` Sam Ravnborg
  2006-09-24 22:48                                           ` Al Viro
  0 siblings, 1 reply; 35+ messages in thread
From: Sam Ravnborg @ 2006-09-24 22:47 UTC (permalink / raw)
  To: Al Viro; +Cc: linux-kernel, Kirill Korotaev, Andrey Mirkin, Andrew Morton

On Sun, Sep 24, 2006 at 11:36:43PM +0100, Al Viro wrote:
> On Mon, Sep 25, 2006 at 12:35:34AM +0200, Sam Ravnborg wrote:
> > On what architectures do you see lots of these warnings - maybe fixable?
> > Otherwise I could do something like this:
> 
> Try allmodconfig someday...

My cross-compile setup severely broke due to me changing dev-machine.
Will restore it when I get my hand on a proper dev machine again - current
box consumes too much power for normal use (almost 300W) and is not much
quicker than my older amd64 box :-(

> 
> aviro@icy:/usr/src/cross-kernel/volatile/work$ grep -l WARNING.*undefined ../logs/*/X4c
> ../logs/alpha-SMP/X4c
> ../logs/alpha/X4c
> ../logs/arm/X4c
> ../logs/armv/X4c
> ../logs/chestnut/X4c
> ../logs/frv/X4c
> ../logs/ia64/X4c
> ../logs/m32r/X4c
> ../logs/m68k/X4c
> ../logs/ppc/X4c
> ../logs/ppc44x/X4c
> ../logs/ppc64/X4c
> ../logs/s390/X4c
> ../logs/s390x/X4c
> ../logs/sparc32/X4c
> ../logs/sparc64/X4c
> ../logs/sun3/X4c
> ../logs/sun4/X4c
> ../logs/uml-i386/X4c
> 
> That's out of 25 targets.  The only variants that do _NOT_ trigger are
> amd64, amd64-UP, i386 and uml-amd64.

How many of these ougth to be fixed then?
> 
> I more or less agree with rationale behind making that default, but I'd
> very much appreciate a way to override that.  For now I've just made the
> -w line unconditional, but the fewer infrastructure patches I've to carry...
OK. Will include it in next round of kbuild updates.

	Sam

^ permalink raw reply	[flat|nested] 35+ messages in thread

* Re: [PATCH 18/28] kbuild: fail kernel compilation in case of unresolved module symbols
  2006-09-24 22:47                                         ` Sam Ravnborg
@ 2006-09-24 22:48                                           ` Al Viro
  0 siblings, 0 replies; 35+ messages in thread
From: Al Viro @ 2006-09-24 22:48 UTC (permalink / raw)
  To: Sam Ravnborg; +Cc: linux-kernel, Kirill Korotaev, Andrey Mirkin, Andrew Morton

On Mon, Sep 25, 2006 at 12:47:40AM +0200, Sam Ravnborg wrote:
> > That's out of 25 targets.  The only variants that do _NOT_ trigger are
> > amd64, amd64-UP, i386 and uml-amd64.
> 
> How many of these ougth to be fixed then?

In theory - all of them.  Right now that's just plain not feasible...

> > I more or less agree with rationale behind making that default, but I'd
> > very much appreciate a way to override that.  For now I've just made the
> > -w line unconditional, but the fewer infrastructure patches I've to carry...
> OK. Will include it in next round of kbuild updates.

BTW, an alternative would be to stop unconditionally after full set of checks
and not bother with .mod.o/.ko at all.  _Not_ as a default, of course...

^ permalink raw reply	[flat|nested] 35+ messages in thread

* Re: [PATCH 13/28] kbuild: make -rR is now default
  2006-09-24 21:18                       ` [PATCH 13/28] kbuild: make -rR is now default sam
  2006-09-24 21:18                         ` [PATCH 14/28] kbuild: preperly align SYSMAP output sam
@ 2006-09-25  6:24                         ` Jan Engelhardt
  2006-09-25 18:02                           ` Sam Ravnborg
  1 sibling, 1 reply; 35+ messages in thread
From: Jan Engelhardt @ 2006-09-25  6:24 UTC (permalink / raw)
  To: Sam Ravnborg; +Cc: linux-kernel, Sam Ravnborg


>Subject: [PATCH 13/28] kbuild: make -rR is now default
>
>Do not specify -rR anymore - it is default.

What do you mean, it is default? Did upstream (GNU make) enable it by 
default?


Jan Engelhardt
-- 

^ permalink raw reply	[flat|nested] 35+ messages in thread

* Re: [PATCH 13/28] kbuild: make -rR is now default
  2006-09-25  6:24                         ` [PATCH 13/28] kbuild: make -rR is now default Jan Engelhardt
@ 2006-09-25 18:02                           ` Sam Ravnborg
  0 siblings, 0 replies; 35+ messages in thread
From: Sam Ravnborg @ 2006-09-25 18:02 UTC (permalink / raw)
  To: Jan Engelhardt; +Cc: linux-kernel, Sam Ravnborg

On Mon, Sep 25, 2006 at 08:24:31AM +0200, Jan Engelhardt wrote:
> 
> >Subject: [PATCH 13/28] kbuild: make -rR is now default
> >
> >Do not specify -rR anymore - it is default.
> 
> What do you mean, it is default? Did upstream (GNU make) enable it by 
> default?
The top-level Makefiles set MAKEFLAGS variables so you
do not need to specify "$(MAKE) -rR" to get optimal performance.

	Sam

^ permalink raw reply	[flat|nested] 35+ messages in thread

end of thread, other threads:[~2006-09-25 17:57 UTC | newest]

Thread overview: 35+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2006-09-24 21:17 [PATCH 1/28] kconfig: support DOS line endings sam
2006-09-24 21:17 ` [PATCH 2/28] kbuild: consistently decide when to rebuild a target sam
2006-09-24 21:17   ` [PATCH 3/28] kbuild: add unifdef sam
2006-09-24 21:18     ` [PATCH 4/28] kbuild: replace use of strlcpy with a dedicated implmentation in unifdef sam
2006-09-24 21:18       ` [PATCH 5/28] kbuild: use in-kernel unifdef sam
2006-09-24 21:18         ` [PATCH 6/28] remove RPM_BUILD_ROOT from asm-offsets.h sam
2006-09-24 21:18           ` [PATCH 7/28] kconfig: linguistic fixes for Documentation/kbuild/kconfig-language.txt sam
2006-09-24 21:18             ` [PATCH 8/28] kbuild: linguistic fixes for Documentation/kbuild/modules.txt sam
2006-09-24 21:18               ` [PATCH 9/28] kbuild: linguistic fixes for Documentation/kbuild/makefiles.txt sam
2006-09-24 21:18                 ` [PATCH 10/28] kbuild: ignore references from ".pci_fixup" to ".init.text" sam
2006-09-24 21:18                   ` [PATCH 11/28] kbuild: modpost on vmlinux regardless of CONFIG_MODULES sam
2006-09-24 21:18                     ` [PATCH 12/28] kbuild: make V=2 tell why a target is rebuild sam
2006-09-24 21:18                       ` [PATCH 13/28] kbuild: make -rR is now default sam
2006-09-24 21:18                         ` [PATCH 14/28] kbuild: preperly align SYSMAP output sam
2006-09-24 21:18                           ` [PATCH 15/28] kbuild: add missing return statement in modpost.c:secref_whitelist() sam
2006-09-24 21:18                             ` [PATCH 16/28] kbuild: create output directory for hostprogs with O=.. build sam
2006-09-24 21:18                               ` [PATCH 17/28] kbuild: remove debug left-over from Makefile.host sam
2006-09-24 21:18                                 ` [PATCH 18/28] kbuild: fail kernel compilation in case of unresolved module symbols sam
2006-09-24 21:18                                   ` [PATCH 19/28] kbuild: update help in top level Makefile sam
2006-09-24 21:18                                     ` [PATCH 20/28] Documentaion: update Documentation/Changes with minimum versions sam
2006-09-24 21:18                                       ` [PATCH 21/28] kbuild: clarify "make C=" build option sam
2006-09-24 21:18                                         ` [PATCH 22/28] kbuild: fix for some typos in Documentation/makefiles.txt sam
2006-09-24 21:18                                           ` [PATCH 23/28] kbuild: Extend kbuild/defconfig tags support to exuberant ctags sam
2006-09-24 21:18                                             ` [PATCH 24/28] kbuild: fixup Documentation/kbuild/modules.txt sam
2006-09-24 21:18                                               ` [PATCH 25/28] kbuild: correct and clarify versioning info in Makefile sam
2006-09-24 21:18                                                 ` [PATCH 26/28] kbuild: fix "mkdir -p" usage in scripts/package/mkspec sam
2006-09-24 21:18                                                   ` [PATCH 27/28] dontdiff: add utsrelease.h sam
2006-09-24 21:18                                                     ` [PATCH 28/28] kbuild: add distclean info to 'make help' and more details for 'clean' sam
2006-09-24 22:20                                   ` [PATCH 18/28] kbuild: fail kernel compilation in case of unresolved module symbols Al Viro
2006-09-24 22:35                                     ` Sam Ravnborg
2006-09-24 22:36                                       ` Al Viro
2006-09-24 22:47                                         ` Sam Ravnborg
2006-09-24 22:48                                           ` Al Viro
2006-09-25  6:24                         ` [PATCH 13/28] kbuild: make -rR is now default Jan Engelhardt
2006-09-25 18:02                           ` Sam Ravnborg

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).