Commit c9e2a72ff1acfdffdecb338b3d997f90c507e665
Exists in
master
and in
4 other branches
Merge branch 'kbuild' of git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild-2.6
* '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
Showing 16 changed files Side-by-side Diff
- Documentation/kbuild/makefiles.txt
- Kbuild
- Makefile
- include/asm-generic/vmlinux.lds.h
- init/initramfs.c
- scripts/Makefile.clean
- scripts/Makefile.lib
- scripts/kallsyms.c
- scripts/mod/modpost.c
- scripts/setlocalversion
- usr/Makefile
- usr/initramfs_data.S
- usr/initramfs_data.bz2.S
- usr/initramfs_data.gz.S
- usr/initramfs_data.lzma.S
- usr/initramfs_data.lzo.S
Documentation/kbuild/makefiles.txt
... | ... | @@ -776,6 +776,13 @@ |
776 | 776 | Kbuild will assume the directories to be in the same relative path as the |
777 | 777 | Makefile if no absolute path is specified (path does not start with '/'). |
778 | 778 | |
779 | +To exclude certain files from make clean, use the $(no-clean-files) variable. | |
780 | +This is only a special case used in the top level Kbuild file: | |
781 | + | |
782 | + Example: | |
783 | + #Kbuild | |
784 | + no-clean-files := $(bounds-file) $(offsets-file) | |
785 | + | |
779 | 786 | Usually kbuild descends down in subdirectories due to "obj-* := dir/", |
780 | 787 | but in the architecture makefiles where the kbuild infrastructure |
781 | 788 | is not sufficient this sometimes needs to be explicit. |
Kbuild
... | ... | @@ -95,6 +95,6 @@ |
95 | 95 | missing-syscalls: scripts/checksyscalls.sh FORCE |
96 | 96 | $(call cmd,syscalls) |
97 | 97 | |
98 | -# Delete all targets during make clean | |
99 | -clean-files := $(addprefix $(objtree)/,$(filter-out $(bounds-file) $(offsets-file),$(targets))) | |
98 | +# Keep these two files during make clean | |
99 | +no-clean-files := $(bounds-file) $(offsets-file) |
Makefile
... | ... | @@ -1137,21 +1137,13 @@ |
1137 | 1137 | # |
1138 | 1138 | clean: rm-dirs := $(CLEAN_DIRS) |
1139 | 1139 | clean: rm-files := $(CLEAN_FILES) |
1140 | -clean-dirs := $(addprefix _clean_,$(srctree) $(vmlinux-alldirs) Documentation) | |
1140 | +clean-dirs := $(addprefix _clean_, . $(vmlinux-alldirs) Documentation) | |
1141 | 1141 | |
1142 | 1142 | PHONY += $(clean-dirs) clean archclean |
1143 | 1143 | $(clean-dirs): |
1144 | 1144 | $(Q)$(MAKE) $(clean)=$(patsubst _clean_%,%,$@) |
1145 | 1145 | |
1146 | -clean: archclean $(clean-dirs) | |
1147 | - $(call cmd,rmdirs) | |
1148 | - $(call cmd,rmfiles) | |
1149 | - @find . $(RCS_FIND_IGNORE) \ | |
1150 | - \( -name '*.[oas]' -o -name '*.ko' -o -name '.*.cmd' \ | |
1151 | - -o -name '.*.d' -o -name '.*.tmp' -o -name '*.mod.c' \ | |
1152 | - -o -name '*.symtypes' -o -name 'modules.order' \ | |
1153 | - -o -name modules.builtin -o -name '.tmp_*.o.*' \ | |
1154 | - -o -name '*.gcno' \) -type f -print | xargs rm -f | |
1146 | +clean: archclean | |
1155 | 1147 | |
1156 | 1148 | # mrproper - Delete all generated files, including .config |
1157 | 1149 | # |
... | ... | @@ -1352,16 +1344,7 @@ |
1352 | 1344 | $(Q)$(MAKE) $(clean)=$(patsubst _clean_%,%,$@) |
1353 | 1345 | |
1354 | 1346 | clean: rm-dirs := $(MODVERDIR) |
1355 | -clean: rm-files := $(KBUILD_EXTMOD)/Module.symvers \ | |
1356 | - $(KBUILD_EXTMOD)/modules.order \ | |
1357 | - $(KBUILD_EXTMOD)/modules.builtin | |
1358 | -clean: $(clean-dirs) | |
1359 | - $(call cmd,rmdirs) | |
1360 | - $(call cmd,rmfiles) | |
1361 | - @find $(KBUILD_EXTMOD) $(RCS_FIND_IGNORE) \ | |
1362 | - \( -name '*.[oas]' -o -name '*.ko' -o -name '.*.cmd' \ | |
1363 | - -o -name '.*.d' -o -name '.*.tmp' -o -name '*.mod.c' \ | |
1364 | - -o -name '*.gcno' \) -type f -print | xargs rm -f | |
1347 | +clean: rm-files := $(KBUILD_EXTMOD)/Module.symvers | |
1365 | 1348 | |
1366 | 1349 | help: |
1367 | 1350 | @echo ' Building external modules.' |
... | ... | @@ -1377,6 +1360,16 @@ |
1377 | 1360 | prepare: ; |
1378 | 1361 | scripts: ; |
1379 | 1362 | endif # KBUILD_EXTMOD |
1363 | + | |
1364 | +clean: $(clean-dirs) | |
1365 | + $(call cmd,rmdirs) | |
1366 | + $(call cmd,rmfiles) | |
1367 | + @find $(or $(KBUILD_EXTMOD), .) $(RCS_FIND_IGNORE) \ | |
1368 | + \( -name '*.[oas]' -o -name '*.ko' -o -name '.*.cmd' \ | |
1369 | + -o -name '.*.d' -o -name '.*.tmp' -o -name '*.mod.c' \ | |
1370 | + -o -name '*.symtypes' -o -name 'modules.order' \ | |
1371 | + -o -name modules.builtin -o -name '.tmp_*.o.*' \ | |
1372 | + -o -name '*.gcno' \) -type f -print | xargs rm -f | |
1380 | 1373 | |
1381 | 1374 | # Generate tags for editors |
1382 | 1375 | # --------------------------------------------------------------------------- |
include/asm-generic/vmlinux.lds.h
init/initramfs.c
... | ... | @@ -483,7 +483,8 @@ |
483 | 483 | } |
484 | 484 | __setup("retain_initrd", retain_initrd_param); |
485 | 485 | |
486 | -extern char __initramfs_start[], __initramfs_end[]; | |
486 | +extern char __initramfs_start[]; | |
487 | +extern unsigned long __initramfs_size; | |
487 | 488 | #include <linux/initrd.h> |
488 | 489 | #include <linux/kexec.h> |
489 | 490 | |
... | ... | @@ -570,8 +571,7 @@ |
570 | 571 | |
571 | 572 | static int __init populate_rootfs(void) |
572 | 573 | { |
573 | - char *err = unpack_to_rootfs(__initramfs_start, | |
574 | - __initramfs_end - __initramfs_start); | |
574 | + char *err = unpack_to_rootfs(__initramfs_start, __initramfs_size); | |
575 | 575 | if (err) |
576 | 576 | panic(err); /* Failed to decompress INTERNAL initramfs */ |
577 | 577 | if (initrd_start) { |
... | ... | @@ -585,8 +585,7 @@ |
585 | 585 | return 0; |
586 | 586 | } else { |
587 | 587 | clean_rootfs(); |
588 | - unpack_to_rootfs(__initramfs_start, | |
589 | - __initramfs_end - __initramfs_start); | |
588 | + unpack_to_rootfs(__initramfs_start, __initramfs_size); | |
590 | 589 | } |
591 | 590 | printk(KERN_INFO "rootfs image is not initramfs (%s)" |
592 | 591 | "; looks like an initrd\n", err); |
scripts/Makefile.clean
... | ... | @@ -45,6 +45,8 @@ |
45 | 45 | $(host-progs) \ |
46 | 46 | $(hostprogs-y) $(hostprogs-m) $(hostprogs-) |
47 | 47 | |
48 | +__clean-files := $(filter-out $(no-clean-files), $(__clean-files)) | |
49 | + | |
48 | 50 | # as clean-files is given relative to the current directory, this adds |
49 | 51 | # a $(obj) prefix, except for absolute paths |
50 | 52 |
scripts/Makefile.lib
... | ... | @@ -120,7 +120,9 @@ |
120 | 120 | endif |
121 | 121 | |
122 | 122 | ifdef CONFIG_SYMBOL_PREFIX |
123 | -_cpp_flags += -DSYMBOL_PREFIX=$(patsubst "%",%,$(CONFIG_SYMBOL_PREFIX)) | |
123 | +_sym_flags = -DSYMBOL_PREFIX=$(patsubst "%",%,$(CONFIG_SYMBOL_PREFIX)) | |
124 | +_cpp_flags += $(_sym_flags) | |
125 | +_a_flags += $(_sym_flags) | |
124 | 126 | endif |
125 | 127 | |
126 | 128 |
scripts/kallsyms.c
... | ... | @@ -107,12 +107,8 @@ |
107 | 107 | |
108 | 108 | rc = fscanf(in, "%llx %c %499s\n", &s->addr, &stype, str); |
109 | 109 | if (rc != 3) { |
110 | - if (rc != EOF) { | |
111 | - /* skip line. sym is used as dummy to | |
112 | - * shut of "warn_unused_result" warning. | |
113 | - */ | |
114 | - sym = fgets(str, 500, in); | |
115 | - } | |
110 | + if (rc != EOF && fgets(str, 500, in) == NULL) | |
111 | + fprintf(stderr, "Read error or end of file.\n"); | |
116 | 112 | return -1; |
117 | 113 | } |
118 | 114 |
scripts/mod/modpost.c
... | ... | @@ -1208,6 +1208,9 @@ |
1208 | 1208 | * .cpuinit.data => __cpudata |
1209 | 1209 | * .memexitconst => __memconst |
1210 | 1210 | * etc. |
1211 | + * | |
1212 | + * The memory of returned value has been allocated on a heap. The user of this | |
1213 | + * method should free it after usage. | |
1211 | 1214 | */ |
1212 | 1215 | static char *sec2annotation(const char *s) |
1213 | 1216 | { |
... | ... | @@ -1230,7 +1233,7 @@ |
1230 | 1233 | strcat(p, "data "); |
1231 | 1234 | else |
1232 | 1235 | strcat(p, " "); |
1233 | - return r; /* we leak her but we do not care */ | |
1236 | + return r; | |
1234 | 1237 | } else { |
1235 | 1238 | return strdup(""); |
1236 | 1239 | } |
scripts/setlocalversion
... | ... | @@ -160,8 +160,10 @@ |
160 | 160 | # full scm version string |
161 | 161 | res="$res$(scm_version)" |
162 | 162 | else |
163 | - # apped a plus sign if the repository is not in a clean tagged | |
164 | - # state and LOCALVERSION= is not specified | |
163 | + # append a plus sign if the repository is not in a clean | |
164 | + # annotated or signed tagged state (as git describe only | |
165 | + # looks at signed or annotated tags - git tag -a/-s) and | |
166 | + # LOCALVERSION= is not specified | |
165 | 167 | if test "${LOCALVERSION+set}" != "set"; then |
166 | 168 | scm=$(scm_version --short) |
167 | 169 | res="$res${scm:++}" |
usr/Makefile
... | ... | @@ -18,13 +18,15 @@ |
18 | 18 | # Lzo |
19 | 19 | suffix_$(CONFIG_INITRAMFS_COMPRESSION_LZO) = .lzo |
20 | 20 | |
21 | +AFLAGS_initramfs_data.o += -DINITRAMFS_IMAGE="usr/initramfs_data.cpio$(suffix_y)" | |
22 | + | |
21 | 23 | # Generate builtin.o based on initramfs_data.o |
22 | -obj-$(CONFIG_BLK_DEV_INITRD) := initramfs_data$(suffix_y).o | |
24 | +obj-$(CONFIG_BLK_DEV_INITRD) := initramfs_data.o | |
23 | 25 | |
24 | 26 | # initramfs_data.o contains the compressed initramfs_data.cpio image. |
25 | 27 | # The image is included using .incbin, a dependency which is not |
26 | 28 | # tracked automatically. |
27 | -$(obj)/initramfs_data$(suffix_y).o: $(obj)/initramfs_data.cpio$(suffix_y) FORCE | |
29 | +$(obj)/initramfs_data.o: $(obj)/initramfs_data.cpio$(suffix_y) FORCE | |
28 | 30 | |
29 | 31 | ##### |
30 | 32 | # Generate the initramfs cpio archive |
usr/initramfs_data.S
... | ... | @@ -11,11 +11,7 @@ |
11 | 11 | -T initramfs_data.scr initramfs_data.cpio.gz -o initramfs_data.o |
12 | 12 | ld -m elf_i386 -r -o built-in.o initramfs_data.o |
13 | 13 | |
14 | - initramfs_data.scr looks like this: | |
15 | -SECTIONS | |
16 | -{ | |
17 | - .init.ramfs : { *(.data) } | |
18 | -} | |
14 | + For including the .init.ramfs sections, see include/asm-generic/vmlinux.lds. | |
19 | 15 | |
20 | 16 | The above example is for i386 - the parameters vary from architectures. |
21 | 17 | Eventually look up LDFLAGS_BLOB in an older version of the |
22 | 18 | |
... | ... | @@ -25,6 +21,18 @@ |
25 | 21 | in the ELF header, as required by certain architectures. |
26 | 22 | */ |
27 | 23 | |
24 | +#include <linux/stringify.h> | |
25 | + | |
28 | 26 | .section .init.ramfs,"a" |
29 | -.incbin "usr/initramfs_data.cpio" | |
27 | +__irf_start: | |
28 | +.incbin __stringify(INITRAMFS_IMAGE) | |
29 | +__irf_end: | |
30 | +.section .init.ramfs.info,"a" | |
31 | +.globl __initramfs_size | |
32 | +__initramfs_size: | |
33 | +#ifdef CONFIG_32BIT | |
34 | + .long __irf_end - __irf_start | |
35 | +#else | |
36 | + .quad __irf_end - __irf_start | |
37 | +#endif |
usr/initramfs_data.bz2.S
1 | -/* | |
2 | - initramfs_data includes the compressed binary that is the | |
3 | - filesystem used for early user space. | |
4 | - Note: Older versions of "as" (prior to binutils 2.11.90.0.23 | |
5 | - released on 2001-07-14) dit not support .incbin. | |
6 | - If you are forced to use older binutils than that then the | |
7 | - following trick can be applied to create the resulting binary: | |
8 | - | |
9 | - | |
10 | - ld -m elf_i386 --format binary --oformat elf32-i386 -r \ | |
11 | - -T initramfs_data.scr initramfs_data.cpio.gz -o initramfs_data.o | |
12 | - ld -m elf_i386 -r -o built-in.o initramfs_data.o | |
13 | - | |
14 | - initramfs_data.scr looks like this: | |
15 | -SECTIONS | |
16 | -{ | |
17 | - .init.ramfs : { *(.data) } | |
18 | -} | |
19 | - | |
20 | - The above example is for i386 - the parameters vary from architectures. | |
21 | - Eventually look up LDFLAGS_BLOB in an older version of the | |
22 | - arch/$(ARCH)/Makefile to see the flags used before .incbin was introduced. | |
23 | - | |
24 | - Using .incbin has the advantage over ld that the correct flags are set | |
25 | - in the ELF header, as required by certain architectures. | |
26 | -*/ | |
27 | - | |
28 | -.section .init.ramfs,"a" | |
29 | -.incbin "usr/initramfs_data.cpio.bz2" |
usr/initramfs_data.gz.S
1 | -/* | |
2 | - initramfs_data includes the compressed binary that is the | |
3 | - filesystem used for early user space. | |
4 | - Note: Older versions of "as" (prior to binutils 2.11.90.0.23 | |
5 | - released on 2001-07-14) dit not support .incbin. | |
6 | - If you are forced to use older binutils than that then the | |
7 | - following trick can be applied to create the resulting binary: | |
8 | - | |
9 | - | |
10 | - ld -m elf_i386 --format binary --oformat elf32-i386 -r \ | |
11 | - -T initramfs_data.scr initramfs_data.cpio.gz -o initramfs_data.o | |
12 | - ld -m elf_i386 -r -o built-in.o initramfs_data.o | |
13 | - | |
14 | - initramfs_data.scr looks like this: | |
15 | -SECTIONS | |
16 | -{ | |
17 | - .init.ramfs : { *(.data) } | |
18 | -} | |
19 | - | |
20 | - The above example is for i386 - the parameters vary from architectures. | |
21 | - Eventually look up LDFLAGS_BLOB in an older version of the | |
22 | - arch/$(ARCH)/Makefile to see the flags used before .incbin was introduced. | |
23 | - | |
24 | - Using .incbin has the advantage over ld that the correct flags are set | |
25 | - in the ELF header, as required by certain architectures. | |
26 | -*/ | |
27 | - | |
28 | -.section .init.ramfs,"a" | |
29 | -.incbin "usr/initramfs_data.cpio.gz" |
usr/initramfs_data.lzma.S
1 | -/* | |
2 | - initramfs_data includes the compressed binary that is the | |
3 | - filesystem used for early user space. | |
4 | - Note: Older versions of "as" (prior to binutils 2.11.90.0.23 | |
5 | - released on 2001-07-14) dit not support .incbin. | |
6 | - If you are forced to use older binutils than that then the | |
7 | - following trick can be applied to create the resulting binary: | |
8 | - | |
9 | - | |
10 | - ld -m elf_i386 --format binary --oformat elf32-i386 -r \ | |
11 | - -T initramfs_data.scr initramfs_data.cpio.gz -o initramfs_data.o | |
12 | - ld -m elf_i386 -r -o built-in.o initramfs_data.o | |
13 | - | |
14 | - initramfs_data.scr looks like this: | |
15 | -SECTIONS | |
16 | -{ | |
17 | - .init.ramfs : { *(.data) } | |
18 | -} | |
19 | - | |
20 | - The above example is for i386 - the parameters vary from architectures. | |
21 | - Eventually look up LDFLAGS_BLOB in an older version of the | |
22 | - arch/$(ARCH)/Makefile to see the flags used before .incbin was introduced. | |
23 | - | |
24 | - Using .incbin has the advantage over ld that the correct flags are set | |
25 | - in the ELF header, as required by certain architectures. | |
26 | -*/ | |
27 | - | |
28 | -.section .init.ramfs,"a" | |
29 | -.incbin "usr/initramfs_data.cpio.lzma" |
usr/initramfs_data.lzo.S
1 | -/* | |
2 | - initramfs_data includes the compressed binary that is the | |
3 | - filesystem used for early user space. | |
4 | - Note: Older versions of "as" (prior to binutils 2.11.90.0.23 | |
5 | - released on 2001-07-14) dit not support .incbin. | |
6 | - If you are forced to use older binutils than that then the | |
7 | - following trick can be applied to create the resulting binary: | |
8 | - | |
9 | - | |
10 | - ld -m elf_i386 --format binary --oformat elf32-i386 -r \ | |
11 | - -T initramfs_data.scr initramfs_data.cpio.gz -o initramfs_data.o | |
12 | - ld -m elf_i386 -r -o built-in.o initramfs_data.o | |
13 | - | |
14 | - initramfs_data.scr looks like this: | |
15 | -SECTIONS | |
16 | -{ | |
17 | - .init.ramfs : { *(.data) } | |
18 | -} | |
19 | - | |
20 | - The above example is for i386 - the parameters vary from architectures. | |
21 | - Eventually look up LDFLAGS_BLOB in an older version of the | |
22 | - arch/$(ARCH)/Makefile to see the flags used before .incbin was introduced. | |
23 | - | |
24 | - Using .incbin has the advantage over ld that the correct flags are set | |
25 | - in the ELF header, as required by certain architectures. | |
26 | -*/ | |
27 | - | |
28 | -.section .init.ramfs,"a" | |
29 | -.incbin "usr/initramfs_data.cpio.lzo" |