History

Merge master.kernel.org:/pub/scm/linux/kernel/git/sam/kbuild

* master.kernel.org:/pub/scm/linux/kernel/git/sam/kbuild: (46 commits) kbuild: remove obsoleted scripts/reference_* files kbuild: fix make help & make *pkg kconfig: fix time ordering of writes to .kconfig.d and include/linux/autoconf.h Kconfig: remove the CONFIG_CC_ALIGN_* options kbuild: add -fverbose-asm to i386 Makefile kbuild: clean-up genksyms kbuild: Lindent genksyms.c kbuild: fix genksyms build error kbuild: in makefile.txt note that Makefile is preferred name for kbuild files kbuild: replace PHONY with FORCE kbuild: Fix bug in crc symbol generating of kernel and modules kbuild: change kbuild to not rely on incorrect GNU make behavior kbuild: when warning symbols exported twice now tell user this is the problem kbuild: fix make dir/file.xx when asm symlink is missing kbuild: in the section mismatch check try harder to find symbols kbuild: fix section mismatch check for unwind on IA64 kbuild: kill false positives from section mismatch warnings for powerpc kbuild: kill trailing whitespace in modpost & friends kbuild: small update of allnoconfig description kbuild: make namespace.pl CROSS_COMPILE happy ... Trivial conflict in arch/ppc/boot/Makefile manually fixed up

Linus Torvalds committed 20 years ago

Commit 2e1ca212 parents 315ab19 eae0f5352 files · +1500 −1259Browse files

Unified · Split

52 files
  1. Documentation/DocBook/Makefile +7 −1
  2. Documentation/kbuild/makefiles.txt +100 −72
  3. Documentation/kbuild/modules.txt +91 −7
  4. Documentation/smart-config.txt +0 −4
  5. Makefile +99 −98
  6. arch/arm/Makefile +4 −1
  7. arch/arm/boot/Makefile +4 −1
  8. arch/arm/boot/bootp/Makefile +4 −1
  9. arch/arm26/Makefile +5 −2
  10. arch/arm26/boot/Makefile +4 −1
  11. arch/i386/Makefile +2 −2
  12. arch/i386/kernel/vmlinux.lds.S +2 −1
  13. arch/ia64/Makefile +4 −1
  14. arch/m32r/Makefile +4 −1
  15. arch/powerpc/Makefile +1 −1
  16. arch/ppc/Makefile +1 −1
  17. arch/ppc/boot/Makefile +7 −1
  18. arch/ppc/boot/openfirmware/Makefile +5 −2
  19. arch/sh/Makefile +1 −1
  20. arch/um/Makefile +5 −2
  21. arch/x86_64/Makefile +2 −2
  22. drivers/atm/.gitignore +5 −0
  23. drivers/video/matrox/matroxfb_DAC1064.c +0 −1
  24. drivers/video/matrox/matroxfb_DAC1064.h +0 −1
  25. drivers/video/matrox/matroxfb_Ti3026.c +0 −1
  26. drivers/video/matrox/matroxfb_Ti3026.h +0 −1
  27. drivers/video/matrox/matroxfb_base.c +0 −1
  28. drivers/video/matrox/matroxfb_misc.c +0 −1
  29. init/Kconfig +0 −37
  30. scripts/Kbuild.include +52 −13
  31. scripts/Makefile.build +16 −11
  32. scripts/Makefile.clean +8 −2
  33. scripts/Makefile.modinst +8 −2
  34. scripts/Makefile.modpost +14 −5
  35. scripts/basic/fixdep.c +2 −12
  36. scripts/checkconfig.pl +0 −65
  37. scripts/genksyms/genksyms.c +393 −450
  38. scripts/genksyms/genksyms.h +17 −40
  39. scripts/kconfig/Makefile +3 −3
  40. scripts/kconfig/confdata.c +1 −1
  41. scripts/kconfig/lxdialog/Makefile +3 −3
  42. scripts/mkmakefile +5 −3
  43. scripts/mod/file2alias.c +8 −9
  44. scripts/mod/mk_elfconfig.c +2 −2
  45. scripts/mod/modpost.c +562 −136
  46. scripts/mod/modpost.h +20 −5
  47. scripts/mod/sumversion.c +15 −17
  48. scripts/namespace.pl +2 −2
  49. scripts/package/Makefile +8 −12
  50. scripts/reference_discarded.pl +0 −112
  51. scripts/reference_init.pl +0 −108
  52. sound/oss/.gitignore +4 −0
Documentation/DocBook/Makefile+7−1
@@ -28,7 +28,7 @@ PS_METHOD = $(prefer-db2x) · 27 unmodified lines
2828
2929 ###
3030 # The targets that may be used.
31−.PHONY: xmldocs sgmldocs psdocs pdfdocs htmldocs mandocs installmandocs
31+PHONY += xmldocs sgmldocs psdocs pdfdocs htmldocs mandocs installmandocs
3232
3333 BOOKS := $(addprefix $(obj)/,$(DOCBOOKS))
3434 xmldocs: $(BOOKS)
@@ -211,3 +211,9 @@ clean-dirs := $(patsubst %.xml,%,$(DOCBOOKS)) · 176 unmodified lines
211211
212212 #man put files in man subdir - traverse down
213213 subdir- := man/
214+
215+
216+# Declare the contents of the .PHONY variable as phony. We keep that
217+# information in a variable se we can use it in if_changed and friends.
218+
219+.PHONY: $(PHONY)
Documentation/kbuild/makefiles.txt+100−72
@@ -17,6 +17,7 @@ This document describes the Linux kernel Makefiles. · 16 unmodified lines
1717 --- 3.8 Command line dependency
1818 --- 3.9 Dependency tracking
1919 --- 3.10 Special Rules
20+ --- 3.11 $(CC) support functions
2021
2122 === 4 Host Program support
2223 --- 4.1 Simple Host Program
@@ -38,7 +39,6 @@ This document describes the Linux kernel Makefiles. · 15 unmodified lines
3839 --- 6.6 Commands useful for building a boot image
3940 --- 6.7 Custom kbuild commands
4041 --- 6.8 Preprocessing linker scripts
41− --- 6.9 $(CC) support functions
4242
4343 === 7 Kbuild Variables
4444 === 8 Makefile language
@@ -106,9 +106,9 @@ This document is aimed towards normal developers and arch developers. · 61 unmodified lines
106106 Most Makefiles within the kernel are kbuild Makefiles that use the
107107 kbuild infrastructure. This chapter introduce the syntax used in the
108108 kbuild makefiles.
109−The preferred name for the kbuild files is 'Kbuild' but 'Makefile' will
110−continue to be supported. All new developmen is expected to use the
111−Kbuild filename.
109+The preferred name for the kbuild files are 'Makefile' but 'Kbuild' can
110+be used and if both a 'Makefile' and a 'Kbuild' file exists then the 'Kbuild'
111+file will be used.
112112
113113 Section 3.1 "Goal definitions" is a quick intro, further chapters provide
114114 more details, with real examples.
@@ -385,6 +385,102 @@ more details, with real examples. · 270 unmodified lines
385385 to prerequisites are referenced with $(src) (because they are not
386386 generated files).
387387
388+--- 3.11 $(CC) support functions
389+
390+ The kernel may be build with several different versions of
391+ $(CC), each supporting a unique set of features and options.
392+ kbuild provide basic support to check for valid options for $(CC).
393+ $(CC) is useally the gcc compiler, but other alternatives are
394+ available.
395+
396+ as-option
397+ as-option is used to check if $(CC) when used to compile
398+ assembler (*.S) files supports the given option. An optional
399+ second option may be specified if first option are not supported.
400+
401+ Example:
402+ #arch/sh/Makefile
403+ cflags-y += $(call as-option,-Wa$(comma)-isa=$(isa-y),)
404+
405+ In the above example cflags-y will be assinged the the option
406+ -Wa$(comma)-isa=$(isa-y) if it is supported by $(CC).
407+ The second argument is optional, and if supplied will be used
408+ if first argument is not supported.
409+
410+ cc-option
411+ cc-option is used to check if $(CC) support a given option, and not
412+ supported to use an optional second option.
413+
414+ Example:
415+ #arch/i386/Makefile
416+ cflags-y += $(call cc-option,-march=pentium-mmx,-march=i586)
417+
418+ In the above example cflags-y will be assigned the option
419+ -march=pentium-mmx if supported by $(CC), otherwise -march-i586.
420+ The second argument to cc-option is optional, and if omitted
421+ cflags-y will be assigned no value if first option is not supported.
422+
423+ cc-option-yn
424+ cc-option-yn is used to check if gcc supports a given option
425+ and return 'y' if supported, otherwise 'n'.
426+
427+ Example:
428+ #arch/ppc/Makefile
429+ biarch := $(call cc-option-yn, -m32)
430+ aflags-$(biarch) += -a32
431+ cflags-$(biarch) += -m32
432+
433+ In the above example $(biarch) is set to y if $(CC) supports the -m32
434+ option. When $(biarch) equals to y the expanded variables $(aflags-y)
435+ and $(cflags-y) will be assigned the values -a32 and -m32.
436+
437+ cc-option-align
438+ gcc version >= 3.0 shifted type of options used to speify
439+ alignment of functions, loops etc. $(cc-option-align) whrn used
440+ as prefix to the align options will select the right prefix:
441+ gcc < 3.00
442+ cc-option-align = -malign
443+ gcc >= 3.00
444+ cc-option-align = -falign
445+
446+ Example:
447+ CFLAGS += $(cc-option-align)-functions=4
448+
449+ In the above example the option -falign-functions=4 is used for
450+ gcc >= 3.00. For gcc < 3.00 -malign-functions=4 is used.
451+
452+ cc-version
453+ cc-version return a numerical version of the $(CC) compiler version.
454+ The format is <major><minor> where both are two digits. So for example
455+ gcc 3.41 would return 0341.
456+ cc-version is useful when a specific $(CC) version is faulty in one
457+ area, for example the -mregparm=3 were broken in some gcc version
458+ even though the option was accepted by gcc.
459+
460+ Example:
461+ #arch/i386/Makefile
462+ cflags-y += $(shell \
463+ if [ $(call cc-version) -ge 0300 ] ; then \
464+ echo "-mregparm=3"; fi ;)
465+
466+ In the above example -mregparm=3 is only used for gcc version greater
467+ than or equal to gcc 3.0.
468+
469+ cc-ifversion
470+ cc-ifversion test the version of $(CC) and equals last argument if
471+ version expression is true.
472+
473+ Example:
474+ #fs/reiserfs/Makefile
475+ EXTRA_CFLAGS := $(call cc-ifversion, -lt, 0402, -O1)
476+
477+ In this example EXTRA_CFLAGS will be assigned the value -O1 if the
478+ $(CC) version is less than 4.2.
479+ cc-ifversion takes all the shell operators:
480+ -eq, -ne, -lt, -le, -gt, and -ge
481+ The third parameter may be a text as in this example, but it may also
482+ be an expanded variable or a macro.
483+
388484
389485 === 4 Host Program support
390486
@@ -973,74 +1069,6 @@ When kbuild executes the following steps are followed (roughly): · 582 unmodified lines
9731069 architecture specific files.
9741070
9751071
976−--- 6.9 $(CC) support functions
977−
978− The kernel may be build with several different versions of
979− $(CC), each supporting a unique set of features and options.
980− kbuild provide basic support to check for valid options for $(CC).
981− $(CC) is useally the gcc compiler, but other alternatives are
982− available.
983−
984− cc-option
985− cc-option is used to check if $(CC) support a given option, and not
986− supported to use an optional second option.
987−
988− Example:
989− #arch/i386/Makefile
990− cflags-y += $(call cc-option,-march=pentium-mmx,-march=i586)
991−
992− In the above example cflags-y will be assigned the option
993− -march=pentium-mmx if supported by $(CC), otherwise -march-i586.
994− The second argument to cc-option is optional, and if omitted
995− cflags-y will be assigned no value if first option is not supported.
996−
997− cc-option-yn
998− cc-option-yn is used to check if gcc supports a given option
999− and return 'y' if supported, otherwise 'n'.
1000−
1001− Example:
1002− #arch/ppc/Makefile
1003− biarch := $(call cc-option-yn, -m32)
1004− aflags-$(biarch) += -a32
1005− cflags-$(biarch) += -m32
1006−
1007− In the above example $(biarch) is set to y if $(CC) supports the -m32
1008− option. When $(biarch) equals to y the expanded variables $(aflags-y)
1009− and $(cflags-y) will be assigned the values -a32 and -m32.
1010−
1011− cc-option-align
1012− gcc version >= 3.0 shifted type of options used to speify
1013− alignment of functions, loops etc. $(cc-option-align) whrn used
1014− as prefix to the align options will select the right prefix:
1015− gcc < 3.00
1016− cc-option-align = -malign
1017− gcc >= 3.00
1018− cc-option-align = -falign
1019−
1020− Example:
1021− CFLAGS += $(cc-option-align)-functions=4
1022−
1023− In the above example the option -falign-functions=4 is used for
1024− gcc >= 3.00. For gcc < 3.00 -malign-functions=4 is used.
1025−
1026− cc-version
1027− cc-version return a numerical version of the $(CC) compiler version.
1028− The format is <major><minor> where both are two digits. So for example
1029− gcc 3.41 would return 0341.
1030− cc-version is useful when a specific $(CC) version is faulty in one
1031− area, for example the -mregparm=3 were broken in some gcc version
1032− even though the option was accepted by gcc.
1033−
1034− Example:
1035− #arch/i386/Makefile
1036− cflags-y += $(shell \
1037− if [ $(call cc-version) -ge 0300 ] ; then \
1038− echo "-mregparm=3"; fi ;)
1039−
1040− In the above example -mregparm=3 is only used for gcc version greater
1041− than or equal to gcc 3.0.
1042−
1043−
10441072 === 7 Kbuild Variables
10451073
10461074 The top Makefile exports the following variables:
Documentation/kbuild/modules.txt+91−7
@@ -13,6 +13,7 @@ In this document you will find information about: · 12 unmodified lines
1313 --- 2.2 Available targets
1414 --- 2.3 Available options
1515 --- 2.4 Preparing the kernel tree for module build
16+ --- 2.5 Building separate files for a module
1617 === 3. Example commands
1718 === 4. Creating a kbuild file for an external module
1819 === 5. Include files
@@ -22,7 +23,10 @@ In this document you will find information about: · 3 unmodified lines
2223 === 6. Module installation
2324 --- 6.1 INSTALL_MOD_PATH
2425 --- 6.2 INSTALL_MOD_DIR
25− === 7. Module versioning
26+ === 7. Module versioning & Module.symvers
27+ --- 7.1 Symbols fron the kernel (vmlinux + modules)
28+ --- 7.2 Symbols and external modules
29+ --- 7.3 Symbols from another external module
2630 === 8. Tips & Tricks
2731 --- 8.1 Testing for CONFIG_FOO_BAR
2832
@@ -88,7 +92,8 @@ when building an external module. · 59 unmodified lines
8892 make -C $KDIR M=$PWD modules_install
8993 Install the external module(s).
9094 Installation default is in /lib/modules/<kernel-version>/extra,
91− but may be prefixed with INSTALL_MOD_PATH - see separate chapter.
95+ but may be prefixed with INSTALL_MOD_PATH - see separate
96+ chapter.
9297
9398 make -C $KDIR M=$PWD clean
9499 Remove all generated files for the module - the kernel
@@ -131,6 +136,16 @@ when building an external module. · 36 unmodified lines
131136 Therefore a full kernel build needs to be executed to make
132137 module versioning work.
133138
139+--- 2.5 Building separate files for a module
140+ It is possible to build single files which is part of a module.
141+ This works equal for the kernel, a module and even for external
142+ modules.
143+ Examples (module foo.ko, consist of bar.o, baz.o):
144+ make -C $KDIR M=`pwd` bar.lst
145+ make -C $KDIR M=`pwd` bar.o
146+ make -C $KDIR M=`pwd` foo.ko
147+ make -C $KDIR M=`pwd` /
148+
134149
135150 === 3. Example commands
136151
@@ -422,7 +437,7 @@ External modules are installed in the directory: · 285 unmodified lines
422437 => Install dir: /lib/modules/$(KERNELRELEASE)/gandalf
423438
424439
425−=== 7. Module versioning
440+=== 7. Module versioning & Module.symvers
426441
427442 Module versioning is enabled by the CONFIG_MODVERSIONS tag.
428443
@@ -432,11 +447,80 @@ when a module is loaded/used then the CRC values contained in the kernel are · 3 unmodified lines
432447 compared with similar values in the module. If they are not equal then the
433448 kernel refuses to load the module.
434449
435−During a kernel build a file named Module.symvers will be generated. This
436−file includes the symbol version of all symbols within the kernel. If the
437−Module.symvers file is saved from the last full kernel compile one does not
438−have to do a full kernel compile to build a module version's compatible module.
450+Module.symvers contains a list of all exported symbols from a kernel build.
451+
452+--- 7.1 Symbols fron the kernel (vmlinux + modules)
453+
454+ During a kernel build a file named Module.symvers will be generated.
455+ Module.symvers contains all exported symbols from the kernel and
456+ compiled modules. For each symbols the corresponding CRC value
457+ is stored too.
458+
459+ The syntax of the Module.symvers file is:
460+ <CRC> <Symbol> <module>
461+ Sample:
462+ 0x2d036834 scsi_remove_host drivers/scsi/scsi_mod
439463
464+ For a kernel build without CONFIG_MODVERSIONING enabled the crc
465+ would read: 0x00000000
466+
467+ Module.symvers serve two purposes.
468+ 1) It list all exported symbols both from vmlinux and all modules
469+ 2) It list CRC if CONFIG_MODVERSION is enabled
470+
471+--- 7.2 Symbols and external modules
472+
473+ When building an external module the build system needs access to
474+ the symbols from the kernel to check if all external symbols are
475+ defined. This is done in the MODPOST step and to obtain all
476+ symbols modpost reads Module.symvers from the kernel.
477+ If a Module.symvers file is present in the directory where
478+ the external module is being build this file will be read too.
479+ During the MODPOST step a new Module.symvers file will be written
480+ containing all exported symbols that was not defined in the kernel.
481+
482+--- 7.3 Symbols from another external module
483+
484+ Sometimes one external module uses exported symbols from another
485+ external module. Kbuild needs to have full knowledge on all symbols
486+ to avoid spitting out warnings about undefined symbols.
487+ Two solutions exist to let kbuild know all symbols of more than
488+ one external module.
489+ The method with a top-level kbuild file is recommended but may be
490+ impractical in certain situations.
491+
492+ Use a top-level Kbuild file
493+ If you have two modules: 'foo', 'bar' and 'foo' needs symbols
494+ from 'bar' then one can use a common top-level kbuild file so
495+ both modules are compiled in same build.
496+
497+ Consider following directory layout:
498+ ./foo/ <= contains the foo module
499+ ./bar/ <= contains the bar module
500+ The top-level Kbuild file would then look like:
501+
502+ #./Kbuild: (this file may also be named Makefile)
503+ obj-y := foo/ bar/
504+
505+ Executing:
506+ make -C $KDIR M=`pwd`
507+
508+ will then do the expected and compile both modules with full
509+ knowledge on symbols from both modules.
510+
511+ Use an extra Module.symvers file
512+ When an external module is build a Module.symvers file is
513+ generated containing all exported symbols which are not
514+ defined in the kernel.
515+ To get access to symbols from module 'bar' one can copy the
516+ Module.symvers file from the compilation of the 'bar' module
517+ to the directory where the 'foo' module is build.
518+ During the module build kbuild will read the Module.symvers
519+ file in the directory of the external module and when the
520+ build is finished a new Module.symvers file is created
521+ containing the sum of all symbols defined and not part of the
522+ kernel.
523+
440524 === 8. Tips & Tricks
441525
442526 --- 8.1 Testing for CONFIG_FOO_BAR
Documentation/smart-config.txt+0−4
@@ -56,10 +56,6 @@ Here is the solution: · 55 unmodified lines
5656 writing one file per option. It updates only the files for options
5757 that have changed.
5858
59− mkdep.c no longer generates warning messages for missing or unneeded
60− <linux/config.h> lines. The new top-level target 'make checkconfig'
61− checks for these problems.
62−
6359 Flag Dependencies
6460
6561 Martin Von Loewis contributed another feature to this patch:
Makefile+99−98
@@ -95,7 +95,7 @@ ifdef O · 94 unmodified lines
9595 endif
9696
9797 # That's our default target when none is given on the command line
98−.PHONY: _all
98+PHONY := _all
9999 _all:
100100
101101 ifneq ($(KBUILD_OUTPUT),)
@@ -106,7 +106,7 @@ KBUILD_OUTPUT := $(shell cd $(KBUILD_OUTPUT) && /bin/pwd) · 4 unmodified lines
106106 $(if $(KBUILD_OUTPUT),, \
107107 $(error output directory "$(saved-output)" does not exist))
108108
109−.PHONY: $(MAKECMDGOALS)
109+PHONY += $(MAKECMDGOALS)
110110
111111 $(filter-out _all,$(MAKECMDGOALS)) _all:
112112 $(if $(KBUILD_VERBOSE:1=),@)$(MAKE) -C $(KBUILD_OUTPUT) \
@@ -123,7 +123,7 @@ ifeq ($(skip-makefile),) · 10 unmodified lines
123123
124124 # If building an external module we do not care about the all: rule
125125 # but instead _all depend on modules
126−.PHONY: all
126+PHONY += all
127127 ifeq ($(KBUILD_EXTMOD),)
128128 _all: all
129129 else
@@ -137,7 +137,7 @@ objtree := $(CURDIR) · 7 unmodified lines
137137 src := $(srctree)
138138 obj := $(objtree)
139139
140−VPATH := $(srctree)
140+VPATH := $(srctree)$(if $(KBUILD_EXTMOD),:$(KBUILD_EXTMOD))
141141
142142 export srctree objtree VPATH TOPDIR
143143
@@ -151,7 +151,7 @@ export srctree objtree VPATH TOPDIR · 7 unmodified lines
151151 SUBARCH := $(shell uname -m | sed -e s/i.86/i386/ -e s/sun4u/sparc64/ \
152152 -e s/arm.*/arm/ -e s/sa110/arm/ \
153153 -e s/s390x/s390/ -e s/parisc64/parisc/ \
154− -e s/ppc.*/powerpc/ )
154+ -e s/ppc.*/powerpc/ -e s/mips.*/mips/ )
155155
156156 # Cross compiling and selecting different set of gcc/bin-utils
157157 # ---------------------------------------------------------------------------
@@ -258,38 +258,6 @@ endif · 100 unmodified lines
258258
259259 export quiet Q KBUILD_VERBOSE
260260
261−######
262−# cc support functions to be used (only) in arch/$(ARCH)/Makefile
263−# See documentation in Documentation/kbuild/makefiles.txt
264−
265−# as-option
266−# Usage: cflags-y += $(call as-option, -Wa$(comma)-isa=foo,)
267−
268−as-option = $(shell if $(CC) $(CFLAGS) $(1) -Wa,-Z -c -o /dev/null \
269− -xassembler /dev/null > /dev/null 2>&1; then echo "$(1)"; \
270− else echo "$(2)"; fi ;)
271−
272−# cc-option
273−# Usage: cflags-y += $(call cc-option, -march=winchip-c6, -march=i586)
274−
275−cc-option = $(shell if $(CC) $(CFLAGS) $(1) -S -o /dev/null -xc /dev/null \
276− > /dev/null 2>&1; then echo "$(1)"; else echo "$(2)"; fi ;)
277−
278−# cc-option-yn
279−# Usage: flag := $(call cc-option-yn, -march=winchip-c6)
280−cc-option-yn = $(shell if $(CC) $(CFLAGS) $(1) -S -o /dev/null -xc /dev/null \
281− > /dev/null 2>&1; then echo "y"; else echo "n"; fi;)
282−
283−# cc-option-align
284−# Prefix align with either -falign or -malign
285−cc-option-align = $(subst -functions=0,,\
286− $(call cc-option,-falign-functions=0,-malign-functions=0))
287−
288−# cc-version
289−# Usage gcc-ver := $(call cc-version $(CC))
290−cc-version = $(shell $(CONFIG_SHELL) $(srctree)/scripts/gcc-version.sh \
291− $(if $(1), $(1), $(CC)))
292−
293261
294262 # Look for make include files relative to root of kernel src
295263 MAKEFLAGS += --include-dir=$(srctree)
@@ -369,14 +337,14 @@ export RCS_TAR_IGNORE := --exclude SCCS --exclude BitKeeper --exclude .svn --exc · 73 unmodified lines
369337 # Rules shared between *config targets and build targets
370338
371339 # Basic helpers built in scripts/
372−.PHONY: scripts_basic
340+PHONY += scripts_basic
373341 scripts_basic:
374342 $(Q)$(MAKE) $(build)=scripts/basic
375343
376344 # To avoid any implicit rule to kick in, define an empty command.
377345 scripts/basic/%: scripts_basic ;
378346
379−.PHONY: outputmakefile
347+PHONY += outputmakefile
380348 # outputmakefile generate a Makefile to be placed in output directory, if
381349 # using a seperate output directory. This allows convinient use
382350 # of make in output directory
@@ -452,7 +420,7 @@ ifeq ($(KBUILD_EXTMOD),) · 69 unmodified lines
452420 # Additional helpers built in scripts/
453421 # Carefully list dependencies so we do not try to build scripts twice
454422 # in parrallel
455−.PHONY: scripts
423+PHONY += scripts
456424 scripts: scripts_basic include/config/MARKER
457425 $(Q)$(MAKE) $(build)=$(@)
458426
@@ -504,13 +472,6 @@ else · 45 unmodified lines
504472 CFLAGS += -O2
505473 endif
506474
507−#Add align options if CONFIG_CC_* is not equal to 0
508−add-align = $(if $(filter-out 0,$($(1))),$(cc-option-align)$(2)=$($(1)))
509−CFLAGS += $(call add-align,CONFIG_CC_ALIGN_FUNCTIONS,-functions)
510−CFLAGS += $(call add-align,CONFIG_CC_ALIGN_LABELS,-labels)
511−CFLAGS += $(call add-align,CONFIG_CC_ALIGN_LOOPS,-loops)
512−CFLAGS += $(call add-align,CONFIG_CC_ALIGN_JUMPS,-jumps)
513−
514475 ifdef CONFIG_FRAME_POINTER
515476 CFLAGS += -fno-omit-frame-pointer $(call cc-option,-fno-optimize-sibling-calls,)
516477 else
@@ -756,7 +717,7 @@ $(sort $(vmlinux-init) $(vmlinux-main)) $(vmlinux-lds): $(vmlinux-dirs) ; · 239 unmodified lines
756717 # make menuconfig etc.
757718 # Error messages still appears in the original language
758719
759−.PHONY: $(vmlinux-dirs)
720+PHONY += $(vmlinux-dirs)
760721 $(vmlinux-dirs): prepare scripts
761722 $(Q)$(MAKE) $(build)=$@
762723
@@ -809,10 +770,10 @@ kernelrelease = $(KERNELVERSION)$(localver-full) · 46 unmodified lines
809770 # version.h and scripts_basic is processed / created.
810771
811772 # Listed in dependency order
812−.PHONY: prepare archprepare prepare0 prepare1 prepare2 prepare3
773+PHONY += prepare archprepare prepare0 prepare1 prepare2 prepare3
813774
814775 # prepare-all is deprecated, use prepare as valid replacement
815−.PHONY: prepare-all
776+PHONY += prepare-all
816777
817778 # prepare3 is used to check if we are building in a separate output directory,
818779 # and if so do:
@@ -853,27 +814,6 @@ prepare prepare-all: prepare0 · 34 unmodified lines
853814
854815 export CPPFLAGS_vmlinux.lds += -P -C -U$(ARCH)
855816
856−# Single targets
857−# ---------------------------------------------------------------------------
858−
859−%.s: %.c scripts FORCE
860− $(Q)$(MAKE) $(build)=$(@D) $@
861−%.i: %.c scripts FORCE
862− $(Q)$(MAKE) $(build)=$(@D) $@
863−%.o: %.c scripts FORCE
864− $(Q)$(MAKE) $(build)=$(@D) $@
865−%.ko: scripts FORCE
866− $(Q)$(MAKE) KBUILD_MODULES=$(if $(CONFIG_MODULES),1) $(build)=$(@D) $(@:.ko=.o)
867− $(Q)$(MAKE) -rR -f $(srctree)/scripts/Makefile.modpost
868−%/: scripts prepare FORCE
869− $(Q)$(MAKE) KBUILD_MODULES=$(if $(CONFIG_MODULES),1) $(build)=$(@D)
870−%.lst: %.c scripts FORCE
871− $(Q)$(MAKE) $(build)=$(@D) $@
872−%.s: %.S scripts FORCE
873− $(Q)$(MAKE) $(build)=$(@D) $@
874−%.o: %.S scripts FORCE
875− $(Q)$(MAKE) $(build)=$(@D) $@
876−
877817 # FIXME: The asm symlink changes when $(ARCH) changes. That's
878818 # hard to detect, but I suppose "make mrproper" is a good idea
879819 # before switching between archs anyway.
@@ -914,7 +854,7 @@ include/linux/version.h: $(srctree)/Makefile .config .kernelrelease FORCE · 34 unmodified lines
914854
915855 # ---------------------------------------------------------------------------
916856
917−.PHONY: depend dep
857+PHONY += depend dep
918858 depend dep:
919859 @echo '*** Warning: make $@ is unnecessary now.'
920860
@@ -929,21 +869,21 @@ all: modules · 8 unmodified lines
929869
930870 # Build modules
931871
932−.PHONY: modules
872+PHONY += modules
933873 modules: $(vmlinux-dirs) $(if $(KBUILD_BUILTIN),vmlinux)
934874 @echo ' Building modules, stage 2.';
935875 $(Q)$(MAKE) -rR -f $(srctree)/scripts/Makefile.modpost
936876
937877
938878 # Target to prepare building external modules
939−.PHONY: modules_prepare
879+PHONY += modules_prepare
940880 modules_prepare: prepare scripts
941881
942882 # Target to install modules
943−.PHONY: modules_install
883+PHONY += modules_install
944884 modules_install: _modinst_ _modinst_post
945885
946−.PHONY: _modinst_
886+PHONY += _modinst_
947887 _modinst_:
948888 @if [ -z "`$(DEPMOD) -V 2>/dev/null | grep module-init-tools`" ]; then \
949889 echo "Warning: you may need to install module-init-tools"; \
@@ -970,7 +910,7 @@ depmod_opts := · 20 unmodified lines
970910 else
971911 depmod_opts := -b $(INSTALL_MOD_PATH) -r
972912 endif
973−.PHONY: _modinst_post
913+PHONY += _modinst_post
974914 _modinst_post: _modinst_
975915 if [ -r System.map -a -x $(DEPMOD) ]; then $(DEPMOD) -ae -F System.map $(depmod_opts) $(KERNELRELEASE); fi
976916
@@ -1013,7 +953,7 @@ clean: rm-dirs := $(CLEAN_DIRS) · 36 unmodified lines
1013953 clean: rm-files := $(CLEAN_FILES)
1014954 clean-dirs := $(addprefix _clean_,$(srctree) $(vmlinux-alldirs))
1015955
1016−.PHONY: $(clean-dirs) clean archclean
956+PHONY += $(clean-dirs) clean archclean
1017957 $(clean-dirs):
1018958 $(Q)$(MAKE) $(clean)=$(patsubst _clean_%,%,$@)
1019959
@@ -1031,7 +971,7 @@ mrproper: rm-dirs := $(wildcard $(MRPROPER_DIRS)) · 11 unmodified lines
1031971 mrproper: rm-files := $(wildcard $(MRPROPER_FILES))
1032972 mrproper-dirs := $(addprefix _mrproper_,Documentation/DocBook scripts)
1033973
1034−.PHONY: $(mrproper-dirs) mrproper archmrproper
974+PHONY += $(mrproper-dirs) mrproper archmrproper
1035975 $(mrproper-dirs):
1036976 $(Q)$(MAKE) $(clean)=$(patsubst _mrproper_%,%,$@)
1037977
@@ -1041,7 +981,7 @@ mrproper: clean archmrproper $(mrproper-dirs) · 3 unmodified lines
1041981
1042982 # distclean
1043983 #
1044−.PHONY: distclean
984+PHONY += distclean
1045985
1046986 distclean: mrproper
1047987 @find $(srctree) $(RCS_FIND_IGNORE) \
@@ -1057,12 +997,10 @@ distclean: mrproper · 9 unmodified lines
1057997 # rpm target kept for backward compatibility
1058998 package-dir := $(srctree)/scripts/package
1059999
1060−.PHONY: %-pkg rpm
1061−
10621000 %pkg: FORCE
1063− $(Q)$(MAKE) -f $(package-dir)/Makefile $@
1001+ $(Q)$(MAKE) $(build)=$(package-dir) $@
10641002 rpm: FORCE
1065− $(Q)$(MAKE) -f $(package-dir)/Makefile $@
1003+ $(Q)$(MAKE) $(build)=$(package-dir) $@
10661004
10671005
10681006 # Brief documentation of the typical targets used
@@ -1094,13 +1032,11 @@ help: · 25 unmodified lines
10941032 @echo ' kernelversion - Output the version stored in Makefile'
10951033 @echo ''
10961034 @echo 'Static analysers'
1097− @echo ' buildcheck - List dangling references to vmlinux discarded sections'
1098− @echo ' and init sections from non-init sections'
10991035 @echo ' checkstack - Generate a list of stack hogs'
11001036 @echo ' namespacecheck - Name space analysis on compiled kernel'
11011037 @echo ''
11021038 @echo 'Kernel packaging:'
1103− @$(MAKE) -f $(package-dir)/Makefile help
1039+ @$(MAKE) $(build)=$(package-dir) help
11041040 @echo ''
11051041 @echo 'Documentation targets:'
11061042 @$(MAKE) -f $(srctree)/Documentation/DocBook/Makefile dochelp
@@ -1149,11 +1085,12 @@ else # KBUILD_EXTMOD · 42 unmodified lines
11491085
11501086 # We are always building modules
11511087 KBUILD_MODULES := 1
1152−.PHONY: crmodverdir
1088+PHONY += crmodverdir
11531089 crmodverdir:
1090+ $(Q)rm -rf $(MODVERDIR)
11541091 $(Q)mkdir -p $(MODVERDIR)
11551092
1156−.PHONY: $(objtree)/Module.symvers
1093+PHONY += $(objtree)/Module.symvers
11571094 $(objtree)/Module.symvers:
11581095 @test -e $(objtree)/Module.symvers || ( \
11591096 echo; \
@@ -1162,7 +1099,7 @@ $(objtree)/Module.symvers: · 2 unmodified lines
11621099 echo )
11631100
11641101 module-dirs := $(addprefix _module_,$(KBUILD_EXTMOD))
1165−.PHONY: $(module-dirs) modules
1102+PHONY += $(module-dirs) modules
11661103 $(module-dirs): crmodverdir $(objtree)/Module.symvers
11671104 $(Q)$(MAKE) $(build)=$(patsubst _module_%,%,$@)
11681105
@@ -1170,13 +1107,32 @@ modules: $(module-dirs) · 1 unmodified line
11701107 @echo ' Building modules, stage 2.';
11711108 $(Q)$(MAKE) -rR -f $(srctree)/scripts/Makefile.modpost
11721109
1173−.PHONY: modules_install
1174−modules_install:
1110+PHONY += modules_install
1111+modules_install: _emodinst_ _emodinst_post
1112+
1113+install-dir := $(if $(INSTALL_MOD_DIR),$(INSTALL_MOD_DIR),extra)
1114+PHONY += _emodinst_
1115+_emodinst_:
1116+ $(Q)rm -rf $(MODLIB)/$(install-dir)
1117+ $(Q)mkdir -p $(MODLIB)/$(install-dir)
11751118 $(Q)$(MAKE) -rR -f $(srctree)/scripts/Makefile.modinst
11761119
1120+# Run depmod only is we have System.map and depmod is executable
1121+quiet_cmd_depmod = DEPMOD $(KERNELRELEASE)
1122+ cmd_depmod = if [ -r System.map -a -x $(DEPMOD) ]; then \
1123+ $(DEPMOD) -ae -F System.map \
1124+ $(if $(strip $(INSTALL_MOD_PATH)), \
1125+ -b $(INSTALL_MOD_PATH) -r) \
1126+ $(KERNELRELEASE); \
1127+ fi
1128+
1129+PHONY += _emodinst_post
1130+_emodinst_post: _emodinst_
1131+ $(call cmd,depmod)
1132+
11771133 clean-dirs := $(addprefix _clean_,$(KBUILD_EXTMOD))
11781134
1179−.PHONY: $(clean-dirs) clean
1135+PHONY += $(clean-dirs) clean
11801136 $(clean-dirs):
11811137 $(Q)$(MAKE) $(clean)=$(patsubst _clean_%,%,$@)
11821138
@@ -1196,6 +1152,11 @@ help: · 13 unmodified lines
11961152 @echo ' modules_install - install the module'
11971153 @echo ' clean - remove generated files in module directory only'
11981154 @echo ''
1155+
1156+# Dummies...
1157+PHONY += prepare scripts
1158+prepare: ;
1159+scripts: ;
11991160 endif # KBUILD_EXTMOD
12001161
12011162 # Generate tags for editors
@@ -1296,17 +1257,13 @@ versioncheck: · 94 unmodified lines
12961257 -name '*.[hcS]' -type f -print | sort \
12971258 | xargs $(PERL) -w scripts/checkversion.pl
12981259
1299−buildcheck:
1300− $(PERL) $(srctree)/scripts/reference_discarded.pl
1301− $(PERL) $(srctree)/scripts/reference_init.pl
1302−
13031260 namespacecheck:
13041261 $(PERL) $(srctree)/scripts/namespace.pl
13051262
13061263 endif #ifeq ($(config-targets),1)
13071264 endif #ifeq ($(mixed-targets),1)
13081265
1309−.PHONY: checkstack
1266+PHONY += checkstack
13101267 checkstack:
13111268 $(OBJDUMP) -d vmlinux $$(find . -name '*.ko') | \
13121269 $(PERL) $(src)/scripts/checkstack.pl $(ARCH)
@@ -1317,6 +1274,44 @@ kernelrelease: · 4 unmodified lines
13171274 kernelversion:
13181275 @echo $(KERNELVERSION)
13191276
1277+# Single targets
1278+# ---------------------------------------------------------------------------
1279+# The directory part is taken from first prerequisite, so this
1280+# works even with external modules
1281+%.s: %.c prepare scripts FORCE
1282+ $(Q)$(MAKE) $(build)=$(dir $<) $(dir $<)$(notdir $@)
1283+%.i: %.c prepare scripts FORCE
1284+ $(Q)$(MAKE) $(build)=$(dir $<) $(dir $<)$(notdir $@)
1285+%.o: %.c prepare scripts FORCE
1286+ $(Q)$(MAKE) $(build)=$(dir $<) $(dir $<)$(notdir $@)
1287+%.lst: %.c prepare scripts FORCE
1288+ $(Q)$(MAKE) $(build)=$(dir $<) $(dir $<)$(notdir $@)
1289+%.s: %.S prepare scripts FORCE
1290+ $(Q)$(MAKE) $(build)=$(dir $<) $(dir $<)$(notdir $@)
1291+%.o: %.S prepare scripts FORCE
1292+ $(Q)$(MAKE) $(build)=$(dir $<) $(dir $<)$(notdir $@)
1293+
1294+# For external modules we shall include any directory of the target,
1295+# but usual case there is no directory part.
1296+# make M=`pwd` module.o => $(dir $@)=./
1297+# make M=`pwd` foo/module.o => $(dir $@)=foo/
1298+# make M=`pwd` / => $(dir $@)=/
1299+
1300+ifeq ($(KBUILD_EXTMOD),)
1301+ target-dir = $(@D)
1302+else
1303+ zap-slash=$(filter-out .,$(patsubst %/,%,$(dir $@)))
1304+ target-dir = $(KBUILD_EXTMOD)$(if $(zap-slash),/$(zap-slash))
1305+endif
1306+
1307+/ %/: scripts prepare FORCE
1308+ $(Q)$(MAKE) KBUILD_MODULES=$(if $(CONFIG_MODULES),1) \
1309+ $(build)=$(target-dir)
1310+%.ko: scripts FORCE
1311+ $(Q)$(MAKE) KBUILD_MODULES=$(if $(CONFIG_MODULES),1) \
1312+ $(build)=$(target-dir) $(@:.ko=.o)
1313+ $(Q)$(MAKE) -rR -f $(srctree)/scripts/Makefile.modpost
1314+
13201315 # FIXME Should go into a make.lib or something
13211316 # ===========================================================================
13221317
@@ -1351,4 +1346,10 @@ clean := -f $(if $(KBUILD_SRC),$(srctree)/)scripts/Makefile.clean obj · 28 unmodified lines
13511346
13521347 endif # skip-makefile
13531348
1349+PHONY += FORCE
13541350 FORCE:
1351+
1352+
1353+# Declare the contents of the .PHONY variable as phony. We keep that
1354+# information in a variable se we can use it in if_changed and friends.
1355+.PHONY: $(PHONY)
arch/arm/Makefile+4−1
@@ -1,6 +1,9 @@
11 #
22 # arch/arm/Makefile
33 #
4+# This file is included by the global makefile so that you can add your own
5+# architecture-specific flags and dependencies.
6+#
47 # This file is subject to the terms and conditions of the GNU General Public
58 # License. See the file "COPYING" in the main directory of this archive
69 # for more details.
@@ -177,7 +180,7 @@ endif · 170 unmodified lines
177180
178181 archprepare: maketools
179182
180−.PHONY: maketools FORCE
183+PHONY += maketools FORCE
181184 maketools: include/linux/version.h include/asm-arm/.arch FORCE
182185 $(Q)$(MAKE) $(build)=arch/arm/tools include/asm-arm/mach-types.h
183186
arch/arm/boot/Makefile+4−1
@@ -1,6 +1,9 @@
11 #
22 # arch/arm/boot/Makefile
33 #
4+# This file is included by the global makefile so that you can add your own
5+# architecture-specific flags and dependencies.
6+#
47 # This file is subject to the terms and conditions of the GNU General Public
58 # License. See the file "COPYING" in the main directory of this archive
69 # for more details.
@@ -73,7 +76,7 @@ $(obj)/bootpImage: $(obj)/bootp/bootp FORCE · 66 unmodified lines
7376 $(call if_changed,objcopy)
7477 @echo ' Kernel: $@ is ready'
7578
76−.PHONY: initrd FORCE
79+PHONY += initrd FORCE
7780 initrd:
7881 @test "$(INITRD_PHYS)" != "" || \
7982 (echo This machine does not support INITRD; exit -1)
arch/arm/boot/bootp/Makefile+4−1
@@ -1,6 +1,9 @@
11 #
22 # linux/arch/arm/boot/bootp/Makefile
33 #
4+# This file is included by the global makefile so that you can add your own
5+# architecture-specific flags and dependencies.
6+#
47
58 LDFLAGS_bootp :=-p --no-undefined -X \
69 --defsym initrd_phys=$(INITRD_PHYS) \
@@ -21,4 +24,4 @@ $(obj)/kernel.o: arch/arm/boot/zImage FORCE · 14 unmodified lines
2124
2225 $(obj)/initrd.o: $(INITRD) FORCE
2326
24−.PHONY: $(INITRD) FORCE
27+PHONY += $(INITRD) FORCE
arch/arm26/Makefile+5−2
@@ -1,6 +1,9 @@
11 #
22 # arch/arm26/Makefile
33 #
4+# This file is included by the global makefile so that you can add your own
5+# architecture-specific flags and dependencies.
6+#
47 # This file is subject to the terms and conditions of the GNU General Public
58 # License. See the file "COPYING" in the main directory of this archive
69 # for more details.
@@ -49,9 +52,9 @@ all: zImage · 42 unmodified lines
4952
5053 boot := arch/arm26/boot
5154
52−.PHONY: maketools FORCE
55+PHONY += maketools FORCE
5356 maketools: FORCE
54−
57+
5558
5659 # Convert bzImage to zImage
5760 bzImage: vmlinux
arch/arm26/boot/Makefile+4−1
@@ -1,6 +1,9 @@
11 #
22 # arch/arm26/boot/Makefile
33 #
4+# This file is included by the global makefile so that you can add your own
5+# architecture-specific flags and dependencies.
6+#
47 # This file is subject to the terms and conditions of the GNU General Public
58 # License. See the file "COPYING" in the main directory of this archive
69 # for more details.
@@ -60,7 +63,7 @@ $(obj)/xipImage: vmlinux FORCE · 53 unmodified lines
6063 @echo ' Kernel: $@ is ready'
6164 endif
6265
63−.PHONY: initrd
66+PHONY += initrd
6467 initrd:
6568 @test "$(INITRD_PHYS)" != "" || \
6669 (echo This machine does not support INITRD; exit -1)
arch/i386/Makefile+2−2
@@ -99,8 +99,8 @@ AFLAGS += $(mflags-y) · 98 unmodified lines
9999
100100 boot := arch/i386/boot
101101
102−.PHONY: zImage bzImage compressed zlilo bzlilo \
103− zdisk bzdisk fdimage fdimage144 fdimage288 install
102+PHONY += zImage bzImage compressed zlilo bzlilo \
103+ zdisk bzdisk fdimage fdimage144 fdimage288 install
104104
105105 all: bzImage
106106
arch/i386/kernel/vmlinux.lds.S+2−1
@@ -7,6 +7,7 @@ · 6 unmodified lines
77 #include <asm-generic/vmlinux.lds.h>
88 #include <asm/thread_info.h>
99 #include <asm/page.h>
10+#include <asm/cache.h>
1011
1112 OUTPUT_FORMAT("elf32-i386", "elf32-i386", "elf32-i386")
1213 OUTPUT_ARCH(i386)
@@ -135,7 +136,7 @@ SECTIONS · 122 unmodified lines
135136 __initramfs_start = .;
136137 .init.ramfs : AT(ADDR(.init.ramfs) - LOAD_OFFSET) { *(.init.ramfs) }
137138 __initramfs_end = .;
138− . = ALIGN(32);
139+ . = ALIGN(L1_CACHE_BYTES);
139140 __per_cpu_start = .;
140141 .data.percpu : AT(ADDR(.data.percpu) - LOAD_OFFSET) { *(.data.percpu) }
141142 __per_cpu_end = .;
arch/ia64/Makefile+4−1
@@ -1,6 +1,9 @@
11 #
22 # ia64/Makefile
33 #
4+# This file is included by the global makefile so that you can add your own
5+# architecture-specific flags and dependencies.
6+#
47 # This file is subject to the terms and conditions of the GNU General Public
58 # License. See the file "COPYING" in the main directory of this archive
69 # for more details.
@@ -62,7 +65,7 @@ drivers-$(CONFIG_OPROFILE) += arch/ia64/oprofile/ · 55 unmodified lines
6265
6366 boot := arch/ia64/hp/sim/boot
6467
65−.PHONY: boot compressed check
68+PHONY += boot compressed check
6669
6770 all: compressed unwcheck
6871
arch/m32r/Makefile+4−1
@@ -1,6 +1,9 @@
11 #
22 # m32r/Makefile
33 #
4+# This file is included by the global makefile so that you can add your own
5+# architecture-specific flags and dependencies.
6+#
47
58 LDFLAGS :=
69 OBJCOPYFLAGS := -O binary -R .note -R .comment -S
@@ -39,7 +42,7 @@ drivers-$(CONFIG_OPROFILE) += arch/m32r/oprofile/ · 32 unmodified lines
3942
4043 boot := arch/m32r/boot
4144
42−.PHONY: zImage
45+PHONY += zImage
4346
4447 all: zImage
4548
arch/powerpc/Makefile+1−1
@@ -150,7 +150,7 @@ CPPFLAGS_vmlinux.lds := -Upowerpc · 149 unmodified lines
150150
151151 BOOT_TARGETS = zImage zImage.initrd znetboot znetboot.initrd vmlinux.sm uImage vmlinux.bin
152152
153−.PHONY: $(BOOT_TARGETS)
153+PHONY += $(BOOT_TARGETS)
154154
155155 boot := arch/$(ARCH)/boot
156156
arch/ppc/Makefile+1−1
@@ -82,7 +82,7 @@ drivers-$(CONFIG_OPROFILE) += arch/powerpc/oprofile/ · 81 unmodified lines
8282
8383 BOOT_TARGETS = zImage zImage.initrd znetboot znetboot.initrd vmlinux.sm
8484
85−.PHONY: $(BOOT_TARGETS)
85+PHONY += $(BOOT_TARGETS)
8686
8787 all: uImage zImage
8888
arch/ppc/boot/Makefile+7−1
@@ -1,3 +1,9 @@
1+#
2+# arch/ppc/boot/Makefile
3+#
4+# This file is included by the global makefile so that you can add your own
5+# architecture-specific flags and dependencies.
6+#
17 # This file is subject to the terms and conditions of the GNU General Public
28 # License. See the file "COPYING" in the main directory of this archive
39 # for more details.
@@ -22,7 +28,7 @@ subdir- += simple openfirmware · 18 unmodified lines
2228
2329 hostprogs-y := $(addprefix utils/, addnote mknote hack-coff mkprep mkbugboot mktree)
2430
25−.PHONY: $(BOOT_TARGETS) $(bootdir-y)
31+PHONY += $(BOOT_TARGETS) $(bootdir-y)
2632
2733 $(BOOT_TARGETS): $(bootdir-y)
2834
arch/ppc/boot/openfirmware/Makefile+5−2
@@ -1,5 +1,8 @@
11 # Makefile for making bootable images on various OpenFirmware machines.
22 #
3+# This file is included by the global makefile so that you can add your own
4+# architecture-specific flags and dependencies.
5+#
36 # Paul Mackerras January 1997
47 # XCOFF bootable images for PowerMacs
58 # Geert Uytterhoeven September 1997
@@ -86,7 +89,7 @@ $(images)/zImage.chrp-rs6k $(images)/zImage.initrd.chrp-rs6k: \ · 80 unmodified lines
8689
8790 # The targets used on the make command-line
8891
89−.PHONY: zImage zImage.initrd
92+PHONY += zImage zImage.initrd
9093 zImage: $(images)/zImage.chrp \
9194 $(images)/zImage.chrp-rs6k
9295 @echo ' kernel: $@ is ready ($<)'
@@ -96,7 +99,7 @@ zImage.initrd: $(images)/zImage.initrd.chrp \ · 3 unmodified lines
9699
97100 TFTPIMAGE := /tftpboot/zImage
98101
99−.PHONY: znetboot znetboot.initrd
102+PHONY += znetboot znetboot.initrd
100103 znetboot: $(images)/zImage.chrp
101104 cp $(images)/zImage.chrp $(TFTPIMAGE).chrp$(END)
102105 @echo ' kernel: $@ is ready ($<)'
arch/sh/Makefile+1−1
@@ -172,7 +172,7 @@ include/asm-sh/.mach: $(wildcard include/config/sh/*.h) include/config/MARKER · 171 unmodified lines
172172
173173 archprepare: maketools include/asm-sh/.cpu include/asm-sh/.mach
174174
175−.PHONY: maketools FORCE
175+PHONY += maketools FORCE
176176 maketools: include/linux/version.h FORCE
177177 $(Q)$(MAKE) $(build)=arch/sh/tools include/asm-sh/machtypes.h
178178
arch/um/Makefile+5−2
@@ -1,4 +1,7 @@
1−#
1+#
2+# This file is included by the global makefile so that you can add your own
3+# architecture-specific flags and dependencies.
4+#
25 # Copyright (C) 2002 Jeff Dike (jdike@karaya.com)
36 # Licensed under the GPL
47 #
@@ -88,7 +91,7 @@ CONFIG_KERNEL_HALF_GIGS ?= 0 · 83 unmodified lines
8891
8992 SIZE = (($(CONFIG_NEST_LEVEL) + $(CONFIG_KERNEL_HALF_GIGS)) * 0x20000000)
9093
91−.PHONY: linux
94+PHONY += linux
9295
9396 all: linux
9497
arch/x86_64/Makefile+2−2
@@ -67,8 +67,8 @@ drivers-$(CONFIG_OPROFILE) += arch/x86_64/oprofile/ · 66 unmodified lines
6767
6868 boot := arch/x86_64/boot
6969
70−.PHONY: bzImage bzlilo install archmrproper \
71− fdimage fdimage144 fdimage288 archclean
70+PHONY += bzImage bzlilo install archmrproper \
71+ fdimage fdimage144 fdimage288 archclean
7272
7373 #Default target when executing "make"
7474 all: bzImage
drivers/atm/.gitignore+5−0
@@ -0,0 +1,5 @@
1+# Ignore generated files
2+fore200e_mkfirm
3+fore200e_pca_fw.c
4+pca200e.bin
5+
drivers/video/matrox/matroxfb_DAC1064.c+0−1
@@ -12,7 +12,6 @@ · 11 unmodified lines
1212 *
1313 */
1414
15−/* make checkconfig does not walk through include tree :-( */
1615 #include <linux/config.h>
1716
1817 #include "matroxfb_DAC1064.h"
drivers/video/matrox/matroxfb_DAC1064.h+0−1
@@ -1,7 +1,6 @@
11 #ifndef __MATROXFB_DAC1064_H__
22 #define __MATROXFB_DAC1064_H__
33
4−/* make checkconfig does not walk through include tree */
54 #include <linux/config.h>
65
76 #include "matroxfb_base.h"
drivers/video/matrox/matroxfb_Ti3026.c+0−1
@@ -78,7 +78,6 @@ · 77 unmodified lines
7878 *
7979 */
8080
81−/* make checkconfig does not verify included files... */
8281 #include <linux/config.h>
8382
8483 #include "matroxfb_Ti3026.h"
drivers/video/matrox/matroxfb_Ti3026.h+0−1
@@ -1,7 +1,6 @@
11 #ifndef __MATROXFB_TI3026_H__
22 #define __MATROXFB_TI3026_H__
33
4−/* make checkconfig does not walk through whole include tree */
54 #include <linux/config.h>
65
76 #include "matroxfb_base.h"
drivers/video/matrox/matroxfb_base.c+0−1
@@ -99,7 +99,6 @@ · 98 unmodified lines
9999 *
100100 */
101101
102−/* make checkconfig does not check included files... */
103102 #include <linux/config.h>
104103 #include <linux/version.h>
105104
drivers/video/matrox/matroxfb_misc.c+0−1
@@ -84,7 +84,6 @@ · 83 unmodified lines
8484 *
8585 */
8686
87−/* make checkconfig does not check includes for this... */
8887 #include <linux/config.h>
8988
9089 #include "matroxfb_misc.h"
init/Kconfig+0−37
@@ -365,43 +365,6 @@ config SHMEM · 364 unmodified lines
365365 option replaces shmem and tmpfs with the much simpler ramfs code,
366366 which may be appropriate on small systems without swap.
367367
368−config CC_ALIGN_FUNCTIONS
369− int "Function alignment" if EMBEDDED
370− default 0
371− help
372− Align the start of functions to the next power-of-two greater than n,
373− skipping up to n bytes. For instance, 32 aligns functions
374− to the next 32-byte boundary, but 24 would align to the next
375− 32-byte boundary only if this can be done by skipping 23 bytes or less.
376− Zero means use compiler's default.
377−
378−config CC_ALIGN_LABELS
379− int "Label alignment" if EMBEDDED
380− default 0
381− help
382− Align all branch targets to a power-of-two boundary, skipping
383− up to n bytes like ALIGN_FUNCTIONS. This option can easily
384− make code slower, because it must insert dummy operations for
385− when the branch target is reached in the usual flow of the code.
386− Zero means use compiler's default.
387−
388−config CC_ALIGN_LOOPS
389− int "Loop alignment" if EMBEDDED
390− default 0
391− help
392− Align loops to a power-of-two boundary, skipping up to n bytes.
393− Zero means use compiler's default.
394−
395−config CC_ALIGN_JUMPS
396− int "Jump alignment" if EMBEDDED
397− default 0
398− help
399− Align branch targets to a power-of-two boundary, for branch
400− targets where the targets can only be reached by jumping,
401− skipping up to n bytes like ALIGN_FUNCTIONS. In this case,
402− no dummy operations need be executed.
403− Zero means use compiler's default.
404−
405368 config SLAB
406369 default y
407370 bool "Use full SLAB allocator" if EMBEDDED
scripts/Kbuild.include+52−13
@@ -44,6 +44,43 @@ define filechk · 43 unmodified lines
4444 fi
4545 endef
4646
47+######
48+# gcc support functions
49+# See documentation in Documentation/kbuild/makefiles.txt
50+
51+# as-option
52+# Usage: cflags-y += $(call as-option, -Wa$(comma)-isa=foo,)
53+
54+as-option = $(shell if $(CC) $(CFLAGS) $(1) -Wa,-Z -c -o /dev/null \
55+ -xassembler /dev/null > /dev/null 2>&1; then echo "$(1)"; \
56+ else echo "$(2)"; fi ;)
57+
58+# cc-option
59+# Usage: cflags-y += $(call cc-option, -march=winchip-c6, -march=i586)
60+
61+cc-option = $(shell if $(CC) $(CFLAGS) $(1) -S -o /dev/null -xc /dev/null \
62+ > /dev/null 2>&1; then echo "$(1)"; else echo "$(2)"; fi ;)
63+
64+# cc-option-yn
65+# Usage: flag := $(call cc-option-yn, -march=winchip-c6)
66+cc-option-yn = $(shell if $(CC) $(CFLAGS) $(1) -S -o /dev/null -xc /dev/null \
67+ > /dev/null 2>&1; then echo "y"; else echo "n"; fi;)
68+
69+# cc-option-align
70+# Prefix align with either -falign or -malign
71+cc-option-align = $(subst -functions=0,,\
72+ $(call cc-option,-falign-functions=0,-malign-functions=0))
73+
74+# cc-version
75+# Usage gcc-ver := $(call cc-version, $(CC))
76+cc-version = $(shell $(CONFIG_SHELL) $(srctree)/scripts/gcc-version.sh \
77+ $(if $(1), $(1), $(CC)))
78+
79+# cc-ifversion
80+# Usage: EXTRA_CFLAGS += $(call cc-ifversion, -lt, 0402, -O1)
81+cc-ifversion = $(shell if [ $(call cc-version, $(CC)) $(1) $(2) ]; then \
82+ echo $(3); fi;)
83+
4784 ###
4885 # Shorthand for $(Q)$(MAKE) -f scripts/Makefile.build obj=
4986 # Usage:
@@ -51,8 +88,7 @@ endef · 1 unmodified line
5188 build := -f $(if $(KBUILD_SRC),$(srctree)/)scripts/Makefile.build obj
5289
5390 # If quiet is set, only print short version of command
54−cmd = @$(if $($(quiet)cmd_$(1)),\
55− echo ' $(call escsq,$($(quiet)cmd_$(1)))' &&) $(cmd_$(1))
91+cmd = @$(echo-cmd) $(cmd_$(1))
5692
5793 # Add $(obj)/ for paths that is not absolute
5894 objectify = $(foreach o,$(1),$(if $(filter /%,$(o)),$(o),$(obj)/$(o)))
@@ -75,30 +111,33 @@ endif · 16 unmodified lines
75111 echo-cmd = $(if $($(quiet)cmd_$(1)), \
76112 echo ' $(call escsq,$($(quiet)cmd_$(1)))';)
77113
114+make-cmd = $(subst \#,\\\#,$(subst $$,$$$$,$(call escsq,$(cmd_$(1)))))
115+
78116 # function to only execute the passed command if necessary
79117 # >'< substitution is for echo to work, >$< substitution to preserve $ when reloading .cmd file
80118 # note: when using inline perl scripts [perl -e '...$$t=1;...'] in $(cmd_xxx) double $$ your perl vars
81−#
82−if_changed = $(if $(strip $? $(call arg-check, $(cmd_$(1)), $(cmd_$@)) ), \
119+#
120+if_changed = $(if $(strip $(filter-out $(PHONY),$?) \
121+ $(call arg-check, $(cmd_$(1)), $(cmd_$@)) ), \
83122 @set -e; \
84− $(echo-cmd) \
85− $(cmd_$(1)); \
86− echo 'cmd_$@ := $(subst $$,$$$$,$(call escsq,$(cmd_$(1))))' > $(@D)/.$(@F).cmd)
123+ $(echo-cmd) $(cmd_$(1)); \
124+ echo 'cmd_$@ := $(make-cmd)' > $(@D)/.$(@F).cmd)
87125
88126 # execute the command and also postprocess generated .d dependencies
89127 # file
90−if_changed_dep = $(if $(strip $? $(filter-out FORCE $(wildcard $^),$^)\
91− $(call arg-check, $(cmd_$(1)), $(cmd_$@)) ), \
128+if_changed_dep = $(if $(strip $(filter-out $(PHONY),$?) \
129+ $(filter-out FORCE $(wildcard $^),$^) \
130+ $(call arg-check, $(cmd_$(1)), $(cmd_$@)) ), \
92131 @set -e; \
93− $(echo-cmd) \
94− $(cmd_$(1)); \
95− scripts/basic/fixdep $(depfile) $@ '$(subst $$,$$$$,$(call escsq,$(cmd_$(1))))' > $(@D)/.$(@F).tmp; \
132+ $(echo-cmd) $(cmd_$(1)); \
133+ scripts/basic/fixdep $(depfile) $@ '$(make-cmd)' > $(@D)/.$(@F).tmp; \
96134 rm -f $(depfile); \
97135 mv -f $(@D)/.$(@F).tmp $(@D)/.$(@F).cmd)
98136
99137 # Usage: $(call if_changed_rule,foo)
100138 # will check if $(cmd_foo) changed, or any of the prequisites changed,
101139 # and if so will execute $(rule_foo)
102−if_changed_rule = $(if $(strip $? $(call arg-check, $(cmd_$(1)), $(cmd_$@)) ),\
140+if_changed_rule = $(if $(strip $(filter-out $(PHONY),$?) \
141+ $(call arg-check, $(cmd_$(1)), $(cmd_$@)) ),\
103142 @set -e; \
104143 $(rule_$(1)))
scripts/Makefile.build+16−11
@@ -4,17 +4,18 @@ · 3 unmodified lines
44
55 src := $(obj)
66
7−.PHONY: __build
7+PHONY := __build
88 __build:
99
1010 # Read .config if it exist, otherwise ignore
1111 -include .config
1212
13+include scripts/Kbuild.include
14+
1315 # The filename Kbuild has precedence over Makefile
1416 kbuild-dir := $(if $(filter /%,$(src)),$(src),$(srctree)/$(src))
1517 include $(if $(wildcard $(kbuild-dir)/Kbuild), $(kbuild-dir)/Kbuild, $(kbuild-dir)/Makefile)
1618
17−include scripts/Kbuild.include
1819 include scripts/Makefile.lib
1920
2021 ifdef host-progs
@@ -128,7 +129,7 @@ $(multi-objs-y:.o=.s) : modname = $(modname-multi) · 107 unmodified lines
128129 $(multi-objs-y:.o=.lst) : modname = $(modname-multi)
129130
130131 quiet_cmd_cc_s_c = CC $(quiet_modtag) $@
131−cmd_cc_s_c = $(CC) $(c_flags) -S -o $@ $<
132+cmd_cc_s_c = $(CC) $(c_flags) -fverbose-asm -S -o $@ $<
132133
133134 %.s: %.c FORCE
134135 $(call if_changed_dep,cc_s_c)
@@ -165,7 +166,7 @@ cmd_cc_o_c = $(CC) $(c_flags) -c -o $(@D)/.tmp_$(@F) $< · 30 unmodified lines
165166 cmd_modversions = \
166167 if $(OBJDUMP) -h $(@D)/.tmp_$(@F) | grep -q __ksymtab; then \
167168 $(CPP) -D__GENKSYMS__ $(c_flags) $< \
168− | $(GENKSYMS) \
169+ | $(GENKSYMS) -a $(ARCH) \
169170 > $(@D)/.tmp_$(@F:.o=.ver); \
170171 \
171172 $(LD) $(LDFLAGS) -r -o $@ $(@D)/.tmp_$(@F) \
@@ -177,12 +178,10 @@ cmd_modversions = \ · 5 unmodified lines
177178 endif
178179
179180 define rule_cc_o_c
180− $(if $($(quiet)cmd_checksrc),echo ' $($(quiet)cmd_checksrc)';) \
181− $(cmd_checksrc) \
182− $(if $($(quiet)cmd_cc_o_c),echo ' $(call escsq,$($(quiet)cmd_cc_o_c))';) \
183− $(cmd_cc_o_c); \
181+ $(call echo-cmd,checksrc) $(cmd_checksrc) \
182+ $(call echo-cmd,cc_o_c) $(cmd_cc_o_c); \
184183 $(cmd_modversions) \
185− scripts/basic/fixdep $(depfile) $@ '$(call escsq,$(cmd_cc_o_c))' > $(@D)/.$(@F).tmp; \
184+ scripts/basic/fixdep $(depfile) $@ '$(call make-cmd,cc_o_c)' > $(@D)/.$(@F).tmp; \
186185 rm -f $(depfile); \
187186 mv -f $(@D)/.$(@F).tmp $(@D)/.$(@F).cmd
188187 endef
@@ -309,14 +308,14 @@ targets += $(multi-used-y) $(multi-used-m) · 120 unmodified lines
309308 # Descending
310309 # ---------------------------------------------------------------------------
311310
312−.PHONY: $(subdir-ym)
311+PHONY += $(subdir-ym)
313312 $(subdir-ym):
314313 $(Q)$(MAKE) $(build)=$@
315314
316315 # Add FORCE to the prequisites of a target to force it to be always rebuilt.
317316 # ---------------------------------------------------------------------------
318317
319−.PHONY: FORCE
318+PHONY += FORCE
320319
321320 FORCE:
322321
@@ -331,3 +330,9 @@ cmd_files := $(wildcard $(foreach f,$(targets),$(dir $(f)).$(notdir $(f)).cmd)) · 8 unmodified lines
331330 ifneq ($(cmd_files),)
332331 include $(cmd_files)
333332 endif
333+
334+
335+# Declare the contents of the .PHONY variable as phony. We keep that
336+# information in a variable se we can use it in if_changed and friends.
337+
338+.PHONY: $(PHONY)
scripts/Makefile.clean+8−2
@@ -4,7 +4,7 @@ · 3 unmodified lines
44
55 src := $(obj)
66
7−.PHONY: __clean
7+PHONY := __clean
88 __clean:
99
1010 # Shorthand for $(Q)$(MAKE) scripts/Makefile.clean obj=dir
@@ -87,10 +87,16 @@ endif · 76 unmodified lines
8787 # Descending
8888 # ---------------------------------------------------------------------------
8989
90−.PHONY: $(subdir-ymn)
90+PHONY += $(subdir-ymn)
9191 $(subdir-ymn):
9292 $(Q)$(MAKE) $(clean)=$@
9393
9494 # If quiet is set, only print short version of command
9595
9696 cmd = @$(if $($(quiet)cmd_$(1)),echo ' $($(quiet)cmd_$(1))' &&) $(cmd_$(1))
97+
98+
99+# Declare the contents of the .PHONY variable as phony. We keep that
100+# information in a variable se we can use it in if_changed and friends.
101+
102+.PHONY: $(PHONY)
scripts/Makefile.modinst+8−2
@@ -2,7 +2,7 @@ · 1 unmodified line
22 # Installing modules
33 # ==========================================================================
44
5−.PHONY: __modinst
5+PHONY := __modinst
66 __modinst:
77
88 include scripts/Kbuild.include
@@ -12,7 +12,7 @@ include scripts/Kbuild.include · 3 unmodified lines
1212 __modules := $(sort $(shell grep -h '\.ko' /dev/null $(wildcard $(MODVERDIR)/*.mod)))
1313 modules := $(patsubst %.o,%.ko,$(wildcard $(__modules:.ko=.o)))
1414
15−.PHONY: $(modules)
15+PHONY += $(modules)
1616 __modinst: $(modules)
1717 @:
1818
@@ -27,3 +27,9 @@ modinst_dir = $(if $(KBUILD_EXTMOD),$(ext-mod-dir),kernel/$(@D)) · 8 unmodified lines
2727
2828 $(modules):
2929 $(call cmd,modules_install,$(MODLIB)/$(modinst_dir))
30+
31+
32+# Declare the contents of the .PHONY variable as phony. We keep that
33+# information in a variable se we can use it in if_changed and friends.
34+
35+.PHONY: $(PHONY)
scripts/Makefile.modpost+14−5
@@ -32,14 +32,15 @@ · 31 unmodified lines
3232 # Step 4 is solely used to allow module versioning in external modules,
3333 # where the CRC of each module is retrieved from the Module.symers file.
3434
35−.PHONY: _modpost
35+PHONY := _modpost
3636 _modpost: __modpost
3737
3838 include .config
3939 include scripts/Kbuild.include
4040 include scripts/Makefile.lib
4141
42−symverfile := $(objtree)/Module.symvers
42+kernelsymfile := $(objtree)/Module.symvers
43+modulesymfile := $(KBUILD_EXTMOD)/Modules.symvers
4344
4445 # Step 1), find all modules listed in $(MODVERDIR)/
4546 __modules := $(sort $(shell grep -h '\.ko' /dev/null $(wildcard $(MODVERDIR)/*.mod)))
@@ -54,10 +55,12 @@ quiet_cmd_modpost = MODPOST · 8 unmodified lines
5455 cmd_modpost = scripts/mod/modpost \
5556 $(if $(CONFIG_MODVERSIONS),-m) \
5657 $(if $(CONFIG_MODULE_SRCVERSION_ALL),-a,) \
57− $(if $(KBUILD_EXTMOD),-i,-o) $(symverfile) \
58+ $(if $(KBUILD_EXTMOD),-i,-o) $(kernelsymfile) \
59+ $(if $(KBUILD_EXTMOD),-I $(modulesymfile)) \
60+ $(if $(KBUILD_EXTMOD),-o $(modulesymfile)) \
5861 $(filter-out FORCE,$^)
5962
60−.PHONY: __modpost
63+PHONY += __modpost
6164 __modpost: $(wildcard vmlinux) $(modules:.ko=.o) FORCE
6265 $(call cmd,modpost)
6366
@@ -94,7 +97,7 @@ targets += $(modules) · 30 unmodified lines
9497 # Add FORCE to the prequisites of a target to force it to be always rebuilt.
9598 # ---------------------------------------------------------------------------
9699
97−.PHONY: FORCE
100+PHONY += FORCE
98101
99102 FORCE:
100103
@@ -109,3 +112,9 @@ cmd_files := $(wildcard $(foreach f,$(targets),$(dir $(f)).$(notdir $(f)).cmd)) · 8 unmodified lines
109112 ifneq ($(cmd_files),)
110113 include $(cmd_files)
111114 endif
115+
116+
117+# Declare the contents of the .PHONY variable as phony. We keep that
118+# information in a variable se we can use it in if_changed and friends.
119+
120+.PHONY: $(PHONY)
scripts/basic/fixdep.c+2−12
@@ -132,20 +132,10 @@ void usage(void) · 131 unmodified lines
132132
133133 /*
134134 * Print out the commandline prefixed with cmd_<target filename> :=
135− * If commandline contains '#' escape with '\' so make to not see
136− * the '#' as a start-of-comment symbol
137− **/
135+ */
138136 void print_cmdline(void)
139137 {
140− char *p = cmdline;
141−
142− printf("cmd_%s := ", target);
143− for (; *p; p++) {
144− if (*p == '#')
145− printf("\\");
146− printf("%c", *p);
147− }
148− printf("\n\n");
138+ printf("cmd_%s := %s\n\n", target, cmdline);
149139 }
150140
151141 char * str_config = NULL;
scripts/checkconfig.pl+0−65
@@ -1,65 +0,0 @@
1−#! /usr/bin/perl
2−#
3−# checkconfig: find uses of CONFIG_* names without matching definitions.
4−# Copyright abandoned, 1998, Michael Elizabeth Chastain <mailto:mec@shout.net>.
5−
6−use integer;
7−
8−$| = 1;
9−
10−foreach $file (@ARGV)
11−{
12− # Open this file.
13− open(FILE, $file) || die "Can't open $file: $!\n";
14−
15− # Initialize variables.
16− my $fInComment = 0;
17− my $fInString = 0;
18− my $fUseConfig = 0;
19− my $iLinuxConfig = 0;
20− my %configList = ();
21−
22− LINE: while ( <FILE> )
23− {
24− # Strip comments.
25− $fInComment && (s+^.*?\*/+ +o ? ($fInComment = 0) : next);
26− m+/\*+o && (s+/\*.*?\*/+ +go, (s+/\*.*$+ +o && ($fInComment = 1)));
27−
28− # Pick up definitions.
29− if ( m/^\s*#/o )
30− {
31− $iLinuxConfig = $. if m/^\s*#\s*include\s*"linux\/config\.h"/o;
32− $configList{uc $1} = 1 if m/^\s*#\s*include\s*"config\/(\S*)\.h"/o;
33− }
34−
35− # Strip strings.
36− $fInString && (s+^.*?"+ +o ? ($fInString = 0) : next);
37− m+"+o && (s+".*?"+ +go, (s+".*$+ +o && ($fInString = 1)));
38−
39− # Pick up definitions.
40− if ( m/^\s*#/o )
41− {
42− $iLinuxConfig = $. if m/^\s*#\s*include\s*<linux\/config\.h>/o;
43− $configList{uc $1} = 1 if m/^\s*#\s*include\s*<config\/(\S*)\.h>/o;
44− $configList{$1} = 1 if m/^\s*#\s*define\s+CONFIG_(\w*)/o;
45− $configList{$1} = 1 if m/^\s*#\s*undef\s+CONFIG_(\w*)/o;
46− }
47−
48− # Look for usages.
49− next unless m/CONFIG_/o;
50− WORD: while ( m/\bCONFIG_(\w+)/og )
51− {
52− $fUseConfig = 1;
53− last LINE if $iLinuxConfig;
54− next WORD if exists $configList{$1};
55− print "$file: $.: need CONFIG_$1.\n";
56− $configList{$1} = 0;
57− }
58− }
59−
60− # Report superfluous includes.
61− if ( $iLinuxConfig && ! $fUseConfig )
62− { print "$file: $iLinuxConfig: linux/config.h not needed.\n"; }
63−
64− close(FILE);
65−}
scripts/genksyms/genksyms.c+393−450
@@ -29,481 +29,421 @@ · 28 unmodified lines
2929 #include <stdarg.h>
3030 #ifdef __GNU_LIBRARY__
3131 #include <getopt.h>
32−#endif /* __GNU_LIBRARY__ */
32+#endif /* __GNU_LIBRARY__ */
3333
3434 #include "genksyms.h"
35−
3635 /*----------------------------------------------------------------------*/
3736
3837 #define HASH_BUCKETS 4096
3938
4039 static struct symbol *symtab[HASH_BUCKETS];
41−FILE *debugfile;
40+static FILE *debugfile;
4241
4342 int cur_line = 1;
44−char *cur_filename, *output_directory;
43+char *cur_filename;
4544
46−int flag_debug, flag_dump_defs, flag_warnings;
45+static int flag_debug, flag_dump_defs, flag_warnings;
46+static const char *arch = "";
47+static const char *mod_prefix = "";
4748
4849 static int errors;
4950 static int nsyms;
5051
5152 static struct symbol *expansion_trail;
5253
53−static const char * const symbol_type_name[] = {
54− "normal", "typedef", "enum", "struct", "union"
54+static const char *const symbol_type_name[] = {
55+ "normal", "typedef", "enum", "struct", "union"
5556 };
5657
58+static int equal_list(struct string_list *a, struct string_list *b);
59+static void print_list(FILE * f, struct string_list *list);
60+
5761 /*----------------------------------------------------------------------*/
5862
59−static const unsigned int crctab32[] =
60−{
61− 0x00000000U, 0x77073096U, 0xee0e612cU, 0x990951baU, 0x076dc419U,
62− 0x706af48fU, 0xe963a535U, 0x9e6495a3U, 0x0edb8832U, 0x79dcb8a4U,
63− 0xe0d5e91eU, 0x97d2d988U, 0x09b64c2bU, 0x7eb17cbdU, 0xe7b82d07U,
64− 0x90bf1d91U, 0x1db71064U, 0x6ab020f2U, 0xf3b97148U, 0x84be41deU,
65− 0x1adad47dU, 0x6ddde4ebU, 0xf4d4b551U, 0x83d385c7U, 0x136c9856U,
66− 0x646ba8c0U, 0xfd62f97aU, 0x8a65c9ecU, 0x14015c4fU, 0x63066cd9U,
67− 0xfa0f3d63U, 0x8d080df5U, 0x3b6e20c8U, 0x4c69105eU, 0xd56041e4U,
68− 0xa2677172U, 0x3c03e4d1U, 0x4b04d447U, 0xd20d85fdU, 0xa50ab56bU,
69− 0x35b5a8faU, 0x42b2986cU, 0xdbbbc9d6U, 0xacbcf940U, 0x32d86ce3U,
70− 0x45df5c75U, 0xdcd60dcfU, 0xabd13d59U, 0x26d930acU, 0x51de003aU,
71− 0xc8d75180U, 0xbfd06116U, 0x21b4f4b5U, 0x56b3c423U, 0xcfba9599U,
72− 0xb8bda50fU, 0x2802b89eU, 0x5f058808U, 0xc60cd9b2U, 0xb10be924U,
73− 0x2f6f7c87U, 0x58684c11U, 0xc1611dabU, 0xb6662d3dU, 0x76dc4190U,
74− 0x01db7106U, 0x98d220bcU, 0xefd5102aU, 0x71b18589U, 0x06b6b51fU,
75− 0x9fbfe4a5U, 0xe8b8d433U, 0x7807c9a2U, 0x0f00f934U, 0x9609a88eU,
76− 0xe10e9818U, 0x7f6a0dbbU, 0x086d3d2dU, 0x91646c97U, 0xe6635c01U,
77− 0x6b6b51f4U, 0x1c6c6162U, 0x856530d8U, 0xf262004eU, 0x6c0695edU,
78− 0x1b01a57bU, 0x8208f4c1U, 0xf50fc457U, 0x65b0d9c6U, 0x12b7e950U,
79− 0x8bbeb8eaU, 0xfcb9887cU, 0x62dd1ddfU, 0x15da2d49U, 0x8cd37cf3U,
80− 0xfbd44c65U, 0x4db26158U, 0x3ab551ceU, 0xa3bc0074U, 0xd4bb30e2U,
81− 0x4adfa541U, 0x3dd895d7U, 0xa4d1c46dU, 0xd3d6f4fbU, 0x4369e96aU,
82− 0x346ed9fcU, 0xad678846U, 0xda60b8d0U, 0x44042d73U, 0x33031de5U,
83− 0xaa0a4c5fU, 0xdd0d7cc9U, 0x5005713cU, 0x270241aaU, 0xbe0b1010U,
84− 0xc90c2086U, 0x5768b525U, 0x206f85b3U, 0xb966d409U, 0xce61e49fU,
85− 0x5edef90eU, 0x29d9c998U, 0xb0d09822U, 0xc7d7a8b4U, 0x59b33d17U,
86− 0x2eb40d81U, 0xb7bd5c3bU, 0xc0ba6cadU, 0xedb88320U, 0x9abfb3b6U,
87− 0x03b6e20cU, 0x74b1d29aU, 0xead54739U, 0x9dd277afU, 0x04db2615U,
88− 0x73dc1683U, 0xe3630b12U, 0x94643b84U, 0x0d6d6a3eU, 0x7a6a5aa8U,
89− 0xe40ecf0bU, 0x9309ff9dU, 0x0a00ae27U, 0x7d079eb1U, 0xf00f9344U,
90− 0x8708a3d2U, 0x1e01f268U, 0x6906c2feU, 0xf762575dU, 0x806567cbU,
91− 0x196c3671U, 0x6e6b06e7U, 0xfed41b76U, 0x89d32be0U, 0x10da7a5aU,
92− 0x67dd4accU, 0xf9b9df6fU, 0x8ebeeff9U, 0x17b7be43U, 0x60b08ed5U,
93− 0xd6d6a3e8U, 0xa1d1937eU, 0x38d8c2c4U, 0x4fdff252U, 0xd1bb67f1U,
94− 0xa6bc5767U, 0x3fb506ddU, 0x48b2364bU, 0xd80d2bdaU, 0xaf0a1b4cU,
95− 0x36034af6U, 0x41047a60U, 0xdf60efc3U, 0xa867df55U, 0x316e8eefU,
96− 0x4669be79U, 0xcb61b38cU, 0xbc66831aU, 0x256fd2a0U, 0x5268e236U,
97− 0xcc0c7795U, 0xbb0b4703U, 0x220216b9U, 0x5505262fU, 0xc5ba3bbeU,
98− 0xb2bd0b28U, 0x2bb45a92U, 0x5cb36a04U, 0xc2d7ffa7U, 0xb5d0cf31U,
99− 0x2cd99e8bU, 0x5bdeae1dU, 0x9b64c2b0U, 0xec63f226U, 0x756aa39cU,
100− 0x026d930aU, 0x9c0906a9U, 0xeb0e363fU, 0x72076785U, 0x05005713U,
101− 0x95bf4a82U, 0xe2b87a14U, 0x7bb12baeU, 0x0cb61b38U, 0x92d28e9bU,
102− 0xe5d5be0dU, 0x7cdcefb7U, 0x0bdbdf21U, 0x86d3d2d4U, 0xf1d4e242U,
103− 0x68ddb3f8U, 0x1fda836eU, 0x81be16cdU, 0xf6b9265bU, 0x6fb077e1U,
104− 0x18b74777U, 0x88085ae6U, 0xff0f6a70U, 0x66063bcaU, 0x11010b5cU,
105− 0x8f659effU, 0xf862ae69U, 0x616bffd3U, 0x166ccf45U, 0xa00ae278U,
106− 0xd70dd2eeU, 0x4e048354U, 0x3903b3c2U, 0xa7672661U, 0xd06016f7U,
107− 0x4969474dU, 0x3e6e77dbU, 0xaed16a4aU, 0xd9d65adcU, 0x40df0b66U,
108− 0x37d83bf0U, 0xa9bcae53U, 0xdebb9ec5U, 0x47b2cf7fU, 0x30b5ffe9U,
109− 0xbdbdf21cU, 0xcabac28aU, 0x53b39330U, 0x24b4a3a6U, 0xbad03605U,
110− 0xcdd70693U, 0x54de5729U, 0x23d967bfU, 0xb3667a2eU, 0xc4614ab8U,
111− 0x5d681b02U, 0x2a6f2b94U, 0xb40bbe37U, 0xc30c8ea1U, 0x5a05df1bU,
112− 0x2d02ef8dU
63+static const unsigned int crctab32[] = {
64+ 0x00000000U, 0x77073096U, 0xee0e612cU, 0x990951baU, 0x076dc419U,
65+ 0x706af48fU, 0xe963a535U, 0x9e6495a3U, 0x0edb8832U, 0x79dcb8a4U,
66+ 0xe0d5e91eU, 0x97d2d988U, 0x09b64c2bU, 0x7eb17cbdU, 0xe7b82d07U,
67+ 0x90bf1d91U, 0x1db71064U, 0x6ab020f2U, 0xf3b97148U, 0x84be41deU,
68+ 0x1adad47dU, 0x6ddde4ebU, 0xf4d4b551U, 0x83d385c7U, 0x136c9856U,
69+ 0x646ba8c0U, 0xfd62f97aU, 0x8a65c9ecU, 0x14015c4fU, 0x63066cd9U,
70+ 0xfa0f3d63U, 0x8d080df5U, 0x3b6e20c8U, 0x4c69105eU, 0xd56041e4U,
71+ 0xa2677172U, 0x3c03e4d1U, 0x4b04d447U, 0xd20d85fdU, 0xa50ab56bU,
72+ 0x35b5a8faU, 0x42b2986cU, 0xdbbbc9d6U, 0xacbcf940U, 0x32d86ce3U,
73+ 0x45df5c75U, 0xdcd60dcfU, 0xabd13d59U, 0x26d930acU, 0x51de003aU,
74+ 0xc8d75180U, 0xbfd06116U, 0x21b4f4b5U, 0x56b3c423U, 0xcfba9599U,
75+ 0xb8bda50fU, 0x2802b89eU, 0x5f058808U, 0xc60cd9b2U, 0xb10be924U,
76+ 0x2f6f7c87U, 0x58684c11U, 0xc1611dabU, 0xb6662d3dU, 0x76dc4190U,
77+ 0x01db7106U, 0x98d220bcU, 0xefd5102aU, 0x71b18589U, 0x06b6b51fU,
78+ 0x9fbfe4a5U, 0xe8b8d433U, 0x7807c9a2U, 0x0f00f934U, 0x9609a88eU,
79+ 0xe10e9818U, 0x7f6a0dbbU, 0x086d3d2dU, 0x91646c97U, 0xe6635c01U,
80+ 0x6b6b51f4U, 0x1c6c6162U, 0x856530d8U, 0xf262004eU, 0x6c0695edU,
81+ 0x1b01a57bU, 0x8208f4c1U, 0xf50fc457U, 0x65b0d9c6U, 0x12b7e950U,
82+ 0x8bbeb8eaU, 0xfcb9887cU, 0x62dd1ddfU, 0x15da2d49U, 0x8cd37cf3U,
83+ 0xfbd44c65U, 0x4db26158U, 0x3ab551ceU, 0xa3bc0074U, 0xd4bb30e2U,
84+ 0x4adfa541U, 0x3dd895d7U, 0xa4d1c46dU, 0xd3d6f4fbU, 0x4369e96aU,
85+ 0x346ed9fcU, 0xad678846U, 0xda60b8d0U, 0x44042d73U, 0x33031de5U,
86+ 0xaa0a4c5fU, 0xdd0d7cc9U, 0x5005713cU, 0x270241aaU, 0xbe0b1010U,
87+ 0xc90c2086U, 0x5768b525U, 0x206f85b3U, 0xb966d409U, 0xce61e49fU,
88+ 0x5edef90eU, 0x29d9c998U, 0xb0d09822U, 0xc7d7a8b4U, 0x59b33d17U,
89+ 0x2eb40d81U, 0xb7bd5c3bU, 0xc0ba6cadU, 0xedb88320U, 0x9abfb3b6U,
90+ 0x03b6e20cU, 0x74b1d29aU, 0xead54739U, 0x9dd277afU, 0x04db2615U,
91+ 0x73dc1683U, 0xe3630b12U, 0x94643b84U, 0x0d6d6a3eU, 0x7a6a5aa8U,
92+ 0xe40ecf0bU, 0x9309ff9dU, 0x0a00ae27U, 0x7d079eb1U, 0xf00f9344U,
93+ 0x8708a3d2U, 0x1e01f268U, 0x6906c2feU, 0xf762575dU, 0x806567cbU,
94+ 0x196c3671U, 0x6e6b06e7U, 0xfed41b76U, 0x89d32be0U, 0x10da7a5aU,
95+ 0x67dd4accU, 0xf9b9df6fU, 0x8ebeeff9U, 0x17b7be43U, 0x60b08ed5U,
96+ 0xd6d6a3e8U, 0xa1d1937eU, 0x38d8c2c4U, 0x4fdff252U, 0xd1bb67f1U,
97+ 0xa6bc5767U, 0x3fb506ddU, 0x48b2364bU, 0xd80d2bdaU, 0xaf0a1b4cU,
98+ 0x36034af6U, 0x41047a60U, 0xdf60efc3U, 0xa867df55U, 0x316e8eefU,
99+ 0x4669be79U, 0xcb61b38cU, 0xbc66831aU, 0x256fd2a0U, 0x5268e236U,
100+ 0xcc0c7795U, 0xbb0b4703U, 0x220216b9U, 0x5505262fU, 0xc5ba3bbeU,
101+ 0xb2bd0b28U, 0x2bb45a92U, 0x5cb36a04U, 0xc2d7ffa7U, 0xb5d0cf31U,
102+ 0x2cd99e8bU, 0x5bdeae1dU, 0x9b64c2b0U, 0xec63f226U, 0x756aa39cU,
103+ 0x026d930aU, 0x9c0906a9U, 0xeb0e363fU, 0x72076785U, 0x05005713U,
104+ 0x95bf4a82U, 0xe2b87a14U, 0x7bb12baeU, 0x0cb61b38U, 0x92d28e9bU,
105+ 0xe5d5be0dU, 0x7cdcefb7U, 0x0bdbdf21U, 0x86d3d2d4U, 0xf1d4e242U,
106+ 0x68ddb3f8U, 0x1fda836eU, 0x81be16cdU, 0xf6b9265bU, 0x6fb077e1U,
107+ 0x18b74777U, 0x88085ae6U, 0xff0f6a70U, 0x66063bcaU, 0x11010b5cU,
108+ 0x8f659effU, 0xf862ae69U, 0x616bffd3U, 0x166ccf45U, 0xa00ae278U,
109+ 0xd70dd2eeU, 0x4e048354U, 0x3903b3c2U, 0xa7672661U, 0xd06016f7U,
110+ 0x4969474dU, 0x3e6e77dbU, 0xaed16a4aU, 0xd9d65adcU, 0x40df0b66U,
111+ 0x37d83bf0U, 0xa9bcae53U, 0xdebb9ec5U, 0x47b2cf7fU, 0x30b5ffe9U,
112+ 0xbdbdf21cU, 0xcabac28aU, 0x53b39330U, 0x24b4a3a6U, 0xbad03605U,
113+ 0xcdd70693U, 0x54de5729U, 0x23d967bfU, 0xb3667a2eU, 0xc4614ab8U,
114+ 0x5d681b02U, 0x2a6f2b94U, 0xb40bbe37U, 0xc30c8ea1U, 0x5a05df1bU,
115+ 0x2d02ef8dU
113116 };
114117
115−static inline unsigned long
116−partial_crc32_one(unsigned char c, unsigned long crc)
118+static unsigned long partial_crc32_one(unsigned char c, unsigned long crc)
117119 {
118− return crctab32[(crc ^ c) & 0xff] ^ (crc >> 8);
120+ return crctab32[(crc ^ c) & 0xff] ^ (crc >> 8);
119121 }
120122
121−static inline unsigned long
122−partial_crc32(const char *s, unsigned long crc)
123+static unsigned long partial_crc32(const char *s, unsigned long crc)
123124 {
124− while (*s)
125− crc = partial_crc32_one(*s++, crc);
126− return crc;
125+ while (*s)
126+ crc = partial_crc32_one(*s++, crc);
127+ return crc;
127128 }
128129
129−static inline unsigned long
130−crc32(const char *s)
130+static unsigned long crc32(const char *s)
131131 {
132− return partial_crc32(s, 0xffffffff) ^ 0xffffffff;
132+ return partial_crc32(s, 0xffffffff) ^ 0xffffffff;
133133 }
134134
135−
136135 /*----------------------------------------------------------------------*/
137136
138−static inline enum symbol_type
139−map_to_ns(enum symbol_type t)
137+static enum symbol_type map_to_ns(enum symbol_type t)
140138 {
141− if (t == SYM_TYPEDEF)
142− t = SYM_NORMAL;
143− else if (t == SYM_UNION)
144− t = SYM_STRUCT;
145− return t;
139+ if (t == SYM_TYPEDEF)
140+ t = SYM_NORMAL;
141+ else if (t == SYM_UNION)
142+ t = SYM_STRUCT;
143+ return t;
146144 }
147145
148−struct symbol *
149−find_symbol(const char *name, enum symbol_type ns)
146+struct symbol *find_symbol(const char *name, enum symbol_type ns)
150147 {
151− unsigned long h = crc32(name) % HASH_BUCKETS;
152− struct symbol *sym;
148+ unsigned long h = crc32(name) % HASH_BUCKETS;
149+ struct symbol *sym;
153150
154− for (sym = symtab[h]; sym ; sym = sym->hash_next)
155− if (map_to_ns(sym->type) == map_to_ns(ns) && strcmp(name, sym->name) == 0)
156− break;
151+ for (sym = symtab[h]; sym; sym = sym->hash_next)
152+ if (map_to_ns(sym->type) == map_to_ns(ns) &&
153+ strcmp(name, sym->name) == 0)
154+ break;
157155
158− return sym;
156+ return sym;
159157 }
160158
161−struct symbol *
162−add_symbol(const char *name, enum symbol_type type, struct string_list *defn, int is_extern)
159+struct symbol *add_symbol(const char *name, enum symbol_type type,
160+ struct string_list *defn, int is_extern)
163161 {
164− unsigned long h = crc32(name) % HASH_BUCKETS;
165− struct symbol *sym;
166−
167− for (sym = symtab[h]; sym ; sym = sym->hash_next)
168− if (map_to_ns(sym->type) == map_to_ns(type)
169− && strcmp(name, sym->name) == 0)
170− {
171− if (!equal_list(sym->defn, defn))
172− error_with_pos("redefinition of %s", name);
162+ unsigned long h = crc32(name) % HASH_BUCKETS;
163+ struct symbol *sym;
164+
165+ for (sym = symtab[h]; sym; sym = sym->hash_next) {
166+ if (map_to_ns(sym->type) == map_to_ns(type)
167+ && strcmp(name, sym->name) == 0) {
168+ if (!equal_list(sym->defn, defn))
169+ error_with_pos("redefinition of %s", name);
170+ return sym;
171+ }
172+ }
173+
174+ sym = xmalloc(sizeof(*sym));
175+ sym->name = name;
176+ sym->type = type;
177+ sym->defn = defn;
178+ sym->expansion_trail = NULL;
179+ sym->is_extern = is_extern;
180+
181+ sym->hash_next = symtab[h];
182+ symtab[h] = sym;
183+
184+ if (flag_debug) {
185+ fprintf(debugfile, "Defn for %s %s == <",
186+ symbol_type_name[type], name);
187+ if (is_extern)
188+ fputs("extern ", debugfile);
189+ print_list(debugfile, defn);
190+ fputs(">\n", debugfile);
191+ }
192+
193+ ++nsyms;
173194 return sym;
174− }
175−
176− sym = xmalloc(sizeof(*sym));
177− sym->name = name;
178− sym->type = type;
179− sym->defn = defn;
180− sym->expansion_trail = NULL;
181− sym->is_extern = is_extern;
182−
183− sym->hash_next = symtab[h];
184− symtab[h] = sym;
185−
186− if (flag_debug)
187− {
188− fprintf(debugfile, "Defn for %s %s == <", symbol_type_name[type], name);
189− if (is_extern)
190− fputs("extern ", debugfile);
191− print_list(debugfile, defn);
192− fputs(">\n", debugfile);
193− }
194−
195− ++nsyms;
196− return sym;
197195 }
198196
199−
200197 /*----------------------------------------------------------------------*/
201198
202−inline void
203−free_node(struct string_list *node)
199+void free_node(struct string_list *node)
204200 {
205− free(node->string);
206− free(node);
201+ free(node->string);
202+ free(node);
207203 }
208204
209−void
210−free_list(struct string_list *s, struct string_list *e)
205+void free_list(struct string_list *s, struct string_list *e)
211206 {
212− while (s != e)
213− {
214− struct string_list *next = s->next;
215− free_node(s);
216− s = next;
217− }
207+ while (s != e) {
208+ struct string_list *next = s->next;
209+ free_node(s);
210+ s = next;
211+ }
218212 }
219213
220−inline struct string_list *
221−copy_node(struct string_list *node)
214+struct string_list *copy_node(struct string_list *node)
222215 {
223− struct string_list *newnode;
216+ struct string_list *newnode;
224217
225− newnode = xmalloc(sizeof(*newnode));
226− newnode->string = xstrdup(node->string);
227− newnode->tag = node->tag;
218+ newnode = xmalloc(sizeof(*newnode));
219+ newnode->string = xstrdup(node->string);
220+ newnode->tag = node->tag;
228221
229− return newnode;
222+ return newnode;
230223 }
231224
232−struct string_list *
233−copy_list(struct string_list *s, struct string_list *e)
225+static int equal_list(struct string_list *a, struct string_list *b)
234226 {
235− struct string_list *h, *p;
236−
237− if (s == e)
238− return NULL;
239−
240− p = h = copy_node(s);
241− while ((s = s->next) != e)
242− p = p->next = copy_node(s);
243− p->next = NULL;
244−
245− return h;
246−}
227+ while (a && b) {
228+ if (a->tag != b->tag || strcmp(a->string, b->string))
229+ return 0;
230+ a = a->next;
231+ b = b->next;
232+ }
247233
248−int
249−equal_list(struct string_list *a, struct string_list *b)
250−{
251− while (a && b)
252− {
253− if (a->tag != b->tag || strcmp(a->string, b->string))
254− return 0;
255− a = a->next;
256− b = b->next;
257− }
258−
259− return !a && !b;
234+ return !a && !b;
260235 }
261236
262−static inline void
263−print_node(FILE *f, struct string_list *list)
237+static void print_node(FILE * f, struct string_list *list)
264238 {
265− switch (list->tag)
266− {
267− case SYM_STRUCT:
268− putc('s', f);
269− goto printit;
270− case SYM_UNION:
271− putc('u', f);
272− goto printit;
273− case SYM_ENUM:
274− putc('e', f);
275− goto printit;
276− case SYM_TYPEDEF:
277− putc('t', f);
278− goto printit;
279−
280− printit:
281− putc('#', f);
282− case SYM_NORMAL:
283− fputs(list->string, f);
284− break;
285− }
286−}
239+ switch (list->tag) {
240+ case SYM_STRUCT:
241+ putc('s', f);
242+ goto printit;
243+ case SYM_UNION:
244+ putc('u', f);
245+ goto printit;
246+ case SYM_ENUM:
247+ putc('e', f);
248+ goto printit;
249+ case SYM_TYPEDEF:
250+ putc('t', f);
251+ goto printit;
287252
288−void
289−print_list(FILE *f, struct string_list *list)
290−{
291− struct string_list **e, **b;
292− struct string_list *tmp, **tmp2;
293− int elem = 1;
294−
295− if (list == NULL)
296− {
297− fputs("(nil)", f);
298− return;
299− }
300−
301− tmp = list;
302− while((tmp = tmp->next) != NULL)
303− elem++;
304−
305− b = alloca(elem * sizeof(*e));
306− e = b + elem;
307− tmp2 = e - 1;
308−
309− (*tmp2--) = list;
310− while((list = list->next) != NULL)
311− *(tmp2--) = list;
312−
313− while (b != e)
314− {
315− print_node(f, *b++);
316− putc(' ', f);
317− }
253+ printit:
254+ putc('#', f);
255+ case SYM_NORMAL:
256+ fputs(list->string, f);
257+ break;
258+ }
318259 }
319260
320−static unsigned long
321−expand_and_crc_list(struct string_list *list, unsigned long crc)
261+static void print_list(FILE * f, struct string_list *list)
322262 {
323− struct string_list **e, **b;
324− struct string_list *tmp, **tmp2;
325− int elem = 1;
326−
327− if (!list)
328− return crc;
263+ struct string_list **e, **b;
264+ struct string_list *tmp, **tmp2;
265+ int elem = 1;
329266
330− tmp = list;
331− while((tmp = tmp->next) != NULL)
332− elem++;
333−
334− b = alloca(elem * sizeof(*e));
335− e = b + elem;
336− tmp2 = e - 1;
267+ if (list == NULL) {
268+ fputs("(nil)", f);
269+ return;
270+ }
337271
338− *(tmp2--) = list;
339− while ((list = list->next) != NULL)
340− *(tmp2--) = list;
272+ tmp = list;
273+ while ((tmp = tmp->next) != NULL)
274+ elem++;
341275
342− while (b != e)
343− {
344− struct string_list *cur;
345− struct symbol *subsym;
276+ b = alloca(elem * sizeof(*e));
277+ e = b + elem;
278+ tmp2 = e - 1;
346279
347− cur = *(b++);
348− switch (cur->tag)
349− {
350− case SYM_NORMAL:
351− if (flag_dump_defs)
352− fprintf(debugfile, "%s ", cur->string);
353− crc = partial_crc32(cur->string, crc);
354− crc = partial_crc32_one(' ', crc);
355− break;
280+ (*tmp2--) = list;
281+ while ((list = list->next) != NULL)
282+ *(tmp2--) = list;
356283
357− case SYM_TYPEDEF:
358− subsym = find_symbol(cur->string, cur->tag);
359− if (subsym->expansion_trail)
360− {
361− if (flag_dump_defs)
362− fprintf(debugfile, "%s ", cur->string);
363− crc = partial_crc32(cur->string, crc);
364− crc = partial_crc32_one(' ', crc);
365− }
366− else
367− {
368− subsym->expansion_trail = expansion_trail;
369− expansion_trail = subsym;
370− crc = expand_and_crc_list(subsym->defn, crc);
371− }
372− break;
284+ while (b != e) {
285+ print_node(f, *b++);
286+ putc(' ', f);
287+ }
288+}
373289
374− case SYM_STRUCT:
375− case SYM_UNION:
376− case SYM_ENUM:
377− subsym = find_symbol(cur->string, cur->tag);
378− if (!subsym)
379− {
380− struct string_list *n, *t = NULL;
381−
382− error_with_pos("expand undefined %s %s",
383− symbol_type_name[cur->tag], cur->string);
384−
385− n = xmalloc(sizeof(*n));
386− n->string = xstrdup(symbol_type_name[cur->tag]);
387− n->tag = SYM_NORMAL;
388− n->next = t;
389− t = n;
390−
391− n = xmalloc(sizeof(*n));
392− n->string = xstrdup(cur->string);
393− n->tag = SYM_NORMAL;
394− n->next = t;
395− t = n;
396−
397− n = xmalloc(sizeof(*n));
398− n->string = xstrdup("{ UNKNOWN }");
399− n->tag = SYM_NORMAL;
400− n->next = t;
401−
402− subsym = add_symbol(cur->string, cur->tag, n, 0);
403− }
404− if (subsym->expansion_trail)
405− {
406− if (flag_dump_defs)
407− {
408− fprintf(debugfile, "%s %s ", symbol_type_name[cur->tag],
409− cur->string);
290+static unsigned long expand_and_crc_list(struct string_list *list,
291+ unsigned long crc)
292+{
293+ struct string_list **e, **b;
294+ struct string_list *tmp, **tmp2;
295+ int elem = 1;
296+
297+ if (!list)
298+ return crc;
299+
300+ tmp = list;
301+ while ((tmp = tmp->next) != NULL)
302+ elem++;
303+
304+ b = alloca(elem * sizeof(*e));
305+ e = b + elem;
306+ tmp2 = e - 1;
307+
308+ *(tmp2--) = list;
309+ while ((list = list->next) != NULL)
310+ *(tmp2--) = list;
311+
312+ while (b != e) {
313+ struct string_list *cur;
314+ struct symbol *subsym;
315+
316+ cur = *(b++);
317+ switch (cur->tag) {
318+ case SYM_NORMAL:
319+ if (flag_dump_defs)
320+ fprintf(debugfile, "%s ", cur->string);
321+ crc = partial_crc32(cur->string, crc);
322+ crc = partial_crc32_one(' ', crc);
323+ break;
324+
325+ case SYM_TYPEDEF:
326+ subsym = find_symbol(cur->string, cur->tag);
327+ if (subsym->expansion_trail) {
328+ if (flag_dump_defs)
329+ fprintf(debugfile, "%s ", cur->string);
330+ crc = partial_crc32(cur->string, crc);
331+ crc = partial_crc32_one(' ', crc);
332+ } else {
333+ subsym->expansion_trail = expansion_trail;
334+ expansion_trail = subsym;
335+ crc = expand_and_crc_list(subsym->defn, crc);
336+ }
337+ break;
338+
339+ case SYM_STRUCT:
340+ case SYM_UNION:
341+ case SYM_ENUM:
342+ subsym = find_symbol(cur->string, cur->tag);
343+ if (!subsym) {
344+ struct string_list *n, *t = NULL;
345+
346+ error_with_pos("expand undefined %s %s",
347+ symbol_type_name[cur->tag],
348+ cur->string);
349+
350+ n = xmalloc(sizeof(*n));
351+ n->string = xstrdup(symbol_type_name[cur->tag]);
352+ n->tag = SYM_NORMAL;
353+ n->next = t;
354+ t = n;
355+
356+ n = xmalloc(sizeof(*n));
357+ n->string = xstrdup(cur->string);
358+ n->tag = SYM_NORMAL;
359+ n->next = t;
360+ t = n;
361+
362+ n = xmalloc(sizeof(*n));
363+ n->string = xstrdup("{ UNKNOWN }");
364+ n->tag = SYM_NORMAL;
365+ n->next = t;
366+
367+ subsym =
368+ add_symbol(cur->string, cur->tag, n, 0);
369+ }
370+ if (subsym->expansion_trail) {
371+ if (flag_dump_defs) {
372+ fprintf(debugfile, "%s %s ",
373+ symbol_type_name[cur->tag],
374+ cur->string);
375+ }
376+
377+ crc = partial_crc32(symbol_type_name[cur->tag],
378+ crc);
379+ crc = partial_crc32_one(' ', crc);
380+ crc = partial_crc32(cur->string, crc);
381+ crc = partial_crc32_one(' ', crc);
382+ } else {
383+ subsym->expansion_trail = expansion_trail;
384+ expansion_trail = subsym;
385+ crc = expand_and_crc_list(subsym->defn, crc);
386+ }
387+ break;
410388 }
411−
412− crc = partial_crc32(symbol_type_name[cur->tag], crc);
413− crc = partial_crc32_one(' ', crc);
414− crc = partial_crc32(cur->string, crc);
415− crc = partial_crc32_one(' ', crc);
416− }
417− else
418− {
419− subsym->expansion_trail = expansion_trail;
420− expansion_trail = subsym;
421− crc = expand_and_crc_list(subsym->defn, crc);
422− }
423− break;
424389 }
425− }
426390
427− return crc;
391+ return crc;
428392 }
429393
430−void
431−export_symbol(const char *name)
394+void export_symbol(const char *name)
432395 {
433− struct symbol *sym;
396+ struct symbol *sym;
434397
435− sym = find_symbol(name, SYM_NORMAL);
436− if (!sym)
437− error_with_pos("export undefined symbol %s", name);
438− else
439− {
440− unsigned long crc;
398+ sym = find_symbol(name, SYM_NORMAL);
399+ if (!sym)
400+ error_with_pos("export undefined symbol %s", name);
401+ else {
402+ unsigned long crc;
441403
442− if (flag_dump_defs)
443− fprintf(debugfile, "Export %s == <", name);
404+ if (flag_dump_defs)
405+ fprintf(debugfile, "Export %s == <", name);
444406
445− expansion_trail = (struct symbol *)-1L;
407+ expansion_trail = (struct symbol *)-1L;
446408
447− crc = expand_and_crc_list(sym->defn, 0xffffffff) ^ 0xffffffff;
409+ crc = expand_and_crc_list(sym->defn, 0xffffffff) ^ 0xffffffff;
448410
449− sym = expansion_trail;
450− while (sym != (struct symbol *)-1L)
451− {
452− struct symbol *n = sym->expansion_trail;
453− sym->expansion_trail = 0;
454− sym = n;
455− }
411+ sym = expansion_trail;
412+ while (sym != (struct symbol *)-1L) {
413+ struct symbol *n = sym->expansion_trail;
414+ sym->expansion_trail = 0;
415+ sym = n;
416+ }
456417
457− if (flag_dump_defs)
458− fputs(">\n", debugfile);
418+ if (flag_dump_defs)
419+ fputs(">\n", debugfile);
459420
460− /* Used as a linker script. */
461− printf("__crc_%s = 0x%08lx ;\n", name, crc);
462− }
421+ /* Used as a linker script. */
422+ printf("%s__crc_%s = 0x%08lx ;\n", mod_prefix, name, crc);
423+ }
463424 }
464425
465426 /*----------------------------------------------------------------------*/
466−
467−void
468−error(const char *fmt, ...)
469−{
470− va_list args;
471−
472− if (flag_warnings)
473− {
474− va_start(args, fmt);
475− vfprintf(stderr, fmt, args);
476− va_end(args);
477− putc('\n', stderr);
478−
479− errors++;
480− }
481−}
482−
483−void
484−error_with_pos(const char *fmt, ...)
427+void error_with_pos(const char *fmt, ...)
485428 {
486− va_list args;
429+ va_list args;
487430
488− if (flag_warnings)
489− {
490− fprintf(stderr, "%s:%d: ", cur_filename ? : "<stdin>", cur_line);
431+ if (flag_warnings) {
432+ fprintf(stderr, "%s:%d: ", cur_filename ? : "<stdin>",
433+ cur_line);
491434
492− va_start(args, fmt);
493− vfprintf(stderr, fmt, args);
494− va_end(args);
495− putc('\n', stderr);
435+ va_start(args, fmt);
436+ vfprintf(stderr, fmt, args);
437+ va_end(args);
438+ putc('\n', stderr);
496439
497− errors++;
498− }
440+ errors++;
441+ }
499442 }
500443
501−
502−void genksyms_usage(void)
444+static void genksyms_usage(void)
503445 {
504− fputs("Usage:\n"
505− "genksyms [-dDwqhV] > /path/to/.tmp_obj.ver\n"
506− "\n"
446+ fputs("Usage:\n" "genksyms [-dDwqhV] > /path/to/.tmp_obj.ver\n" "\n"
507447 #ifdef __GNU_LIBRARY__
508448 " -d, --debug Increment the debug level (repeatable)\n"
509449 " -D, --dump Dump expanded symbol defs (for debugging only)\n"
@@ -511,81 +451,84 @@ void genksyms_usage(void) · 1 unmodified line
511451 " -q, --quiet Disable warnings (default)\n"
512452 " -h, --help Print this message\n"
513453 " -V, --version Print the release version\n"
514−#else /* __GNU_LIBRARY__ */
515− " -d Increment the debug level (repeatable)\n"
516− " -D Dump expanded symbol defs (for debugging only)\n"
517− " -w Enable warnings\n"
518− " -q Disable warnings (default)\n"
519− " -h Print this message\n"
520− " -V Print the release version\n"
521−#endif /* __GNU_LIBRARY__ */
454+#else /* __GNU_LIBRARY__ */
455+ " -d Increment the debug level (repeatable)\n"
456+ " -D Dump expanded symbol defs (for debugging only)\n"
457+ " -w Enable warnings\n"
458+ " -q Disable warnings (default)\n"
459+ " -h Print this message\n"
460+ " -V Print the release version\n"
461+#endif /* __GNU_LIBRARY__ */
522462 , stderr);
523463 }
524464
525−int
526−main(int argc, char **argv)
465+int main(int argc, char **argv)
527466 {
528− int o;
467+ int o;
529468
530469 #ifdef __GNU_LIBRARY__
531− struct option long_opts[] = {
532− {"debug", 0, 0, 'd'},
533− {"warnings", 0, 0, 'w'},
534− {"quiet", 0, 0, 'q'},
535− {"dump", 0, 0, 'D'},
536− {"version", 0, 0, 'V'},
537− {"help", 0, 0, 'h'},
538− {0, 0, 0, 0}
539− };
540−
541− while ((o = getopt_long(argc, argv, "dwqVDk:p:",
542− &long_opts[0], NULL)) != EOF)
543−#else /* __GNU_LIBRARY__ */
544− while ((o = getopt(argc, argv, "dwqVDk:p:")) != EOF)
545−#endif /* __GNU_LIBRARY__ */
546− switch (o)
547− {
548− case 'd':
549− flag_debug++;
550− break;
551− case 'w':
552− flag_warnings = 1;
553− break;
554− case 'q':
555− flag_warnings = 0;
556− break;
557− case 'V':
558− fputs("genksyms version 2.5.60\n", stderr);
559− break;
560− case 'D':
561− flag_dump_defs = 1;
562− break;
563− case 'h':
564− genksyms_usage();
565− return 0;
566− default:
567− genksyms_usage();
568− return 1;
569− }
570−
571− {
572− extern int yydebug;
573− extern int yy_flex_debug;
574−
575− yydebug = (flag_debug > 1);
576− yy_flex_debug = (flag_debug > 2);
577−
578− debugfile = stderr;
579− /* setlinebuf(debugfile); */
580− }
581−
582− yyparse();
583−
584− if (flag_debug)
585− {
586− fprintf(debugfile, "Hash table occupancy %d/%d = %g\n",
587− nsyms, HASH_BUCKETS, (double)nsyms / (double)HASH_BUCKETS);
588− }
589−
590− return errors != 0;
470+ struct option long_opts[] = {
471+ {"arch", 1, 0, 'a'},
472+ {"debug", 0, 0, 'd'},
473+ {"warnings", 0, 0, 'w'},
474+ {"quiet", 0, 0, 'q'},
475+ {"dump", 0, 0, 'D'},
476+ {"version", 0, 0, 'V'},
477+ {"help", 0, 0, 'h'},
478+ {0, 0, 0, 0}
479+ };
480+
481+ while ((o = getopt_long(argc, argv, "a:dwqVDk:p:",
482+ &long_opts[0], NULL)) != EOF)
483+#else /* __GNU_LIBRARY__ */
484+ while ((o = getopt(argc, argv, "a:dwqVDk:p:")) != EOF)
485+#endif /* __GNU_LIBRARY__ */
486+ switch (o) {
487+ case 'a':
488+ arch = optarg;
489+ break;
490+ case 'd':
491+ flag_debug++;
492+ break;
493+ case 'w':
494+ flag_warnings = 1;
495+ break;
496+ case 'q':
497+ flag_warnings = 0;
498+ break;
499+ case 'V':
500+ fputs("genksyms version 2.5.60\n", stderr);
501+ break;
502+ case 'D':
503+ flag_dump_defs = 1;
504+ break;
505+ case 'h':
506+ genksyms_usage();
507+ return 0;
508+ default:
509+ genksyms_usage();
510+ return 1;
511+ }
512+ if ((strcmp(arch, "v850") == 0) || (strcmp(arch, "h8300") == 0))
513+ mod_prefix = "_";
514+ {
515+ extern int yydebug;
516+ extern int yy_flex_debug;
517+
518+ yydebug = (flag_debug > 1);
519+ yy_flex_debug = (flag_debug > 2);
520+
521+ debugfile = stderr;
522+ /* setlinebuf(debugfile); */
523+ }
524+
525+ yyparse();
526+
527+ if (flag_debug) {
528+ fprintf(debugfile, "Hash table occupancy %d/%d = %g\n",
529+ nsyms, HASH_BUCKETS,
530+ (double)nsyms / (double)HASH_BUCKETS);
531+ }
532+
533+ return errors != 0;
591534 }
scripts/genksyms/genksyms.h+17−40
@@ -20,74 +20,51 @@ · 19 unmodified lines
2020 along with this program; if not, write to the Free Software Foundation,
2121 Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
2222
23−
2423 #ifndef MODUTILS_GENKSYMS_H
2524 #define MODUTILS_GENKSYMS_H 1
2625
2726 #include <stdio.h>
2827
29−
30−enum symbol_type
31−{
32− SYM_NORMAL, SYM_TYPEDEF, SYM_ENUM, SYM_STRUCT, SYM_UNION
28+enum symbol_type {
29+ SYM_NORMAL, SYM_TYPEDEF, SYM_ENUM, SYM_STRUCT, SYM_UNION
3330 };
3431
35−struct string_list
36−{
37− struct string_list *next;
38− enum symbol_type tag;
39− char *string;
32+struct string_list {
33+ struct string_list *next;
34+ enum symbol_type tag;
35+ char *string;
4036 };
4137
42−struct symbol
43−{
44− struct symbol *hash_next;
45− const char *name;
46− enum symbol_type type;
47− struct string_list *defn;
48− struct symbol *expansion_trail;
49− int is_extern;
38+struct symbol {
39+ struct symbol *hash_next;
40+ const char *name;
41+ enum symbol_type type;
42+ struct string_list *defn;
43+ struct symbol *expansion_trail;
44+ int is_extern;
5045 };
5146
5247 typedef struct string_list **yystype;
5348 #define YYSTYPE yystype
5449
55−extern FILE *outfile, *debugfile;
56−
5750 extern int cur_line;
58−extern char *cur_filename, *output_directory;
59−
60−extern int flag_debug, flag_dump_defs, flag_warnings;
61−extern int checksum_version, kernel_version;
62−
63−extern int want_brace_phrase, want_exp_phrase, discard_phrase_contents;
64−extern struct string_list *current_list, *next_list;
65−
51+extern char *cur_filename;
6652
6753 struct symbol *find_symbol(const char *name, enum symbol_type ns);
6854 struct symbol *add_symbol(const char *name, enum symbol_type type,
69− struct string_list *defn, int is_extern);
55+ struct string_list *defn, int is_extern);
7056 void export_symbol(const char *);
7157
72−struct string_list *reset_list(void);
73−void free_list(struct string_list *s, struct string_list *e);
7458 void free_node(struct string_list *list);
59+void free_list(struct string_list *s, struct string_list *e);
7560 struct string_list *copy_node(struct string_list *);
76−struct string_list *copy_list(struct string_list *s, struct string_list *e);
77−int equal_list(struct string_list *a, struct string_list *b);
78−void print_list(FILE *, struct string_list *list);
7961
8062 int yylex(void);
8163 int yyparse(void);
8264
8365 void error_with_pos(const char *, ...);
8466
85−#define version(a,b,c) ((a << 16) | (b << 8) | (c))
86−
8767 /*----------------------------------------------------------------------*/
88−
89−#define MODUTILS_VERSION "<in-kernel>"
90−
9168 #define xmalloc(size) ({ void *__ptr = malloc(size); \
9269 if(!__ptr && size != 0) { \
9370 fprintf(stderr, "out of memory\n"); \
@@ -101,4 +78,4 @@ void error_with_pos(const char *, ...); · 7 unmodified lines
10178 } \
10279 __str; })
10380
104−#endif /* genksyms.h */
81+#endif /* genksyms.h */
scripts/kconfig/Makefile+3−3
@@ -2,7 +2,7 @@ · 1 unmodified line
22 # Kernel configuration targets
33 # These targets are used from top-level makefile
44
5−.PHONY: oldconfig xconfig gconfig menuconfig config silentoldconfig update-po-config
5+PHONY += oldconfig xconfig gconfig menuconfig config silentoldconfig update-po-config
66
77 xconfig: $(obj)/qconf
88 $< arch/$(ARCH)/Kconfig
@@ -42,7 +42,7 @@ update-po-config: $(obj)/kxgettext · 33 unmodified lines
4242 $(Q)rm -f arch/um/Kconfig_arch
4343 $(Q)rm -f scripts/kconfig/linux_*.pot scripts/kconfig/config.pot
4444
45−.PHONY: randconfig allyesconfig allnoconfig allmodconfig defconfig
45+PHONY += randconfig allyesconfig allnoconfig allmodconfig defconfig
4646
4747 randconfig: $(obj)/conf
4848 $< -r arch/$(ARCH)/Kconfig
@@ -78,7 +78,7 @@ help: · 29 unmodified lines
7878 @echo ' defconfig - New config with default answer to all options'
7979 @echo ' allmodconfig - New config selecting modules when possible'
8080 @echo ' allyesconfig - New config where all options are accepted with yes'
81− @echo ' allnoconfig - New minimal config'
81+ @echo ' allnoconfig - New config where all options are answered with no'
8282
8383 # ===========================================================================
8484 # Shared Makefile for the various kconfig executables:
scripts/kconfig/confdata.c+1−1
@@ -374,6 +374,7 @@ int conf_write(const char *name) · 373 unmodified lines
374374 out_h = fopen(".tmpconfig.h", "w");
375375 if (!out_h)
376376 return 1;
377+ file_write_dep(NULL);
377378 }
378379 sym = sym_lookup("KERNELVERSION", 0);
379380 sym_calc_value(sym);
@@ -512,7 +513,6 @@ int conf_write(const char *name) · 132 unmodified lines
512513 if (out_h) {
513514 fclose(out_h);
514515 rename(".tmpconfig.h", "include/linux/autoconf.h");
515− file_write_dep(NULL);
516516 }
517517 if (!name || basename != conf_def_filename) {
518518 if (!name)
scripts/kconfig/lxdialog/Makefile+3−3
@@ -7,10 +7,10 @@ check-lxdialog := $(srctree)/$(src)/check-lxdialog.sh · 6 unmodified lines
77 # we really need to do so. (Do not call gcc as part of make mrproper)
88 HOST_EXTRACFLAGS = $(shell $(CONFIG_SHELL) $(check-lxdialog) -ccflags)
99 HOST_LOADLIBES = $(shell $(CONFIG_SHELL) $(check-lxdialog) -ldflags $(HOSTCC))
10−
11−HOST_EXTRACFLAGS += -DLOCALE
1210
13−.PHONY: dochecklxdialog
11+HOST_EXTRACFLAGS += -DLOCALE
12+
13+PHONY += dochecklxdialog
1414 $(obj)/dochecklxdialog:
1515 $(Q)$(CONFIG_SHELL) $(check-lxdialog) -check $(HOSTCC) $(HOST_LOADLIBES)
1616
scripts/mkmakefile+5−3
@@ -21,11 +21,13 @@ KERNELOUTPUT := $2 · 20 unmodified lines
2121
2222 MAKEFLAGS += --no-print-directory
2323
24+.PHONY: all \$(MAKECMDGOALS)
25+
2426 all:
2527 \$(MAKE) -C \$(KERNELSRC) O=\$(KERNELOUTPUT)
2628
27−%::
28− \$(MAKE) -C \$(KERNELSRC) O=\$(KERNELOUTPUT) \$@
29+Makefile:;
2930
31+\$(filter-out all Makefile,\$(MAKECMDGOALS)) %/:
32+ \$(MAKE) -C \$(KERNELSRC) O=\$(KERNELOUTPUT) \$@
3033 EOF
31−
scripts/mod/file2alias.c+8−9
@@ -34,7 +34,7 @@ typedef uint16_t __u16; · 33 unmodified lines
3434 typedef unsigned char __u8;
3535
3636 /* Big exception to the "don't include kernel headers into userspace, which
37− * even potentially has different endianness and word sizes, since
37+ * even potentially has different endianness and word sizes, since
3838 * we handle those differences explicitly below */
3939 #include "../../include/linux/mod_devicetable.h"
4040 #include "../../include/linux/input.h"
@@ -153,8 +153,8 @@ static void do_usb_table(void *symval, unsigned long size, · 112 unmodified lines
153153 const unsigned long id_size = sizeof(struct usb_device_id);
154154
155155 if (size % id_size || size < id_size) {
156− fprintf(stderr, "*** Warning: %s ids %lu bad size "
157− "(each on %lu)\n", mod->name, size, id_size);
156+ warn("%s ids %lu bad size "
157+ "(each on %lu)\n", mod->name, size, id_size);
158158 }
159159 /* Leave last one: it's the terminator. */
160160 size -= id_size;
@@ -217,9 +217,8 @@ static int do_pci_entry(const char *filename, · 56 unmodified lines
217217 if ((baseclass_mask != 0 && baseclass_mask != 0xFF)
218218 || (subclass_mask != 0 && subclass_mask != 0xFF)
219219 || (interface_mask != 0 && interface_mask != 0xFF)) {
220− fprintf(stderr,
221− "*** Warning: Can't handle masks in %s:%04X\n",
222− filename, id->class_mask);
220+ warn("Can't handle masks in %s:%04X\n",
221+ filename, id->class_mask);
223222 return 0;
224223 }
225224
@@ -229,7 +228,7 @@ static int do_pci_entry(const char *filename, · 3 unmodified lines
229228 return 1;
230229 }
231230
232−/* looks like: "ccw:tNmNdtNdmN" */
231+/* looks like: "ccw:tNmNdtNdmN" */
233232 static int do_ccw_entry(const char *filename,
234233 struct ccw_device_id *id, char *alias)
235234 {
@@ -445,8 +444,8 @@ static void do_table(void *symval, unsigned long size, · 209 unmodified lines
445444 int (*do_entry)(const char *, void *entry, char *alias) = function;
446445
447446 if (size % id_size || size < id_size) {
448− fprintf(stderr, "*** Warning: %s ids %lu bad size "
449− "(each on %lu)\n", mod->name, size, id_size);
447+ warn("%s ids %lu bad size "
448+ "(each on %lu)\n", mod->name, size, id_size);
450449 }
451450 /* Leave last one: it's the terminator. */
452451 size -= id_size;
scripts/mod/mk_elfconfig.c+2−2
@@ -6,7 +6,7 @@ · 5 unmodified lines
66 int
77 main(int argc, char **argv)
88 {
9− unsigned char ei[EI_NIDENT];
9+ unsigned char ei[EI_NIDENT];
1010 union { short s; char c[2]; } endian_test;
1111
1212 if (argc != 2) {
@@ -57,7 +57,7 @@ main(int argc, char **argv) · 44 unmodified lines
5757
5858 if ((strcmp(argv[1], "v850") == 0) || (strcmp(argv[1], "h8300") == 0))
5959 printf("#define MODULE_SYMBOL_PREFIX \"_\"\n");
60− else
60+ else
6161 printf("#define MODULE_SYMBOL_PREFIX \"\"\n");
6262
6363 return 0;
scripts/mod/modpost.c+562−136
@@ -2,7 +2,7 @@ · 1 unmodified line
22 *
33 * Copyright 2003 Kai Germaschewski
44 * Copyright 2002-2004 Rusty Russell, IBM Corporation
5− *
5+ * Copyright 2006 Sam Ravnborg
66 * Based in part on module-init-tools/depmod.c,file2alias
77 *
88 * This software may be used and distributed according to the terms
@@ -20,9 +20,10 @@ int modversions = 0; · 11 unmodified lines
2020 int have_vmlinux = 0;
2121 /* Is CONFIG_MODULE_SRCVERSION_ALL set? */
2222 static int all_versions = 0;
23+/* If we are modposting external module set to 1 */
24+static int external_module = 0;
2325
24−void
25−fatal(const char *fmt, ...)
26+void fatal(const char *fmt, ...)
2627 {
2728 va_list arglist;
2829
@@ -35,8 +36,7 @@ fatal(const char *fmt, ...) · 6 unmodified lines
3536 exit(1);
3637 }
3738
38−void
39−warn(const char *fmt, ...)
39+void warn(const char *fmt, ...)
4040 {
4141 va_list arglist;
4242
@@ -47,6 +47,18 @@ warn(const char *fmt, ...) · 4 unmodified lines
4747 va_end(arglist);
4848 }
4949
50+static int is_vmlinux(const char *modname)
51+{
52+ const char *myname;
53+
54+ if ((myname = strrchr(modname, '/')))
55+ myname++;
56+ else
57+ myname = modname;
58+
59+ return strcmp(myname, "vmlinux") == 0;
60+}
61+
5062 void *do_nofail(void *ptr, const char *expr)
5163 {
5264 if (!ptr) {
@@ -59,8 +71,7 @@ void *do_nofail(void *ptr, const char *expr) · 6 unmodified lines
5971
6072 static struct module *modules;
6173
62−struct module *
63−find_module(char *modname)
74+static struct module *find_module(char *modname)
6475 {
6576 struct module *mod;
6677
@@ -70,12 +81,11 @@ find_module(char *modname) · 3 unmodified lines
7081 return mod;
7182 }
7283
73−struct module *
74−new_module(char *modname)
84+static struct module *new_module(char *modname)
7585 {
7686 struct module *mod;
7787 char *p, *s;
78−
88+
7989 mod = NOFAIL(malloc(sizeof(*mod)));
8090 memset(mod, 0, sizeof(*mod));
8191 p = NOFAIL(strdup(modname));
@@ -104,6 +114,10 @@ struct symbol { · 22 unmodified lines
104114 unsigned int crc;
105115 int crc_valid;
106116 unsigned int weak:1;
117+ unsigned int vmlinux:1; /* 1 if symbol is defined in vmlinux */
118+ unsigned int kernel:1; /* 1 if symbol is from kernel
119+ * (only for external modules) **/
120+ unsigned int preloaded:1; /* 1 if symbol from Module.symvers */
107121 char name[0];
108122 };
109123
@@ -122,11 +136,12 @@ static inline unsigned int tdb_hash(const char *name) · 12 unmodified lines
122136 return (1103515243 * value + 12345);
123137 }
124138
125−/* Allocate a new symbols for use in the hash of exported symbols or
126− * the list of unresolved symbols per module */
127−
128−struct symbol *
129−alloc_symbol(const char *name, unsigned int weak, struct symbol *next)
139+/**
140+ * Allocate a new symbols for use in the hash of exported symbols or
141+ * the list of unresolved symbols per module
142+ **/
143+static struct symbol *alloc_symbol(const char *name, unsigned int weak,
144+ struct symbol *next)
130145 {
131146 struct symbol *s = NOFAIL(malloc(sizeof(*s) + strlen(name) + 1));
132147
@@ -138,9 +153,7 @@ alloc_symbol(const char *name, unsigned int weak, struct symbol *next) · 5 unmodified lines
138153 }
139154
140155 /* For the hash of exported symbols */
141−
142−void
143−new_symbol(const char *name, struct module *module, unsigned int *crc)
156+static struct symbol *new_symbol(const char *name, struct module *module)
144157 {
145158 unsigned int hash;
146159 struct symbol *new;
@@ -148,14 +161,10 @@ new_symbol(const char *name, struct module *module, unsigned int *crc) · 1 unmodified line
148161 hash = tdb_hash(name) % SYMBOL_HASH_SIZE;
149162 new = symbolhash[hash] = alloc_symbol(name, 0, symbolhash[hash]);
150163 new->module = module;
151− if (crc) {
152− new->crc = *crc;
153− new->crc_valid = 1;
154− }
164+ return new;
155165 }
156166
157−struct symbol *
158−find_symbol(const char *name)
167+static struct symbol *find_symbol(const char *name)
159168 {
160169 struct symbol *s;
161170
@@ -170,25 +179,42 @@ find_symbol(const char *name) · 8 unmodified lines
170179 return NULL;
171180 }
172181
173−/* Add an exported symbol - it may have already been added without a
174− * CRC, in this case just update the CRC */
175−void
176−add_exported_symbol(const char *name, struct module *module, unsigned int *crc)
182+/**
183+ * Add an exported symbol - it may have already been added without a
184+ * CRC, in this case just update the CRC
185+ **/
186+static struct symbol *sym_add_exported(const char *name, struct module *mod)
177187 {
178188 struct symbol *s = find_symbol(name);
179189
180190 if (!s) {
181− new_symbol(name, module, crc);
182− return;
183− }
184− if (crc) {
185− s->crc = *crc;
186− s->crc_valid = 1;
191+ s = new_symbol(name, mod);
192+ } else {
193+ if (!s->preloaded) {
194+ warn("%s: '%s' exported twice. Previous export "
195+ "was in %s%s\n", mod->name, name,
196+ s->module->name,
197+ is_vmlinux(s->module->name) ?"":".ko");
198+ }
187199 }
200+ s->preloaded = 0;
201+ s->vmlinux = is_vmlinux(mod->name);
202+ s->kernel = 0;
203+ return s;
204+}
205+
206+static void sym_update_crc(const char *name, struct module *mod,
207+ unsigned int crc)
208+{
209+ struct symbol *s = find_symbol(name);
210+
211+ if (!s)
212+ s = new_symbol(name, mod);
213+ s->crc = crc;
214+ s->crc_valid = 1;
188215 }
189216
190−void *
191−grab_file(const char *filename, unsigned long *size)
217+void *grab_file(const char *filename, unsigned long *size)
192218 {
193219 struct stat st;
194220 void *map;
@@ -207,13 +233,12 @@ grab_file(const char *filename, unsigned long *size) · 12 unmodified lines
207233 return map;
208234 }
209235
210−/*
211− Return a copy of the next line in a mmap'ed file.
212− spaces in the beginning of the line is trimmed away.
213− Return a pointer to a static buffer.
214−*/
215−char*
216−get_next_line(unsigned long *pos, void *file, unsigned long size)
236+/**
237+ * Return a copy of the next line in a mmap'ed file.
238+ * spaces in the beginning of the line is trimmed away.
239+ * Return a pointer to a static buffer.
240+ **/
241+char* get_next_line(unsigned long *pos, void *file, unsigned long size)
217242 {
218243 static char line[4096];
219244 int skip = 1;
@@ -243,14 +268,12 @@ get_next_line(unsigned long *pos, void *file, unsigned long size) · 23 unmodified lines
243268 return NULL;
244269 }
245270
246−void
247−release_file(void *file, unsigned long size)
271+void release_file(void *file, unsigned long size)
248272 {
249273 munmap(file, size);
250274 }
251275
252−void
253−parse_elf(struct elf_info *info, const char *filename)
276+static void parse_elf(struct elf_info *info, const char *filename)
254277 {
255278 unsigned int i;
256279 Elf_Ehdr *hdr = info->hdr;
@@ -297,14 +320,13 @@ parse_elf(struct elf_info *info, const char *filename) · 40 unmodified lines
297320 continue;
298321
299322 info->symtab_start = (void *)hdr + sechdrs[i].sh_offset;
300− info->symtab_stop = (void *)hdr + sechdrs[i].sh_offset
323+ info->symtab_stop = (void *)hdr + sechdrs[i].sh_offset
301324 + sechdrs[i].sh_size;
302− info->strtab = (void *)hdr +
325+ info->strtab = (void *)hdr +
303326 sechdrs[sechdrs[i].sh_link].sh_offset;
304327 }
305328 if (!info->symtab_start) {
306− fprintf(stderr, "modpost: %s no symtab?\n", filename);
307− abort();
329+ fatal("%s has no symtab?\n", filename);
308330 }
309331 /* Fix endianness in symbols */
310332 for (sym = info->symtab_start; sym < info->symtab_stop; sym++) {
@@ -316,36 +338,31 @@ parse_elf(struct elf_info *info, const char *filename) · 5 unmodified lines
316338 return;
317339
318340 truncated:
319− fprintf(stderr, "modpost: %s is truncated.\n", filename);
320− abort();
341+ fatal("%s is truncated.\n", filename);
321342 }
322343
323−void
324−parse_elf_finish(struct elf_info *info)
344+static void parse_elf_finish(struct elf_info *info)
325345 {
326346 release_file(info->hdr, info->size);
327347 }
328348
329−#define CRC_PFX "__crc_"
330−#define KSYMTAB_PFX "__ksymtab_"
349+#define CRC_PFX MODULE_SYMBOL_PREFIX "__crc_"
350+#define KSYMTAB_PFX MODULE_SYMBOL_PREFIX "__ksymtab_"
331351
332−void
333−handle_modversions(struct module *mod, struct elf_info *info,
334− Elf_Sym *sym, const char *symname)
352+static void handle_modversions(struct module *mod, struct elf_info *info,
353+ Elf_Sym *sym, const char *symname)
335354 {
336355 unsigned int crc;
337356
338357 switch (sym->st_shndx) {
339358 case SHN_COMMON:
340− fprintf(stderr, "*** Warning: \"%s\" [%s] is COMMON symbol\n",
341− symname, mod->name);
359+ warn("\"%s\" [%s] is COMMON symbol\n", symname, mod->name);
342360 break;
343361 case SHN_ABS:
344362 /* CRC'd symbol */
345363 if (memcmp(symname, CRC_PFX, strlen(CRC_PFX)) == 0) {
346364 crc = (unsigned int) sym->st_value;
347− add_exported_symbol(symname + strlen(CRC_PFX),
348− mod, &crc);
365+ sym_update_crc(symname + strlen(CRC_PFX), mod, crc);
349366 }
350367 break;
351368 case SHN_UNDEF:
@@ -370,15 +387,15 @@ handle_modversions(struct module *mod, struct elf_info *info, · 18 unmodified lines
370387 /* Ignore register directives. */
371388 if (ELF_ST_TYPE(sym->st_info) == STT_SPARC_REGISTER)
372389 break;
373− if (symname[0] == '.') {
374− char *munged = strdup(symname);
375− munged[0] = '_';
376− munged[1] = toupper(munged[1]);
377− symname = munged;
378− }
390+ if (symname[0] == '.') {
391+ char *munged = strdup(symname);
392+ munged[0] = '_';
393+ munged[1] = toupper(munged[1]);
394+ symname = munged;
395+ }
379396 }
380397 #endif
381−
398+
382399 if (memcmp(symname, MODULE_SYMBOL_PREFIX,
383400 strlen(MODULE_SYMBOL_PREFIX)) == 0)
384401 mod->unres = alloc_symbol(symname +
@@ -389,8 +406,7 @@ handle_modversions(struct module *mod, struct elf_info *info, · 4 unmodified lines
389406 default:
390407 /* All exported symbols */
391408 if (memcmp(symname, KSYMTAB_PFX, strlen(KSYMTAB_PFX)) == 0) {
392− add_exported_symbol(symname + strlen(KSYMTAB_PFX),
393− mod, NULL);
409+ sym_add_exported(symname + strlen(KSYMTAB_PFX), mod);
394410 }
395411 if (strcmp(symname, MODULE_SYMBOL_PREFIX "init_module") == 0)
396412 mod->has_init = 1;
@@ -400,20 +416,9 @@ handle_modversions(struct module *mod, struct elf_info *info, · 3 unmodified lines
400416 }
401417 }
402418
403−int
404−is_vmlinux(const char *modname)
405−{
406− const char *myname;
407−
408− if ((myname = strrchr(modname, '/')))
409− myname++;
410− else
411− myname = modname;
412−
413− return strcmp(myname, "vmlinux") == 0;
414−}
415−
416−/* Parse tag=value strings from .modinfo section */
419+/**
420+ * Parse tag=value strings from .modinfo section
421+ **/
417422 static char *next_string(char *string, unsigned long *secsize)
418423 {
419424 /* Skip non-zero chars */
@@ -446,8 +451,418 @@ static char *get_modinfo(void *modinfo, unsigned long modinfo_len, · 26 unmodified lines
446451 return NULL;
447452 }
448453
449−void
450−read_symbols(char *modname)
454+/**
455+ * Test if string s ends in string sub
456+ * return 0 if match
457+ **/
458+static int strrcmp(const char *s, const char *sub)
459+{
460+ int slen, sublen;
461+
462+ if (!s || !sub)
463+ return 1;
464+
465+ slen = strlen(s);
466+ sublen = strlen(sub);
467+
468+ if ((slen == 0) || (sublen == 0))
469+ return 1;
470+
471+ if (sublen > slen)
472+ return 1;
473+
474+ return memcmp(s + slen - sublen, sub, sublen);
475+}
476+
477+/**
478+ * Whitelist to allow certain references to pass with no warning.
479+ * Pattern 1:
480+ * If a module parameter is declared __initdata and permissions=0
481+ * then this is legal despite the warning generated.
482+ * We cannot see value of permissions here, so just ignore
483+ * this pattern.
484+ * The pattern is identified by:
485+ * tosec = .init.data
486+ * fromsec = .data*
487+ * atsym =__param*
488+ *
489+ * Pattern 2:
490+ * Many drivers utilise a *_driver container with references to
491+ * add, remove, probe functions etc.
492+ * These functions may often be marked __init and we do not want to
493+ * warn here.
494+ * the pattern is identified by:
495+ * tosec = .init.text | .exit.text
496+ * fromsec = .data
497+ * atsym = *_driver, *_ops, *_probe, *probe_one
498+ **/
499+static int secref_whitelist(const char *tosec, const char *fromsec,
500+ const char *atsym)
501+{
502+ int f1 = 1, f2 = 1;
503+ const char **s;
504+ const char *pat2sym[] = {
505+ "_driver",
506+ "_ops",
507+ "_probe",
508+ "_probe_one",
509+ NULL
510+ };
511+
512+ /* Check for pattern 1 */
513+ if (strcmp(tosec, ".init.data") != 0)
514+ f1 = 0;
515+ if (strncmp(fromsec, ".data", strlen(".data")) != 0)
516+ f1 = 0;
517+ if (strncmp(atsym, "__param", strlen("__param")) != 0)
518+ f1 = 0;
519+
520+ if (f1)
521+ return f1;
522+
523+ /* Check for pattern 2 */
524+ if ((strcmp(tosec, ".init.text") != 0) &&
525+ (strcmp(tosec, ".exit.text") != 0))
526+ f2 = 0;
527+ if (strcmp(fromsec, ".data") != 0)
528+ f2 = 0;
529+
530+ for (s = pat2sym; *s; s++)
531+ if (strrcmp(atsym, *s) == 0)
532+ f1 = 1;
533+
534+ return f1 && f2;
535+}
536+
537+/**
538+ * Find symbol based on relocation record info.
539+ * In some cases the symbol supplied is a valid symbol so
540+ * return refsym. If st_name != 0 we assume this is a valid symbol.
541+ * In other cases the symbol needs to be looked up in the symbol table
542+ * based on section and address.
543+ * **/
544+static Elf_Sym *find_elf_symbol(struct elf_info *elf, Elf_Addr addr,
545+ Elf_Sym *relsym)
546+{
547+ Elf_Sym *sym;
548+
549+ if (relsym->st_name != 0)
550+ return relsym;
551+ for (sym = elf->symtab_start; sym < elf->symtab_stop; sym++) {
552+ if (sym->st_shndx != relsym->st_shndx)
553+ continue;
554+ if (sym->st_value == addr)
555+ return sym;
556+ }
557+ return NULL;
558+}
559+
560+/*
561+ * Find symbols before or equal addr and after addr - in the section sec.
562+ * If we find two symbols with equal offset prefer one with a valid name.
563+ * The ELF format may have a better way to detect what type of symbol
564+ * it is, but this works for now.
565+ **/
566+static void find_symbols_between(struct elf_info *elf, Elf_Addr addr,
567+ const char *sec,
568+ Elf_Sym **before, Elf_Sym **after)
569+{
570+ Elf_Sym *sym;
571+ Elf_Ehdr *hdr = elf->hdr;
572+ Elf_Addr beforediff = ~0;
573+ Elf_Addr afterdiff = ~0;
574+ const char *secstrings = (void *)hdr +
575+ elf->sechdrs[hdr->e_shstrndx].sh_offset;
576+
577+ *before = NULL;
578+ *after = NULL;
579+
580+ for (sym = elf->symtab_start; sym < elf->symtab_stop; sym++) {
581+ const char *symsec;
582+
583+ if (sym->st_shndx >= SHN_LORESERVE)
584+ continue;
585+ symsec = secstrings + elf->sechdrs[sym->st_shndx].sh_name;
586+ if (strcmp(symsec, sec) != 0)
587+ continue;
588+ if (sym->st_value <= addr) {
589+ if ((addr - sym->st_value) < beforediff) {
590+ beforediff = addr - sym->st_value;
591+ *before = sym;
592+ }
593+ else if ((addr - sym->st_value) == beforediff) {
594+ /* equal offset, valid name? */
595+ const char *name = elf->strtab + sym->st_name;
596+ if (name && strlen(name))
597+ *before = sym;
598+ }
599+ }
600+ else
601+ {
602+ if ((sym->st_value - addr) < afterdiff) {
603+ afterdiff = sym->st_value - addr;
604+ *after = sym;
605+ }
606+ else if ((sym->st_value - addr) == afterdiff) {
607+ /* equal offset, valid name? */
608+ const char *name = elf->strtab + sym->st_name;
609+ if (name && strlen(name))
610+ *after = sym;
611+ }
612+ }
613+ }
614+}
615+
616+/**
617+ * Print a warning about a section mismatch.
618+ * Try to find symbols near it so user can find it.
619+ * Check whitelist before warning - it may be a false positive.
620+ **/
621+static void warn_sec_mismatch(const char *modname, const char *fromsec,
622+ struct elf_info *elf, Elf_Sym *sym, Elf_Rela r)
623+{
624+ const char *refsymname = "";
625+ Elf_Sym *before, *after;
626+ Elf_Sym *refsym;
627+ Elf_Ehdr *hdr = elf->hdr;
628+ Elf_Shdr *sechdrs = elf->sechdrs;
629+ const char *secstrings = (void *)hdr +
630+ sechdrs[hdr->e_shstrndx].sh_offset;
631+ const char *secname = secstrings + sechdrs[sym->st_shndx].sh_name;
632+
633+ find_symbols_between(elf, r.r_offset, fromsec, &before, &after);
634+
635+ refsym = find_elf_symbol(elf, r.r_addend, sym);
636+ if (refsym && strlen(elf->strtab + refsym->st_name))
637+ refsymname = elf->strtab + refsym->st_name;
638+
639+ /* check whitelist - we may ignore it */
640+ if (before &&
641+ secref_whitelist(secname, fromsec, elf->strtab + before->st_name))
642+ return;
643+
644+ if (before && after) {
645+ warn("%s - Section mismatch: reference to %s:%s from %s "
646+ "between '%s' (at offset 0x%llx) and '%s'\n",
647+ modname, secname, refsymname, fromsec,
648+ elf->strtab + before->st_name,
649+ (long long)r.r_offset,
650+ elf->strtab + after->st_name);
651+ } else if (before) {
652+ warn("%s - Section mismatch: reference to %s:%s from %s "
653+ "after '%s' (at offset 0x%llx)\n",
654+ modname, secname, refsymname, fromsec,
655+ elf->strtab + before->st_name,
656+ (long long)r.r_offset);
657+ } else if (after) {
658+ warn("%s - Section mismatch: reference to %s:%s from %s "
659+ "before '%s' (at offset -0x%llx)\n",
660+ modname, secname, refsymname, fromsec,
661+ elf->strtab + before->st_name,
662+ (long long)r.r_offset);
663+ } else {
664+ warn("%s - Section mismatch: reference to %s:%s from %s "
665+ "(offset 0x%llx)\n",
666+ modname, secname, fromsec, refsymname,
667+ (long long)r.r_offset);
668+ }
669+}
670+
671+/**
672+ * A module includes a number of sections that are discarded
673+ * either when loaded or when used as built-in.
674+ * For loaded modules all functions marked __init and all data
675+ * marked __initdata will be discarded when the module has been intialized.
676+ * Likewise for modules used built-in the sections marked __exit
677+ * are discarded because __exit marked function are supposed to be called
678+ * only when a moduel is unloaded which never happes for built-in modules.
679+ * The check_sec_ref() function traverses all relocation records
680+ * to find all references to a section that reference a section that will
681+ * be discarded and warns about it.
682+ **/
683+static void check_sec_ref(struct module *mod, const char *modname,
684+ struct elf_info *elf,
685+ int section(const char*),
686+ int section_ref_ok(const char *))
687+{
688+ int i;
689+ Elf_Sym *sym;
690+ Elf_Ehdr *hdr = elf->hdr;
691+ Elf_Shdr *sechdrs = elf->sechdrs;
692+ const char *secstrings = (void *)hdr +
693+ sechdrs[hdr->e_shstrndx].sh_offset;
694+
695+ /* Walk through all sections */
696+ for (i = 0; i < hdr->e_shnum; i++) {
697+ Elf_Rela *rela;
698+ Elf_Rela *start = (void *)hdr + sechdrs[i].sh_offset;
699+ Elf_Rela *stop = (void*)start + sechdrs[i].sh_size;
700+ const char *name = secstrings + sechdrs[i].sh_name +
701+ strlen(".rela");
702+ /* We want to process only relocation sections and not .init */
703+ if (section_ref_ok(name) || (sechdrs[i].sh_type != SHT_RELA))
704+ continue;
705+
706+ for (rela = start; rela < stop; rela++) {
707+ Elf_Rela r;
708+ const char *secname;
709+ r.r_offset = TO_NATIVE(rela->r_offset);
710+ r.r_info = TO_NATIVE(rela->r_info);
711+ r.r_addend = TO_NATIVE(rela->r_addend);
712+ sym = elf->symtab_start + ELF_R_SYM(r.r_info);
713+ /* Skip special sections */
714+ if (sym->st_shndx >= SHN_LORESERVE)
715+ continue;
716+
717+ secname = secstrings + sechdrs[sym->st_shndx].sh_name;
718+ if (section(secname))
719+ warn_sec_mismatch(modname, name, elf, sym, r);
720+ }
721+ }
722+}
723+
724+/**
725+ * Functions used only during module init is marked __init and is stored in
726+ * a .init.text section. Likewise data is marked __initdata and stored in
727+ * a .init.data section.
728+ * If this section is one of these sections return 1
729+ * See include/linux/init.h for the details
730+ **/
731+static int init_section(const char *name)
732+{
733+ if (strcmp(name, ".init") == 0)
734+ return 1;
735+ if (strncmp(name, ".init.", strlen(".init.")) == 0)
736+ return 1;
737+ return 0;
738+}
739+
740+/**
741+ * Identify sections from which references to a .init section is OK.
742+ *
743+ * Unfortunately references to read only data that referenced .init
744+ * sections had to be excluded. Almost all of these are false
745+ * positives, they are created by gcc. The downside of excluding rodata
746+ * is that there really are some user references from rodata to
747+ * init code, e.g. drivers/video/vgacon.c:
748+ *
749+ * const struct consw vga_con = {
750+ * con_startup: vgacon_startup,
751+ *
752+ * where vgacon_startup is __init. If you want to wade through the false
753+ * positives, take out the check for rodata.
754+ **/
755+static int init_section_ref_ok(const char *name)
756+{
757+ const char **s;
758+ /* Absolute section names */
759+ const char *namelist1[] = {
760+ ".init",
761+ ".opd", /* see comment [OPD] at exit_section_ref_ok() */
762+ ".toc1", /* used by ppc64 */
763+ ".stab",
764+ ".rodata",
765+ ".text.lock",
766+ "__bug_table", /* used by powerpc for BUG() */
767+ ".pci_fixup_header",
768+ ".pci_fixup_final",
769+ ".pdr",
770+ "__param",
771+ NULL
772+ };
773+ /* Start of section names */
774+ const char *namelist2[] = {
775+ ".init.",
776+ ".altinstructions",
777+ ".eh_frame",
778+ ".debug",
779+ NULL
780+ };
781+ /* part of section name */
782+ const char *namelist3 [] = {
783+ ".unwind", /* sample: IA_64.unwind.init.text */
784+ NULL
785+ };
786+
787+ for (s = namelist1; *s; s++)
788+ if (strcmp(*s, name) == 0)
789+ return 1;
790+ for (s = namelist2; *s; s++)
791+ if (strncmp(*s, name, strlen(*s)) == 0)
792+ return 1;
793+ for (s = namelist3; *s; s++)
794+ if (strstr(name, *s) != NULL)
795+ return 1;
796+ return 0;
797+}
798+
799+/*
800+ * Functions used only during module exit is marked __exit and is stored in
801+ * a .exit.text section. Likewise data is marked __exitdata and stored in
802+ * a .exit.data section.
803+ * If this section is one of these sections return 1
804+ * See include/linux/init.h for the details
805+ **/
806+static int exit_section(const char *name)
807+{
808+ if (strcmp(name, ".exit.text") == 0)
809+ return 1;
810+ if (strcmp(name, ".exit.data") == 0)
811+ return 1;
812+ return 0;
813+
814+}
815+
816+/*
817+ * Identify sections from which references to a .exit section is OK.
818+ *
819+ * [OPD] Keith Ownes <kaos@sgi.com> commented:
820+ * For our future {in}sanity, add a comment that this is the ppc .opd
821+ * section, not the ia64 .opd section.
822+ * ia64 .opd should not point to discarded sections.
823+ **/
824+static int exit_section_ref_ok(const char *name)
825+{
826+ const char **s;
827+ /* Absolute section names */
828+ const char *namelist1[] = {
829+ ".exit.text",
830+ ".exit.data",
831+ ".init.text",
832+ ".opd", /* See comment [OPD] */
833+ ".toc1", /* used by ppc64 */
834+ ".altinstructions",
835+ ".pdr",
836+ "__bug_table", /* used by powerpc for BUG() */
837+ ".exitcall.exit",
838+ ".eh_frame",
839+ ".stab",
840+ NULL
841+ };
842+ /* Start of section names */
843+ const char *namelist2[] = {
844+ ".debug",
845+ NULL
846+ };
847+ /* part of section name */
848+ const char *namelist3 [] = {
849+ ".unwind", /* Sample: IA_64.unwind.exit.text */
850+ NULL
851+ };
852+
853+ for (s = namelist1; *s; s++)
854+ if (strcmp(*s, name) == 0)
855+ return 1;
856+ for (s = namelist2; *s; s++)
857+ if (strncmp(*s, name, strlen(*s)) == 0)
858+ return 1;
859+ for (s = namelist3; *s; s++)
860+ if (strstr(name, *s) != NULL)
861+ return 1;
862+ return 0;
863+}
864+
865+static void read_symbols(char *modname)
451866 {
452867 const char *symname;
453868 char *version;
@@ -462,9 +877,7 @@ read_symbols(char *modname) · 8 unmodified lines
462877 /* When there's no vmlinux, don't print warnings about
463878 * unresolved symbols (since there'll be too many ;) */
464879 if (is_vmlinux(modname)) {
465− unsigned int fake_crc = 0;
466880 have_vmlinux = 1;
467− add_exported_symbol("struct_module", mod, &fake_crc);
468881 mod->skip = 1;
469882 }
470883
@@ -474,6 +887,8 @@ read_symbols(char *modname) · 3 unmodified lines
474887 handle_modversions(mod, &info, sym, symname);
475888 handle_moddevtable(mod, &info, sym, symname);
476889 }
890+ check_sec_ref(mod, modname, &info, init_section, init_section_ref_ok);
891+ check_sec_ref(mod, modname, &info, exit_section, exit_section_ref_ok);
477892
478893 version = get_modinfo(info.modinfo, info.modinfo_len, "version");
479894 if (version)
@@ -499,21 +914,20 @@ read_symbols(char *modname) · 19 unmodified lines
499914 * following helper, then compare to the file on disk and
500915 * only update the later if anything changed */
501916
502−void __attribute__((format(printf, 2, 3)))
503−buf_printf(struct buffer *buf, const char *fmt, ...)
917+void __attribute__((format(printf, 2, 3))) buf_printf(struct buffer *buf,
918+ const char *fmt, ...)
504919 {
505920 char tmp[SZ];
506921 int len;
507922 va_list ap;
508−
923+
509924 va_start(ap, fmt);
510925 len = vsnprintf(tmp, SZ, fmt, ap);
511926 buf_write(buf, tmp, len);
512927 va_end(ap);
513928 }
514929
515−void
516−buf_write(struct buffer *buf, const char *s, int len)
930+void buf_write(struct buffer *buf, const char *s, int len)
517931 {
518932 if (buf->size - buf->pos < len) {
519933 buf->size += len + SZ;
@@ -523,10 +937,10 @@ buf_write(struct buffer *buf, const char *s, int len) · 3 unmodified lines
523937 buf->pos += len;
524938 }
525939
526−/* Header for the generated file */
527−
528−void
529−add_header(struct buffer *b, struct module *mod)
940+/**
941+ * Header for the generated file
942+ **/
943+static void add_header(struct buffer *b, struct module *mod)
530944 {
531945 buf_printf(b, "#include <linux/module.h>\n");
532946 buf_printf(b, "#include <linux/vermagic.h>\n");
@@ -546,10 +960,10 @@ add_header(struct buffer *b, struct module *mod) · 13 unmodified lines
546960 buf_printf(b, "};\n");
547961 }
548962
549−/* Record CRCs for unresolved symbols */
550−
551−void
552−add_versions(struct buffer *b, struct module *mod)
963+/**
964+ * Record CRCs for unresolved symbols
965+ **/
966+static void add_versions(struct buffer *b, struct module *mod)
553967 {
554968 struct symbol *s, *exp;
555969
@@ -557,8 +971,8 @@ add_versions(struct buffer *b, struct module *mod) · 1 unmodified line
557971 exp = find_symbol(s->name);
558972 if (!exp || exp->module == mod) {
559973 if (have_vmlinux && !s->weak)
560− fprintf(stderr, "*** Warning: \"%s\" [%s.ko] "
561− "undefined!\n", s->name, mod->name);
974+ warn("\"%s\" [%s.ko] undefined!\n",
975+ s->name, mod->name);
562976 continue;
563977 }
564978 s->module = exp->module;
@@ -579,8 +993,7 @@ add_versions(struct buffer *b, struct module *mod) · 14 unmodified lines
579993 continue;
580994 }
581995 if (!s->crc_valid) {
582− fprintf(stderr, "*** Warning: \"%s\" [%s.ko] "
583− "has no CRC!\n",
996+ warn("\"%s\" [%s.ko] has no CRC!\n",
584997 s->name, mod->name);
585998 continue;
586999 }
@@ -590,8 +1003,8 @@ add_versions(struct buffer *b, struct module *mod) · 3 unmodified lines
5901003 buf_printf(b, "};\n");
5911004 }
5921005
593−void
594−add_depends(struct buffer *b, struct module *mod, struct module *modules)
1006+static void add_depends(struct buffer *b, struct module *mod,
1007+ struct module *modules)
5951008 {
5961009 struct symbol *s;
5971010 struct module *m;
@@ -621,8 +1034,7 @@ add_depends(struct buffer *b, struct module *mod, struct module *modules) · 23 unmodified lines
6211034 buf_printf(b, "\";\n");
6221035 }
6231036
624−void
625−add_srcversion(struct buffer *b, struct module *mod)
1037+static void add_srcversion(struct buffer *b, struct module *mod)
6261038 {
6271039 if (mod->srcversion[0]) {
6281040 buf_printf(b, "\n");
@@ -631,8 +1043,7 @@ add_srcversion(struct buffer *b, struct module *mod) · 2 unmodified lines
6311043 }
6321044 }
6331045
634−void
635−write_if_changed(struct buffer *b, const char *fname)
1046+static void write_if_changed(struct buffer *b, const char *fname)
6361047 {
6371048 char *tmp;
6381049 FILE *file;
@@ -676,8 +1087,7 @@ write_if_changed(struct buffer *b, const char *fname) · 37 unmodified lines
6761087 fclose(file);
6771088 }
6781089
679−void
680−read_dump(const char *fname)
1090+static void read_dump(const char *fname, unsigned int kernel)
6811091 {
6821092 unsigned long size, pos = 0;
6831093 void *file = grab_file(fname, &size);
@@ -691,6 +1101,7 @@ read_dump(const char *fname) · 7 unmodified lines
6911101 char *symname, *modname, *d;
6921102 unsigned int crc;
6931103 struct module *mod;
1104+ struct symbol *s;
6941105
6951106 if (!(symname = strchr(line, '\t')))
6961107 goto fail;
@@ -711,15 +1122,30 @@ read_dump(const char *fname) · 14 unmodified lines
7111122 mod = new_module(NOFAIL(strdup(modname)));
7121123 mod->skip = 1;
7131124 }
714− add_exported_symbol(symname, mod, &crc);
1125+ s = sym_add_exported(symname, mod);
1126+ s->kernel = kernel;
1127+ s->preloaded = 1;
1128+ sym_update_crc(symname, mod, crc);
7151129 }
7161130 return;
7171131 fail:
7181132 fatal("parse error in symbol dump file\n");
7191133 }
7201134
721−void
722−write_dump(const char *fname)
1135+/* For normal builds always dump all symbols.
1136+ * For external modules only dump symbols
1137+ * that are not read from kernel Module.symvers.
1138+ **/
1139+static int dump_sym(struct symbol *sym)
1140+{
1141+ if (!external_module)
1142+ return 1;
1143+ if (sym->vmlinux || sym->kernel)
1144+ return 0;
1145+ return 1;
1146+}
1147+
1148+static void write_dump(const char *fname)
7231149 {
7241150 struct buffer buf = { };
7251151 struct symbol *symbol;
@@ -728,34 +1154,33 @@ write_dump(const char *fname) · 2 unmodified lines
7281154 for (n = 0; n < SYMBOL_HASH_SIZE ; n++) {
7291155 symbol = symbolhash[n];
7301156 while (symbol) {
731− symbol = symbol->next;
732− }
733− }
734−
735− for (n = 0; n < SYMBOL_HASH_SIZE ; n++) {
736− symbol = symbolhash[n];
737− while (symbol) {
738− buf_printf(&buf, "0x%08x\t%s\t%s\n", symbol->crc,
739− symbol->name, symbol->module->name);
1157+ if (dump_sym(symbol))
1158+ buf_printf(&buf, "0x%08x\t%s\t%s\n",
1159+ symbol->crc, symbol->name,
1160+ symbol->module->name);
7401161 symbol = symbol->next;
7411162 }
7421163 }
7431164 write_if_changed(&buf, fname);
7441165 }
7451166
746−int
747−main(int argc, char **argv)
1167+int main(int argc, char **argv)
7481168 {
7491169 struct module *mod;
7501170 struct buffer buf = { };
7511171 char fname[SZ];
752− char *dump_read = NULL, *dump_write = NULL;
1172+ char *kernel_read = NULL, *module_read = NULL;
1173+ char *dump_write = NULL;
7531174 int opt;
7541175
755− while ((opt = getopt(argc, argv, "i:mo:a")) != -1) {
1176+ while ((opt = getopt(argc, argv, "i:I:mo:a")) != -1) {
7561177 switch(opt) {
7571178 case 'i':
758− dump_read = optarg;
1179+ kernel_read = optarg;
1180+ break;
1181+ case 'I':
1182+ module_read = optarg;
1183+ external_module = 1;
7591184 break;
7601185 case 'm':
7611186 modversions = 1;
@@ -771,8 +1196,10 @@ main(int argc, char **argv) · 9 unmodified lines
7711196 }
7721197 }
7731198
774− if (dump_read)
775− read_dump(dump_read);
1199+ if (kernel_read)
1200+ read_dump(kernel_read, 1);
1201+ if (module_read)
1202+ read_dump(module_read, 0);
7761203
7771204 while (optind < argc) {
7781205 read_symbols(argv[optind++]);
@@ -799,4 +1226,3 @@ main(int argc, char **argv) · 20 unmodified lines
7991226
8001227 return 0;
8011228 }
802−
scripts/mod/modpost.h+20−5
@@ -13,20 +13,30 @@ · 12 unmodified lines
1313
1414 #if KERNEL_ELFCLASS == ELFCLASS32
1515
16−#define Elf_Ehdr Elf32_Ehdr
17−#define Elf_Shdr Elf32_Shdr
16+#define Elf_Ehdr Elf32_Ehdr
17+#define Elf_Shdr Elf32_Shdr
1818 #define Elf_Sym Elf32_Sym
19+#define Elf_Addr Elf32_Addr
20+#define Elf_Section Elf32_Section
1921 #define ELF_ST_BIND ELF32_ST_BIND
2022 #define ELF_ST_TYPE ELF32_ST_TYPE
2123
24+#define Elf_Rela Elf32_Rela
25+#define ELF_R_SYM ELF32_R_SYM
26+#define ELF_R_TYPE ELF32_R_TYPE
2227 #else
2328
24−#define Elf_Ehdr Elf64_Ehdr
25−#define Elf_Shdr Elf64_Shdr
29+#define Elf_Ehdr Elf64_Ehdr
30+#define Elf_Shdr Elf64_Shdr
2631 #define Elf_Sym Elf64_Sym
32+#define Elf_Addr Elf64_Addr
33+#define Elf_Section Elf64_Section
2734 #define ELF_ST_BIND ELF64_ST_BIND
2835 #define ELF_ST_TYPE ELF64_ST_TYPE
2936
37+#define Elf_Rela Elf64_Rela
38+#define ELF_R_SYM ELF64_R_SYM
39+#define ELF_R_TYPE ELF64_R_TYPE
3040 #endif
3141
3242 #if KERNEL_ELFDATA != HOST_ELFDATA
@@ -91,17 +101,22 @@ struct elf_info { · 58 unmodified lines
91101 unsigned int modinfo_len;
92102 };
93103
104+/* file2alias.c */
94105 void handle_moddevtable(struct module *mod, struct elf_info *info,
95106 Elf_Sym *sym, const char *symname);
96−
97107 void add_moddevtable(struct buffer *buf, struct module *mod);
98108
109+/* sumversion.c */
99110 void maybe_frob_rcs_version(const char *modfilename,
100111 char *version,
101112 void *modinfo,
102113 unsigned long modinfo_offset);
103114 void get_src_version(const char *modname, char sum[], unsigned sumlen);
104115
116+/* from modpost.c */
105117 void *grab_file(const char *filename, unsigned long *size);
106118 char* get_next_line(unsigned long *pos, void *file, unsigned long size);
107119 void release_file(void *file, unsigned long size);
120+
121+void fatal(const char *fmt, ...);
122+void warn(const char *fmt, ...);
scripts/mod/sumversion.c+15−17
@@ -316,8 +316,7 @@ static int parse_source_files(const char *objfile, struct md4_ctx *md) · 315 unmodified lines
316316
317317 file = grab_file(cmd, &flen);
318318 if (!file) {
319− fprintf(stderr, "Warning: could not find %s for %s\n",
320− cmd, objfile);
319+ warn("could not find %s for %s\n", cmd, objfile);
321320 goto out;
322321 }
323322
@@ -355,9 +354,8 @@ static int parse_source_files(const char *objfile, struct md4_ctx *md) · 31 unmodified lines
355354 /* Check if this file is in same dir as objfile */
356355 if ((strstr(line, dir)+strlen(dir)-1) == strrchr(line, '/')) {
357356 if (!parse_file(line, md)) {
358− fprintf(stderr,
359− "Warning: could not open %s: %s\n",
360− line, strerror(errno));
357+ warn("could not open %s: %s\n",
358+ line, strerror(errno));
361359 goto out_file;
362360 }
363361
@@ -383,8 +381,11 @@ void get_src_version(const char *modname, char sum[], unsigned sumlen) · 19 unmodified lines
383381 struct md4_ctx md;
384382 char *sources, *end, *fname;
385383 const char *basename;
386− char filelist[strlen(getenv("MODVERDIR")) + strlen("/") +
387− strlen(modname) - strlen(".o") + strlen(".mod") + 1 ];
384+ char filelist[PATH_MAX + 1];
385+ char *modverdir = getenv("MODVERDIR");
386+
387+ if (!modverdir)
388+ modverdir = ".";
388389
389390 /* Source files for module are in .tmp_versions/modname.mod,
390391 after the first line. */
@@ -392,28 +393,25 @@ void get_src_version(const char *modname, char sum[], unsigned sumlen) · 1 unmodified line
392393 basename = strrchr(modname, '/') + 1;
393394 else
394395 basename = modname;
395− sprintf(filelist, "%s/%.*s.mod", getenv("MODVERDIR"),
396+ sprintf(filelist, "%s/%.*s.mod", modverdir,
396397 (int) strlen(basename) - 2, basename);
397398
398399 file = grab_file(filelist, &len);
399400 if (!file) {
400− fprintf(stderr, "Warning: could not find versions for %s\n",
401− filelist);
401+ warn("could not find versions for %s\n", filelist);
402402 return;
403403 }
404404
405405 sources = strchr(file, '\n');
406406 if (!sources) {
407− fprintf(stderr, "Warning: malformed versions file for %s\n",
408− modname);
407+ warn("malformed versions file for %s\n", modname);
409408 goto release;
410409 }
411410
412411 sources++;
413412 end = strchr(sources, '\n');
414413 if (!end) {
415− fprintf(stderr, "Warning: bad ending versions file for %s\n",
416− modname);
414+ warn("bad ending versions file for %s\n", modname);
417415 goto release;
418416 }
419417 *end = '\0';
@@ -438,19 +436,19 @@ static void write_version(const char *filename, const char *sum, · 18 unmodified lines
438436
439437 fd = open(filename, O_RDWR);
440438 if (fd < 0) {
441− fprintf(stderr, "Warning: changing sum in %s failed: %s\n",
439+ warn("changing sum in %s failed: %s\n",
442440 filename, strerror(errno));
443441 return;
444442 }
445443
446444 if (lseek(fd, offset, SEEK_SET) == (off_t)-1) {
447− fprintf(stderr, "Warning: changing sum in %s:%lu failed: %s\n",
445+ warn("changing sum in %s:%lu failed: %s\n",
448446 filename, offset, strerror(errno));
449447 goto out;
450448 }
451449
452450 if (write(fd, sum, strlen(sum)+1) != strlen(sum)+1) {
453− fprintf(stderr, "Warning: writing sum in %s failed: %s\n",
451+ warn("writing sum in %s failed: %s\n",
454452 filename, strerror(errno));
455453 goto out;
456454 }
scripts/namespace.pl+2−2
@@ -66,8 +66,8 @@ require 5; # at least perl 5 · 65 unmodified lines
6666 use strict;
6767 use File::Find;
6868
69−my $nm = "/usr/bin/nm -p";
70−my $objdump = "/usr/bin/objdump -s -j .comment";
69+my $nm = ($ENV{'NM'} || "nm") . " -p";
70+my $objdump = ($ENV{'OBJDUMP'} || "objdump") . " -s -j .comment";
7171 my $srctree = "";
7272 my $objtree = "";
7373 $srctree = "$ENV{'srctree'}/" if (exists($ENV{'srctree'}));
scripts/package/Makefile+8−12
@@ -32,12 +32,11 @@ MKSPEC := $(srctree)/scripts/package/mkspec · 31 unmodified lines
3232 PREV := set -e; cd ..;
3333
3434 # rpm-pkg
35−.PHONY: rpm-pkg rpm
36−
35+# ---------------------------------------------------------------------------
3736 $(objtree)/kernel.spec: $(MKSPEC) $(srctree)/Makefile
3837 $(CONFIG_SHELL) $(MKSPEC) > $@
3938
40−rpm-pkg rpm: $(objtree)/kernel.spec
39+rpm-pkg rpm: $(objtree)/kernel.spec FORCE
4140 $(MAKE) clean
4241 $(PREV) ln -sf $(srctree) $(KERNELPATH)
4342 $(PREV) tar -cz $(RCS_TAR_IGNORE) -f $(KERNELPATH).tar.gz $(KERNELPATH)/.
@@ -54,11 +53,11 @@ rpm-pkg rpm: $(objtree)/kernel.spec · 10 unmodified lines
5453 clean-files := $(objtree)/kernel.spec
5554
5655 # binrpm-pkg
57−.PHONY: binrpm-pkg
56+# ---------------------------------------------------------------------------
5857 $(objtree)/binkernel.spec: $(MKSPEC) $(srctree)/Makefile
5958 $(CONFIG_SHELL) $(MKSPEC) prebuilt > $@
60−
61−binrpm-pkg: $(objtree)/binkernel.spec
59+
60+binrpm-pkg: $(objtree)/binkernel.spec FORCE
6261 $(MAKE) KBUILD_SRC=
6362 set -e; \
6463 $(CONFIG_SHELL) $(srctree)/scripts/mkversion > $(objtree)/.tmp_version
@@ -71,9 +70,7 @@ clean-files += $(objtree)/binkernel.spec · 6 unmodified lines
7170
7271 # Deb target
7372 # ---------------------------------------------------------------------------
74−#
75−.PHONY: deb-pkg
76−deb-pkg:
73+deb-pkg: FORCE
7774 $(MAKE) KBUILD_SRC=
7875 $(CONFIG_SHELL) $(srctree)/scripts/package/builddeb
7976
@@ -82,8 +79,7 @@ clean-dirs += $(objtree)/debian/ · 2 unmodified lines
8279
8380 # tarball targets
8481 # ---------------------------------------------------------------------------
85−.PHONY: tar%pkg
86−tar%pkg:
82+tar%pkg: FORCE
8783 $(MAKE) KBUILD_SRC=
8884 $(CONFIG_SHELL) $(srctree)/scripts/package/buildtar $@
8985
@@ -92,7 +88,7 @@ clean-dirs += $(objtree)/tar-install/ · 2 unmodified lines
9288
9389 # Help text displayed when executing 'make help'
9490 # ---------------------------------------------------------------------------
95−help:
91+help: FORCE
9692 @echo ' rpm-pkg - Build the kernel as an RPM package'
9793 @echo ' binrpm-pkg - Build an rpm package containing the compiled kernel'
9894 @echo ' and modules'
scripts/reference_discarded.pl+0−112
@@ -1,112 +0,0 @@
1−#!/usr/bin/perl -w
2−#
3−# reference_discarded.pl (C) Keith Owens 2001 <kaos@ocs.com.au>
4−#
5−# Released under GPL V2.
6−#
7−# List dangling references to vmlinux discarded sections.
8−
9−use strict;
10−die($0 . " takes no arguments\n") if($#ARGV >= 0);
11−
12−my %object;
13−my $object;
14−my $line;
15−my $ignore;
16−my $errorcount;
17−
18−$| = 1;
19−
20−# printf("Finding objects, ");
21−open(OBJDUMP_LIST, "find . -name '*.o' | xargs objdump -h |") || die "getting objdump list failed";
22−while (defined($line = <OBJDUMP_LIST>)) {
23− chomp($line);
24− if ($line =~ /:\s+file format/) {
25− ($object = $line) =~ s/:.*//;
26− $object{$object}->{'module'} = 0;
27− $object{$object}->{'size'} = 0;
28− $object{$object}->{'off'} = 0;
29− }
30− if ($line =~ /^\s*\d+\s+\.modinfo\s+/) {
31− $object{$object}->{'module'} = 1;
32− }
33− if ($line =~ /^\s*\d+\s+\.comment\s+/) {
34− ($object{$object}->{'size'}, $object{$object}->{'off'}) = (split(' ', $line))[2,5];
35− }
36−}
37−close(OBJDUMP_LIST);
38−# printf("%d objects, ", scalar keys(%object));
39−$ignore = 0;
40−foreach $object (keys(%object)) {
41− if ($object{$object}->{'module'}) {
42− ++$ignore;
43− delete($object{$object});
44− }
45−}
46−# printf("ignoring %d module(s)\n", $ignore);
47−
48−# Ignore conglomerate objects, they have been built from multiple objects and we
49−# only care about the individual objects. If an object has more than one GCC:
50−# string in the comment section then it is conglomerate. This does not filter
51−# out conglomerates that consist of exactly one object, can't be helped.
52−
53−# printf("Finding conglomerates, ");
54−$ignore = 0;
55−foreach $object (keys(%object)) {
56− if (exists($object{$object}->{'off'})) {
57− my ($off, $size, $comment, $l);
58− $off = hex($object{$object}->{'off'});
59− $size = hex($object{$object}->{'size'});
60− open(OBJECT, "<$object") || die "cannot read $object";
61− seek(OBJECT, $off, 0) || die "seek to $off in $object failed";
62− $l = read(OBJECT, $comment, $size);
63− die "read $size bytes from $object .comment failed" if ($l != $size);
64− close(OBJECT);
65− if ($comment =~ /GCC\:.*GCC\:/m || $object =~ /built-in\.o/) {
66− ++$ignore;
67− delete($object{$object});
68− }
69− }
70−}
71−# printf("ignoring %d conglomerate(s)\n", $ignore);
72−
73−# printf("Scanning objects\n");
74−
75−# Keith Ownes <kaos@sgi.com> commented:
76−# For our future {in}sanity, add a comment that this is the ppc .opd
77−# section, not the ia64 .opd section.
78−# ia64 .opd should not point to discarded sections.
79−$errorcount = 0;
80−foreach $object (keys(%object)) {
81− my $from;
82− open(OBJDUMP, "objdump -r $object|") || die "cannot objdump -r $object";
83− while (defined($line = <OBJDUMP>)) {
84− chomp($line);
85− if ($line =~ /RELOCATION RECORDS FOR /) {
86− ($from = $line) =~ s/.*\[([^]]*).*/$1/;
87− }
88− if (($line =~ /\.text\.exit$/ ||
89− $line =~ /\.exit\.text$/ ||
90− $line =~ /\.data\.exit$/ ||
91− $line =~ /\.exit\.data$/ ||
92− $line =~ /\.exitcall\.exit$/) &&
93− ($from !~ /\.text\.exit$/ &&
94− $from !~ /\.exit\.text$/ &&
95− $from !~ /\.data\.exit$/ &&
96− $from !~ /\.opd$/ &&
97− $from !~ /\.exit\.data$/ &&
98− $from !~ /\.altinstructions$/ &&
99− $from !~ /\.pdr$/ &&
100− $from !~ /\.debug_.*$/ &&
101− $from !~ /\.exitcall\.exit$/ &&
102− $from !~ /\.eh_frame$/ &&
103− $from !~ /\.stab$/)) {
104− printf("Error: %s %s refers to %s\n", $object, $from, $line);
105− $errorcount = $errorcount + 1;
106− }
107− }
108− close(OBJDUMP);
109−}
110−# printf("Done\n");
111−
112−exit(0);
scripts/reference_init.pl+0−108
@@ -1,108 +0,0 @@
1−#!/usr/bin/perl -w
2−#
3−# reference_init.pl (C) Keith Owens 2002 <kaos@ocs.com.au>
4−#
5−# List references to vmlinux init sections from non-init sections.
6−
7−# Unfortunately I had to exclude references from read only data to .init
8−# sections, almost all of these are false positives, they are created by
9−# gcc. The downside of excluding rodata is that there really are some
10−# user references from rodata to init code, e.g. drivers/video/vgacon.c
11−#
12−# const struct consw vga_con = {
13−# con_startup: vgacon_startup,
14−#
15−# where vgacon_startup is __init. If you want to wade through the false
16−# positives, take out the check for rodata.
17−
18−use strict;
19−die($0 . " takes no arguments\n") if($#ARGV >= 0);
20−
21−my %object;
22−my $object;
23−my $line;
24−my $ignore;
25−
26−$| = 1;
27−
28−printf("Finding objects, ");
29−open(OBJDUMP_LIST, "find . -name '*.o' | xargs objdump -h |") || die "getting objdump list failed";
30−while (defined($line = <OBJDUMP_LIST>)) {
31− chomp($line);
32− if ($line =~ /:\s+file format/) {
33− ($object = $line) =~ s/:.*//;
34− $object{$object}->{'module'} = 0;
35− $object{$object}->{'size'} = 0;
36− $object{$object}->{'off'} = 0;
37− }
38− if ($line =~ /^\s*\d+\s+\.modinfo\s+/) {
39− $object{$object}->{'module'} = 1;
40− }
41− if ($line =~ /^\s*\d+\s+\.comment\s+/) {
42− ($object{$object}->{'size'}, $object{$object}->{'off'}) = (split(' ', $line))[2,5];
43− }
44−}
45−close(OBJDUMP_LIST);
46−printf("%d objects, ", scalar keys(%object));
47−$ignore = 0;
48−foreach $object (keys(%object)) {
49− if ($object{$object}->{'module'}) {
50− ++$ignore;
51− delete($object{$object});
52− }
53−}
54−printf("ignoring %d module(s)\n", $ignore);
55−
56−# Ignore conglomerate objects, they have been built from multiple objects and we
57−# only care about the individual objects. If an object has more than one GCC:
58−# string in the comment section then it is conglomerate. This does not filter
59−# out conglomerates that consist of exactly one object, can't be helped.
60−
61−printf("Finding conglomerates, ");
62−$ignore = 0;
63−foreach $object (keys(%object)) {
64− if (exists($object{$object}->{'off'})) {
65− my ($off, $size, $comment, $l);
66− $off = hex($object{$object}->{'off'});
67− $size = hex($object{$object}->{'size'});
68− open(OBJECT, "<$object") || die "cannot read $object";
69− seek(OBJECT, $off, 0) || die "seek to $off in $object failed";
70− $l = read(OBJECT, $comment, $size);
71− die "read $size bytes from $object .comment failed" if ($l != $size);
72− close(OBJECT);
73− if ($comment =~ /GCC\:.*GCC\:/m || $object =~ /built-in\.o/) {
74− ++$ignore;
75− delete($object{$object});
76− }
77− }
78−}
79−printf("ignoring %d conglomerate(s)\n", $ignore);
80−
81−printf("Scanning objects\n");
82−foreach $object (sort(keys(%object))) {
83− my $from;
84− open(OBJDUMP, "objdump -r $object|") || die "cannot objdump -r $object";
85− while (defined($line = <OBJDUMP>)) {
86− chomp($line);
87− if ($line =~ /RELOCATION RECORDS FOR /) {
88− ($from = $line) =~ s/.*\[([^]]*).*/$1/;
89− }
90− if (($line =~ /\.init$/ || $line =~ /\.init\./) &&
91− ($from !~ /\.init$/ &&
92− $from !~ /\.init\./ &&
93− $from !~ /\.stab$/ &&
94− $from !~ /\.rodata$/ &&
95− $from !~ /\.text\.lock$/ &&
96− $from !~ /\.pci_fixup_header$/ &&
97− $from !~ /\.pci_fixup_final$/ &&
98− $from !~ /\.pdr$/ &&
99− $from !~ /\__param$/ &&
100− $from !~ /\.altinstructions/ &&
101− $from !~ /\.eh_frame/ &&
102− $from !~ /\.debug_/)) {
103− printf("Error: %s %s refers to %s\n", $object, $from, $line);
104− }
105− }
106− close(OBJDUMP);
107−}
108−printf("Done\n");
sound/oss/.gitignore+4−0
@@ -0,0 +1,4 @@
1+#Ignore generated files
2+maui_boot.h
3+pss_boot.h
4+trix_boot.h