Merge branch 'kbuild' of git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild-2.6
authorLinus Torvalds <torvalds@linux-foundation.org>
Tue, 24 May 2011 20:31:37 +0000 (13:31 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Tue, 24 May 2011 20:31:37 +0000 (13:31 -0700)
* 'kbuild' of git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild-2.6:
  kbuild: make KBUILD_NOCMDDEP=1 handle empty built-in.o
  scripts/kallsyms.c: fix potential segfault
  scripts/gen_initramfs_list.sh: Convert to a /bin/sh script
  kbuild: Fix GNU make v3.80 compatibility
  kbuild: Fix passing -Wno-* options to gcc 4.4+
  kbuild: move scripts/basic/docproc.c to scripts/docproc.c
  kbuild: Fix Makefile.asm-generic for um
  kbuild: Allow to combine multiple W= levels
  kbuild: Disable -Wunused-but-set-variable for gcc 4.6.0
  Fix handling of backlash character in LINUX_COMPILE_BY name
  kbuild: asm-generic support
  kbuild: implement several W= levels
  kbuild: Fix build with binutils <= 2.19
  initramfs: Use KBUILD_BUILD_TIMESTAMP for generated entries
  kbuild: Allow to override LINUX_COMPILE_BY and LINUX_COMPILE_HOST macros
  kbuild: Drop unused LINUX_COMPILE_TIME and LINUX_COMPILE_DOMAIN macros
  kbuild: Use the deterministic mode of ar
  kbuild: Call gzip with -n
  kbuild: move KALLSYMS_EXTRA_PASS from Kconfig to Makefile
  Kconfig: improve KALLSYMS_ALL documentation

Fix up trivial conflict in Makefile

1  2 
Documentation/kbuild/kbuild.txt
Makefile
init/Kconfig
scripts/Makefile.build
scripts/gen_initramfs_list.sh

@@@ -26,11 -26,11 +26,11 @@@ Additional options to the assembler (fo
  
  AFLAGS_MODULE
  --------------------------------------------------
 -Addtional module specific options to use for $(AS).
 +Additional module specific options to use for $(AS).
  
  AFLAGS_KERNEL
  --------------------------------------------------
 -Addtional options for $(AS) when used for assembler
 +Additional options for $(AS) when used for assembler
  code for code that is compiled as built-in.
  
  KCFLAGS
@@@ -39,12 -39,12 +39,12 @@@ Additional options to the C compiler (f
  
  CFLAGS_KERNEL
  --------------------------------------------------
 -Addtional options for $(CC) when used to compile
 +Additional options for $(CC) when used to compile
  code that is compiled as built-in.
  
  CFLAGS_MODULE
  --------------------------------------------------
 -Addtional module specific options to use for $(CC).
 +Additional module specific options to use for $(CC).
  
  LDFLAGS_MODULE
  --------------------------------------------------
@@@ -201,3 -201,16 +201,16 @@@ KBUILD_ENABLE_EXTRA_GCC_CHECK
  --------------------------------------------------
  If enabled over the make command line with "W=1", it turns on additional
  gcc -W... options for more extensive build-time checking.
+ KBUILD_BUILD_TIMESTAMP
+ --------------------------------------------------
+ Setting this to a date string overrides the timestamp used in the
+ UTS_VERSION definition (uname -v in the running kernel). The value has to
+ be a string that can be passed to date -d. The default value
+ is the output of the date command at one point during build.
+ KBUILD_BUILD_USER, KBUILD_BUILD_HOST
+ --------------------------------------------------
+ These two variables allow to override the user@host string displayed during
+ boot and in /proc/version. The default value is the output of the commands
+ whoami and host, respectively.
diff --combined Makefile
+++ b/Makefile
@@@ -1,7 -1,7 +1,7 @@@
  VERSION = 2
  PATCHLEVEL = 6
  SUBLEVEL = 39
 -EXTRAVERSION = -rc1
 +EXTRAVERSION =
  NAME = Flesh-Eating Bats with Fangs
  
  # *DOCUMENTATION*
@@@ -103,7 -103,7 +103,7 @@@ ifeq ("$(origin O)", "command line"
  endif
  
  ifeq ("$(origin W)", "command line")
-   export KBUILD_ENABLE_EXTRA_GCC_CHECKS := 1
+   export KBUILD_ENABLE_EXTRA_GCC_CHECKS := $(W)
  endif
  
  # That's our default target when none is given on the command line
@@@ -349,7 -349,8 +349,8 @@@ CFLAGS_GCOV        = -fprofile-arcs -ftest-cov
  
  # Use LINUXINCLUDE when you must reference the include/ directory.
  # Needed to be compatible with the O= option
- LINUXINCLUDE    := -I$(srctree)/arch/$(hdr-arch)/include -Iinclude \
+ LINUXINCLUDE    := -I$(srctree)/arch/$(hdr-arch)/include \
+                    -Iarch/$(hdr-arch)/include/generated -Iinclude \
                     $(if $(KBUILD_SRC), -I$(srctree)/include) \
                     -include include/generated/autoconf.h
  
@@@ -382,6 -383,7 +383,7 @@@ export KBUILD_CFLAGS CFLAGS_KERNEL CFLA
  export KBUILD_AFLAGS AFLAGS_KERNEL AFLAGS_MODULE
  export KBUILD_AFLAGS_MODULE KBUILD_CFLAGS_MODULE KBUILD_LDFLAGS_MODULE
  export KBUILD_AFLAGS_KERNEL KBUILD_CFLAGS_KERNEL
+ export KBUILD_ARFLAGS
  
  # When compiling out-of-tree modules, put MODVERDIR in the module
  # tree rather than in the kernel tree. The kernel tree might
@@@ -416,6 -418,12 +418,12 @@@ ifneq ($(KBUILD_SRC),
            $(srctree) $(objtree) $(VERSION) $(PATCHLEVEL)
  endif
  
+ # Support for using generic headers in asm-generic
+ PHONY += asm-generic
+ asm-generic:
+       $(Q)$(MAKE) -f $(srctree)/scripts/Makefile.asm-generic \
+                   obj=arch/$(SRCARCH)/include/generated/asm
  # 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
@@@ -559,6 -567,10 +567,10 @@@ ifndef CONFIG_CC_STACKPROTECTO
  KBUILD_CFLAGS += $(call cc-option, -fno-stack-protector)
  endif
  
+ # This warning generated too much noise in a regular build.
+ # Use make W=1 to enable this warning (see scripts/Makefile.build)
+ KBUILD_CFLAGS += $(call cc-disable-warning, unused-but-set-variable)
  ifdef CONFIG_FRAME_POINTER
  KBUILD_CFLAGS += -fno-omit-frame-pointer -fno-optimize-sibling-calls
  else
@@@ -604,7 -616,7 +616,7 @@@ CHECKFLAGS     += $(NOSTDINC_FLAGS
  KBUILD_CFLAGS += $(call cc-option,-Wdeclaration-after-statement,)
  
  # disable pointer signed / unsigned warnings in gcc 4.0
- KBUILD_CFLAGS += $(call cc-option,-Wno-pointer-sign,)
+ KBUILD_CFLAGS += $(call cc-disable-warning, pointer-sign)
  
  # disable invalid "can't wrap" optimizations for signed / pointers
  KBUILD_CFLAGS += $(call cc-option,-fno-strict-overflow)
  # conserve stack if available
  KBUILD_CFLAGS   += $(call cc-option,-fconserve-stack)
  
+ # use the deterministic mode of AR if available
+ KBUILD_ARFLAGS := $(call ar-option,D)
  # check for 'asm goto'
  ifeq ($(shell $(CONFIG_SHELL) $(srctree)/scripts/gcc-goto.sh $(CC)), y)
        KBUILD_CFLAGS += -DCC_HAVE_ASM_GOTO
@@@ -797,15 -812,17 +812,17 @@@ ifdef CONFIG_KALLSYM
  # o The correct .tmp_kallsyms2.o is linked into the final vmlinux.
  # o Verify that the System.map from vmlinux matches the map from
  #   .tmp_vmlinux2, just in case we did not generate kallsyms correctly.
- # o If CONFIG_KALLSYMS_EXTRA_PASS is set, do an extra pass using
+ # o If 'make KALLSYMS_EXTRA_PASS=1" was used, do an extra pass using
  #   .tmp_vmlinux3 and .tmp_kallsyms3.o.  This is only meant as a
  #   temporary bypass to allow the kernel to be built while the
  #   maintainers work out what went wrong with kallsyms.
  
- ifdef CONFIG_KALLSYMS_EXTRA_PASS
- last_kallsyms := 3
- else
  last_kallsyms := 2
+ ifdef KALLSYMS_EXTRA_PASS
+ ifneq ($(KALLSYMS_EXTRA_PASS),0)
+ last_kallsyms := 3
+ endif
  endif
  
  kallsyms.o := .tmp_kallsyms$(last_kallsyms).o
@@@ -816,7 -833,8 +833,8 @@@ define verify_kallsym
          $(cmd_sysmap) .tmp_vmlinux$(last_kallsyms) .tmp_System.map
        $(Q)cmp -s System.map .tmp_System.map ||                             \
                (echo Inconsistent kallsyms data;                            \
-                echo Try setting CONFIG_KALLSYMS_EXTRA_PASS;                \
+                echo This is a bug - please report about it;                \
+                echo Try "make KALLSYMS_EXTRA_PASS=1" as a workaround;      \
                 rm .tmp_kallsyms* ; /bin/false )
  endef
  
@@@ -947,7 -965,7 +965,7 @@@ ifneq ($(KBUILD_SRC),
  endif
  
  # prepare2 creates a makefile if using a separate output directory
- prepare2: prepare3 outputmakefile
+ prepare2: prepare3 outputmakefile asm-generic
  
  prepare1: prepare2 include/linux/version.h include/generated/utsrelease.h \
                     include/config/auto.conf
@@@ -1021,7 -1039,7 +1039,7 @@@ hdr-inst := -rR -f $(srctree)/scripts/M
  hdr-dst = $(if $(KBUILD_HEADERS), dst=include/asm-$(hdr-arch), dst=include/asm)
  
  PHONY += __headers
- __headers: include/linux/version.h scripts_basic FORCE
+ __headers: include/linux/version.h scripts_basic asm-generic FORCE
        $(Q)$(MAKE) $(build)=scripts build_unifdef
  
  PHONY += headers_install_all
@@@ -1136,7 -1154,8 +1154,8 @@@ CLEAN_FILES +=  vmlinux System.map 
                  .tmp_kallsyms* .tmp_version .tmp_vmlinux* .tmp_System.map
  
  # Directories & files removed with 'make mrproper'
- MRPROPER_DIRS  += include/config usr/include include/generated
+ MRPROPER_DIRS  += include/config usr/include include/generated          \
+                   arch/*/include/generated
  MRPROPER_FILES += .config .config.old .version .old_version             \
                    include/linux/version.h                               \
                  Module.symvers tags TAGS cscope* GPATH GTAGS GRTAGS GSYMS
@@@ -1267,8 -1286,11 +1286,12 @@@ help
        @echo  '  make O=dir [targets] Locate all output files in "dir", including .config'
        @echo  '  make C=1   [targets] Check all c source with $$CHECK (sparse by default)'
        @echo  '  make C=2   [targets] Force check of all c source with $$CHECK'
-       @echo  '  make W=1   [targets] Enable extra gcc checks'
+       @echo  '  make W=n   [targets] Enable extra gcc checks, n=1,2,3 where'
+       @echo  '                1: warnings which may be relevant and do not occur too often'
+       @echo  '                2: warnings which occur quite often but may still be relevant'
+       @echo  '                3: more obscure warnings, can most likely be ignored'
+       @echo  '                Multiple levels can be combined with W=12 or W=123'
 +      @echo  '  make RECORDMCOUNT_WARN=1 [targets] Warn about ignored mcount sections'
        @echo  ''
        @echo  'Execute "make" or "make all" to build all targets marked with [*] '
        @echo  'For further info see the ./README file'
@@@ -1291,6 -1313,7 +1314,7 @@@ $(help-board-dirs): help-%
  # Documentation targets
  # ---------------------------------------------------------------------------
  %docs: scripts_basic FORCE
+       $(Q)$(MAKE) $(build)=scripts build_docproc
        $(Q)$(MAKE) $(build)=Documentation/DocBook $@
  
  else # KBUILD_EXTMOD
@@@ -1375,7 -1398,7 +1399,7 @@@ endif # KBUILD_EXTMO
  clean: $(clean-dirs)
        $(call cmd,rmdirs)
        $(call cmd,rmfiles)
-       @find $(or $(KBUILD_EXTMOD), .) $(RCS_FIND_IGNORE) \
+       @find $(if $(KBUILD_EXTMOD), $(KBUILD_EXTMOD), .) $(RCS_FIND_IGNORE) \
                \( -name '*.[oas]' -o -name '*.ko' -o -name '.*.cmd' \
                -o -name '.*.d' -o -name '.*.tmp' -o -name '*.mod.c' \
                -o -name '*.symtypes' -o -name 'modules.order' \
diff --combined init/Kconfig
@@@ -485,7 -485,7 +485,7 @@@ config TREE_RCU_TRAC
  
  config RCU_BOOST
        bool "Enable RCU priority boosting"
 -      depends on RT_MUTEXES && TINY_PREEMPT_RCU
 +      depends on RT_MUTEXES && PREEMPT_RCU
        default n
        help
          This option boosts the priority of preempted RCU readers that
@@@ -903,6 -903,7 +903,6 @@@ endi
  
  config CC_OPTIMIZE_FOR_SIZE
        bool "Optimize for size"
 -      default y
        help
          Enabling this option will pass "-Os" instead of "-O2" to gcc
          resulting in a smaller kernel.
@@@ -923,6 -924,14 +923,6 @@@ menuconfig EXPER
            environments which can tolerate a "non-standard" kernel.
            Only use this if you really know what you are doing.
  
 -config EMBEDDED
 -      bool "Embedded system"
 -      select EXPERT
 -      help
 -        This option should be enabled if compiling the kernel for
 -        an embedded system so certain expert options are available
 -        for configuration.
 -
  config UID16
        bool "Enable 16-bit UID system calls" if EXPERT
        depends on ARM || BLACKFIN || CRIS || FRV || H8300 || X86_32 || M68K || (S390 && !64BIT) || SUPERH || SPARC32 || (SPARC64 && COMPAT) || UML || (X86_64 && IA32_EMULATION)
@@@ -959,24 -968,18 +959,18 @@@ config KALLSYMS_AL
        bool "Include all symbols in kallsyms"
        depends on DEBUG_KERNEL && KALLSYMS
        help
-          Normally kallsyms only contains the symbols of functions, for nicer
-          OOPS messages.  Some debuggers can use kallsyms for other
-          symbols too: say Y here to include all symbols, if you need them 
-          and you don't care about adding 300k to the size of your kernel.
-          Say N.
- config KALLSYMS_EXTRA_PASS
-       bool "Do an extra kallsyms pass"
-       depends on KALLSYMS
-       help
-          If kallsyms is not working correctly, the build will fail with
-          inconsistent kallsyms data.  If that occurs, log a bug report and
-          turn on KALLSYMS_EXTRA_PASS which should result in a stable build.
-          Always say N here unless you find a bug in kallsyms, which must be
-          reported.  KALLSYMS_EXTRA_PASS is only a temporary workaround while
-          you wait for kallsyms to be fixed.
+          Normally kallsyms only contains the symbols of functions for nicer
+          OOPS messages and backtraces (i.e., symbols from the text and inittext
+          sections). This is sufficient for most cases. And only in very rare
+          cases (e.g., when a debugger is used) all symbols are required (e.g.,
+          names of variables from the data sections, etc).
+          This option makes sure that all symbols are loaded into the kernel
+          image (i.e., symbols from all sections) in cost of increased kernel
+          size (depending on the kernel configuration, it may be 300KiB or
+          something like this).
+          Say N unless you really need all symbols.
  
  config HOTPLUG
        bool "Support for hot-pluggable devices" if EXPERT
@@@ -1095,14 -1098,6 +1089,14 @@@ config AI
            by some high performance threaded applications. Disabling
            this option saves about 7k.
  
 +config EMBEDDED
 +      bool "Embedded system"
 +      select EXPERT
 +      help
 +        This option should be enabled if compiling the kernel for
 +        an embedded system so certain expert options are available
 +        for configuration.
 +
  config HAVE_PERF_EVENTS
        bool
        help
diff --combined scripts/Makefile.build
@@@ -51,36 -51,52 +51,52 @@@ ifeq ($(KBUILD_NOPEDANTIC),
  endif
  
  #
- # make W=1 settings
+ # make W=... settings
  #
- # $(call cc-option... ) handles gcc -W.. options which
+ # W=1 - warnings that may be relevant and does not occur too often
+ # W=2 - warnings that occur quite often but may still be relevant
+ # W=3 - the more obscure warnings, can most likely be ignored
+ #
+ # $(call cc-option, -W...) handles gcc -W.. options which
  # are not supported by all versions of the compiler
  ifdef KBUILD_ENABLE_EXTRA_GCC_CHECKS
- KBUILD_EXTRA_WARNINGS := -Wextra
- KBUILD_EXTRA_WARNINGS += -Wunused -Wno-unused-parameter
- KBUILD_EXTRA_WARNINGS += -Waggregate-return
- KBUILD_EXTRA_WARNINGS += -Wbad-function-cast
- KBUILD_EXTRA_WARNINGS += -Wcast-qual
- KBUILD_EXTRA_WARNINGS += -Wcast-align
- KBUILD_EXTRA_WARNINGS += -Wconversion
- KBUILD_EXTRA_WARNINGS += -Wdisabled-optimization
- KBUILD_EXTRA_WARNINGS += -Wlogical-op
- KBUILD_EXTRA_WARNINGS += -Wmissing-declarations
- KBUILD_EXTRA_WARNINGS += -Wmissing-format-attribute
- KBUILD_EXTRA_WARNINGS += $(call cc-option, -Wmissing-include-dirs,)
- KBUILD_EXTRA_WARNINGS += -Wmissing-prototypes
- KBUILD_EXTRA_WARNINGS += -Wnested-externs
- KBUILD_EXTRA_WARNINGS += -Wold-style-definition
- KBUILD_EXTRA_WARNINGS += $(call cc-option, -Woverlength-strings,)
- KBUILD_EXTRA_WARNINGS += -Wpacked
- KBUILD_EXTRA_WARNINGS += -Wpacked-bitfield-compat
- KBUILD_EXTRA_WARNINGS += -Wpadded
- KBUILD_EXTRA_WARNINGS += -Wpointer-arith
- KBUILD_EXTRA_WARNINGS += -Wredundant-decls
- KBUILD_EXTRA_WARNINGS += -Wshadow
- KBUILD_EXTRA_WARNINGS += -Wswitch-default
- KBUILD_EXTRA_WARNINGS += $(call cc-option, -Wvla,)
- KBUILD_CFLAGS += $(KBUILD_EXTRA_WARNINGS)
+ warning-  := $(empty)
+ warning-1 := -Wextra -Wunused -Wno-unused-parameter
+ warning-1 += -Wmissing-declarations
+ warning-1 += -Wmissing-format-attribute
+ warning-1 += -Wmissing-prototypes
+ warning-1 += -Wold-style-definition
+ warning-1 += $(call cc-option, -Wmissing-include-dirs)
+ warning-1 += $(call cc-option, -Wunused-but-set-variable)
+ warning-2 := -Waggregate-return
+ warning-2 += -Wcast-align
+ warning-2 += -Wdisabled-optimization
+ warning-2 += -Wnested-externs
+ warning-2 += -Wshadow
+ warning-2 += $(call cc-option, -Wlogical-op)
+ warning-3 := -Wbad-function-cast
+ warning-3 += -Wcast-qual
+ warning-3 += -Wconversion
+ warning-3 += -Wpacked
+ warning-3 += -Wpadded
+ warning-3 += -Wpointer-arith
+ warning-3 += -Wredundant-decls
+ warning-3 += -Wswitch-default
+ warning-3 += $(call cc-option, -Wpacked-bitfield-compat)
+ warning-3 += $(call cc-option, -Wvla)
+ warning := $(warning-$(findstring 1, $(KBUILD_ENABLE_EXTRA_GCC_CHECKS)))
+ warning += $(warning-$(findstring 2, $(KBUILD_ENABLE_EXTRA_GCC_CHECKS)))
+ warning += $(warning-$(findstring 3, $(KBUILD_ENABLE_EXTRA_GCC_CHECKS)))
+ ifeq ("$(strip $(warning))","")
+         $(error W=$(KBUILD_ENABLE_EXTRA_GCC_CHECKS) is unknown)
+ endif
+ KBUILD_CFLAGS += $(warning)
  endif
  
  include scripts/Makefile.lib
@@@ -244,19 -260,14 +260,19 @@@ endi
  
  ifdef CONFIG_FTRACE_MCOUNT_RECORD
  ifdef BUILD_C_RECORDMCOUNT
 +ifeq ("$(origin RECORDMCOUNT_WARN)", "command line")
 +  RECORDMCOUNT_FLAGS = -w
 +endif
  # Due to recursion, we must skip empty.o.
  # The empty.o file is created in the make process in order to determine
  #  the target endianness and word size. It is made before all other C
  #  files, including recordmcount.
  sub_cmd_record_mcount =                                       \
        if [ $(@) != "scripts/mod/empty.o" ]; then      \
 -              $(objtree)/scripts/recordmcount "$(@)"; \
 +              $(objtree)/scripts/recordmcount $(RECORDMCOUNT_FLAGS) "$(@)";   \
        fi;
 +recordmcount_source := $(srctree)/scripts/recordmcount.c \
 +                  $(srctree)/scripts/recordmcount.h
  else
  sub_cmd_record_mcount = set -e ; perl $(srctree)/scripts/recordmcount.pl "$(ARCH)" \
        "$(if $(CONFIG_CPU_BIG_ENDIAN),big,little)" \
        "$(OBJDUMP)" "$(OBJCOPY)" "$(CC) $(KBUILD_CFLAGS)" \
        "$(LD)" "$(NM)" "$(RM)" "$(MV)" \
        "$(if $(part-of-module),1,0)" "$(@)";
 +recordmcount_source := $(srctree)/scripts/recordmcount.pl
  endif
  cmd_record_mcount =                                           \
        if [ "$(findstring -pg,$(_c_flags))" = "-pg" ]; then    \
@@@ -285,13 -295,13 +301,13 @@@ define rule_cc_o_
  endef
  
  # Built-in and composite module parts
 -$(obj)/%.o: $(src)/%.c FORCE
 +$(obj)/%.o: $(src)/%.c $(recordmcount_source) FORCE
        $(call cmd,force_checksrc)
        $(call if_changed_rule,cc_o_c)
  
  # Single-part modules are special since we need to mark them in $(MODVERDIR)
  
 -$(single-used-m): $(obj)/%.o: $(src)/%.c FORCE
 +$(single-used-m): $(obj)/%.o: $(src)/%.c $(recordmcount_source) FORCE
        $(call cmd,force_checksrc)
        $(call if_changed_rule,cc_o_c)
        @{ echo $(@:.o=.ko); echo $@; } > $(MODVERDIR)/$(@F:.o=.mod)
@@@ -351,7 -361,7 +367,7 @@@ quiet_cmd_link_o_target = LD      $
  cmd_link_o_target = $(if $(strip $(obj-y)),\
                      $(LD) $(ld_flags) -r -o $@ $(filter $(obj-y), $^) \
                      $(cmd_secanalysis),\
-                     rm -f $@; $(AR) rcs $@)
+                     rm -f $@; $(AR) rcs$(KBUILD_ARFLAGS) $@)
  
  $(builtin-target): $(obj-y) FORCE
        $(call if_changed,link_o_target)
@@@ -377,7 -387,7 +393,7 @@@ $(modorder-target): $(subdir-ym) FORC
  #
  ifdef lib-target
  quiet_cmd_link_l_target = AR      $@
- cmd_link_l_target = rm -f $@; $(AR) rcs $@ $(lib-y)
+ cmd_link_l_target = rm -f $@; $(AR) rcs$(KBUILD_ARFLAGS) $@ $(lib-y)
  
  $(lib-target): $(lib-y) FORCE
        $(call if_changed,link_l_target)
@@@ -1,4 -1,4 +1,4 @@@
- #!/bin/bash
+ #!/bin/sh
  # Copyright (C) Martin Schlemmer <azarah@nosferatu.za.org>
  # Copyright (C) 2006 Sam Ravnborg <sam@ravnborg.org>
  #
@@@ -105,9 -105,9 +105,9 @@@ list_parse() 
  # for links, devices etc the format differs. See gen_init_cpio for details
  parse() {
        local location="$1"
-       local name="${location/${srcdir}//}"
+       local name="/${location#${srcdir}}"
        # change '//' into '/'
-       name="${name//\/\///}"
+       name=$(echo "$name" | sed -e 's://*:/:g')
        local mode="$2"
        local uid="$3"
        local gid="$4"
        [ "$root_gid" = "squash" ] && gid=0 || [ "$gid" -eq "$root_gid" ] && gid=0
        local str="${mode} ${uid} ${gid}"
  
-       [ "${ftype}" == "invalid" ] && return 0
-       [ "${location}" == "${srcdir}" ] && return 0
+       [ "${ftype}" = "invalid" ] && return 0
+       [ "${location}" = "${srcdir}" ] && return 0
  
        case "${ftype}" in
                "file")
@@@ -192,7 -192,7 +192,7 @@@ input_file() 
        if [ -f "$1" ]; then
                ${dep_list}header "$1"
                is_cpio="$(echo "$1" | sed 's/^.*\.cpio\(\..*\)\?/cpio/')"
-               if [ $2 -eq 0 -a ${is_cpio} == "cpio" ]; then
+               if [ $2 -eq 0 -a ${is_cpio} = "cpio" ]; then
                        cpio_file=$1
                        echo "$1" | grep -q '^.*\.cpio\..*' && is_cpio_compressed="compressed"
                        [ ! -z ${dep_list} ] && echo "$1"
                else
                        echo "$1 \\"
                        cat "$1" | while read type dir file perm ; do
-                               if [ "$type" == "file" ]; then
+                               if [ "$type" = "file" ]; then
                                        echo "$file \\";
                                fi
                        done
@@@ -226,7 -226,7 +226,7 @@@ cpio_list
  output="/dev/stdout"
  output_file=""
  is_cpio_compressed=
- compr="gzip -9 -f"
+ compr="gzip -n -9 -f"
  
  arg="$1"
  case "$arg" in
                output_file="$1"
                cpio_list="$(mktemp ${TMPDIR:-/tmp}/cpiolist.XXXXXX)"
                output=${cpio_list}
-               echo "$output_file" | grep -q "\.gz$" && compr="gzip -9 -f"
+               echo "$output_file" | grep -q "\.gz$" && compr="gzip -n -9 -f"
                echo "$output_file" | grep -q "\.bz2$" && compr="bzip2 -9 -f"
                echo "$output_file" | grep -q "\.lzma$" && compr="lzma -9 -f"
                echo "$output_file" | grep -q "\.xz$" && \
@@@ -284,11 -284,18 +284,18 @@@ while [ $# -gt 0 ]; d
  done
  
  # If output_file is set we will generate cpio archive and compress it
 -# we are carefull to delete tmp files
 +# we are careful to delete tmp files
  if [ ! -z ${output_file} ]; then
        if [ -z ${cpio_file} ]; then
+               timestamp=
+               if test -n "$KBUILD_BUILD_TIMESTAMP"; then
+                       timestamp="$(date -d"$KBUILD_BUILD_TIMESTAMP" +%s || :)"
+                       if test -n "$timestamp"; then
+                               timestamp="-t $timestamp"
+                       fi
+               fi
                cpio_tfile="$(mktemp ${TMPDIR:-/tmp}/cpiofile.XXXXXX)"
-               usr/gen_init_cpio ${cpio_list} > ${cpio_tfile}
+               usr/gen_init_cpio $timestamp ${cpio_list} > ${cpio_tfile}
        else
                cpio_tfile=${cpio_file}
        fi