bk://linux-sam.bkbits.net/kbuild rmk+lkml@arm.linux.org.uk|ChangeSet|20041026223612|60877 rmk+lkml # This is a BitKeeper generated diff -Nru style patch. # # ChangeSet # 2004/10/27 00:36:12+02:00 rmk+lkml@arm.linux.org.uk # arm: Fix ARM kernel build with permitted binutils versions # # All ARM binutils versions post 2.11.90 contains an extra "feature" which # interferes with the kernel in various ways - extra "mapping symbols" # in the ELF symbol table '$a', '$t' and '$d'. This causes two problems: # # 1. Since '$a' symbols have the same value as function names, this # causes anything which uses the kallsyms infrastructure to report # wrong values. # 2. programs which parse System.map do not expect symbols to start with # '$'. # # Signed-off-by: Russell King # Signed-off-by: Sam Ravnborg # # ===== kernel/module.c 1.120 vs edited ===== # # scripts/mksysmap # 2004/10/08 17:39:39+02:00 rmk+lkml@arm.linux.org.uk +1 -1 # arm: Fix ARM kernel build with permitted binutils versions # # scripts/kallsyms.c # 2004/10/08 17:34:20+02:00 rmk+lkml@arm.linux.org.uk +13 -1 # arm: Fix ARM kernel build with permitted binutils versions # # kernel/module.c # 2004/10/08 17:34:19+02:00 rmk+lkml@arm.linux.org.uk +14 -2 # arm: Fix ARM kernel build with permitted binutils versions # # ChangeSet # 2004/10/27 00:29:10+02:00 juhl-lkml@dif.dk # kconfig: Small spelling fix for MODULE_SRCVERSION_ALL Kconfig # # Here's a trivial patch fixing a small spelling error in init/Kconfig in # the description of MODULE_SRCVERSION_ALL # # Signed-off-by: Jesper Juhl # Signed-off-by: Sam Ravnborg # # init/Kconfig # 2004/10/24 17:41:12+02:00 juhl-lkml@dif.dk +1 -1 # kconfig: Small spelling fix for MODULE_SRCVERSION_ALL Kconfig # # ChangeSet # 2004/10/27 00:27:31+02:00 trini@kernel.crashing.org # kbuild: warning fixes on Solaris 9 # # The following set of patches is based loosely on the patches that # Jean-Christophe Dubois came up with for 2.6.7. Where as the original # patches added a number of casts to unsigned char, I went the route of # making the chars be explicitly signed. I honestly don't know which # route is better to go down. Doing this is the bulk of the patch. Out # of the rest of the odds 'n ends is that on Solaris, Elf32_Word is a # ulong, which means all of the printf's are unhappy (uint format, ulong # arg) for most of the typedefs. # # Signed-off-by: Tom Rini # Signed-off-by: Sam Ravnborg # # scripts/mod/sumversion.c # 2004/10/27 00:22:41+02:00 trini@kernel.crashing.org +4 -4 # kbuild: warning fixes on Solaris 9 # # scripts/mod/modpost.c # 2004/10/27 00:22:13+02:00 trini@kernel.crashing.org +1 -1 # kbuild: warning fixes on Solaris 9 # # scripts/mod/file2alias.c # 2004/10/27 00:22:12+02:00 trini@kernel.crashing.org +12 -7 # kbuild: warning fixes on Solaris 9 # # scripts/kconfig/symbol.c # 2004/10/27 00:22:08+02:00 trini@kernel.crashing.org +1 -1 # kbuild: warning fixes on Solaris 9 # # scripts/kconfig/mconf.c # 2004/10/27 00:22:09+02:00 trini@kernel.crashing.org +2 -2 # kbuild: warning fixes on Solaris 9 # # scripts/kconfig/confdata.c # 2004/10/27 00:22:10+02:00 trini@kernel.crashing.org +3 -3 # kbuild: warning fixes on Solaris 9 # # scripts/kconfig/conf.c # 2004/10/27 00:22:04+02:00 trini@kernel.crashing.org +3 -3 # kbuild: warning fixes on Solaris 9 # # scripts/conmakehash.c # 2004/10/27 00:22:06+02:00 trini@kernel.crashing.org +1 -1 # kbuild: warning fixes on Solaris 9 # # scripts/basic/split-include.c # 2004/10/27 00:22:06+02:00 trini@kernel.crashing.org +1 -1 # kbuild: warning fixes on Solaris 9 # # scripts/basic/fixdep.c # 2004/10/27 00:22:09+02:00 trini@kernel.crashing.org +5 -5 # kbuild: warning fixes on Solaris 9 # # scripts/basic/docproc.c # 2004/10/27 00:22:07+02:00 trini@kernel.crashing.org +7 -7 # kbuild: warning fixes on Solaris 9 # # arch/ppc/boot/utils/mkbugboot.c # 2004/10/27 00:22:03+02:00 trini@kernel.crashing.org +1 -1 # kbuild: warning fixes on Solaris 9 # # ChangeSet # 2004/10/27 00:07:03+02:00 sam@mars.ravnborg.org # kbuild/usr: initramfs list fixed and simplified # # Moving logic to scripts/gen_initramfs_list.sh make a nice cleanup in # usr/Makefile. # A new initramfs image will be generated if the initramfs_list file changes. # This patch also fixes the bug with make O=.. # # Signed-off-by: Sam Ravnborg # # usr/Makefile # 2004/10/27 00:06:46+02:00 sam@mars.ravnborg.org +9 -20 # Simplify - logic moved to gen_initramfs_list.sh script # # scripts/gen_initramfs_list.sh # 2004/10/27 00:06:46+02:00 sam@mars.ravnborg.org +35 -16 # Moved logic to this file. # It now handles both dirs, files and no input given. # For invalid input print error and boild out. # # scripts/Makefile.lib # 2004/10/27 00:06:46+02:00 sam@mars.ravnborg.org +27 -0 # Added filechk - copy from top level Makefile # # BitKeeper/etc/ignore # 2004/10/27 00:06:24+02:00 sam@mars.ravnborg.org +1 -0 # added usr/initramfs_list # # BitKeeper/deleted/.del-initramfs_list~e02c62efaa478389 # 2004/10/27 00:02:17+02:00 sam@mars.ravnborg.org +0 -0 # Delete: usr/initramfs_list # # ChangeSet # 2004/10/26 21:50:54+02:00 sam@mars.ravnborg.org # Merge bk://linux-sam.bkbits.net/kbuild # into mars.ravnborg.org:/home/sam/bk/to-linus # # lib/Kconfig.debug # 2004/10/26 21:50:45+02:00 sam@mars.ravnborg.org +0 -0 # Auto merged # # init/Kconfig # 2004/10/26 21:50:44+02:00 sam@mars.ravnborg.org +0 -0 # Auto merged # # arch/i386/Makefile # 2004/10/26 21:50:44+02:00 sam@mars.ravnborg.org +0 -0 # Auto merged # # Makefile # 2004/10/26 21:50:44+02:00 sam@mars.ravnborg.org +0 -0 # Auto merged # # Documentation/DocBook/Makefile # 2004/10/26 21:50:44+02:00 sam@mars.ravnborg.org +0 -0 # Auto merged # # ChangeSet # 2004/10/17 11:48:59+02:00 vda@port.imtp.ilyichevsk.odessa.ua # kbuild: make gcc -align options .config-settable # # With all alignment options set to 1 (minimum alignment), # I've got 5% smaller vmlinux compared to one built with # default code alignment. # Original implementation altered to use cc-option-align by sam. # # From: Denis Vlasenko # Signed-off-by: Sam Ravnborg # # init/Kconfig # 2004/10/17 02:03:21+02:00 vda@port.imtp.ilyichevsk.odessa.ua +37 -0 # kbuild: make gcc -align options .config-settable # # Makefile # 2004/10/17 11:44:55+02:00 vda@port.imtp.ilyichevsk.odessa.ua +7 -0 # kbuild: make gcc -align options .config-settable # # ChangeSet # 2004/10/17 11:41:54+02:00 sam@mars.ravnborg.org # kbuild: Add cc-option-align # # gcc version >= 3.00 shifted from -malign-* to -falign-*. $(cc-option-align) will # based on current gcc version specify the right prefix for the align option. # Documented in Documentation/makefiles.txt # # Signed-off-by: Sam Ravnborg # # arch/i386/Makefile # 2004/10/17 11:41:36+02:00 sam@mars.ravnborg.org +1 -1 # Use cc-option-align from top-level Makefile # # Makefile # 2004/10/17 11:41:36+02:00 sam@mars.ravnborg.org +5 -0 # Introduced cc-option-align # # Documentation/kbuild/makefiles.txt # 2004/10/17 11:41:36+02:00 sam@mars.ravnborg.org +15 -0 # Documented cc-option-align # # ChangeSet # 2004/10/17 02:01:07+02:00 sam@mars.ravnborg.org # kbuild: explicit enable framepointer # # Newer gcc versions automatically turns on -fomit-frame-pointer when # -O2 is specified thus breaking CONFIG_FRAME_POINTER option. # Explicitly specifying -fno-omit-frame-pointer fixes it. # # From: Tejun Heo # Signed-off-by: Sam Ravnborg # # Makefile # 2004/10/17 02:00:48+02:00 sam@mars.ravnborg.org +3 -1 # Newer gcc versions automatically turns on -fomit-frame-pointer when # -O2 is specified thus breaking CONFIG_FRAME_POINTER option. # Explicitly specifying -fno-omit-frame-pointer fixes it. # # ChangeSet # 2004/10/17 01:55:32+02:00 sam@mars.ravnborg.org # kbuild: use two double-quotes for localversion # # Modifies LOCALVERSION definition such that it uses # patsubst instead of subst to remove surrounding double quotes from # CONFIG_LOCALVERSION. This helps syntax-highlighting editors. # # From: Tejun Heo # Signed-off-by: Sam Ravnborg # # Makefile # 2004/10/17 01:55:11+02:00 sam@mars.ravnborg.org +1 -1 # Use two double qutes so editors do not get confused # # ChangeSet # 2004/10/17 01:17:08+02:00 sam@mars.ravnborg.org # kbuild: Create Makefile in output dir for *config targets # # Upon request from Andi Kleen the Makefile is now created for *config # targets also. So the MAkefile in the output directory is present when # it is expected (after kernel configuration). # Also tell user the Makefile is generated. # # Signed-off-by: Sam Ravnborg # # Makefile # 2004/10/17 01:16:51+02:00 sam@mars.ravnborg.org +19 -14 # Create a Makefile in output directory for *config targets and # tell user a Makefile is generated. # # ChangeSet # 2004/10/16 23:51:27+02:00 trini@kernel.crashing.org # kbuild: fix 'htmldocs' and friends with O= # # The following patch fixes up 'htmldocs' and related to work when # trees are being built with O=. I fixed it all up by passing the srctree # as an env-var to docproc (and thus what it calls) and then pull that out # when needed. # # Signed-off-by: Tom Rini # Signed-off-by: Sam Ravnborg # # scripts/kernel-doc # 2004/10/16 02:00:00+02:00 trini@kernel.crashing.org +1 -1 # kbuild: fix 'htmldocs' and friends with O= # # scripts/basic/docproc.c # 2004/10/16 02:00:00+02:00 trini@kernel.crashing.org +15 -4 # kbuild: fix 'htmldocs' and friends with O= # # Documentation/DocBook/Makefile # 2004/10/16 02:00:00+02:00 trini@kernel.crashing.org +5 -2 # kbuild: fix 'htmldocs' and friends with O= # # ChangeSet # 2004/10/16 23:48:22+02:00 agruen@suse.de # kbuild: Allow install of external modules to custom path # # Currently, a ``make modules_install'' for an external module will # install that module into /lib/modules/$(uname -r)/extra. Allow to # override this default by specifying INSTALL_MOD_DIR. # # Signed-off-by: Andreas Gruenbacher # Signed-off-by: Sam Ravnborg # # scripts/Makefile.modinst # 2004/10/16 02:00:00+02:00 agruen@suse.de +4 -1 # kbuild: Allow install of external modules to custom path # # ChangeSet # 2004/10/16 23:26:48+02:00 rddunlap@osdl.org # kconfig: OVERRIDE: save kernel version in .config file # # Omit .config file timestamp in the file if the environment variable # "KCONFIG_NOTIMESTAMP" exists and is non-null. # # Signed-off-by: Randy Dunlap # Signed-off-by: Sam Ravnborg # # scripts/kconfig/confdata.c # 2004/09/17 18:31:23+02:00 rddunlap@osdl.org +12 -4 # kconfig: OVERRIDE: save kernel version in .config file # # ChangeSet # 2004/10/16 23:03:11+02:00 vda@port.imtp.ilyichevsk.odessa.ua # kconfig.debug: mention that DEBUG_SLAB can slow down machine quite a bit # # I experienced x3 slowdown due to this option being set. # # Please add this small warning to DEBUG_SLAB help text. # # Signed-off-by: Sam Ravnborg # # lib/Kconfig.debug # 2004/09/16 13:19:28+02:00 vda@port.imtp.ilyichevsk.odessa.ua +1 -1 # kconfig.debug: mention that DEBUG_SLAB can slow down machine quite a bit # diff -Nru a/Documentation/DocBook/Makefile b/Documentation/DocBook/Makefile --- a/Documentation/DocBook/Makefile 2004-10-26 19:09:59 -07:00 +++ b/Documentation/DocBook/Makefile 2004-10-26 19:09:59 -07:00 @@ -58,14 +58,14 @@ # The following rules are used to generate the .sgml documentation # required to generate the final targets. (ps, pdf, html). quiet_cmd_docproc = DOCPROC $@ - cmd_docproc = $(DOCPROC) doc $< >$@ + cmd_docproc = SRCTREE=$(srctree)/ $(DOCPROC) doc $< >$@ define rule_docproc set -e; \ $(if $($(quiet)cmd_$(1)),echo ' $($(quiet)cmd_$(1))';) \ $(cmd_$(1)); \ ( \ echo 'cmd_$@ := $(cmd_$(1))'; \ - echo $@: `$(DOCPROC) depend $<`; \ + echo $@: `SRCTREE=$(srctree) $(DOCPROC) depend $<`; \ ) > $(dir $@).$(notdir $@).cmd endef @@ -129,6 +129,9 @@ # Rule to generate man files - output is placed in the man subdirectory %.9: %.sgml +ifneq ($(KBUILD_SRC),) + $(Q)mkdir -p $(objtree)/Documentation/DocBook/man +endif $(SPLITMAN) $< $(objtree)/Documentation/DocBook/man "$(VERSION).$(PATCHLEVEL).$(SUBLEVEL)" $(MAKEMAN) convert $(objtree)/Documentation/DocBook/man $< diff -Nru a/Documentation/kbuild/makefiles.txt b/Documentation/kbuild/makefiles.txt --- a/Documentation/kbuild/makefiles.txt 2004-10-26 19:09:59 -07:00 +++ b/Documentation/kbuild/makefiles.txt 2004-10-26 19:09:59 -07:00 @@ -997,6 +997,21 @@ option. When $(biarch) equals to y the expanded variables $(aflags-y) and $(cflags-y) will be assigned the values -a32 and -m32. + cc-option-align + gcc version >= 3.0 shifted type of options used to speify + alignment of functions, loops etc. $(cc-option-align) whrn used + as prefix to the align options will select the right prefix: + gcc < 3.00 + cc-option-align = -malign + gcc >= 3.00 + cc-option-align = -falign + + Example: + CFLAGS += $(cc-option-align)-functions=4 + + In the above example the option -falign-functions=4 is used for + gcc >= 3.00. For gcc < 3.00 -malign-functions=4 is used. + cc-version cc-version return a numerical version of the $(CC) compiler version. The format is where both are two digits. So for example diff -Nru a/Makefile b/Makefile --- a/Makefile 2004-10-26 19:09:59 -07:00 +++ b/Makefile 2004-10-26 19:09:59 -07:00 @@ -157,7 +157,7 @@ LOCALVERSION = $(subst $(space),, \ $(shell cat /dev/null $(localversion-files)) \ - $(subst ",,$(CONFIG_LOCALVERSION))) + $(patsubst "%",%,$(CONFIG_LOCALVERSION))) KERNELRELEASE=$(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION)$(LOCALVERSION) @@ -295,6 +295,11 @@ cc-option-yn = $(shell if $(CC) $(CFLAGS) $(1) -S -o /dev/null -xc /dev/null \ > /dev/null 2>&1; then echo "y"; else echo "n"; fi;) +# cc-option-align +# Prefix align with either -falign or -malign +cc-option-align = $(subst -functions=0,,\ + $(call cc-option,-falign-functions=0,-malign-functions=0)) + # cc-version # Usage gcc-ver := $(call cc-version $(CC)) cc-version = $(shell $(CONFIG_SHELL) $(srctree)/scripts/gcc-version.sh \ @@ -379,6 +384,18 @@ scripts_basic: $(Q)$(MAKE) $(build)=scripts/basic +.PHONY: outputmakefile +# outputmakefile generate a Makefile to be placed in output directory, if +# using a seperate output directory. This allows convinient use +# of make in output directory +outputmakefile: + $(Q)if /usr/bin/env test ! $(srctree) -ef $(objtree); then \ + $(CONFIG_SHELL) $(srctree)/scripts/mkmakefile \ + $(srctree) $(objtree) $(VERSION) $(PATCHLEVEL) \ + > $(objtree)/Makefile; \ + echo ' GEN $(objtree)/Makefile'; \ + fi + # To make sure we do not include .config for any of the *config targets # catch them early, and hand them over to scripts/kconfig/Makefile # It is allowed to specify more targets when calling make, including @@ -423,9 +440,9 @@ # *config targets only - make sure prerequisites are updated, and descend # in scripts/kconfig to make the *config target -config: scripts_basic FORCE +config: scripts_basic outputmakefile FORCE $(Q)$(MAKE) $(build)=scripts/kconfig $@ -%config: scripts_basic FORCE +%config: scripts_basic outputmakefile FORCE $(Q)$(MAKE) $(build)=scripts/kconfig $@ else @@ -486,7 +503,16 @@ CFLAGS += -O2 endif -ifndef CONFIG_FRAME_POINTER +#Add align options if CONFIG_CC_* is not equal to 0 +add-align = $(if $(filter-out 0,$($(1))),$(cc-option-align)$(2)=$($(1))) +CFLAGS += $(call add-align,CONFIG_CC_ALIGN_FUNCTIONS,-functions) +CFLAGS += $(call add-align,CONFIG_CC_ALIGN_LABELS,-labels) +CFLAGS += $(call add-align,CONFIG_CC_ALIGN_LOOPS,-loops) +CFLAGS += $(call add-align,CONFIG_CC_ALIGN_JUMPS,-jumps) + +ifdef CONFIG_FRAME_POINTER +CFLAGS += -fno-omit-frame-pointer +else CFLAGS += -fomit-frame-pointer endif @@ -711,22 +737,12 @@ .PHONY: prepare-all prepare prepare0 prepare1 prepare2 -# prepare 2 generate Makefile to be placed in output directory, if -# using a seperate output directory. This allows convinient use -# of make in output directory -prepare2: - $(Q)if /usr/bin/env test ! $(srctree) -ef $(objtree); then \ - $(CONFIG_SHELL) $(srctree)/scripts/mkmakefile \ - $(srctree) $(objtree) $(VERSION) $(PATCHLEVEL) \ - > $(objtree)/Makefile; \ - fi - -# prepare1 is used to check if we are building in a separate output directory, +# prepare2 is used to check if we are building in a separate output directory, # and if so do: # 1) Check that make has not been executed in the kernel src $(srctree) # 2) Create the include2 directory, used for the second asm symlink -prepare1: prepare2 +prepare2: ifneq ($(KBUILD_SRC),) @echo ' Using $(srctree) as source for kernel' $(Q)if [ -h $(srctree)/include/asm -o -f $(srctree)/.config ]; then \ @@ -737,6 +753,9 @@ $(Q)if [ ! -d include2 ]; then mkdir -p include2; fi; $(Q)ln -fsn $(srctree)/include/asm-$(ARCH) include2/asm endif + +# prepare1 creates a makefile if using a separate output directory +prepare1: prepare2 outputmakefile prepare0: prepare1 include/linux/version.h include/asm include/config/MARKER ifneq ($(KBUILD_MODULES),) diff -Nru a/arch/i386/Makefile b/arch/i386/Makefile --- a/arch/i386/Makefile 2004-10-26 19:09:59 -07:00 +++ b/arch/i386/Makefile 2004-10-26 19:09:59 -07:00 @@ -25,7 +25,7 @@ # prevent gcc from keeping the stack 16 byte aligned CFLAGS += $(call cc-option,-mpreferred-stack-boundary=2) -align := $(subst -functions=0,,$(call cc-option,-falign-functions=0,-malign-functions=0)) +align := $(cc-option-align) cflags-$(CONFIG_M386) += -march=i386 cflags-$(CONFIG_M486) += -march=i486 cflags-$(CONFIG_M586) += -march=i586 diff -Nru a/arch/ppc/boot/utils/mkbugboot.c b/arch/ppc/boot/utils/mkbugboot.c --- a/arch/ppc/boot/utils/mkbugboot.c 2004-10-26 19:09:59 -07:00 +++ b/arch/ppc/boot/utils/mkbugboot.c 2004-10-26 19:09:59 -07:00 @@ -96,7 +96,7 @@ uint8_t header_block[HEADER_SIZE]; bug_boot_header_t *bbh = (bug_boot_header_t *)&header_block[0]; - bzero(header_block, HEADER_SIZE); + memset(header_block, 0, HEADER_SIZE); /* Fill in the PPCBUG ROM boot header */ strncpy(bbh->magic_word, "BOOT", 4); /* PPCBUG magic word */ diff -Nru a/init/Kconfig b/init/Kconfig --- a/init/Kconfig 2004-10-26 19:09:59 -07:00 +++ b/init/Kconfig 2004-10-26 19:09:59 -07:00 @@ -325,6 +325,43 @@ option replaces shmem and tmpfs with the much simpler ramfs code, which may be appropriate on small systems without swap. +config CC_ALIGN_FUNCTIONS + int "Function alignment" + default 0 + help + Align the start of functions to the next power-of-two greater than n, + skipping up to n bytes. For instance, 32 aligns functions + to the next 32-byte boundary, but 24 would align to the next + 32-byte boundary only if this can be done by skipping 23 bytes or less. + Zero means use compiler's default. + +config CC_ALIGN_LABELS + int "Label alignment" + default 0 + help + Align all branch targets to a power-of-two boundary, skipping + up to n bytes like ALIGN_FUNCTIONS. This option can easily + make code slower, because it must insert dummy operations for + when the branch target is reached in the usual flow of the code. + Zero means use compiler's default. + +config CC_ALIGN_LOOPS + int "Loop alignment" + default 0 + help + Align loops to a power-of-two boundary, skipping up to n bytes. + Zero means use compiler's default. + +config CC_ALIGN_JUMPS + int "Jump alignment" + default 0 + help + Align branch targets to a power-of-two boundary, for branch + targets where the targets can only be reached by jumping, + skipping up to n bytes like ALIGN_FUNCTIONS. In this case, + no dummy operations need be executed. + Zero means use compiler's default. + endmenu # General setup config TINY_SHMEM @@ -397,7 +434,7 @@ depends on MODULES help Modules which contain a MODULE_VERSION get an extra "srcversion" - field inserting into their modinfo section, which contains a + field inserted into their modinfo section, which contains a sum of the source files which made it. This helps maintainers see exactly which source was used to build a module (since others sometimes change the module source without updating diff -Nru a/kernel/module.c b/kernel/module.c --- a/kernel/module.c 2004-10-26 19:09:59 -07:00 +++ b/kernel/module.c 2004-10-26 19:09:59 -07:00 @@ -1834,6 +1834,16 @@ } #ifdef CONFIG_KALLSYMS +/* + * This ignores the intensely annoying "mapping symbols" found + * in ARM ELF files: $a, $t and $d. + */ +static inline int is_arm_mapping_symbol(const char *str) +{ + return str[0] == '$' && strchr("atd", str[1]) + && (str[2] == '\0' || str[2] == '.'); +} + static const char *get_ksymbol(struct module *mod, unsigned long addr, unsigned long *size, @@ -1858,11 +1868,13 @@ * and inserted at a whim. */ if (mod->symtab[i].st_value <= addr && mod->symtab[i].st_value > mod->symtab[best].st_value - && *(mod->strtab + mod->symtab[i].st_name) != '\0' ) + && *(mod->strtab + mod->symtab[i].st_name) != '\0' + && !is_arm_mapping_symbol(mod->strtab + mod->symtab[i].st_name)) best = i; if (mod->symtab[i].st_value > addr && mod->symtab[i].st_value < nextval - && *(mod->strtab + mod->symtab[i].st_name) != '\0') + && *(mod->strtab + mod->symtab[i].st_name) != '\0' + && !is_arm_mapping_symbol(mod->strtab + mod->symtab[i].st_name)) nextval = mod->symtab[i].st_value; } diff -Nru a/lib/Kconfig.debug b/lib/Kconfig.debug --- a/lib/Kconfig.debug 2004-10-26 19:09:59 -07:00 +++ b/lib/Kconfig.debug 2004-10-26 19:09:59 -07:00 @@ -46,7 +46,7 @@ help Say Y here to have the kernel do limited verification on memory allocation as well as poisoning memory on free to catch use of freed - memory. + memory. This can make kmalloc/kfree-intensive workloads much slower. config DEBUG_SPINLOCK bool "Spinlock debugging" diff -Nru a/scripts/Makefile.lib b/scripts/Makefile.lib --- a/scripts/Makefile.lib 2004-10-26 19:09:59 -07:00 +++ b/scripts/Makefile.lib 2004-10-26 19:09:59 -07:00 @@ -232,3 +232,30 @@ # Usage: # $(Q)$(MAKE) $(build)=dir build := -f $(if $(KBUILD_SRC),$(srctree)/)scripts/Makefile.build obj + +# filechk is used to check if the content of a generated file is updated. +# Sample usage: +# define filechk_sample +# echo $KERNELRELEASE +# endef +# version.h : Makefile +# $(call filechk,sample) +# The rule defined shall write to stdout the content of the new file. +# The existing file will be compared with the new one. +# - If no file exist it is created +# - If the content differ the new file is used +# - If they are equal no change, and no timestamp update + +define filechk + $(Q)set -e; \ + echo ' CHK $@'; \ + mkdir -p $(dir $@); \ + $(filechk_$(1)) $(2) > $@.tmp; \ + if [ -r $@ ] && cmp -s $@ $@.tmp; then \ + rm -f $@.tmp; \ + else \ + echo ' UPD $@'; \ + mv -f $@.tmp $@; \ + fi +endef + diff -Nru a/scripts/Makefile.modinst b/scripts/Makefile.modinst --- a/scripts/Makefile.modinst 2004-10-26 19:09:59 -07:00 +++ b/scripts/Makefile.modinst 2004-10-26 19:09:59 -07:00 @@ -19,7 +19,10 @@ quiet_cmd_modules_install = INSTALL $@ cmd_modules_install = mkdir -p $(2); cp $@ $(2) -modinst_dir = $(MODLIB)/$(if $(filter ../% /%,$@),extra/,kernel/$(@D)) +# Modules built outside the kernel source tree go into extra by default +INSTALL_MOD_DIR ?= extra + +modinst_dir = $(MODLIB)/$(if $(filter ../% /%,$@),$(INSTALL_MOD_DIR)/,kernel/$(@D)) $(modules): $(call cmd,modules_install,$(modinst_dir)) diff -Nru a/scripts/basic/docproc.c b/scripts/basic/docproc.c --- a/scripts/basic/docproc.c 2004-10-26 19:09:59 -07:00 +++ b/scripts/basic/docproc.c 2004-10-26 19:09:59 -07:00 @@ -52,7 +52,7 @@ FILEONLY *externalfunctions; FILEONLY *symbolsonly; -typedef void FILELINE(char * file, char * line); +typedef void FILELINE(char * file, signed char * line); FILELINE * singlefunctions; FILELINE * entity_system; @@ -79,6 +79,7 @@ { pid_t pid; int ret; + char real_filename[PATH_MAX + 1]; /* Make sure output generated so far are flushed */ fflush(stdout); switch(pid=fork()) { @@ -86,8 +87,13 @@ perror("fork"); exit(1); case 0: - execvp(KERNELDOCPATH KERNELDOC, svec); - perror("exec " KERNELDOCPATH KERNELDOC); + memset(real_filename, 0, sizeof(real_filename)); + strncat(real_filename, getenv("SRCTREE"), PATH_MAX); + strncat(real_filename, KERNELDOCPATH KERNELDOC, + PATH_MAX - strlen(real_filename)); + execvp(real_filename, svec); + fprintf(stderr, "exec "); + perror(real_filename); exit(1); default: waitpid(pid, &ret ,0); @@ -142,9 +148,9 @@ * Files are separated by tabs. */ void adddep(char * file) { printf("\t%s", file); } -void adddep2(char * file, char * line) { line = line; adddep(file); } +void adddep2(char * file, signed char * line) { line = line; adddep(file); } void noaction(char * line) { line = line; } -void noaction2(char * file, char * line) { file = file; line = line; } +void noaction2(char * file, signed char * line) { file = file; line = line; } /* Echo the line without further action */ void printline(char * line) { printf("%s", line); } @@ -160,16 +166,21 @@ struct symfile *sym; char line[MAXLINESZ]; if (filename_exist(filename) == NULL) { + char real_filename[PATH_MAX + 1]; + memset(real_filename, 0, sizeof(real_filename)); + strncat(real_filename, getenv("SRCTREE"), PATH_MAX); + strncat(real_filename, filename, + PATH_MAX - strlen(real_filename)); sym = add_new_file(filename); - fp = fopen(filename, "r"); + fp = fopen(real_filename, "r"); if (fp == NULL) { fprintf(stderr, "docproc: "); - perror(filename); + perror(real_filename); } while(fgets(line, MAXLINESZ, fp)) { - char *p; - char *e; + signed char *p; + signed char *e; if (((p = strstr(line, "EXPORT_SYMBOL_GPL")) != 0) || ((p = strstr(line, "EXPORT_SYMBOL")) != 0)) { /* Skip EXPORT_SYMBOL{_GPL} */ @@ -242,7 +253,7 @@ * Call kernel-doc with the following parameters: * kernel-doc -docbook -function function1 [-function function2] */ -void singfunc(char * filename, char * line) +void singfunc(char * filename, signed char * line) { char *vec[200]; /* Enough for specific functions */ int i, idx = 0; @@ -279,7 +290,7 @@ void parse_file(FILE *infile) { char line[MAXLINESZ]; - char * s; + signed char * s; while(fgets(line, MAXLINESZ, infile)) { if (line[0] == '!') { s = line + 2; diff -Nru a/scripts/basic/fixdep.c b/scripts/basic/fixdep.c --- a/scripts/basic/fixdep.c 2004-10-26 19:09:59 -07:00 +++ b/scripts/basic/fixdep.c 2004-10-26 19:09:59 -07:00 @@ -217,12 +217,12 @@ printf(" $(wildcard include/config/%s.h) \\\n", s); } -void parse_config_file(char *map, size_t len) +void parse_config_file(signed char *map, size_t len) { int *end = (int *) (map + len); /* start at +1, so that p can never be < map */ int *m = (int *) map + 1; - char *p, *q; + signed char *p, *q; for (; m < end; m++) { if (*m == INT_CONF) { p = (char *) m ; goto conf; } @@ -291,9 +291,9 @@ void parse_dep_file(void *map, size_t len) { - char *m = map; - char *end = m + len; - char *p; + signed char *m = map; + signed char *end = m + len; + signed char *p; char s[PATH_MAX]; p = strchr(m, ':'); diff -Nru a/scripts/basic/split-include.c b/scripts/basic/split-include.c --- a/scripts/basic/split-include.c 2004-10-26 19:09:59 -07:00 +++ b/scripts/basic/split-include.c 2004-10-26 19:09:59 -07:00 @@ -104,7 +104,7 @@ /* Read config lines. */ while (fgets(line, buffer_size, fp_config)) { - const char * str_config; + const signed char * str_config; int is_same; int itarget; diff -Nru a/scripts/conmakehash.c b/scripts/conmakehash.c --- a/scripts/conmakehash.c 2004-10-26 19:09:59 -07:00 +++ b/scripts/conmakehash.c 2004-10-26 19:09:59 -07:00 @@ -33,7 +33,7 @@ int getunicode(char **p0) { - char *p = *p0; + unsigned char *p = *p0; while (*p == ' ' || *p == '\t') p++; diff -Nru a/scripts/gen_initramfs_list.sh b/scripts/gen_initramfs_list.sh --- a/scripts/gen_initramfs_list.sh 2004-10-26 19:09:59 -07:00 +++ b/scripts/gen_initramfs_list.sh 2004-10-26 19:09:59 -07:00 @@ -2,25 +2,26 @@ # Copyright (C) Martin Schlemmer # Released under the terms of the GNU GPL # -# A script to generate newline separated entries (to stdout) from a directory's -# contents suitable for use as a cpio_list for gen_init_cpio. +# Generate a newline separated list of entries from the file/directory pointed +# out by the environment variable: CONFIG_INITRAMFS_SOURCE # -# Arguements: $1 -- the source directory +# If CONFIG_INITRAMFS_SOURCE is non-existing then generate a small dummy file. +# +# The output is suitable for gen_init_cpio as found in usr/Makefile. # # TODO: Add support for symlinks, sockets and pipes when gen_init_cpio # supports them. -usage() { - echo "Usage: $0 initramfs-source-dir" - exit 1 +simple_initramfs() { + cat <<-EOF + # This is a very simple initramfs + + dir /dev 0755 0 0 + nod /dev/console 0600 0 0 c 5 1 + dir /root 0700 0 0 + EOF } -srcdir=$(echo "$1" | sed -e 's://*:/:g') - -if [ "$#" -gt 1 -o ! -d "${srcdir}" ]; then - usage -fi - filetype() { local argv1="$1" @@ -76,9 +77,27 @@ return 0 } -find "${srcdir}" -printf "%p %m %U %G\n" | \ -while read x; do - parse ${x} -done +if [ -z $1 ]; then + simple_initramfs +elif [ -f $1 ]; then + cat $1 +elif [ -d $1 ]; then + srcdir=$(echo "$1" | sed -e 's://*:/:g') + dirlist=$(find "${srcdir}" -printf "%p %m %U %G\n" 2>/dev/null) + + # If $dirlist is only one line, then the directory is empty + if [ "$(echo "${dirlist}" | wc -l)" -gt 1 ]; then + echo "${dirlist}" | \ + while read x; do + parse ${x} + done + else + # Failsafe in case directory is empty + simple_initramfs + fi +else + echo " $0: Cannot open '$1' (CONFIG_INITRAMFS_SOURCE)" >&2 + exit 1 +fi exit 0 diff -Nru a/scripts/kallsyms.c b/scripts/kallsyms.c --- a/scripts/kallsyms.c 2004-10-26 19:09:59 -07:00 +++ b/scripts/kallsyms.c 2004-10-26 19:09:59 -07:00 @@ -97,6 +97,17 @@ exit(1); } +/* + * This ignores the intensely annoying "mapping symbols" found + * in ARM ELF files: $a, $t and $d. + */ +static inline int +is_arm_mapping_symbol(const char *str) +{ + return str[0] == '$' && strchr("atd", str[1]) + && (str[2] == '\0' || str[2] == '.'); +} + static int read_symbol(FILE *in, struct sym_entry *s) { @@ -121,7 +132,8 @@ _sinittext = s->addr; else if (strcmp(str, "_einittext") == 0) _einittext = s->addr; - else if (toupper(s->type) == 'A' || toupper(s->type) == 'U') + else if (toupper(s->type) == 'A' || toupper(s->type) == 'U' || + is_arm_mapping_symbol(str)) return -1; /* include the type field in the symbol name, so that it gets diff -Nru a/scripts/kconfig/conf.c b/scripts/kconfig/conf.c --- a/scripts/kconfig/conf.c 2004-10-26 19:09:59 -07:00 +++ b/scripts/kconfig/conf.c 2004-10-26 19:09:59 -07:00 @@ -31,14 +31,14 @@ static int indent = 1; static int valid_stdin = 1; static int conf_cnt; -static char line[128]; +static signed char line[128]; static struct menu *rootEntry; static char nohelp_text[] = "Sorry, no help available for this option yet.\n"; -static void strip(char *str) +static void strip(signed char *str) { - char *p = str; + signed char *p = str; int l; while ((isspace(*p))) diff -Nru a/scripts/kconfig/confdata.c b/scripts/kconfig/confdata.c --- a/scripts/kconfig/confdata.c 2004-10-26 19:09:59 -07:00 +++ b/scripts/kconfig/confdata.c 2004-10-26 19:09:59 -07:00 @@ -27,10 +27,10 @@ NULL, }; -static char *conf_expand_value(const char *in) +static char *conf_expand_value(const signed char *in) { struct symbol *sym; - const char *src; + const signed char *src; static char res_value[SYMBOL_MAXLENGTH]; char *dst, name[SYMBOL_MAXLENGTH]; @@ -270,6 +270,8 @@ int type, l; const char *str; time_t now; + int use_timestamp = 1; + char *env; dirname[0] = 0; if (name && name[0]) { @@ -293,7 +295,7 @@ } else basename = conf_def_filename; - sprintf(newname, "%s.tmpconfig.%d", dirname, getpid()); + sprintf(newname, "%s.tmpconfig.%d", dirname, (int)getpid()); out = fopen(newname, "w"); if (!out) return 1; @@ -306,22 +308,28 @@ sym = sym_lookup("KERNELRELEASE", 0); sym_calc_value(sym); time(&now); + env = getenv("KCONFIG_NOTIMESTAMP"); + if (env && *env) + use_timestamp = 0; + fprintf(out, "#\n" "# Automatically generated make config: don't edit\n" "# Linux kernel version: %s\n" - "# %s" + "%s%s" "#\n", sym_get_string_value(sym), - ctime(&now)); + use_timestamp ? "# " : "", + use_timestamp ? ctime(&now) : ""); if (out_h) fprintf(out_h, "/*\n" " * Automatically generated C config: don't edit\n" " * Linux kernel version: %s\n" - " * %s" + "%s%s" " */\n" "#define AUTOCONF_INCLUDED\n", sym_get_string_value(sym), - ctime(&now)); + use_timestamp ? " * " : "", + use_timestamp ? ctime(&now) : ""); if (!sym_change_count) sym_clear_all_valid(); diff -Nru a/scripts/kconfig/mconf.c b/scripts/kconfig/mconf.c --- a/scripts/kconfig/mconf.c 2004-10-26 19:09:59 -07:00 +++ b/scripts/kconfig/mconf.c 2004-10-26 19:09:59 -07:00 @@ -82,8 +82,8 @@ "leave this blank.\n" ; -static char buf[4096], *bufptr = buf; -static char input_buf[4096]; +static signed char buf[4096], *bufptr = buf; +static signed char input_buf[4096]; static char filename[PATH_MAX+1] = ".config"; static char *args[1024], **argptr = args; static int indent; diff -Nru a/scripts/kconfig/symbol.c b/scripts/kconfig/symbol.c --- a/scripts/kconfig/symbol.c 2004-10-26 19:09:59 -07:00 +++ b/scripts/kconfig/symbol.c 2004-10-26 19:09:59 -07:00 @@ -421,7 +421,7 @@ bool sym_string_valid(struct symbol *sym, const char *str) { - char ch; + signed char ch; switch (sym->type) { case S_STRING: diff -Nru a/scripts/kernel-doc b/scripts/kernel-doc --- a/scripts/kernel-doc 2004-10-26 19:09:59 -07:00 +++ b/scripts/kernel-doc 2004-10-26 19:09:59 -07:00 @@ -1531,7 +1531,7 @@ } sub process_file($) { - my ($file) = @_; + my ($file) = "$ENV{'SRCTREE'}@_"; my $identifier; my $func; my $initial_section_counter = $section_counter; diff -Nru a/scripts/mksysmap b/scripts/mksysmap --- a/scripts/mksysmap 2004-10-26 19:09:59 -07:00 +++ b/scripts/mksysmap 2004-10-26 19:09:59 -07:00 @@ -40,5 +40,5 @@ # so we just ignore them to let readprofile continue to work. # (At least sparc64 has __crc_ in the middle). -$NM -n $1 | grep -v '\( [aUw] \)\|\(__crc_\)' > $2 +$NM -n $1 | grep -v '\( [aUw] \)\|\(__crc_\)\|\( \$[adt]\)' > $2 diff -Nru a/scripts/mod/file2alias.c b/scripts/mod/file2alias.c --- a/scripts/mod/file2alias.c 2004-10-26 19:09:59 -07:00 +++ b/scripts/mod/file2alias.c 2004-10-26 19:09:59 -07:00 @@ -12,17 +12,22 @@ #include "modpost.h" -/* We use the ELF typedefs, since we can't rely on stdint.h being present. */ - +/* We use the ELF typedefs for kernel_ulong_t but bite the bullet and + * use either stdint.h or inttypes.h for the rest. */ #if KERNEL_ELFCLASS == ELFCLASS32 -typedef Elf32_Addr kernel_ulong_t; +typedef Elf32_Addr kernel_ulong_t; +#else +typedef Elf64_Addr kernel_ulong_t; +#endif +#ifdef __sun__ +#include #else -typedef Elf64_Addr kernel_ulong_t; +#include #endif -typedef Elf32_Word __u32; -typedef Elf32_Half __u16; -typedef unsigned char __u8; +typedef uint32_t __u32; +typedef uint16_t __u16; +typedef unsigned char __u8; /* Big exception to the "don't include kernel headers into userspace, which * even potentially has different endianness and word sizes, since diff -Nru a/scripts/mod/modpost.c b/scripts/mod/modpost.c --- a/scripts/mod/modpost.c 2004-10-26 19:09:59 -07:00 +++ b/scripts/mod/modpost.c 2004-10-26 19:09:59 -07:00 @@ -219,7 +219,7 @@ static char line[4096]; int skip = 1; size_t len = 0; - char *p = (char *)file + *pos; + signed char *p = (char *)file + *pos; char *s = line; for (; *pos < size ; (*pos)++) diff -Nru a/scripts/mod/sumversion.c b/scripts/mod/sumversion.c --- a/scripts/mod/sumversion.c 2004-10-26 19:09:59 -07:00 +++ b/scripts/mod/sumversion.c 2004-10-26 19:09:59 -07:00 @@ -252,9 +252,9 @@ } /* FIXME: Handle .s files differently (eg. # starts comments) --RR */ -static int parse_file(const char *fname, struct md4_ctx *md) +static int parse_file(const signed char *fname, struct md4_ctx *md) { - char *file; + signed char *file; unsigned long i, len; file = grab_file(fname, &len); @@ -332,7 +332,7 @@ Sum all files in the same dir or subdirs. */ while ((line = get_next_line(&pos, file, flen)) != NULL) { - char* p = line; + signed char* p = line; if (strncmp(line, "deps_", sizeof("deps_")-1) == 0) { check_files = 1; continue; @@ -456,7 +456,7 @@ close(fd); } -static int strip_rcs_crap(char *version) +static int strip_rcs_crap(signed char *version) { unsigned int len, full_len; diff -Nru a/usr/Makefile b/usr/Makefile --- a/usr/Makefile 2004-10-26 19:09:59 -07:00 +++ b/usr/Makefile 2004-10-26 19:09:59 -07:00 @@ -3,7 +3,7 @@ hostprogs-y := gen_init_cpio -clean-files := initramfs_data.cpio.gz +clean-files := initramfs_data.cpio.gz initramfs_list # If you want a different list of files in the initramfs_data.cpio # then you can either overwrite the cpio_list in this directory @@ -23,28 +23,17 @@ # Commented out for now # initramfs-y := $(obj)/root/hello -quiet_cmd_gen_list = GEN_INITRAMFS_LIST $@ - cmd_gen_list = $(shell \ - if test -f $(CONFIG_INITRAMFS_SOURCE); then \ - if [ $(CONFIG_INITRAMFS_SOURCE) != $@ ]; then \ - echo 'cp -f $(CONFIG_INITRAMFS_SOURCE) $@'; \ - else \ - echo 'echo Using shipped $@'; \ - fi; \ - elif test -d $(CONFIG_INITRAMFS_SOURCE); then \ - echo 'scripts/gen_initramfs_list.sh $(CONFIG_INITRAMFS_SOURCE) > $@'; \ - else \ - echo 'echo Using shipped $@'; \ - fi) - - -$(INITRAMFS_LIST): FORCE - $(call cmd,gen_list) +filechk_initramfs_list = $(CONFIG_SHELL) \ + $(srctree)/scripts/gen_initramfs_list.sh $(CONFIG_INITRAMFS_SOURCE) + +$(obj)/initramfs_list: FORCE + $(call filechk,initramfs_list) quiet_cmd_cpio = CPIO $@ - cmd_cpio = ./$< $(INITRAMFS_LIST) > $@ + cmd_cpio = ./$< $(obj)/initramfs_list > $@ -$(obj)/initramfs_data.cpio: $(obj)/gen_init_cpio $(initramfs-y) $(INITRAMFS_LIST) FORCE +$(obj)/initramfs_data.cpio: $(obj)/gen_init_cpio \ + $(initramfs-y) $(obj)/initramfs_list FORCE $(call if_changed,cpio) targets += initramfs_data.cpio diff -Nru a/usr/initramfs_list b/usr/initramfs_list --- a/usr/initramfs_list 2004-10-26 19:09:59 -07:00 +++ /dev/null Wed Dec 31 16:00:00 196900 @@ -1,5 +0,0 @@ -# This is a very simple initramfs - mostly preliminary for future expansion - -dir /dev 0755 0 0 -nod /dev/console 0600 0 0 c 5 1 -dir /root 0700 0 0