From ef8ff89b58546055e238c3b521f83b440dfe8ef2 Mon Sep 17 00:00:00 2001 From: Michal Marek Date: Tue, 9 Mar 2010 16:00:20 +0100 Subject: kbuild: Really don't clean bounds.h and asm-offsets.h Commit 7d3cc8b tried to keep bounds.h and asm-offsets.h during make clean by filtering these out of $(clean-files), but they are listed in $(targets) and $(always) and thus removed automatically. Introduce a new $(no-clean-files) variable to really skip such files in Makefile.clean. Signed-off-by: Michal Marek diff --git a/Documentation/kbuild/makefiles.txt b/Documentation/kbuild/makefiles.txt index 0135155..fcd1a98 100644 --- a/Documentation/kbuild/makefiles.txt +++ b/Documentation/kbuild/makefiles.txt @@ -779,6 +779,13 @@ This will delete the directory debian, including all subdirectories. 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. diff --git a/Kbuild b/Kbuild index e3737ad..18a8bfb 100644 --- a/Kbuild +++ b/Kbuild @@ -94,5 +94,5 @@ PHONY += missing-syscalls 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 --git a/scripts/Makefile.clean b/scripts/Makefile.clean index 6f89fbb..686cb0d 100644 --- a/scripts/Makefile.clean +++ b/scripts/Makefile.clean @@ -45,6 +45,8 @@ __clean-files := $(extra-y) $(always) \ $(host-progs) \ $(hostprogs-y) $(hostprogs-m) $(hostprogs-) +__clean-files := $(filter-out $(no-clean-files), $(__clean-files)) + # as clean-files is given relative to the current directory, this adds # a $(obj) prefix, except for absolute paths -- cgit v0.10.2 From cbcf14a942eb06d031628046739b983e84b383bf Mon Sep 17 00:00:00 2001 From: Andy Shevchenko Date: Tue, 17 Aug 2010 13:36:40 +0300 Subject: scripts/mod/modpost.c: fix commentary accordingly to last changes The last commits 37ed19d5cce35a40d3913cf9aa208ce9f60db3d7 5003bab82d56754b27be01eef24495a02e00039d have introduced new behaviour of sec2annotation() method. However, the commentary inside the method was left as before. Let's fix it accordingly. Signed-off-by: Andy Shevchenko Cc: Rusty Russell Cc: Andrew Morton Acked-by: WANG Cong Signed-off-by: Michal Marek diff --git a/scripts/mod/modpost.c b/scripts/mod/modpost.c index c827309..859bee4 100644 --- a/scripts/mod/modpost.c +++ b/scripts/mod/modpost.c @@ -1193,6 +1193,9 @@ static Elf_Sym *find_elf_symbol2(struct elf_info *elf, Elf_Addr addr, * .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) { @@ -1215,7 +1218,7 @@ 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 ""; } -- cgit v0.10.2 From c47f214ac65a45597917e017b7a1c617a56ac1cb Mon Sep 17 00:00:00 2001 From: Michal Marek Date: Fri, 3 Sep 2010 15:00:22 +0200 Subject: kbuild: Do not run make clean in $(srctree) Signed-off-by: Michal Marek diff --git a/Makefile b/Makefile index b98943a..d71bfde 100644 --- a/Makefile +++ b/Makefile @@ -1180,7 +1180,7 @@ MRPROPER_FILES += .config .config.old .version .old_version \ # 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): -- cgit v0.10.2 From 88d7be031f9f975bb3f50a0b5ef3796a671e7edf Mon Sep 17 00:00:00 2001 From: Michal Marek Date: Mon, 6 Sep 2010 12:00:08 +0200 Subject: kbuild: Use a single clean rule for kernel and external modules The list of patterns for the external modules case was constantly lagging behind. Signed-off-by: Michal Marek diff --git a/Makefile b/Makefile index d71bfde..414a646 100644 --- a/Makefile +++ b/Makefile @@ -1186,15 +1186,7 @@ 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 # @@ -1392,16 +1384,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.' @@ -1418,6 +1401,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 $@ -- cgit v0.10.2 From c3e2f196f9862cd75cb7f495a3cd1f1bbb82bb40 Mon Sep 17 00:00:00 2001 From: Michael Prokop Date: Mon, 6 Sep 2010 11:57:19 +0200 Subject: scripts/setlocalversion: update comment A tagged repository state isn't enough, git describe only looks at signed or annotated tags (git tag -a/-s). This documentation update makes sure the comment matches the current behaviour. Signed-off-by: Michael Prokop Signed-off-by: Michal Marek diff --git a/scripts/setlocalversion b/scripts/setlocalversion index e90a91c..dc54b19 100755 --- a/scripts/setlocalversion +++ b/scripts/setlocalversion @@ -160,8 +160,10 @@ if test "$CONFIG_LOCALVERSION_AUTO" = "y"; then # 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:++}" -- cgit v0.10.2 From ef894870c6c38580e540c29cfb22a827d54a950a Mon Sep 17 00:00:00 2001 From: Jean Sacren Date: Fri, 10 Sep 2010 23:13:33 -0600 Subject: scripts/kallsyms: Enable error messages while hush up unnecessary warnings As no error was handled, we wouldn't be able to know when an error does occur. The fix preserves error messages while it doesn't let unnecessary compiling warnings show up. Signed-off-by: Jean Sacren Signed-off-by: Michal Marek diff --git a/scripts/kallsyms.c b/scripts/kallsyms.c index e3902fb..60dd3eb 100644 --- a/scripts/kallsyms.c +++ b/scripts/kallsyms.c @@ -107,12 +107,8 @@ static int read_symbol(FILE *in, struct sym_entry *s) rc = fscanf(in, "%llx %c %499s\n", &s->addr, &stype, str); if (rc != 3) { - if (rc != EOF) { - /* skip line. sym is used as dummy to - * shut of "warn_unused_result" warning. - */ - sym = fgets(str, 500, in); - } + if (rc != EOF && fgets(str, 500, in) == NULL) + fprintf(stderr, "Read error or end of file.\n"); return -1; } -- cgit v0.10.2 From 6ae64e428f74e7bacab898ef9665dda719ea6fde Mon Sep 17 00:00:00 2001 From: Hendrik Brueckner Date: Fri, 17 Sep 2010 15:24:09 -0700 Subject: initramfs: generalize initramfs_data.xxx.S variants Remove initramfs_data.{lzo,lzma,gz,bz2}.S variants and use a common implementation in initramfs_data.S. The common implementation expects the file name of the initramfs to be defined in INITRAMFS_IMAGE. Change the Makefile to set the INITRAMFS_IMAGE define symbol according to the selected compression method. Signed-off-by: Hendrik Brueckner Cc: WANG Cong Acked-by: Michal Marek Acked-by: "H. Peter Anvin" Cc: Hendrik Brueckner Cc: Heiko Carstens Cc: Martin Schwidefsky Signed-off-by: Andrew Morton Signed-off-by: Michal Marek diff --git a/usr/Makefile b/usr/Makefile index 6b4b6da..6faa444 100644 --- a/usr/Makefile +++ b/usr/Makefile @@ -18,13 +18,15 @@ suffix_$(CONFIG_INITRAMFS_COMPRESSION_LZMA) = .lzma # Lzo suffix_$(CONFIG_INITRAMFS_COMPRESSION_LZO) = .lzo +AFLAGS_initramfs_data.o += -DINITRAMFS_IMAGE="usr/initramfs_data.cpio$(suffix_y)" + # Generate builtin.o based on initramfs_data.o -obj-$(CONFIG_BLK_DEV_INITRD) := initramfs_data$(suffix_y).o +obj-$(CONFIG_BLK_DEV_INITRD) := initramfs_data.o # initramfs_data.o contains the compressed initramfs_data.cpio image. # The image is included using .incbin, a dependency which is not # tracked automatically. -$(obj)/initramfs_data$(suffix_y).o: $(obj)/initramfs_data.cpio$(suffix_y) FORCE +$(obj)/initramfs_data.o: $(obj)/initramfs_data.cpio$(suffix_y) FORCE ##### # Generate the initramfs cpio archive diff --git a/usr/initramfs_data.S b/usr/initramfs_data.S index 7c6973d..49a545f 100644 --- a/usr/initramfs_data.S +++ b/usr/initramfs_data.S @@ -25,6 +25,7 @@ SECTIONS in the ELF header, as required by certain architectures. */ -.section .init.ramfs,"a" -.incbin "usr/initramfs_data.cpio" +#include +.section .init.ramfs,"a" +.incbin __stringify(INITRAMFS_IMAGE) diff --git a/usr/initramfs_data.bz2.S b/usr/initramfs_data.bz2.S deleted file mode 100644 index bc54d09..0000000 --- a/usr/initramfs_data.bz2.S +++ /dev/null @@ -1,29 +0,0 @@ -/* - initramfs_data includes the compressed binary that is the - filesystem used for early user space. - Note: Older versions of "as" (prior to binutils 2.11.90.0.23 - released on 2001-07-14) dit not support .incbin. - If you are forced to use older binutils than that then the - following trick can be applied to create the resulting binary: - - - ld -m elf_i386 --format binary --oformat elf32-i386 -r \ - -T initramfs_data.scr initramfs_data.cpio.gz -o initramfs_data.o - ld -m elf_i386 -r -o built-in.o initramfs_data.o - - initramfs_data.scr looks like this: -SECTIONS -{ - .init.ramfs : { *(.data) } -} - - The above example is for i386 - the parameters vary from architectures. - Eventually look up LDFLAGS_BLOB in an older version of the - arch/$(ARCH)/Makefile to see the flags used before .incbin was introduced. - - Using .incbin has the advantage over ld that the correct flags are set - in the ELF header, as required by certain architectures. -*/ - -.section .init.ramfs,"a" -.incbin "usr/initramfs_data.cpio.bz2" diff --git a/usr/initramfs_data.gz.S b/usr/initramfs_data.gz.S deleted file mode 100644 index 890c8dd..0000000 --- a/usr/initramfs_data.gz.S +++ /dev/null @@ -1,29 +0,0 @@ -/* - initramfs_data includes the compressed binary that is the - filesystem used for early user space. - Note: Older versions of "as" (prior to binutils 2.11.90.0.23 - released on 2001-07-14) dit not support .incbin. - If you are forced to use older binutils than that then the - following trick can be applied to create the resulting binary: - - - ld -m elf_i386 --format binary --oformat elf32-i386 -r \ - -T initramfs_data.scr initramfs_data.cpio.gz -o initramfs_data.o - ld -m elf_i386 -r -o built-in.o initramfs_data.o - - initramfs_data.scr looks like this: -SECTIONS -{ - .init.ramfs : { *(.data) } -} - - The above example is for i386 - the parameters vary from architectures. - Eventually look up LDFLAGS_BLOB in an older version of the - arch/$(ARCH)/Makefile to see the flags used before .incbin was introduced. - - Using .incbin has the advantage over ld that the correct flags are set - in the ELF header, as required by certain architectures. -*/ - -.section .init.ramfs,"a" -.incbin "usr/initramfs_data.cpio.gz" diff --git a/usr/initramfs_data.lzma.S b/usr/initramfs_data.lzma.S deleted file mode 100644 index e11469e..0000000 --- a/usr/initramfs_data.lzma.S +++ /dev/null @@ -1,29 +0,0 @@ -/* - initramfs_data includes the compressed binary that is the - filesystem used for early user space. - Note: Older versions of "as" (prior to binutils 2.11.90.0.23 - released on 2001-07-14) dit not support .incbin. - If you are forced to use older binutils than that then the - following trick can be applied to create the resulting binary: - - - ld -m elf_i386 --format binary --oformat elf32-i386 -r \ - -T initramfs_data.scr initramfs_data.cpio.gz -o initramfs_data.o - ld -m elf_i386 -r -o built-in.o initramfs_data.o - - initramfs_data.scr looks like this: -SECTIONS -{ - .init.ramfs : { *(.data) } -} - - The above example is for i386 - the parameters vary from architectures. - Eventually look up LDFLAGS_BLOB in an older version of the - arch/$(ARCH)/Makefile to see the flags used before .incbin was introduced. - - Using .incbin has the advantage over ld that the correct flags are set - in the ELF header, as required by certain architectures. -*/ - -.section .init.ramfs,"a" -.incbin "usr/initramfs_data.cpio.lzma" diff --git a/usr/initramfs_data.lzo.S b/usr/initramfs_data.lzo.S deleted file mode 100644 index 5921190..0000000 --- a/usr/initramfs_data.lzo.S +++ /dev/null @@ -1,29 +0,0 @@ -/* - initramfs_data includes the compressed binary that is the - filesystem used for early user space. - Note: Older versions of "as" (prior to binutils 2.11.90.0.23 - released on 2001-07-14) dit not support .incbin. - If you are forced to use older binutils than that then the - following trick can be applied to create the resulting binary: - - - ld -m elf_i386 --format binary --oformat elf32-i386 -r \ - -T initramfs_data.scr initramfs_data.cpio.gz -o initramfs_data.o - ld -m elf_i386 -r -o built-in.o initramfs_data.o - - initramfs_data.scr looks like this: -SECTIONS -{ - .init.ramfs : { *(.data) } -} - - The above example is for i386 - the parameters vary from architectures. - Eventually look up LDFLAGS_BLOB in an older version of the - arch/$(ARCH)/Makefile to see the flags used before .incbin was introduced. - - Using .incbin has the advantage over ld that the correct flags are set - in the ELF header, as required by certain architectures. -*/ - -.section .init.ramfs,"a" -.incbin "usr/initramfs_data.cpio.lzo" -- cgit v0.10.2 From ffe8018c3424892c9590048fc36caa6c3e0c8a76 Mon Sep 17 00:00:00 2001 From: Hendrik Brueckner Date: Fri, 17 Sep 2010 15:24:11 -0700 Subject: initramfs: fix initramfs size calculation The size of a built-in initramfs is calculated in init/initramfs.c by "__initramfs_end - __initramfs_start". Those symbols are defined in the linker script include/asm-generic/vmlinux.lds.h: #define INIT_RAM_FS \ . = ALIGN(PAGE_SIZE); \ VMLINUX_SYMBOL(__initramfs_start) = .; \ *(.init.ramfs) \ VMLINUX_SYMBOL(__initramfs_end) = .; If the initramfs file has an odd number of bytes, the "__initramfs_end" symbol points to an odd address, for example, the symbols in the System.map might look like: 0000000000572000 T __initramfs_start 00000000005bcd05 T __initramfs_end <-- odd address At least on s390 this causes a problem: Certain s390 instructions, especially instructions for loading addresses (larl) or branch addresses must be on even addresses. The compiler loads the symbol addresses with the "larl" instruction. This instruction sets the last bit to 0 and, therefore, for odd size files, the calculated size is one byte less than it should be: 0000000000540a9c : 540a9c: eb cf f0 78 00 24 stmg %r12,%r15,120(%r15), 540aa2: c0 10 00 01 8a af larl %r1,572000 <__initramfs_start> 540aa8: c0 c0 00 03 e1 2e larl %r12,5bcd04 (Instead of 5bcd05) ... 540abe: 1b c1 sr %r12,%r1 To fix the problem, this patch introduces the global variable __initramfs_size, which is calculated in the "usr/initramfs_data.S" file. The populate_rootfs() function can then use the start marker of the .init.ramfs section and the value of __initramfs_size for loading the initramfs. Because the start marker and size is sufficient, the __initramfs_end symbol is no longer needed and is removed. Signed-off-by: Michael Holzheu Signed-off-by: Hendrik Brueckner Reviewed-by: WANG Cong Acked-by: Michal Marek Acked-by: "H. Peter Anvin" Cc: Heiko Carstens Cc: Martin Schwidefsky Signed-off-by: Andrew Morton Signed-off-by: Michal Marek diff --git a/include/asm-generic/vmlinux.lds.h b/include/asm-generic/vmlinux.lds.h index 030a954..0c6387d 100644 --- a/include/asm-generic/vmlinux.lds.h +++ b/include/asm-generic/vmlinux.lds.h @@ -633,7 +633,8 @@ . = ALIGN(PAGE_SIZE); \ VMLINUX_SYMBOL(__initramfs_start) = .; \ *(.init.ramfs) \ - VMLINUX_SYMBOL(__initramfs_end) = .; + . = ALIGN(8); \ + *(.init.ramfs.info) #else #define INIT_RAM_FS #endif diff --git a/init/initramfs.c b/init/initramfs.c index 4b9c202..371c3da 100644 --- a/init/initramfs.c +++ b/init/initramfs.c @@ -483,7 +483,8 @@ static int __init retain_initrd_param(char *str) } __setup("retain_initrd", retain_initrd_param); -extern char __initramfs_start[], __initramfs_end[]; +extern char __initramfs_start[]; +extern unsigned long __initramfs_size; #include #include @@ -570,8 +571,7 @@ static void __init clean_rootfs(void) 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) { @@ -585,8 +585,7 @@ static int __init populate_rootfs(void) 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); diff --git a/usr/initramfs_data.S b/usr/initramfs_data.S index 49a545f..b9efed5 100644 --- a/usr/initramfs_data.S +++ b/usr/initramfs_data.S @@ -11,11 +11,7 @@ -T initramfs_data.scr initramfs_data.cpio.gz -o initramfs_data.o ld -m elf_i386 -r -o built-in.o initramfs_data.o - initramfs_data.scr looks like this: -SECTIONS -{ - .init.ramfs : { *(.data) } -} + For including the .init.ramfs sections, see include/asm-generic/vmlinux.lds. The above example is for i386 - the parameters vary from architectures. Eventually look up LDFLAGS_BLOB in an older version of the @@ -28,4 +24,14 @@ SECTIONS #include .section .init.ramfs,"a" +__irf_start: .incbin __stringify(INITRAMFS_IMAGE) +__irf_end: +.section .init.ramfs.info,"a" +.globl __initramfs_size +__initramfs_size: +#ifdef CONFIG_32BIT + .long __irf_end - __irf_start +#else + .quad __irf_end - __irf_start +#endif -- cgit v0.10.2 From d63f6d1b4d3ad0d88685a5f8eb1c3cac01ddd0db Mon Sep 17 00:00:00 2001 From: Mike Frysinger Date: Tue, 19 Oct 2010 16:11:53 -0400 Subject: initramfs: Fix build break on symbol-prefixed archs Signed-off-by: Mike Frysinger Signed-off-by: Michal Marek diff --git a/scripts/Makefile.lib b/scripts/Makefile.lib index 54fd1b7..e93525c 100644 --- a/scripts/Makefile.lib +++ b/scripts/Makefile.lib @@ -128,7 +128,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 -- cgit v0.10.2