Merge branch 'kbuild' of git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild-2.6
authorLinus Torvalds <torvalds@linux-foundation.org>
Thu, 28 Oct 2010 22:13:55 +0000 (15:13 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Thu, 28 Oct 2010 22:13:55 +0000 (15:13 -0700)
* 'kbuild' of git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild-2.6:
  initramfs: Fix build break on symbol-prefixed archs
  initramfs: fix initramfs size calculation
  initramfs: generalize initramfs_data.xxx.S variants
  scripts/kallsyms: Enable error messages while hush up unnecessary warnings
  scripts/setlocalversion: update comment
  kbuild: Use a single clean rule for kernel and external modules
  kbuild: Do not run make clean in $(srctree)
  scripts/mod/modpost.c: fix commentary accordingly to last changes
  kbuild: Really don't clean bounds.h and asm-offsets.h

1  2 
Documentation/kbuild/makefiles.txt
Kbuild
Makefile
include/asm-generic/vmlinux.lds.h
init/initramfs.c
scripts/Makefile.lib
scripts/mod/modpost.c
scripts/setlocalversion

@@@ -45,6 -45,7 +45,6 @@@ This document describes the Linux kerne
                --- 7.1 header-y
                --- 7.2 objhdr-y
                --- 7.3 destination-y
 -              --- 7.4 unifdef-y (deprecated)
  
        === 8 Kbuild Variables
        === 9 Makefile language
@@@ -167,7 -168,7 +167,7 @@@ more details, with real examples
                #drivers/isdn/i4l/Makefile
                # Makefile for the kernel ISDN subsystem and device drivers.
                # Each configuration option enables a list of files.
 -              obj-$(CONFIG_ISDN)             += isdn.o
 +              obj-$(CONFIG_ISDN_I4L)         += isdn.o
                obj-$(CONFIG_ISDN_PPP_BSDCOMP) += isdn_bsdcomp.o
  
  --- 3.3 Loadable module goals - obj-m
        Note: In this example $(CONFIG_ISDN_PPP_BSDCOMP) evaluates to 'm'
  
        If a kernel module is built from several source files, you specify
 -      that you want to build a module in the same way as above.
 -
 -      Kbuild needs to know which the parts that you want to build your
 -      module from, so you have to tell it by setting an
 -      $(<module_name>-objs) variable.
 +      that you want to build a module in the same way as above; however,
 +      kbuild needs to know which object files you want to build your
 +      module from, so you have to tell it by setting a $(<module_name>-y)
 +      variable.
  
        Example:
                #drivers/isdn/i4l/Makefile
 -              obj-$(CONFIG_ISDN) += isdn.o
 -              isdn-objs := isdn_net_lib.o isdn_v110.o isdn_common.o
 +              obj-$(CONFIG_ISDN_I4L) += isdn.o
 +              isdn-y := isdn_net_lib.o isdn_v110.o isdn_common.o
  
        In this example, the module name will be isdn.o. Kbuild will
 -      compile the objects listed in $(isdn-objs) and then run
 +      compile the objects listed in $(isdn-y) and then run
        "$(LD) -r" on the list of these files to generate isdn.o.
  
 -      Kbuild recognises objects used for composite objects by the suffix
 -      -objs, and the suffix -y. This allows the Makefiles to use
 -      the value of a CONFIG_ symbol to determine if an object is part
 -      of a composite object.
 +      Due to kbuild recognizing $(<module_name>-y) for composite objects,
 +      you can use the value of a CONFIG_ symbol to optionally include an
 +      object file as part of a composite object.
  
        Example:
                #fs/ext2/Makefile
 -              obj-$(CONFIG_EXT2_FS)        += ext2.o
 -              ext2-y                       := balloc.o bitmap.o
 -              ext2-$(CONFIG_EXT2_FS_XATTR) += xattr.o
 +              obj-$(CONFIG_EXT2_FS) += ext2.o
 +              ext2-y := balloc.o dir.o file.o ialloc.o inode.o ioctl.o \
 +                        namei.o super.o symlink.o
 +              ext2-$(CONFIG_EXT2_FS_XATTR) += xattr.o xattr_user.o \
 +                                              xattr_trusted.o
  
 -      In this example, xattr.o is only part of the composite object
 -      ext2.o if $(CONFIG_EXT2_FS_XATTR) evaluates to 'y'.
 +      In this example, xattr.o, xattr_user.o and xattr_trusted.o are only
 +      part of the composite object ext2.o if $(CONFIG_EXT2_FS_XATTR)
 +      evaluates to 'y'.
  
        Note: Of course, when you are building objects into the kernel,
        the syntax above will also work. So, if you have CONFIG_EXT2_FS=y,
        may contain both a built-in.o and a lib.a file.
  
        Example:
 -              #arch/i386/lib/Makefile
 -              lib-y    := checksum.o delay.o
 +              #arch/x86/lib/Makefile
 +              lib-y    := delay.o
  
 -      This will create a library lib.a based on checksum.o and delay.o.
 -      For kbuild to actually recognize that there is a lib.a being built,
 -      the directory shall be listed in libs-y.
 +      This will create a library lib.a based on delay.o. For kbuild to
 +      actually recognize that there is a lib.a being built, the directory
 +      shall be listed in libs-y.
        See also "6.3 List directories to visit when descending".
  
        Use of lib-y is normally restricted to lib/ and arch/*/lib.
  --- 3.7 Compilation flags
  
      ccflags-y, asflags-y and ldflags-y
 -      The three flags listed above applies only to the kbuild makefile
 -      where they are assigned. They are used for all the normal
 -      cc, as and ld invocation happenign during a recursive build.
 +      These three flags apply only to the kbuild makefile in which they
 +      are assigned. They are used for all the normal cc, as and ld
 +      invocations happening during a recursive build.
        Note: Flags with the same behaviour were previously named:
        EXTRA_CFLAGS, EXTRA_AFLAGS and EXTRA_LDFLAGS.
 -      They are yet supported but their use are deprecated.
 +      They are still supported but their usage is deprecated.
  
 -      ccflags-y specifies options for compiling C files with $(CC).
 +      ccflags-y specifies options for compiling with $(CC).
  
        Example:
 -              # drivers/sound/emu10k1/Makefile
 -              ccflags-y += -I$(obj)
 -              ccflags-$(DEBUG) += -DEMU10K1_DEBUG
 -
 +              # drivers/acpi/Makefile
 +              ccflags-y := -Os
 +              ccflags-$(CONFIG_ACPI_DEBUG) += -DACPI_DEBUG_OUTPUT
  
        This variable is necessary because the top Makefile owns the
        variable $(KBUILD_CFLAGS) and uses it for compilation flags for the
        entire tree.
  
 -      asflags-y is a similar string for per-directory options
 -      when compiling assembly language source.
 +      asflags-y specifies options for assembling with $(AS).
  
        Example:
 -              #arch/x86_64/kernel/Makefile
 -              asflags-y := -traditional
 +              #arch/sparc/kernel/Makefile
 +              asflags-y := -ansi
  
 -
 -      ldflags-y is a string for per-directory options to $(LD).
 +      ldflags-y specifies options for linking with $(LD).
  
        Example:
 -              #arch/m68k/fpsp040/Makefile
 -              ldflags-y := -x
 +              #arch/cris/boot/compressed/Makefile
 +              ldflags-y += -T $(srctree)/$(src)/decompress_$(arch-y).lds
  
      subdir-ccflags-y, subdir-asflags-y
 -      The two flags listed above are similar to ccflags-y and as-falgs-y.
 -      The difference is that the subdir- variants has effect for the kbuild
 -      file where tey are present and all subdirectories.
 +      The two flags listed above are similar to ccflags-y and asflags-y.
 +      The difference is that the subdir- variants have effect for the kbuild
 +      file where they are present and all subdirectories.
        Options specified using subdir-* are added to the commandline before
        the options specified using the non-subdir variants.
  
                CFLAGS_aha152x.o =   -DAHA152X_STAT -DAUTOCONF
                CFLAGS_gdth.o    = # -DDEBUG_GDTH=2 -D__SERIAL__ -D__COM2__ \
                                     -DGDTH_STATISTICS
 -              CFLAGS_seagate.o =   -DARBITRATE -DPARITY -DSEAGATE_USE_ASM
  
 -      These three lines specify compilation flags for aha152x.o,
 -      gdth.o, and seagate.o
 +      These two lines specify compilation flags for aha152x.o and gdth.o.
  
        $(AFLAGS_$@) is a similar feature for source files in assembly
        languages.
  
        Example:
                # arch/arm/kernel/Makefile
 -              AFLAGS_head-armv.o := -DTEXTADDR=$(TEXTADDR) -traditional
 -              AFLAGS_head-armo.o := -DTEXTADDR=$(TEXTADDR) -traditional
 +              AFLAGS_head.o        := -DTEXT_OFFSET=$(TEXT_OFFSET)
 +              AFLAGS_crunch-bits.o := -Wa,-mcpu=ep9312
 +              AFLAGS_iwmmxt.o      := -Wa,-mcpu=iwmmxt
 +
  
  --- 3.9 Dependency tracking
  
@@@ -776,6 -779,13 +776,13 @@@ This will delete the directory debian, 
  Kbuild will assume the directories to be in the same relative path as the
  Makefile if no absolute path is specified (path does not start with '/').
  
+ To exclude certain files from make clean, use the $(no-clean-files) variable.
+ This is only a special case used in the top level Kbuild file:
+       Example:
+               #Kbuild
+               no-clean-files := $(bounds-file) $(offsets-file)
  Usually kbuild descends down in subdirectories due to "obj-* := dir/",
  but in the architecture makefiles where the kbuild infrastructure
  is not sufficient this sometimes needs to be explicit.
@@@ -1190,14 -1200,14 +1197,14 @@@ When kbuild executes, the following ste
  === 7 Kbuild syntax for exported headers
  
  The kernel include a set of headers that is exported to userspace.
 -Many headers can be exported as-is but other headers require a
 +Many headers can be exported as-is but other headers require a
  minimal pre-processing before they are ready for user-space.
  The pre-processing does:
  - drop kernel specific annotations
  - drop include of compiler.h
 -- drop all sections that is kernel internat (guarded by ifdef __KERNEL__)
 +- drop all sections that are kernel internal (guarded by ifdef __KERNEL__)
  
 -Each relevant directory contain a file name "Kbuild" which specify the
 +Each relevant directory contains a file name "Kbuild" which specifies the
  headers to be exported.
  See subsequent chapter for the syntax of the Kbuild file.
  
        will be located in the directory "include/linux" when exported.
  
  
 -      --- 7.4 unifdef-y (deprecated)
 -
 -      unifdef-y is deprecated. A direct replacement is header-y.
 -
 -
  === 8 Kbuild Variables
  
  The top Makefile exports the following variables:
diff --combined Kbuild
--- 1/Kbuild
--- 2/Kbuild
+++ b/Kbuild
@@@ -53,7 -53,6 +53,7 @@@ targets += arch/$(SRCARCH)/kernel/asm-o
  # Default sed regexp - multiline due to syntax constraints
  define sed-y
        "/^->/{s:->#\(.*\):/* \1 */:; \
 +      s:^->\([^ ]*\) [\$$#]*\([-0-9]*\) \(.*\):#define \1 \2 /* \3 */:; \
        s:^->\([^ ]*\) [\$$#]*\([^ ]*\) \(.*\):#define \1 \2 /* \3 */:; \
        s:->::; p;}"
  endef
@@@ -95,5 -94,5 +95,5 @@@ PHONY += missing-syscall
  missing-syscalls: scripts/checksyscalls.sh FORCE
        $(call cmd,syscalls)
  
- # Delete all targets during make clean
clean-files := $(addprefix $(objtree)/,$(filter-out $(bounds-file) $(offsets-file),$(targets)))
+ # Keep these two files during make clean
no-clean-files := $(bounds-file) $(offsets-file)
diff --combined Makefile
+++ b/Makefile
@@@ -1,8 -1,8 +1,8 @@@
  VERSION = 2
  PATCHLEVEL = 6
 -SUBLEVEL = 35
 +SUBLEVEL = 36
  EXTRAVERSION =
 -NAME = Sheep on Meth
 +NAME = Flesh-Eating Bats with Fangs
  
  # *DOCUMENTATION*
  # To see a list of typical targets execute "make help"
@@@ -417,9 -417,9 +417,9 @@@ endi
  # of make so .config is not included in this case either (for *config).
  
  no-dot-config-targets := clean mrproper distclean \
 -                       cscope TAGS tags help %docs check% \
 +                       cscope TAGS tags help %docs check% coccicheck \
                         include/linux/version.h headers_% \
 -                       kernelversion
 +                       kernelversion %src-pkg
  
  config-targets := 0
  mixed-targets  := 0
@@@ -531,7 -531,7 +531,7 @@@ endif # $(dot-config
  # The all: target is the default when no target is given on the
  # command line.
  # This allow a user to issue only 'make' to build a kernel including modules
 -# Defaults vmlinux but it is usually overridden in the arch makefile
 +# Defaults to vmlinux, but the arch makefile usually adds further targets
  all: vmlinux
  
  ifdef CONFIG_CC_OPTIMIZE_FOR_SIZE
@@@ -554,15 -554,8 +554,15 @@@ endi
  ifdef CONFIG_FRAME_POINTER
  KBUILD_CFLAGS += -fno-omit-frame-pointer -fno-optimize-sibling-calls
  else
 +# Some targets (ARM with Thumb2, for example), can't be built with frame
 +# pointers.  For those, we don't have FUNCTION_TRACER automatically
 +# select FRAME_POINTER.  However, FUNCTION_TRACER adds -pg, and this is
 +# incompatible with -fomit-frame-pointer with current GCC, so we don't use
 +# -fomit-frame-pointer with FUNCTION_TRACER.
 +ifndef CONFIG_FUNCTION_TRACER
  KBUILD_CFLAGS += -fomit-frame-pointer
  endif
 +endif
  
  ifdef CONFIG_DEBUG_INFO
  KBUILD_CFLAGS += -g
@@@ -575,12 -568,6 +575,12 @@@ endi
  
  ifdef CONFIG_FUNCTION_TRACER
  KBUILD_CFLAGS += -pg
 +ifdef CONFIG_DYNAMIC_FTRACE
 +      ifdef CONFIG_HAVE_C_RECORDMCOUNT
 +              BUILD_C_RECORDMCOUNT := y
 +              export BUILD_C_RECORDMCOUNT
 +      endif
 +endif
  endif
  
  # We trigger additional mismatches with less inlining
@@@ -604,11 -591,6 +604,11 @@@ KBUILD_CFLAGS    += $(call cc-option,-fno-
  # conserve stack if available
  KBUILD_CFLAGS   += $(call cc-option,-fconserve-stack)
  
 +# check for 'asm goto'
 +ifeq ($(shell $(CONFIG_SHELL) $(srctree)/scripts/gcc-goto.sh $(CC)), y)
 +      KBUILD_CFLAGS += -DCC_HAVE_ASM_GOTO
 +endif
 +
  # Add user supplied CPPFLAGS, AFLAGS and CFLAGS as the last assignments
  # But warn user when we do so
  warn-assign = \
@@@ -1137,21 -1119,13 +1137,13 @@@ MRPROPER_FILES += .config .config.old .
  #
  clean: rm-dirs  := $(CLEAN_DIRS)
  clean: rm-files := $(CLEAN_FILES)
- clean-dirs      := $(addprefix _clean_,$(srctree) $(vmlinux-alldirs) Documentation)
+ clean-dirs      := $(addprefix _clean_, . $(vmlinux-alldirs) Documentation)
  
  PHONY += $(clean-dirs) clean archclean
  $(clean-dirs):
        $(Q)$(MAKE) $(clean)=$(patsubst _clean_%,%,$@)
  
- clean: archclean $(clean-dirs)
-       $(call cmd,rmdirs)
-       $(call cmd,rmfiles)
-       @find . $(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' \
-               -o -name modules.builtin -o -name '.tmp_*.o.*' \
-               -o -name '*.gcno' \) -type f -print | xargs rm -f
+ clean: archclean
  
  # mrproper - Delete all generated files, including .config
  #
@@@ -1185,8 -1159,6 +1177,8 @@@ distclean: mrprope
  # rpm target kept for backward compatibility
  package-dir   := $(srctree)/scripts/package
  
 +%src-pkg: FORCE
 +      $(Q)$(MAKE) $(build)=$(package-dir) $@
  %pkg: include/config/kernel.release FORCE
        $(Q)$(MAKE) $(build)=$(package-dir) $@
  rpm: include/config/kernel.release FORCE
@@@ -1238,9 -1210,8 +1230,9 @@@ help
        @echo  '  includecheck    - Check for duplicate included header files'
        @echo  '  export_report   - List the usages of all exported symbols'
        @echo  '  headers_check   - Sanity check on exported headers'
 -      @echo  '  headerdep       - Detect inclusion cycles in headers'; \
 -       echo  ''
 +      @echo  '  headerdep       - Detect inclusion cycles in headers'
 +      @$(MAKE) -f $(srctree)/scripts/Makefile.help checker-help
 +      @echo  ''
        @echo  'Kernel packaging:'
        @$(MAKE) $(build)=$(package-dir) help
        @echo  ''
@@@ -1352,16 -1323,7 +1344,7 @@@ $(clean-dirs)
        $(Q)$(MAKE) $(clean)=$(patsubst _clean_%,%,$@)
  
  clean:        rm-dirs := $(MODVERDIR)
- clean: rm-files := $(KBUILD_EXTMOD)/Module.symvers \
-                    $(KBUILD_EXTMOD)/modules.order \
-                    $(KBUILD_EXTMOD)/modules.builtin
- clean: $(clean-dirs)
-       $(call cmd,rmdirs)
-       $(call cmd,rmfiles)
-       @find $(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 '*.gcno' \) -type f -print | xargs rm -f
+ clean: rm-files := $(KBUILD_EXTMOD)/Module.symvers
  
  help:
        @echo  '  Building external modules.'
@@@ -1378,6 -1340,16 +1361,16 @@@ prepare: 
  scripts: ;
  endif # KBUILD_EXTMOD
  
+ clean: $(clean-dirs)
+       $(call cmd,rmdirs)
+       $(call cmd,rmfiles)
+       @find $(or $(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' \
+               -o -name modules.builtin -o -name '.tmp_*.o.*' \
+               -o -name '*.gcno' \) -type f -print | xargs rm -f
  # Generate tags for editors
  # ---------------------------------------------------------------------------
  quiet_cmd_tags = GEN     $@
@@@ -1399,9 -1371,6 +1392,9 @@@ versioncheck
                -name '*.[hcS]' -type f -print | sort \
                | xargs $(PERL) -w $(srctree)/scripts/checkversion.pl
  
 +coccicheck:
 +      $(Q)$(CONFIG_SHELL) $(srctree)/scripts/$@
 +
  namespacecheck:
        $(PERL) $(srctree)/scripts/namespace.pl
  
@@@ -1426,8 -1395,8 +1419,8 @@@ checkstack
        $(OBJDUMP) -d vmlinux $$(find . -name '*.ko') | \
        $(PERL) $(src)/scripts/checkstack.pl $(CHECKSTACK_ARCH)
  
 -kernelrelease: include/config/kernel.release
 -      @echo $(KERNELRELEASE)
 +kernelrelease:
 +      @echo "$(KERNELVERSION)$$($(CONFIG_SHELL) $(srctree)/scripts/setlocalversion $(srctree))"
  
  kernelversion:
        @echo $(KERNELVERSION)
  #define DATA_DATA                                                     \
        *(.data)                                                        \
        *(.ref.data)                                                    \
 +      *(.data..shared_aligned) /* percpu related */                   \
        DEV_KEEP(init.data)                                             \
        DEV_KEEP(exit.data)                                             \
        CPU_KEEP(init.data)                                             \
        CPU_KEEP(exit.data)                                             \
        MEM_KEEP(init.data)                                             \
        MEM_KEEP(exit.data)                                             \
 -      . = ALIGN(8);                                                   \
 -      VMLINUX_SYMBOL(__start___markers) = .;                          \
 -      *(__markers)                                                    \
 -      VMLINUX_SYMBOL(__stop___markers) = .;                           \
        . = ALIGN(32);                                                  \
        VMLINUX_SYMBOL(__start___tracepoints) = .;                      \
        *(__tracepoints)                                                \
                                                                        \
        BUG_TABLE                                                       \
                                                                        \
 +      JUMP_TABLE                                                      \
 +                                                                      \
        /* PCI quirks */                                                \
        .pci_fixup        : AT(ADDR(.pci_fixup) - LOAD_OFFSET) {        \
                VMLINUX_SYMBOL(__start_pci_fixups_early) = .;           \
  #define BUG_TABLE
  #endif
  
 +#define JUMP_TABLE                                                    \
 +      . = ALIGN(8);                                                   \
 +      __jump_table : AT(ADDR(__jump_table) - LOAD_OFFSET) {           \
 +              VMLINUX_SYMBOL(__start___jump_table) = .;               \
 +              *(__jump_table)                                         \
 +              VMLINUX_SYMBOL(__stop___jump_table) = .;                \
 +      }
 +
  #ifdef CONFIG_PM_TRACE
  #define TRACEDATA                                                     \
        . = ALIGN(4);                                                   \
  
  #ifdef CONFIG_BLK_DEV_INITRD
  #define INIT_RAM_FS                                                   \
 -      . = ALIGN(PAGE_SIZE);                                           \
 +      . = ALIGN(4);                                                   \
        VMLINUX_SYMBOL(__initramfs_start) = .;                          \
        *(.init.ramfs)                                                  \
-       VMLINUX_SYMBOL(__initramfs_end) = .;
+       . = ALIGN(8);                                                   \
+       *(.init.ramfs.info)
  #else
  #define INIT_RAM_FS
  #endif
        EXIT_DATA                                                       \
        EXIT_CALL                                                       \
        *(.discard)                                                     \
 +      *(.discard.*)                                                   \
        }
  
  /**
                                - LOAD_OFFSET) {                        \
                VMLINUX_SYMBOL(__per_cpu_start) = .;                    \
                *(.data..percpu..first)                                 \
 +              . = ALIGN(PAGE_SIZE);                                   \
                *(.data..percpu..page_aligned)                          \
 +              *(.data..percpu..readmostly)                            \
                *(.data..percpu)                                        \
                *(.data..percpu..shared_aligned)                        \
                VMLINUX_SYMBOL(__per_cpu_end) = .;                      \
                VMLINUX_SYMBOL(__per_cpu_load) = .;                     \
                VMLINUX_SYMBOL(__per_cpu_start) = .;                    \
                *(.data..percpu..first)                                 \
 +              . = ALIGN(PAGE_SIZE);                                   \
                *(.data..percpu..page_aligned)                          \
 +              *(.data..percpu..readmostly)                            \
                *(.data..percpu)                                        \
                *(.data..percpu..shared_aligned)                        \
                VMLINUX_SYMBOL(__per_cpu_end) = .;                      \
diff --combined init/initramfs.c
@@@ -483,7 -483,8 +483,8 @@@ static int __init retain_initrd_param(c
  }
  __setup("retain_initrd", retain_initrd_param);
  
- extern char __initramfs_start[], __initramfs_end[];
+ extern char __initramfs_start[];
+ extern unsigned long __initramfs_size;
  #include <linux/initrd.h>
  #include <linux/kexec.h>
  
@@@ -528,7 -529,7 +529,7 @@@ static void __init clean_rootfs(void
        struct linux_dirent64 *dirp;
        int num;
  
 -      fd = sys_open("/", O_RDONLY, 0);
 +      fd = sys_open((const char __user __force *) "/", O_RDONLY, 0);
        WARN_ON(fd < 0);
        if (fd < 0)
                return;
  
  static int __init populate_rootfs(void)
  {
-       char *err = unpack_to_rootfs(__initramfs_start,
-                        __initramfs_end - __initramfs_start);
+       char *err = unpack_to_rootfs(__initramfs_start, __initramfs_size);
        if (err)
                panic(err);     /* Failed to decompress INTERNAL initramfs */
        if (initrd_start) {
                        return 0;
                } else {
                        clean_rootfs();
-                       unpack_to_rootfs(__initramfs_start,
-                                __initramfs_end - __initramfs_start);
+                       unpack_to_rootfs(__initramfs_start, __initramfs_size);
                }
                printk(KERN_INFO "rootfs image is not initramfs (%s)"
                                "; looks like an initrd\n", err);
 -              fd = sys_open("/initrd.image", O_WRONLY|O_CREAT, 0700);
 +              fd = sys_open((const char __user __force *) "/initrd.image",
 +                            O_WRONLY|O_CREAT, 0700);
                if (fd >= 0) {
                        sys_write(fd, (char *)initrd_start,
                                        initrd_end - initrd_start);
diff --combined scripts/Makefile.lib
@@@ -101,6 -101,14 +101,6 @@@ basename_flags = -D"KBUILD_BASENAME=KBU
  modname_flags  = $(if $(filter 1,$(words $(modname))),\
                   -D"KBUILD_MODNAME=KBUILD_STR($(call name-fix,$(modname)))")
  
 -#hash values
 -ifdef CONFIG_DYNAMIC_DEBUG
 -debug_flags = -D"DEBUG_HASH=$(shell ./scripts/basic/hash djb2 $(@D)$(modname))"\
 -              -D"DEBUG_HASH2=$(shell ./scripts/basic/hash r5 $(@D)$(modname))"
 -else
 -debug_flags =
 -endif
 -
  orig_c_flags   = $(KBUILD_CPPFLAGS) $(KBUILD_CFLAGS) $(KBUILD_SUBDIR_CCFLAGS) \
                   $(ccflags-y) $(CFLAGS_$(basetarget).o)
  _c_flags       = $(filter-out $(CFLAGS_REMOVE_$(basetarget).o), $(orig_c_flags))
@@@ -120,7 -128,9 +120,9 @@@ _c_flags += $(if $(patsubst n%,, 
  endif
  
  ifdef CONFIG_SYMBOL_PREFIX
- _cpp_flags += -DSYMBOL_PREFIX=$(patsubst "%",%,$(CONFIG_SYMBOL_PREFIX))
+ _sym_flags = -DSYMBOL_PREFIX=$(patsubst "%",%,$(CONFIG_SYMBOL_PREFIX))
+ _cpp_flags += $(_sym_flags)
+ _a_flags += $(_sym_flags)
  endif
  
  
@@@ -144,7 -154,8 +146,7 @@@ endi
  
  c_flags        = -Wp,-MD,$(depfile) $(NOSTDINC_FLAGS) $(LINUXINCLUDE)     \
                 $(__c_flags) $(modkern_cflags)                           \
 -               -D"KBUILD_STR(s)=\#s" $(basename_flags) $(modname_flags) \
 -                $(debug_flags)
 +               -D"KBUILD_STR(s)=\#s" $(basename_flags) $(modname_flags)
  
  a_flags        = -Wp,-MD,$(depfile) $(NOSTDINC_FLAGS) $(LINUXINCLUDE)     \
                 $(__a_flags) $(modkern_aflags)
diff --combined scripts/mod/modpost.c
@@@ -14,7 -14,6 +14,7 @@@
  #define _GNU_SOURCE
  #include <stdio.h>
  #include <ctype.h>
 +#include <string.h>
  #include "modpost.h"
  #include "../../include/generated/autoconf.h"
  #include "../../include/linux/license.h"
@@@ -790,7 -789,6 +790,7 @@@ static const char *section_white_list[
  {
        ".comment*",
        ".debug*",
 +      ".GCC-command-line",    /* mn10300 */
        ".mdebug*",        /* alpha, score, mips etc. */
        ".pdr",            /* alpha, score, mips etc. */
        ".stab*",
@@@ -1035,13 -1033,6 +1035,13 @@@ static const struct sectioncheck *secti
   *   fromsec = .data*
   *   atsym   =__param*
   *
 + * Pattern 1a:
 + *   module_param_call() ops can refer to __init set function if permissions=0
 + *   The pattern is identified by:
 + *   tosec   = .init.text
 + *   fromsec = .data*
 + *   atsym   = __param_ops_*
 + *
   * Pattern 2:
   *   Many drivers utilise a *driver container with references to
   *   add, remove, probe functions etc.
@@@ -1076,12 -1067,6 +1076,12 @@@ static int secref_whitelist(const struc
            (strncmp(fromsym, "__param", strlen("__param")) == 0))
                return 0;
  
 +      /* Check for pattern 1a */
 +      if (strcmp(tosec, ".init.text") == 0 &&
 +          match(fromsec, data_sections) &&
 +          (strncmp(fromsym, "__param_ops_", strlen("__param_ops_")) == 0))
 +              return 0;
 +
        /* Check for pattern 2 */
        if (match(tosec, init_exit_sections) &&
            match(fromsec, data_sections) &&
@@@ -1208,6 -1193,9 +1208,9 @@@ static Elf_Sym *find_elf_symbol2(struc
   * .cpuinit.data => __cpudata
   * .memexitconst => __memconst
   * etc.
+  *
+  * The memory of returned value has been allocated on a heap. The user of this
+  * method should free it after usage.
  */
  static char *sec2annotation(const char *s)
  {
                        strcat(p, "data ");
                else
                        strcat(p, " ");
-               return r; /* we leak her but we do not care */
+               return r;
        } else {
 -              return "";
 +              return strdup("");
        }
  }
  
@@@ -1260,8 -1248,6 +1263,8 @@@ static void report_sec_mismatch(const c
  {
        const char *from, *from_p;
        const char *to, *to_p;
 +      char *prl_from;
 +      char *prl_to;
  
        switch (from_is_func) {
        case 0: from = "variable"; from_p = "";   break;
  
        switch (mismatch->mismatch) {
        case TEXT_TO_ANY_INIT:
 +              prl_from = sec2annotation(fromsec);
 +              prl_to = sec2annotation(tosec);
                fprintf(stderr,
                "The function %s%s() references\n"
                "the %s %s%s%s.\n"
                "This is often because %s lacks a %s\n"
                "annotation or the annotation of %s is wrong.\n",
 -              sec2annotation(fromsec), fromsym,
 -              to, sec2annotation(tosec), tosym, to_p,
 -              fromsym, sec2annotation(tosec), tosym);
 +              prl_from, fromsym,
 +              to, prl_to, tosym, to_p,
 +              fromsym, prl_to, tosym);
 +              free(prl_from);
 +              free(prl_to);
                break;
        case DATA_TO_ANY_INIT: {
 +              prl_to = sec2annotation(tosec);
                const char *const *s = mismatch->symbol_white_list;
                fprintf(stderr,
                "The variable %s references\n"
                "If the reference is valid then annotate the\n"
                "variable with __init* or __refdata (see linux/init.h) "
                "or name the variable:\n",
 -              fromsym, to, sec2annotation(tosec), tosym, to_p);
 +              fromsym, to, prl_to, tosym, to_p);
                while (*s)
                        fprintf(stderr, "%s, ", *s++);
                fprintf(stderr, "\n");
 +              free(prl_to);
                break;
        }
        case TEXT_TO_ANY_EXIT:
 +              prl_to = sec2annotation(tosec);
                fprintf(stderr,
                "The function %s() references a %s in an exit section.\n"
                "Often the %s %s%s has valid usage outside the exit section\n"
                "and the fix is to remove the %sannotation of %s.\n",
 -              fromsym, to, to, tosym, to_p, sec2annotation(tosec), tosym);
 +              fromsym, to, to, tosym, to_p, prl_to, tosym);
 +              free(prl_to);
                break;
        case DATA_TO_ANY_EXIT: {
 +              prl_to = sec2annotation(tosec);
                const char *const *s = mismatch->symbol_white_list;
                fprintf(stderr,
                "The variable %s references\n"
                "If the reference is valid then annotate the\n"
                "variable with __exit* (see linux/init.h) or "
                "name the variable:\n",
 -              fromsym, to, sec2annotation(tosec), tosym, to_p);
 +              fromsym, to, prl_to, tosym, to_p);
                while (*s)
                        fprintf(stderr, "%s, ", *s++);
                fprintf(stderr, "\n");
 +              free(prl_to);
                break;
        }
        case XXXINIT_TO_SOME_INIT:
        case XXXEXIT_TO_SOME_EXIT:
 +              prl_from = sec2annotation(fromsec);
 +              prl_to = sec2annotation(tosec);
                fprintf(stderr,
                "The %s %s%s%s references\n"
                "a %s %s%s%s.\n"
                "If %s is only used by %s then\n"
                "annotate %s with a matching annotation.\n",
 -              from, sec2annotation(fromsec), fromsym, from_p,
 -              to, sec2annotation(tosec), tosym, to_p,
 +              from, prl_from, fromsym, from_p,
 +              to, prl_to, tosym, to_p,
                tosym, fromsym, tosym);
 +              free(prl_from);
 +              free(prl_to);
                break;
        case ANY_INIT_TO_ANY_EXIT:
 +              prl_from = sec2annotation(fromsec);
 +              prl_to = sec2annotation(tosec);
                fprintf(stderr,
                "The %s %s%s%s references\n"
                "a %s %s%s%s.\n"
                "uses functionality in the exit path.\n"
                "The fix is often to remove the %sannotation of\n"
                "%s%s so it may be used outside an exit section.\n",
 -              from, sec2annotation(fromsec), fromsym, from_p,
 -              to, sec2annotation(tosec), tosym, to_p,
 -              sec2annotation(tosec), tosym, to_p);
 +              from, prl_from, fromsym, from_p,
 +              to, prl_to, tosym, to_p,
 +              prl_to, tosym, to_p);
 +              free(prl_from);
 +              free(prl_to);
                break;
        case ANY_EXIT_TO_ANY_INIT:
 +              prl_from = sec2annotation(fromsec);
 +              prl_to = sec2annotation(tosec);
                fprintf(stderr,
                "The %s %s%s%s references\n"
                "a %s %s%s%s.\n"
                "uses functionality in the init path.\n"
                "The fix is often to remove the %sannotation of\n"
                "%s%s so it may be used outside an init section.\n",
 -              from, sec2annotation(fromsec), fromsym, from_p,
 -              to, sec2annotation(tosec), tosym, to_p,
 -              sec2annotation(tosec), tosym, to_p);
 +              from, prl_from, fromsym, from_p,
 +              to, prl_to, tosym, to_p,
 +              prl_to, tosym, to_p);
 +              free(prl_from);
 +              free(prl_to);
                break;
        case EXPORT_TO_INIT_EXIT:
 +              prl_to = sec2annotation(tosec);
                fprintf(stderr,
                "The symbol %s is exported and annotated %s\n"
                "Fix this by removing the %sannotation of %s "
                "or drop the export.\n",
 -              tosym, sec2annotation(tosec), sec2annotation(tosec), tosym);
 +              tosym, prl_to, prl_to, tosym);
 +              free(prl_to);
                break;
        }
        fprintf(stderr, "\n");
diff --combined scripts/setlocalversion
@@@ -43,7 -43,7 +43,7 @@@ scm_version(
        fi
  
        # Check for git and a git repo.
 -      if head=`git rev-parse --verify --short HEAD 2>/dev/null`; then
 +      if test -d .git && head=`git rev-parse --verify --short HEAD 2>/dev/null`; then
  
                # If we are at a tagged commit (like "v2.6.30-rc6"), we ignore
                # it, because this version is defined in the top level Makefile.
@@@ -85,7 -85,7 +85,7 @@@
        fi
  
        # Check for mercurial and a mercurial repo.
 -      if hgid=`hg id 2>/dev/null`; then
 +      if test -d .hg && hgid=`hg id 2>/dev/null`; then
                tag=`printf '%s' "$hgid" | cut -s -d' ' -f2`
  
                # Do we have an untagged version?
@@@ -160,8 -160,10 +160,10 @@@ if test "$CONFIG_LOCALVERSION_AUTO" = "
        # full scm version string
        res="$res$(scm_version)"
  else
-       # apped a plus sign if the repository is not in a clean tagged
-       # state and  LOCALVERSION= is not specified
+       # append a plus sign if the repository is not in a clean
+       # annotated or signed tagged state (as git describe only
+       # looks at signed or annotated tags - git tag -a/-s) and
+       # LOCALVERSION= is not specified
        if test "${LOCALVERSION+set}" != "set"; then
                scm=$(scm_version --short)
                res="$res${scm:++}"