diff options
47 files changed, 766 insertions, 168 deletions
diff --git a/Documentation/DocBook/Makefile b/Documentation/DocBook/Makefile index 867608ab3ca0..10b5cd6c54a0 100644 --- a/Documentation/DocBook/Makefile +++ b/Documentation/DocBook/Makefile | |||
| @@ -41,7 +41,7 @@ psdocs: $(PS) | |||
| 41 | PDF := $(patsubst %.xml, %.pdf, $(BOOKS)) | 41 | PDF := $(patsubst %.xml, %.pdf, $(BOOKS)) |
| 42 | pdfdocs: $(PDF) | 42 | pdfdocs: $(PDF) |
| 43 | 43 | ||
| 44 | HTML := $(patsubst %.xml, %.html, $(BOOKS)) | 44 | HTML := $(sort $(patsubst %.xml, %.html, $(BOOKS))) |
| 45 | htmldocs: $(HTML) | 45 | htmldocs: $(HTML) |
| 46 | 46 | ||
| 47 | MAN := $(patsubst %.xml, %.9, $(BOOKS)) | 47 | MAN := $(patsubst %.xml, %.9, $(BOOKS)) |
| @@ -152,6 +152,7 @@ quiet_cmd_db2man = MAN $@ | |||
| 152 | @(which xmlto > /dev/null 2>&1) || \ | 152 | @(which xmlto > /dev/null 2>&1) || \ |
| 153 | (echo "*** You need to install xmlto ***"; \ | 153 | (echo "*** You need to install xmlto ***"; \ |
| 154 | exit 1) | 154 | exit 1) |
| 155 | $(Q)mkdir -p $(obj)/man | ||
| 155 | $(call cmd,db2man) | 156 | $(call cmd,db2man) |
| 156 | @touch $@ | 157 | @touch $@ |
| 157 | 158 | ||
| @@ -212,11 +213,7 @@ clean-files := $(DOCBOOKS) \ | |||
| 212 | $(patsubst %.xml, %.9, $(DOCBOOKS)) \ | 213 | $(patsubst %.xml, %.9, $(DOCBOOKS)) \ |
| 213 | $(C-procfs-example) | 214 | $(C-procfs-example) |
| 214 | 215 | ||
| 215 | clean-dirs := $(patsubst %.xml,%,$(DOCBOOKS)) | 216 | clean-dirs := $(patsubst %.xml,%,$(DOCBOOKS)) man |
| 216 | |||
| 217 | #man put files in man subdir - traverse down | ||
| 218 | subdir- := man/ | ||
| 219 | |||
| 220 | 217 | ||
| 221 | # Declare the contents of the .PHONY variable as phony. We keep that | 218 | # Declare the contents of the .PHONY variable as phony. We keep that |
| 222 | # information in a variable se we can use it in if_changed and friends. | 219 | # information in a variable se we can use it in if_changed and friends. |
diff --git a/Documentation/DocBook/man/Makefile b/Documentation/DocBook/man/Makefile deleted file mode 100644 index 4fb7ea0f7ac8..000000000000 --- a/Documentation/DocBook/man/Makefile +++ /dev/null | |||
| @@ -1,3 +0,0 @@ | |||
| 1 | # Rules are put in Documentation/DocBook | ||
| 2 | |||
| 3 | clean-files := *.9.gz *.sgml manpage.links manpage.refs | ||
diff --git a/Documentation/kbuild/modules.txt b/Documentation/kbuild/modules.txt index 769ee05ee4d1..1d247d59ad56 100644 --- a/Documentation/kbuild/modules.txt +++ b/Documentation/kbuild/modules.txt | |||
| @@ -249,7 +249,7 @@ following files: | |||
| 249 | --> filename: Makefile | 249 | --> filename: Makefile |
| 250 | KERNELDIR := /lib/modules/`uname -r`/build | 250 | KERNELDIR := /lib/modules/`uname -r`/build |
| 251 | all:: | 251 | all:: |
| 252 | $(MAKE) -C $KERNELDIR M=`pwd` $@ | 252 | $(MAKE) -C $(KERNELDIR) M=`pwd` $@ |
| 253 | 253 | ||
| 254 | # Module specific targets | 254 | # Module specific targets |
| 255 | genbin: | 255 | genbin: |
| @@ -2,6 +2,7 @@ | |||
| 2 | # Kbuild for top-level directory of the kernel | 2 | # Kbuild for top-level directory of the kernel |
| 3 | # This file takes care of the following: | 3 | # This file takes care of the following: |
| 4 | # 1) Generate asm-offsets.h | 4 | # 1) Generate asm-offsets.h |
| 5 | # 2) Check for missing system calls | ||
| 5 | 6 | ||
| 6 | ##### | 7 | ##### |
| 7 | # 1) Generate asm-offsets.h | 8 | # 1) Generate asm-offsets.h |
| @@ -46,3 +47,13 @@ $(obj)/$(offsets-file): arch/$(ARCH)/kernel/asm-offsets.s Kbuild | |||
| 46 | $(Q)mkdir -p $(dir $@) | 47 | $(Q)mkdir -p $(dir $@) |
| 47 | $(call cmd,offsets) | 48 | $(call cmd,offsets) |
| 48 | 49 | ||
| 50 | ##### | ||
| 51 | # 2) Check for missing system calls | ||
| 52 | # | ||
| 53 | |||
| 54 | quiet_cmd_syscalls = CALL $< | ||
| 55 | cmd_syscalls = $(CONFIG_SHELL) $< $(CC) $(c_flags) | ||
| 56 | |||
| 57 | PHONY += missing-syscalls | ||
| 58 | missing-syscalls: scripts/checksyscalls.sh FORCE | ||
| 59 | $(call cmd,syscalls) | ||
| @@ -576,7 +576,7 @@ libs-y := $(libs-y1) $(libs-y2) | |||
| 576 | # --------------------------------------------------------------------------- | 576 | # --------------------------------------------------------------------------- |
| 577 | # vmlinux is built from the objects selected by $(vmlinux-init) and | 577 | # vmlinux is built from the objects selected by $(vmlinux-init) and |
| 578 | # $(vmlinux-main). Most are built-in.o files from top-level directories | 578 | # $(vmlinux-main). Most are built-in.o files from top-level directories |
| 579 | # in the kernel tree, others are specified in arch/$(ARCH)Makefile. | 579 | # in the kernel tree, others are specified in arch/$(ARCH)/Makefile. |
| 580 | # Ordering when linking is important, and $(vmlinux-init) must be first. | 580 | # Ordering when linking is important, and $(vmlinux-init) must be first. |
| 581 | # | 581 | # |
| 582 | # vmlinux | 582 | # vmlinux |
| @@ -603,6 +603,7 @@ vmlinux-init := $(head-y) $(init-y) | |||
| 603 | vmlinux-main := $(core-y) $(libs-y) $(drivers-y) $(net-y) | 603 | vmlinux-main := $(core-y) $(libs-y) $(drivers-y) $(net-y) |
| 604 | vmlinux-all := $(vmlinux-init) $(vmlinux-main) | 604 | vmlinux-all := $(vmlinux-init) $(vmlinux-main) |
| 605 | vmlinux-lds := arch/$(ARCH)/kernel/vmlinux.lds | 605 | vmlinux-lds := arch/$(ARCH)/kernel/vmlinux.lds |
| 606 | export KBUILD_VMLINUX_OBJS := $(vmlinux-all) | ||
| 606 | 607 | ||
| 607 | # Rule to link vmlinux - also used during CONFIG_KALLSYMS | 608 | # Rule to link vmlinux - also used during CONFIG_KALLSYMS |
| 608 | # May be overridden by arch/$(ARCH)/Makefile | 609 | # May be overridden by arch/$(ARCH)/Makefile |
| @@ -855,6 +856,7 @@ archprepare: prepare1 scripts_basic | |||
| 855 | 856 | ||
| 856 | prepare0: archprepare FORCE | 857 | prepare0: archprepare FORCE |
| 857 | $(Q)$(MAKE) $(build)=. | 858 | $(Q)$(MAKE) $(build)=. |
| 859 | $(Q)$(MAKE) $(build)=. missing-syscalls | ||
| 858 | 860 | ||
| 859 | # All the preparing.. | 861 | # All the preparing.. |
| 860 | prepare: prepare0 | 862 | prepare: prepare0 |
| @@ -1277,10 +1279,7 @@ endif | |||
| 1277 | ALLSOURCE_ARCHS := $(ARCH) | 1279 | ALLSOURCE_ARCHS := $(ARCH) |
| 1278 | 1280 | ||
| 1279 | define find-sources | 1281 | define find-sources |
| 1280 | ( find $(__srctree) $(RCS_FIND_IGNORE) \ | 1282 | ( for ARCH in $(ALLSOURCE_ARCHS) ; do \ |
| 1281 | \( -name include -o -name arch \) -prune -o \ | ||
| 1282 | -name $1 -print; \ | ||
| 1283 | for ARCH in $(ALLSOURCE_ARCHS) ; do \ | ||
| 1284 | find $(__srctree)arch/$${ARCH} $(RCS_FIND_IGNORE) \ | 1283 | find $(__srctree)arch/$${ARCH} $(RCS_FIND_IGNORE) \ |
| 1285 | -name $1 -print; \ | 1284 | -name $1 -print; \ |
| 1286 | done ; \ | 1285 | done ; \ |
| @@ -1294,7 +1293,11 @@ define find-sources | |||
| 1294 | -name $1 -print; \ | 1293 | -name $1 -print; \ |
| 1295 | done ; \ | 1294 | done ; \ |
| 1296 | find $(__srctree)include/asm-generic $(RCS_FIND_IGNORE) \ | 1295 | find $(__srctree)include/asm-generic $(RCS_FIND_IGNORE) \ |
| 1297 | -name $1 -print ) | 1296 | -name $1 -print; \ |
| 1297 | find $(__srctree) $(RCS_FIND_IGNORE) \ | ||
| 1298 | \( -name include -o -name arch \) -prune -o \ | ||
| 1299 | -name $1 -print; \ | ||
| 1300 | ) | ||
| 1298 | endef | 1301 | endef |
| 1299 | 1302 | ||
| 1300 | define all-sources | 1303 | define all-sources |
diff --git a/drivers/mtd/devices/Kconfig b/drivers/mtd/devices/Kconfig index 690c94236d7f..ff642f8fbee7 100644 --- a/drivers/mtd/devices/Kconfig +++ b/drivers/mtd/devices/Kconfig | |||
| @@ -49,8 +49,8 @@ config MTD_MS02NV | |||
| 49 | 49 | ||
| 50 | If you want to compile this driver as a module ( = code which can be | 50 | If you want to compile this driver as a module ( = code which can be |
| 51 | inserted in and removed from the running kernel whenever you want), | 51 | inserted in and removed from the running kernel whenever you want), |
| 52 | say M here and read <file:Documentation/modules.txt>. The module will | 52 | say M here and read <file:Documentation/kbuild/modules.txt>. |
| 53 | be called ms02-nv.o. | 53 | The module will be called ms02-nv.ko. |
| 54 | 54 | ||
| 55 | config MTD_DATAFLASH | 55 | config MTD_DATAFLASH |
| 56 | tristate "Support for AT45xxx DataFlash" | 56 | tristate "Support for AT45xxx DataFlash" |
diff --git a/drivers/net/Kconfig b/drivers/net/Kconfig index 69dba62e0bad..9e6933a5088e 100644 --- a/drivers/net/Kconfig +++ b/drivers/net/Kconfig | |||
| @@ -833,8 +833,8 @@ config SMC91X | |||
| 833 | This driver is also available as a module ( = code which can be | 833 | This driver is also available as a module ( = code which can be |
| 834 | inserted in and removed from the running kernel whenever you want). | 834 | inserted in and removed from the running kernel whenever you want). |
| 835 | The module will be called smc91x. If you want to compile it as a | 835 | The module will be called smc91x. If you want to compile it as a |
| 836 | module, say M here and read <file:Documentation/modules.txt> as well | 836 | module, say M here and read <file:Documentation/kbuild/modules.txt> |
| 837 | as <file:Documentation/networking/net-modules.txt>. | 837 | as well as <file:Documentation/networking/net-modules.txt>. |
| 838 | 838 | ||
| 839 | config SMC9194 | 839 | config SMC9194 |
| 840 | tristate "SMC 9194 support" | 840 | tristate "SMC 9194 support" |
| @@ -889,7 +889,7 @@ config SMC911X | |||
| 889 | 889 | ||
| 890 | This driver is also available as a module. The module will be | 890 | This driver is also available as a module. The module will be |
| 891 | called smc911x. If you want to compile it as a module, say M | 891 | called smc911x. If you want to compile it as a module, say M |
| 892 | here and read <file:Documentation/modules.txt> | 892 | here and read <file:Documentation/kbuild/modules.txt> |
| 893 | 893 | ||
| 894 | config NET_VENDOR_RACAL | 894 | config NET_VENDOR_RACAL |
| 895 | bool "Racal-Interlan (Micom) NI cards" | 895 | bool "Racal-Interlan (Micom) NI cards" |
diff --git a/drivers/net/wireless/Kconfig b/drivers/net/wireless/Kconfig index c4b3dc291a5a..0184614517f9 100644 --- a/drivers/net/wireless/Kconfig +++ b/drivers/net/wireless/Kconfig | |||
| @@ -153,8 +153,8 @@ config IPW2100 | |||
| 153 | 153 | ||
| 154 | If you want to compile the driver as a module ( = code which can be | 154 | If you want to compile the driver as a module ( = code which can be |
| 155 | inserted in and removed from the running kernel whenever you want), | 155 | inserted in and removed from the running kernel whenever you want), |
| 156 | say M here and read <file:Documentation/modules.txt>. The module | 156 | say M here and read <file:Documentation/kbuild/modules.txt>. |
| 157 | will be called ipw2100.ko. | 157 | The module will be called ipw2100.ko. |
| 158 | 158 | ||
| 159 | config IPW2100_MONITOR | 159 | config IPW2100_MONITOR |
| 160 | bool "Enable promiscuous mode" | 160 | bool "Enable promiscuous mode" |
| @@ -208,8 +208,8 @@ config IPW2200 | |||
| 208 | 208 | ||
| 209 | If you want to compile the driver as a module ( = code which can be | 209 | If you want to compile the driver as a module ( = code which can be |
| 210 | inserted in and removed from the running kernel whenever you want), | 210 | inserted in and removed from the running kernel whenever you want), |
| 211 | say M here and read <file:Documentation/modules.txt>. The module | 211 | say M here and read <file:Documentation/kbuild/modules.txt>. |
| 212 | will be called ipw2200.ko. | 212 | The module will be called ipw2200.ko. |
| 213 | 213 | ||
| 214 | config IPW2200_MONITOR | 214 | config IPW2200_MONITOR |
| 215 | bool "Enable promiscuous mode" | 215 | bool "Enable promiscuous mode" |
| @@ -517,8 +517,8 @@ config PRISM54 | |||
| 517 | 517 | ||
| 518 | If you want to compile the driver as a module ( = code which can be | 518 | If you want to compile the driver as a module ( = code which can be |
| 519 | inserted in and removed from the running kernel whenever you want), | 519 | inserted in and removed from the running kernel whenever you want), |
| 520 | say M here and read <file:Documentation/modules.txt>. The module | 520 | say M here and read <file:Documentation/kbuild/modules.txt>. |
| 521 | will be called prism54.ko. | 521 | The module will be called prism54.ko. |
| 522 | 522 | ||
| 523 | config USB_ZD1201 | 523 | config USB_ZD1201 |
| 524 | tristate "USB ZD1201 based Wireless device support" | 524 | tristate "USB ZD1201 based Wireless device support" |
diff --git a/drivers/scsi/Kconfig b/drivers/scsi/Kconfig index 58c811d20eb2..e62d23f65180 100644 --- a/drivers/scsi/Kconfig +++ b/drivers/scsi/Kconfig | |||
| @@ -170,7 +170,7 @@ config CHR_DEV_SCH | |||
| 170 | 170 | ||
| 171 | If you want to compile this as a module ( = code which can be | 171 | If you want to compile this as a module ( = code which can be |
| 172 | inserted in and removed from the running kernel whenever you want), | 172 | inserted in and removed from the running kernel whenever you want), |
| 173 | say M here and read <file:Documentation/modules.txt> and | 173 | say M here and read <file:Documentation/kbuild/modules.txt> and |
| 174 | <file:Documentation/scsi.txt>. The module will be called ch.o. | 174 | <file:Documentation/scsi.txt>. The module will be called ch.o. |
| 175 | If unsure, say N. | 175 | If unsure, say N. |
| 176 | 176 | ||
| @@ -1783,7 +1783,7 @@ config ZFCP | |||
| 1783 | 1783 | ||
| 1784 | This driver is also available as a module. This module will be | 1784 | This driver is also available as a module. This module will be |
| 1785 | called zfcp. If you want to compile it as a module, say M here | 1785 | called zfcp. If you want to compile it as a module, say M here |
| 1786 | and read <file:Documentation/modules.txt>. | 1786 | and read <file:Documentation/kbuild/modules.txt>. |
| 1787 | 1787 | ||
| 1788 | config SCSI_SRP | 1788 | config SCSI_SRP |
| 1789 | tristate "SCSI RDMA Protocol helper library" | 1789 | tristate "SCSI RDMA Protocol helper library" |
diff --git a/drivers/video/Kconfig b/drivers/video/Kconfig index d18b51f989c9..2d89d0e9bcf4 100644 --- a/drivers/video/Kconfig +++ b/drivers/video/Kconfig | |||
| @@ -191,7 +191,7 @@ config FB_ARMCLCD | |||
| 191 | 191 | ||
| 192 | If you want to compile this as a module (=code which can be | 192 | If you want to compile this as a module (=code which can be |
| 193 | inserted into and removed from the running kernel), say M | 193 | inserted into and removed from the running kernel), say M |
| 194 | here and read <file:Documentation/modules.txt>. The module | 194 | here and read <file:Documentation/kbuild/modules.txt>. The module |
| 195 | will be called amba-clcd. | 195 | will be called amba-clcd. |
| 196 | 196 | ||
| 197 | choice | 197 | choice |
| @@ -1494,7 +1494,7 @@ config FB_PXA | |||
| 1494 | This driver is also available as a module ( = code which can be | 1494 | This driver is also available as a module ( = code which can be |
| 1495 | inserted and removed from the running kernel whenever you want). The | 1495 | inserted and removed from the running kernel whenever you want). The |
| 1496 | module will be called pxafb. If you want to compile it as a module, | 1496 | module will be called pxafb. If you want to compile it as a module, |
| 1497 | say M here and read <file:Documentation/modules.txt>. | 1497 | say M here and read <file:Documentation/kbuild/modules.txt>. |
| 1498 | 1498 | ||
| 1499 | If unsure, say N. | 1499 | If unsure, say N. |
| 1500 | 1500 | ||
| @@ -1547,7 +1547,7 @@ config FB_W100 | |||
| 1547 | This driver is also available as a module ( = code which can be | 1547 | This driver is also available as a module ( = code which can be |
| 1548 | inserted and removed from the running kernel whenever you want). The | 1548 | inserted and removed from the running kernel whenever you want). The |
| 1549 | module will be called w100fb. If you want to compile it as a module, | 1549 | module will be called w100fb. If you want to compile it as a module, |
| 1550 | say M here and read <file:Documentation/modules.txt>. | 1550 | say M here and read <file:Documentation/kbuild/modules.txt>. |
| 1551 | 1551 | ||
| 1552 | If unsure, say N. | 1552 | If unsure, say N. |
| 1553 | 1553 | ||
| @@ -1564,7 +1564,7 @@ config FB_S3C2410 | |||
| 1564 | This driver is also available as a module ( = code which can be | 1564 | This driver is also available as a module ( = code which can be |
| 1565 | inserted and removed from the running kernel whenever you want). The | 1565 | inserted and removed from the running kernel whenever you want). The |
| 1566 | module will be called s3c2410fb. If you want to compile it as a module, | 1566 | module will be called s3c2410fb. If you want to compile it as a module, |
| 1567 | say M here and read <file:Documentation/modules.txt>. | 1567 | say M here and read <file:Documentation/kbuild/modules.txt>. |
| 1568 | 1568 | ||
| 1569 | If unsure, say N. | 1569 | If unsure, say N. |
| 1570 | config FB_S3C2410_DEBUG | 1570 | config FB_S3C2410_DEBUG |
diff --git a/include/linux/input.h b/include/linux/input.h index 439954d09752..be2bf3a2b031 100644 --- a/include/linux/input.h +++ b/include/linux/input.h | |||
| @@ -990,6 +990,10 @@ struct input_dev { | |||
| 990 | #error "EV_MAX and INPUT_DEVICE_ID_EV_MAX do not match" | 990 | #error "EV_MAX and INPUT_DEVICE_ID_EV_MAX do not match" |
| 991 | #endif | 991 | #endif |
| 992 | 992 | ||
| 993 | #if KEY_MIN_INTERESTING != INPUT_DEVICE_ID_KEY_MIN_INTERESTING | ||
| 994 | #error "KEY_MIN_INTERESTING and INPUT_DEVICE_ID_KEY_MIN_INTERESTING do not match" | ||
| 995 | #endif | ||
| 996 | |||
| 993 | #if KEY_MAX != INPUT_DEVICE_ID_KEY_MAX | 997 | #if KEY_MAX != INPUT_DEVICE_ID_KEY_MAX |
| 994 | #error "KEY_MAX and INPUT_DEVICE_ID_KEY_MAX do not match" | 998 | #error "KEY_MAX and INPUT_DEVICE_ID_KEY_MAX do not match" |
| 995 | #endif | 999 | #endif |
diff --git a/include/linux/mod_devicetable.h b/include/linux/mod_devicetable.h index e96b2dee10bb..af04a555b52c 100644 --- a/include/linux/mod_devicetable.h +++ b/include/linux/mod_devicetable.h | |||
| @@ -262,6 +262,7 @@ struct i2c_device_id { | |||
| 262 | 262 | ||
| 263 | /* Input */ | 263 | /* Input */ |
| 264 | #define INPUT_DEVICE_ID_EV_MAX 0x1f | 264 | #define INPUT_DEVICE_ID_EV_MAX 0x1f |
| 265 | #define INPUT_DEVICE_ID_KEY_MIN_INTERESTING 0x71 | ||
| 265 | #define INPUT_DEVICE_ID_KEY_MAX 0x1ff | 266 | #define INPUT_DEVICE_ID_KEY_MAX 0x1ff |
| 266 | #define INPUT_DEVICE_ID_REL_MAX 0x0f | 267 | #define INPUT_DEVICE_ID_REL_MAX 0x0f |
| 267 | #define INPUT_DEVICE_ID_ABS_MAX 0x3f | 268 | #define INPUT_DEVICE_ID_ABS_MAX 0x3f |
diff --git a/init/Kconfig b/init/Kconfig index b170aa1d43bd..29d9e47ee0da 100644 --- a/init/Kconfig +++ b/init/Kconfig | |||
| @@ -80,16 +80,20 @@ config LOCALVERSION_AUTO | |||
| 80 | default y | 80 | default y |
| 81 | help | 81 | help |
| 82 | This will try to automatically determine if the current tree is a | 82 | This will try to automatically determine if the current tree is a |
| 83 | release tree by looking for git tags that | 83 | release tree by looking for git tags that belong to the current |
| 84 | belong to the current top of tree revision. | 84 | top of tree revision. |
| 85 | 85 | ||
| 86 | A string of the format -gxxxxxxxx will be added to the localversion | 86 | A string of the format -gxxxxxxxx will be added to the localversion |
| 87 | if a git based tree is found. The string generated by this will be | 87 | if a git-based tree is found. The string generated by this will be |
| 88 | appended after any matching localversion* files, and after the value | 88 | appended after any matching localversion* files, and after the value |
| 89 | set in CONFIG_LOCALVERSION | 89 | set in CONFIG_LOCALVERSION. |
| 90 | 90 | ||
| 91 | Note: This requires Perl, and a git repository, but not necessarily | 91 | (The actual string used here is the first eight characters produced |
| 92 | the git or cogito tools to be installed. | 92 | by running the command: |
| 93 | |||
| 94 | $ git rev-parse --verify HEAD | ||
| 95 | |||
| 96 | which is done within the script "scripts/setlocalversion".) | ||
| 93 | 97 | ||
| 94 | config SWAP | 98 | config SWAP |
| 95 | bool "Support for paging of anonymous memory (swap)" | 99 | bool "Support for paging of anonymous memory (swap)" |
diff --git a/init/main.c b/init/main.c index 80f09f31bfab..df982ff5d2b0 100644 --- a/init/main.c +++ b/init/main.c | |||
| @@ -82,7 +82,7 @@ | |||
| 82 | #warning gcc-4.1.0 is known to miscompile the kernel. A different compiler version is recommended. | 82 | #warning gcc-4.1.0 is known to miscompile the kernel. A different compiler version is recommended. |
| 83 | #endif | 83 | #endif |
| 84 | 84 | ||
| 85 | static int init(void *); | 85 | static int kernel_init(void *); |
| 86 | 86 | ||
| 87 | extern void init_IRQ(void); | 87 | extern void init_IRQ(void); |
| 88 | extern void fork_init(unsigned long); | 88 | extern void fork_init(unsigned long); |
| @@ -431,7 +431,7 @@ static void __init setup_command_line(char *command_line) | |||
| 431 | static void noinline rest_init(void) | 431 | static void noinline rest_init(void) |
| 432 | __releases(kernel_lock) | 432 | __releases(kernel_lock) |
| 433 | { | 433 | { |
| 434 | kernel_thread(init, NULL, CLONE_FS | CLONE_SIGHAND); | 434 | kernel_thread(kernel_init, NULL, CLONE_FS | CLONE_SIGHAND); |
| 435 | numa_default_policy(); | 435 | numa_default_policy(); |
| 436 | unlock_kernel(); | 436 | unlock_kernel(); |
| 437 | 437 | ||
| @@ -768,7 +768,7 @@ static int noinline init_post(void) | |||
| 768 | panic("No init found. Try passing init= option to kernel."); | 768 | panic("No init found. Try passing init= option to kernel."); |
| 769 | } | 769 | } |
| 770 | 770 | ||
| 771 | static int __init init(void * unused) | 771 | static int __init kernel_init(void * unused) |
| 772 | { | 772 | { |
| 773 | lock_kernel(); | 773 | lock_kernel(); |
| 774 | /* | 774 | /* |
diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug index 79afd00bbe5f..bdbf3fe14de6 100644 --- a/lib/Kconfig.debug +++ b/lib/Kconfig.debug | |||
| @@ -333,6 +333,9 @@ config DEBUG_INFO | |||
| 333 | help | 333 | help |
| 334 | If you say Y here the resulting kernel image will include | 334 | If you say Y here the resulting kernel image will include |
| 335 | debugging info resulting in a larger kernel image. | 335 | debugging info resulting in a larger kernel image. |
| 336 | This adds debug symbols to the kernel and modules (gcc -g), and | ||
| 337 | is needed if you intend to use kernel crashdump or binary object | ||
| 338 | tools like crash, kgdb, LKCD, gdb, etc on the kernel. | ||
| 336 | Say Y here only if you plan to debug the kernel. | 339 | Say Y here only if you plan to debug the kernel. |
| 337 | 340 | ||
| 338 | If unsure, say N. | 341 | If unsure, say N. |
diff --git a/net/ipv6/netfilter/Kconfig b/net/ipv6/netfilter/Kconfig index da07e9a88ee9..bbe99f842f9f 100644 --- a/net/ipv6/netfilter/Kconfig +++ b/net/ipv6/netfilter/Kconfig | |||
| @@ -198,7 +198,7 @@ config IP6_NF_RAW | |||
| 198 | and OUTPUT chains. | 198 | and OUTPUT chains. |
| 199 | 199 | ||
| 200 | If you want to compile it as a module, say M here and read | 200 | If you want to compile it as a module, say M here and read |
| 201 | <file:Documentation/modules.txt>. If unsure, say `N'. | 201 | <file:Documentation/kbuild/modules.txt>. If unsure, say `N'. |
| 202 | 202 | ||
| 203 | endmenu | 203 | endmenu |
| 204 | 204 | ||
diff --git a/net/netfilter/Kconfig b/net/netfilter/Kconfig index c558f3214255..ea6211cade0a 100644 --- a/net/netfilter/Kconfig +++ b/net/netfilter/Kconfig | |||
| @@ -100,7 +100,7 @@ config NF_CT_PROTO_SCTP | |||
| 100 | tracking code will be able to do state tracking on SCTP connections. | 100 | tracking code will be able to do state tracking on SCTP connections. |
| 101 | 101 | ||
| 102 | If you want to compile it as a module, say M here and read | 102 | If you want to compile it as a module, say M here and read |
| 103 | Documentation/modules.txt. If unsure, say `N'. | 103 | <file:Documentation/kbuild/modules.txt>. If unsure, say `N'. |
| 104 | 104 | ||
| 105 | config NF_CONNTRACK_AMANDA | 105 | config NF_CONNTRACK_AMANDA |
| 106 | tristate "Amanda backup protocol support" | 106 | tristate "Amanda backup protocol support" |
| @@ -279,8 +279,8 @@ config NETFILTER_XT_TARGET_CONNMARK | |||
| 279 | affects the connection mark value rather than the packet mark value. | 279 | affects the connection mark value rather than the packet mark value. |
| 280 | 280 | ||
| 281 | If you want to compile it as a module, say M here and read | 281 | If you want to compile it as a module, say M here and read |
| 282 | <file:Documentation/modules.txt>. The module will be called | 282 | <file:Documentation/kbuild/modules.txt>. The module will be called |
| 283 | ipt_CONNMARK.o. If unsure, say `N'. | 283 | ipt_CONNMARK.ko. If unsure, say `N'. |
| 284 | 284 | ||
| 285 | config NETFILTER_XT_TARGET_DSCP | 285 | config NETFILTER_XT_TARGET_DSCP |
| 286 | tristate '"DSCP" target support' | 286 | tristate '"DSCP" target support' |
| @@ -341,7 +341,7 @@ config NETFILTER_XT_TARGET_NOTRACK | |||
| 341 | no protocol helpers for the selected packets). | 341 | no protocol helpers for the selected packets). |
| 342 | 342 | ||
| 343 | If you want to compile it as a module, say M here and read | 343 | If you want to compile it as a module, say M here and read |
| 344 | <file:Documentation/modules.txt>. If unsure, say `N'. | 344 | <file:Documentation/kbuild/modules.txt>. If unsure, say `N'. |
| 345 | 345 | ||
| 346 | config NETFILTER_XT_TARGET_SECMARK | 346 | config NETFILTER_XT_TARGET_SECMARK |
| 347 | tristate '"SECMARK" target support' | 347 | tristate '"SECMARK" target support' |
| @@ -397,7 +397,7 @@ config NETFILTER_XT_MATCH_COMMENT | |||
| 397 | comments in your iptables ruleset. | 397 | comments in your iptables ruleset. |
| 398 | 398 | ||
| 399 | If you want to compile it as a module, say M here and read | 399 | If you want to compile it as a module, say M here and read |
| 400 | <file:Documentation/modules.txt>. If unsure, say `N'. | 400 | <file:Documentation/kbuild/modules.txt>. If unsure, say `N'. |
| 401 | 401 | ||
| 402 | config NETFILTER_XT_MATCH_CONNBYTES | 402 | config NETFILTER_XT_MATCH_CONNBYTES |
| 403 | tristate '"connbytes" per-connection counter match support' | 403 | tristate '"connbytes" per-connection counter match support' |
| @@ -409,7 +409,7 @@ config NETFILTER_XT_MATCH_CONNBYTES | |||
| 409 | number of bytes and/or packets for each direction within a connection. | 409 | number of bytes and/or packets for each direction within a connection. |
| 410 | 410 | ||
| 411 | If you want to compile it as a module, say M here and read | 411 | If you want to compile it as a module, say M here and read |
| 412 | <file:Documentation/modules.txt>. If unsure, say `N'. | 412 | <file:Documentation/kbuild/modules.txt>. If unsure, say `N'. |
| 413 | 413 | ||
| 414 | config NETFILTER_XT_MATCH_CONNMARK | 414 | config NETFILTER_XT_MATCH_CONNMARK |
| 415 | tristate '"connmark" connection mark match support' | 415 | tristate '"connmark" connection mark match support' |
| @@ -421,8 +421,8 @@ config NETFILTER_XT_MATCH_CONNMARK | |||
| 421 | connection mark value previously set for the session by `CONNMARK'. | 421 | connection mark value previously set for the session by `CONNMARK'. |
| 422 | 422 | ||
| 423 | If you want to compile it as a module, say M here and read | 423 | If you want to compile it as a module, say M here and read |
| 424 | <file:Documentation/modules.txt>. The module will be called | 424 | <file:Documentation/kbuild/modules.txt>. The module will be called |
| 425 | ipt_connmark.o. If unsure, say `N'. | 425 | ipt_connmark.ko. If unsure, say `N'. |
| 426 | 426 | ||
| 427 | config NETFILTER_XT_MATCH_CONNTRACK | 427 | config NETFILTER_XT_MATCH_CONNTRACK |
| 428 | tristate '"conntrack" connection tracking match support' | 428 | tristate '"conntrack" connection tracking match support' |
| @@ -446,7 +446,7 @@ config NETFILTER_XT_MATCH_DCCP | |||
| 446 | and DCCP flags. | 446 | and DCCP flags. |
| 447 | 447 | ||
| 448 | If you want to compile it as a module, say M here and read | 448 | If you want to compile it as a module, say M here and read |
| 449 | <file:Documentation/modules.txt>. If unsure, say `N'. | 449 | <file:Documentation/kbuild/modules.txt>. If unsure, say `N'. |
| 450 | 450 | ||
| 451 | config NETFILTER_XT_MATCH_DSCP | 451 | config NETFILTER_XT_MATCH_DSCP |
| 452 | tristate '"DSCP" match support' | 452 | tristate '"DSCP" match support' |
| @@ -565,7 +565,7 @@ config NETFILTER_XT_MATCH_QUOTA | |||
| 565 | byte counter. | 565 | byte counter. |
| 566 | 566 | ||
| 567 | If you want to compile it as a module, say M here and read | 567 | If you want to compile it as a module, say M here and read |
| 568 | <file:Documentation/modules.txt>. If unsure, say `N'. | 568 | <file:Documentation/kbuild/modules.txt>. If unsure, say `N'. |
| 569 | 569 | ||
| 570 | config NETFILTER_XT_MATCH_REALM | 570 | config NETFILTER_XT_MATCH_REALM |
| 571 | tristate '"realm" match support' | 571 | tristate '"realm" match support' |
| @@ -579,7 +579,7 @@ config NETFILTER_XT_MATCH_REALM | |||
| 579 | in tc world. | 579 | in tc world. |
| 580 | 580 | ||
| 581 | If you want to compile it as a module, say M here and read | 581 | If you want to compile it as a module, say M here and read |
| 582 | <file:Documentation/modules.txt>. If unsure, say `N'. | 582 | <file:Documentation/kbuild/modules.txt>. If unsure, say `N'. |
| 583 | 583 | ||
| 584 | config NETFILTER_XT_MATCH_SCTP | 584 | config NETFILTER_XT_MATCH_SCTP |
| 585 | tristate '"sctp" protocol match support (EXPERIMENTAL)' | 585 | tristate '"sctp" protocol match support (EXPERIMENTAL)' |
| @@ -590,7 +590,7 @@ config NETFILTER_XT_MATCH_SCTP | |||
| 590 | and SCTP chunk types. | 590 | and SCTP chunk types. |
| 591 | 591 | ||
| 592 | If you want to compile it as a module, say M here and read | 592 | If you want to compile it as a module, say M here and read |
| 593 | <file:Documentation/modules.txt>. If unsure, say `N'. | 593 | <file:Documentation/kbuild/modules.txt>. If unsure, say `N'. |
| 594 | 594 | ||
| 595 | config NETFILTER_XT_MATCH_STATE | 595 | config NETFILTER_XT_MATCH_STATE |
| 596 | tristate '"state" match support' | 596 | tristate '"state" match support' |
diff --git a/net/tipc/Kconfig b/net/tipc/Kconfig index 3891cc00087d..f9e367d946eb 100644 --- a/net/tipc/Kconfig +++ b/net/tipc/Kconfig | |||
| @@ -18,7 +18,7 @@ config TIPC | |||
| 18 | This protocol support is also available as a module ( = code which | 18 | This protocol support is also available as a module ( = code which |
| 19 | can be inserted in and removed from the running kernel whenever you | 19 | can be inserted in and removed from the running kernel whenever you |
| 20 | want). The module will be called tipc. If you want to compile it | 20 | want). The module will be called tipc. If you want to compile it |
| 21 | as a module, say M here and read <file:Documentation/modules.txt>. | 21 | as a module, say M here and read <file:Documentation/kbuild/modules.txt>. |
| 22 | 22 | ||
| 23 | If in doubt, say N. | 23 | If in doubt, say N. |
| 24 | 24 | ||
diff --git a/scripts/Makefile.build b/scripts/Makefile.build index e2ad2dccccdb..a525112847fd 100644 --- a/scripts/Makefile.build +++ b/scripts/Makefile.build | |||
| @@ -131,13 +131,13 @@ $(multi-objs-y:.o=.lst) : modname = $(modname-multi) | |||
| 131 | quiet_cmd_cc_s_c = CC $(quiet_modtag) $@ | 131 | quiet_cmd_cc_s_c = CC $(quiet_modtag) $@ |
| 132 | cmd_cc_s_c = $(CC) $(c_flags) -fverbose-asm -S -o $@ $< | 132 | cmd_cc_s_c = $(CC) $(c_flags) -fverbose-asm -S -o $@ $< |
| 133 | 133 | ||
| 134 | %.s: %.c FORCE | 134 | $(obj)/%.s: $(src)/%.c FORCE |
| 135 | $(call if_changed_dep,cc_s_c) | 135 | $(call if_changed_dep,cc_s_c) |
| 136 | 136 | ||
| 137 | quiet_cmd_cc_i_c = CPP $(quiet_modtag) $@ | 137 | quiet_cmd_cc_i_c = CPP $(quiet_modtag) $@ |
| 138 | cmd_cc_i_c = $(CPP) $(c_flags) -o $@ $< | 138 | cmd_cc_i_c = $(CPP) $(c_flags) -o $@ $< |
| 139 | 139 | ||
| 140 | %.i: %.c FORCE | 140 | $(obj)/%.i: $(src)/%.c FORCE |
| 141 | $(call if_changed_dep,cc_i_c) | 141 | $(call if_changed_dep,cc_i_c) |
| 142 | 142 | ||
| 143 | quiet_cmd_cc_symtypes_c = SYM $(quiet_modtag) $@ | 143 | quiet_cmd_cc_symtypes_c = SYM $(quiet_modtag) $@ |
| @@ -146,7 +146,7 @@ cmd_cc_symtypes_c = \ | |||
| 146 | | $(GENKSYMS) -T $@ >/dev/null; \ | 146 | | $(GENKSYMS) -T $@ >/dev/null; \ |
| 147 | test -s $@ || rm -f $@ | 147 | test -s $@ || rm -f $@ |
| 148 | 148 | ||
| 149 | %.symtypes : %.c FORCE | 149 | $(obj)/%.symtypes : $(src)/%.c FORCE |
| 150 | $(call if_changed_dep,cc_symtypes_c) | 150 | $(call if_changed_dep,cc_symtypes_c) |
| 151 | 151 | ||
| 152 | # C (.c) files | 152 | # C (.c) files |
| @@ -198,14 +198,13 @@ define rule_cc_o_c | |||
| 198 | endef | 198 | endef |
| 199 | 199 | ||
| 200 | # Built-in and composite module parts | 200 | # Built-in and composite module parts |
| 201 | 201 | $(obj)/%.o: $(src)/%.c FORCE | |
| 202 | %.o: %.c FORCE | ||
| 203 | $(call cmd,force_checksrc) | 202 | $(call cmd,force_checksrc) |
| 204 | $(call if_changed_rule,cc_o_c) | 203 | $(call if_changed_rule,cc_o_c) |
| 205 | 204 | ||
| 206 | # Single-part modules are special since we need to mark them in $(MODVERDIR) | 205 | # Single-part modules are special since we need to mark them in $(MODVERDIR) |
| 207 | 206 | ||
| 208 | $(single-used-m): %.o: %.c FORCE | 207 | $(single-used-m): $(obj)/%.o: $(src)/%.c FORCE |
| 209 | $(call cmd,force_checksrc) | 208 | $(call cmd,force_checksrc) |
| 210 | $(call if_changed_rule,cc_o_c) | 209 | $(call if_changed_rule,cc_o_c) |
| 211 | @{ echo $(@:.o=.ko); echo $@; } > $(MODVERDIR)/$(@F:.o=.mod) | 210 | @{ echo $(@:.o=.ko); echo $@; } > $(MODVERDIR)/$(@F:.o=.mod) |
| @@ -215,7 +214,7 @@ quiet_cmd_cc_lst_c = MKLST $@ | |||
| 215 | $(CONFIG_SHELL) $(srctree)/scripts/makelst $*.o \ | 214 | $(CONFIG_SHELL) $(srctree)/scripts/makelst $*.o \ |
| 216 | System.map $(OBJDUMP) > $@ | 215 | System.map $(OBJDUMP) > $@ |
| 217 | 216 | ||
| 218 | %.lst: %.c FORCE | 217 | $(obj)/%.lst: $(src)/%.c FORCE |
| 219 | $(call if_changed_dep,cc_lst_c) | 218 | $(call if_changed_dep,cc_lst_c) |
| 220 | 219 | ||
| 221 | # Compile assembler sources (.S) | 220 | # Compile assembler sources (.S) |
| @@ -229,13 +228,13 @@ $(real-objs-m:.o=.s): modkern_aflags := $(AFLAGS_MODULE) | |||
| 229 | quiet_cmd_as_s_S = CPP $(quiet_modtag) $@ | 228 | quiet_cmd_as_s_S = CPP $(quiet_modtag) $@ |
| 230 | cmd_as_s_S = $(CPP) $(a_flags) -o $@ $< | 229 | cmd_as_s_S = $(CPP) $(a_flags) -o $@ $< |
| 231 | 230 | ||
| 232 | %.s: %.S FORCE | 231 | $(obj)/%.s: $(src)/%.S FORCE |
| 233 | $(call if_changed_dep,as_s_S) | 232 | $(call if_changed_dep,as_s_S) |
| 234 | 233 | ||
| 235 | quiet_cmd_as_o_S = AS $(quiet_modtag) $@ | 234 | quiet_cmd_as_o_S = AS $(quiet_modtag) $@ |
| 236 | cmd_as_o_S = $(CC) $(a_flags) -c -o $@ $< | 235 | cmd_as_o_S = $(CC) $(a_flags) -c -o $@ $< |
| 237 | 236 | ||
| 238 | %.o: %.S FORCE | 237 | $(obj)/%.o: $(src)/%.S FORCE |
| 239 | $(call if_changed_dep,as_o_S) | 238 | $(call if_changed_dep,as_o_S) |
| 240 | 239 | ||
| 241 | targets += $(real-objs-y) $(real-objs-m) $(lib-y) | 240 | targets += $(real-objs-y) $(real-objs-m) $(lib-y) |
| @@ -246,7 +245,7 @@ targets += $(extra-y) $(MAKECMDGOALS) $(always) | |||
| 246 | quiet_cmd_cpp_lds_S = LDS $@ | 245 | quiet_cmd_cpp_lds_S = LDS $@ |
| 247 | cmd_cpp_lds_S = $(CPP) $(cpp_flags) -D__ASSEMBLY__ -o $@ $< | 246 | cmd_cpp_lds_S = $(CPP) $(cpp_flags) -D__ASSEMBLY__ -o $@ $< |
| 248 | 247 | ||
| 249 | %.lds: %.lds.S FORCE | 248 | $(obj)/%.lds: $(src)/%.lds.S FORCE |
| 250 | $(call if_changed_dep,cpp_lds_S) | 249 | $(call if_changed_dep,cpp_lds_S) |
| 251 | 250 | ||
| 252 | # Build the compiled-in targets | 251 | # Build the compiled-in targets |
diff --git a/scripts/Makefile.host b/scripts/Makefile.host index 575afbe5e370..6943a7a5bb98 100644 --- a/scripts/Makefile.host +++ b/scripts/Makefile.host | |||
| @@ -114,7 +114,7 @@ hostcxx_flags = -Wp,-MD,$(depfile) $(__hostcxx_flags) | |||
| 114 | quiet_cmd_host-csingle = HOSTCC $@ | 114 | quiet_cmd_host-csingle = HOSTCC $@ |
| 115 | cmd_host-csingle = $(HOSTCC) $(hostc_flags) -o $@ $< \ | 115 | cmd_host-csingle = $(HOSTCC) $(hostc_flags) -o $@ $< \ |
| 116 | $(HOST_LOADLIBES) $(HOSTLOADLIBES_$(@F)) | 116 | $(HOST_LOADLIBES) $(HOSTLOADLIBES_$(@F)) |
| 117 | $(host-csingle): %: %.c FORCE | 117 | $(host-csingle): $(obj)/%: $(src)/%.c FORCE |
| 118 | $(call if_changed_dep,host-csingle) | 118 | $(call if_changed_dep,host-csingle) |
| 119 | 119 | ||
| 120 | # Link an executable based on list of .o files, all plain c | 120 | # Link an executable based on list of .o files, all plain c |
| @@ -123,14 +123,14 @@ quiet_cmd_host-cmulti = HOSTLD $@ | |||
| 123 | cmd_host-cmulti = $(HOSTCC) $(HOSTLDFLAGS) -o $@ \ | 123 | cmd_host-cmulti = $(HOSTCC) $(HOSTLDFLAGS) -o $@ \ |
| 124 | $(addprefix $(obj)/,$($(@F)-objs)) \ | 124 | $(addprefix $(obj)/,$($(@F)-objs)) \ |
| 125 | $(HOST_LOADLIBES) $(HOSTLOADLIBES_$(@F)) | 125 | $(HOST_LOADLIBES) $(HOSTLOADLIBES_$(@F)) |
| 126 | $(host-cmulti): %: $(host-cobjs) $(host-cshlib) FORCE | 126 | $(host-cmulti): $(obj)/%: $(host-cobjs) $(host-cshlib) FORCE |
| 127 | $(call if_changed,host-cmulti) | 127 | $(call if_changed,host-cmulti) |
| 128 | 128 | ||
| 129 | # Create .o file from a single .c file | 129 | # Create .o file from a single .c file |
| 130 | # host-cobjs -> .o | 130 | # host-cobjs -> .o |
| 131 | quiet_cmd_host-cobjs = HOSTCC $@ | 131 | quiet_cmd_host-cobjs = HOSTCC $@ |
| 132 | cmd_host-cobjs = $(HOSTCC) $(hostc_flags) -c -o $@ $< | 132 | cmd_host-cobjs = $(HOSTCC) $(hostc_flags) -c -o $@ $< |
| 133 | $(host-cobjs): %.o: %.c FORCE | 133 | $(host-cobjs): $(obj)/%.o: $(src)/%.c FORCE |
| 134 | $(call if_changed_dep,host-cobjs) | 134 | $(call if_changed_dep,host-cobjs) |
| 135 | 135 | ||
| 136 | # Link an executable based on list of .o files, a mixture of .c and .cc | 136 | # Link an executable based on list of .o files, a mixture of .c and .cc |
| @@ -140,20 +140,20 @@ quiet_cmd_host-cxxmulti = HOSTLD $@ | |||
| 140 | $(foreach o,objs cxxobjs,\ | 140 | $(foreach o,objs cxxobjs,\ |
| 141 | $(addprefix $(obj)/,$($(@F)-$(o)))) \ | 141 | $(addprefix $(obj)/,$($(@F)-$(o)))) \ |
| 142 | $(HOST_LOADLIBES) $(HOSTLOADLIBES_$(@F)) | 142 | $(HOST_LOADLIBES) $(HOSTLOADLIBES_$(@F)) |
| 143 | $(host-cxxmulti): %: $(host-cobjs) $(host-cxxobjs) $(host-cshlib) FORCE | 143 | $(host-cxxmulti): $(obj)/%: $(host-cobjs) $(host-cxxobjs) $(host-cshlib) FORCE |
| 144 | $(call if_changed,host-cxxmulti) | 144 | $(call if_changed,host-cxxmulti) |
| 145 | 145 | ||
| 146 | # Create .o file from a single .cc (C++) file | 146 | # Create .o file from a single .cc (C++) file |
| 147 | quiet_cmd_host-cxxobjs = HOSTCXX $@ | 147 | quiet_cmd_host-cxxobjs = HOSTCXX $@ |
| 148 | cmd_host-cxxobjs = $(HOSTCXX) $(hostcxx_flags) -c -o $@ $< | 148 | cmd_host-cxxobjs = $(HOSTCXX) $(hostcxx_flags) -c -o $@ $< |
| 149 | $(host-cxxobjs): %.o: %.cc FORCE | 149 | $(host-cxxobjs): $(obj)/%.o: $(src)/%.cc FORCE |
| 150 | $(call if_changed_dep,host-cxxobjs) | 150 | $(call if_changed_dep,host-cxxobjs) |
| 151 | 151 | ||
| 152 | # Compile .c file, create position independent .o file | 152 | # Compile .c file, create position independent .o file |
| 153 | # host-cshobjs -> .o | 153 | # host-cshobjs -> .o |
| 154 | quiet_cmd_host-cshobjs = HOSTCC -fPIC $@ | 154 | quiet_cmd_host-cshobjs = HOSTCC -fPIC $@ |
| 155 | cmd_host-cshobjs = $(HOSTCC) $(hostc_flags) -fPIC -c -o $@ $< | 155 | cmd_host-cshobjs = $(HOSTCC) $(hostc_flags) -fPIC -c -o $@ $< |
| 156 | $(host-cshobjs): %.o: %.c FORCE | 156 | $(host-cshobjs): $(obj)/%.o: $(src)/%.c FORCE |
| 157 | $(call if_changed_dep,host-cshobjs) | 157 | $(call if_changed_dep,host-cshobjs) |
| 158 | 158 | ||
| 159 | # Link a shared library, based on position independent .o files | 159 | # Link a shared library, based on position independent .o files |
| @@ -162,7 +162,7 @@ quiet_cmd_host-cshlib = HOSTLLD -shared $@ | |||
| 162 | cmd_host-cshlib = $(HOSTCC) $(HOSTLDFLAGS) -shared -o $@ \ | 162 | cmd_host-cshlib = $(HOSTCC) $(HOSTLDFLAGS) -shared -o $@ \ |
| 163 | $(addprefix $(obj)/,$($(@F:.so=-objs))) \ | 163 | $(addprefix $(obj)/,$($(@F:.so=-objs))) \ |
| 164 | $(HOST_LOADLIBES) $(HOSTLOADLIBES_$(@F)) | 164 | $(HOST_LOADLIBES) $(HOSTLOADLIBES_$(@F)) |
| 165 | $(host-cshlib): %: $(host-cshobjs) FORCE | 165 | $(host-cshlib): $(obj)/%: $(host-cshobjs) FORCE |
| 166 | $(call if_changed,host-cshlib) | 166 | $(call if_changed,host-cshlib) |
| 167 | 167 | ||
| 168 | targets += $(host-csingle) $(host-cmulti) $(host-cobjs)\ | 168 | targets += $(host-csingle) $(host-cmulti) $(host-cobjs)\ |
diff --git a/scripts/Makefile.modpost b/scripts/Makefile.modpost index 65e0a79c36cf..d5bbbcce31ef 100644 --- a/scripts/Makefile.modpost +++ b/scripts/Makefile.modpost | |||
| @@ -63,16 +63,16 @@ quiet_cmd_modpost = MODPOST $(words $(filter-out vmlinux FORCE, $^)) modules | |||
| 63 | $(if $(KBUILD_EXTMOD),-i,-o) $(kernelsymfile) \ | 63 | $(if $(KBUILD_EXTMOD),-i,-o) $(kernelsymfile) \ |
| 64 | $(if $(KBUILD_EXTMOD),-I $(modulesymfile)) \ | 64 | $(if $(KBUILD_EXTMOD),-I $(modulesymfile)) \ |
| 65 | $(if $(KBUILD_EXTMOD),-o $(modulesymfile)) \ | 65 | $(if $(KBUILD_EXTMOD),-o $(modulesymfile)) \ |
| 66 | $(if $(KBUILD_EXTMOD)$(KBUILD_MODPOST_WARN),-w) \ | 66 | $(if $(KBUILD_EXTMOD)$(KBUILD_MODPOST_WARN),-w) |
| 67 | $(wildcard vmlinux) $(filter-out FORCE,$^) | ||
| 68 | 67 | ||
| 69 | PHONY += __modpost | 68 | PHONY += __modpost |
| 70 | __modpost: $(modules:.ko=.o) FORCE | 69 | __modpost: $(modules:.ko=.o) FORCE |
| 71 | $(call cmd,modpost) | 70 | $(call cmd,modpost) $(wildcard vmlinux) $(filter-out FORCE,$^) |
| 72 | 71 | ||
| 73 | quiet_cmd_kernel-mod = MODPOST $@ | 72 | quiet_cmd_kernel-mod = MODPOST $@ |
| 74 | cmd_kernel-mod = $(cmd_modpost) | 73 | cmd_kernel-mod = $(cmd_modpost) $(KBUILD_VMLINUX_OBJS) |
| 75 | 74 | ||
| 75 | PHONY += vmlinux | ||
| 76 | vmlinux: FORCE | 76 | vmlinux: FORCE |
| 77 | $(call cmd,kernel-mod) | 77 | $(call cmd,kernel-mod) |
| 78 | 78 | ||
diff --git a/scripts/basic/fixdep.c b/scripts/basic/fixdep.c index 6bc7e7cfccf6..8912c0f5460b 100644 --- a/scripts/basic/fixdep.c +++ b/scripts/basic/fixdep.c | |||
| @@ -249,6 +249,8 @@ void parse_config_file(char *map, size_t len) | |||
| 249 | found: | 249 | found: |
| 250 | if (!memcmp(q - 7, "_MODULE", 7)) | 250 | if (!memcmp(q - 7, "_MODULE", 7)) |
| 251 | q -= 7; | 251 | q -= 7; |
| 252 | if( (q-p-7) < 0 ) | ||
| 253 | continue; | ||
| 252 | use_config(p+7, q-p-7); | 254 | use_config(p+7, q-p-7); |
| 253 | } | 255 | } |
| 254 | } | 256 | } |
diff --git a/scripts/checksyscalls.sh b/scripts/checksyscalls.sh new file mode 100755 index 000000000000..f98171f5a3df --- /dev/null +++ b/scripts/checksyscalls.sh | |||
| @@ -0,0 +1,118 @@ | |||
| 1 | #!/bin/sh | ||
| 2 | # | ||
| 3 | # Check if current architecture are missing any function calls compared | ||
| 4 | # to i386. | ||
| 5 | # i386 define a number of legacy system calls that are i386 specific | ||
| 6 | # and listed below so they are ignored. | ||
| 7 | # | ||
| 8 | # Usage: | ||
| 9 | # syscallchk gcc gcc-options | ||
| 10 | # | ||
| 11 | |||
| 12 | ignore_list() { | ||
| 13 | cat << EOF | ||
| 14 | #include <asm/types.h> | ||
| 15 | #include <asm/unistd.h> | ||
| 16 | |||
| 17 | /* System calls for 32-bit kernels only */ | ||
| 18 | #if BITS_PER_LONG == 64 | ||
| 19 | #define __IGNORE_sendfile64 | ||
| 20 | #define __IGNORE_ftruncate64 | ||
| 21 | #define __IGNORE_truncate64 | ||
| 22 | #define __IGNORE_stat64 | ||
| 23 | #define __IGNORE_lstat64 | ||
| 24 | #define __IGNORE_fstat64 | ||
| 25 | #define __IGNORE_fcntl64 | ||
| 26 | #define __IGNORE_fadvise64_64 | ||
| 27 | #define __IGNORE_fstatat64 | ||
| 28 | #define __IGNORE_fstatfs64 | ||
| 29 | #define __IGNORE_statfs64 | ||
| 30 | #endif | ||
| 31 | |||
| 32 | /* i386-specific or historical system calls */ | ||
| 33 | #define __IGNORE_break | ||
| 34 | #define __IGNORE_stty | ||
| 35 | #define __IGNORE_gtty | ||
| 36 | #define __IGNORE_ftime | ||
| 37 | #define __IGNORE_prof | ||
| 38 | #define __IGNORE_lock | ||
| 39 | #define __IGNORE_mpx | ||
| 40 | #define __IGNORE_ulimit | ||
| 41 | #define __IGNORE_profil | ||
| 42 | #define __IGNORE_ioperm | ||
| 43 | #define __IGNORE_iopl | ||
| 44 | #define __IGNORE_idle | ||
| 45 | #define __IGNORE_modify_ldt | ||
| 46 | #define __IGNORE_ugetrlimit | ||
| 47 | #define __IGNORE_mmap2 | ||
| 48 | #define __IGNORE_vm86 | ||
| 49 | #define __IGNORE_vm86old | ||
| 50 | #define __IGNORE_set_thread_area | ||
| 51 | #define __IGNORE_get_thread_area | ||
| 52 | #define __IGNORE_madvise1 | ||
| 53 | #define __IGNORE_oldstat | ||
| 54 | #define __IGNORE_oldfstat | ||
| 55 | #define __IGNORE_oldlstat | ||
| 56 | #define __IGNORE_oldolduname | ||
| 57 | #define __IGNORE_olduname | ||
| 58 | #define __IGNORE_umount2 | ||
| 59 | #define __IGNORE_umount | ||
| 60 | #define __IGNORE_waitpid | ||
| 61 | #define __IGNORE_stime | ||
| 62 | #define __IGNORE_nice | ||
| 63 | #define __IGNORE_signal | ||
| 64 | #define __IGNORE_sigaction | ||
| 65 | #define __IGNORE_sgetmask | ||
| 66 | #define __IGNORE_sigsuspend | ||
| 67 | #define __IGNORE_sigpending | ||
| 68 | #define __IGNORE_ssetmask | ||
| 69 | #define __IGNORE_readdir | ||
| 70 | #define __IGNORE_socketcall | ||
| 71 | #define __IGNORE_ipc | ||
| 72 | #define __IGNORE_sigreturn | ||
| 73 | #define __IGNORE_sigprocmask | ||
| 74 | #define __IGNORE_bdflush | ||
| 75 | #define __IGNORE__llseek | ||
| 76 | #define __IGNORE__newselect | ||
| 77 | #define __IGNORE_create_module | ||
| 78 | #define __IGNORE_delete_module | ||
| 79 | #define __IGNORE_query_module | ||
| 80 | #define __IGNORE_get_kernel_syms | ||
| 81 | /* ... including the "new" 32-bit uid syscalls */ | ||
| 82 | #define __IGNORE_lchown32 | ||
| 83 | #define __IGNORE_getuid32 | ||
| 84 | #define __IGNORE_getgid32 | ||
| 85 | #define __IGNORE_geteuid32 | ||
| 86 | #define __IGNORE_getegid32 | ||
| 87 | #define __IGNORE_setreuid32 | ||
| 88 | #define __IGNORE_setregid32 | ||
| 89 | #define __IGNORE_getgroups32 | ||
| 90 | #define __IGNORE_setgroups32 | ||
| 91 | #define __IGNORE_fchown32 | ||
| 92 | #define __IGNORE_setresuid32 | ||
| 93 | #define __IGNORE_getresuid32 | ||
| 94 | #define __IGNORE_setresgid32 | ||
| 95 | #define __IGNORE_getresgid32 | ||
| 96 | #define __IGNORE_chown32 | ||
| 97 | #define __IGNORE_setuid32 | ||
| 98 | #define __IGNORE_setgid32 | ||
| 99 | #define __IGNORE_setfsuid32 | ||
| 100 | #define __IGNORE_setfsgid32 | ||
| 101 | |||
| 102 | /* Unmerged syscalls for AFS, STREAMS, etc. */ | ||
| 103 | #define __IGNORE_afs_syscall | ||
| 104 | #define __IGNORE_getpmsg | ||
| 105 | #define __IGNORE_putpmsg | ||
| 106 | #define __IGNORE_vserver | ||
| 107 | EOF | ||
| 108 | } | ||
| 109 | |||
| 110 | syscall_list() { | ||
| 111 | sed -n -e '/^\#define/ { s/[^_]*__NR_\([^[:space:]]*\).*/\ | ||
| 112 | \#if !defined \(__NR_\1\) \&\& !defined \(__IGNORE_\1\)\ | ||
| 113 | \#warning syscall \1 not implemented\ | ||
| 114 | \#endif/p }' $1 | ||
| 115 | } | ||
| 116 | |||
| 117 | (ignore_list && syscall_list ${srctree}/include/asm-i386/unistd.h) | \ | ||
| 118 | $* -E -x c - > /dev/null | ||
diff --git a/scripts/cleanfile b/scripts/cleanfile new file mode 100755 index 000000000000..f1ba8aa58a40 --- /dev/null +++ b/scripts/cleanfile | |||
| @@ -0,0 +1,126 @@ | |||
| 1 | #!/usr/bin/perl -w | ||
| 2 | # | ||
| 3 | # Clean a text file -- or directory of text files -- of stealth whitespace. | ||
| 4 | # WARNING: this can be a highly destructive operation. Use with caution. | ||
| 5 | # | ||
| 6 | |||
| 7 | use bytes; | ||
| 8 | use File::Basename; | ||
| 9 | |||
| 10 | # | ||
| 11 | # Clean up space-tab sequences, either by removing spaces or | ||
| 12 | # replacing them with tabs. | ||
| 13 | sub clean_space_tabs($) | ||
| 14 | { | ||
| 15 | no bytes; # Tab alignment depends on characters | ||
| 16 | |||
| 17 | my($li) = @_; | ||
| 18 | my($lo) = ''; | ||
| 19 | my $pos = 0; | ||
| 20 | my $nsp = 0; | ||
| 21 | my($i, $c); | ||
| 22 | |||
| 23 | for ($i = 0; $i < length($li); $i++) { | ||
| 24 | $c = substr($li, $i, 1); | ||
| 25 | if ($c eq "\t") { | ||
| 26 | my $npos = ($pos+$nsp+8) & ~7; | ||
| 27 | my $ntab = ($npos >> 3) - ($pos >> 3); | ||
| 28 | $lo .= "\t" x $ntab; | ||
| 29 | $pos = $npos; | ||
| 30 | $nsp = 0; | ||
| 31 | } elsif ($c eq "\n" || $c eq "\r") { | ||
| 32 | $lo .= " " x $nsp; | ||
| 33 | $pos += $nsp; | ||
| 34 | $nsp = 0; | ||
| 35 | $lo .= $c; | ||
| 36 | $pos = 0; | ||
| 37 | } elsif ($c eq " ") { | ||
| 38 | $nsp++; | ||
| 39 | } else { | ||
| 40 | $lo .= " " x $nsp; | ||
| 41 | $pos += $nsp; | ||
| 42 | $nsp = 0; | ||
| 43 | $lo .= $c; | ||
| 44 | $pos++; | ||
| 45 | } | ||
| 46 | } | ||
| 47 | $lo .= " " x $nsp; | ||
| 48 | return $lo; | ||
| 49 | } | ||
| 50 | |||
| 51 | $name = basename($0); | ||
| 52 | |||
| 53 | foreach $f ( @ARGV ) { | ||
| 54 | print STDERR "$name: $f\n"; | ||
| 55 | |||
| 56 | if (! -f $f) { | ||
| 57 | print STDERR "$f: not a file\n"; | ||
| 58 | next; | ||
| 59 | } | ||
| 60 | |||
| 61 | if (!open(FILE, '+<', $f)) { | ||
| 62 | print STDERR "$name: Cannot open file: $f: $!\n"; | ||
| 63 | next; | ||
| 64 | } | ||
| 65 | |||
| 66 | binmode FILE; | ||
| 67 | |||
| 68 | # First, verify that it is not a binary file; consider any file | ||
| 69 | # with a zero byte to be a binary file. Is there any better, or | ||
| 70 | # additional, heuristic that should be applied? | ||
| 71 | $is_binary = 0; | ||
| 72 | |||
| 73 | while (read(FILE, $data, 65536) > 0) { | ||
| 74 | if ($data =~ /\0/) { | ||
| 75 | $is_binary = 1; | ||
| 76 | last; | ||
| 77 | } | ||
| 78 | } | ||
| 79 | |||
| 80 | if ($is_binary) { | ||
| 81 | print STDERR "$name: $f: binary file\n"; | ||
| 82 | next; | ||
| 83 | } | ||
| 84 | |||
| 85 | seek(FILE, 0, 0); | ||
| 86 | |||
| 87 | $in_bytes = 0; | ||
| 88 | $out_bytes = 0; | ||
| 89 | $blank_bytes = 0; | ||
| 90 | |||
| 91 | @blanks = (); | ||
| 92 | @lines = (); | ||
| 93 | |||
| 94 | while ( defined($line = <FILE>) ) { | ||
| 95 | $in_bytes += length($line); | ||
| 96 | $line =~ s/[ \t\r]*$//; # Remove trailing spaces | ||
| 97 | $line = clean_space_tabs($line); | ||
| 98 | |||
| 99 | if ( $line eq "\n" ) { | ||
| 100 | push(@blanks, $line); | ||
| 101 | $blank_bytes += length($line); | ||
| 102 | } else { | ||
| 103 | push(@lines, @blanks); | ||
| 104 | $out_bytes += $blank_bytes; | ||
| 105 | push(@lines, $line); | ||
| 106 | $out_bytes += length($line); | ||
| 107 | @blanks = (); | ||
| 108 | $blank_bytes = 0; | ||
| 109 | } | ||
| 110 | } | ||
| 111 | |||
| 112 | # Any blanks at the end of the file are discarded | ||
| 113 | |||
| 114 | if ($in_bytes != $out_bytes) { | ||
| 115 | # Only write to the file if changed | ||
| 116 | seek(FILE, 0, 0); | ||
| 117 | print FILE @lines; | ||
| 118 | |||
| 119 | if ( !defined($where = tell(FILE)) || | ||
| 120 | !truncate(FILE, $where) ) { | ||
| 121 | die "$name: Failed to truncate modified file: $f: $!\n"; | ||
| 122 | } | ||
| 123 | } | ||
| 124 | |||
| 125 | close(FILE); | ||
| 126 | } | ||
diff --git a/scripts/cleanpatch b/scripts/cleanpatch new file mode 100755 index 000000000000..a53f987708f5 --- /dev/null +++ b/scripts/cleanpatch | |||
| @@ -0,0 +1,206 @@ | |||
| 1 | #!/usr/bin/perl -w | ||
| 2 | # | ||
| 3 | # Clean a patch file -- or directory of patch files -- of stealth whitespace. | ||
| 4 | # WARNING: this can be a highly destructive operation. Use with caution. | ||
| 5 | # | ||
| 6 | |||
| 7 | use bytes; | ||
| 8 | use File::Basename; | ||
| 9 | |||
| 10 | # | ||
| 11 | # Clean up space-tab sequences, either by removing spaces or | ||
| 12 | # replacing them with tabs. | ||
| 13 | sub clean_space_tabs($) | ||
| 14 | { | ||
| 15 | no bytes; # Tab alignment depends on characters | ||
| 16 | |||
| 17 | my($li) = @_; | ||
| 18 | my($lo) = ''; | ||
| 19 | my $pos = 0; | ||
| 20 | my $nsp = 0; | ||
| 21 | my($i, $c); | ||
| 22 | |||
| 23 | for ($i = 0; $i < length($li); $i++) { | ||
| 24 | $c = substr($li, $i, 1); | ||
| 25 | if ($c eq "\t") { | ||
| 26 | my $npos = ($pos+$nsp+8) & ~7; | ||
| 27 | my $ntab = ($npos >> 3) - ($pos >> 3); | ||
| 28 | $lo .= "\t" x $ntab; | ||
| 29 | $pos = $npos; | ||
| 30 | $nsp = 0; | ||
| 31 | } elsif ($c eq "\n" || $c eq "\r") { | ||
| 32 | $lo .= " " x $nsp; | ||
| 33 | $pos += $nsp; | ||
| 34 | $nsp = 0; | ||
| 35 | $lo .= $c; | ||
| 36 | $pos = 0; | ||
| 37 | } elsif ($c eq " ") { | ||
| 38 | $nsp++; | ||
| 39 | } else { | ||
| 40 | $lo .= " " x $nsp; | ||
| 41 | $pos += $nsp; | ||
| 42 | $nsp = 0; | ||
| 43 | $lo .= $c; | ||
| 44 | $pos++; | ||
| 45 | } | ||
| 46 | } | ||
| 47 | $lo .= " " x $nsp; | ||
| 48 | return $lo; | ||
| 49 | } | ||
| 50 | |||
| 51 | $name = basename($0); | ||
| 52 | |||
| 53 | foreach $f ( @ARGV ) { | ||
| 54 | print STDERR "$name: $f\n"; | ||
| 55 | |||
| 56 | if (! -f $f) { | ||
| 57 | print STDERR "$f: not a file\n"; | ||
| 58 | next; | ||
| 59 | } | ||
| 60 | |||
| 61 | if (!open(FILE, '+<', $f)) { | ||
| 62 | print STDERR "$name: Cannot open file: $f: $!\n"; | ||
| 63 | next; | ||
| 64 | } | ||
| 65 | |||
| 66 | binmode FILE; | ||
| 67 | |||
| 68 | # First, verify that it is not a binary file; consider any file | ||
| 69 | # with a zero byte to be a binary file. Is there any better, or | ||
| 70 | # additional, heuristic that should be applied? | ||
| 71 | $is_binary = 0; | ||
| 72 | |||
| 73 | while (read(FILE, $data, 65536) > 0) { | ||
| 74 | if ($data =~ /\0/) { | ||
| 75 | $is_binary = 1; | ||
| 76 | last; | ||
| 77 | } | ||
| 78 | } | ||
| 79 | |||
| 80 | if ($is_binary) { | ||
| 81 | print STDERR "$name: $f: binary file\n"; | ||
| 82 | next; | ||
| 83 | } | ||
| 84 | |||
| 85 | seek(FILE, 0, 0); | ||
| 86 | |||
| 87 | $in_bytes = 0; | ||
| 88 | $out_bytes = 0; | ||
| 89 | |||
| 90 | @lines = (); | ||
| 91 | |||
| 92 | $in_hunk = 0; | ||
| 93 | $err = 0; | ||
| 94 | |||
| 95 | while ( defined($line = <FILE>) ) { | ||
| 96 | $in_bytes += length($line); | ||
| 97 | |||
| 98 | if (!$in_hunk) { | ||
| 99 | if ($line =~ /^\@\@\s+\-([0-9]+),([0-9]+)\s+\+([0-9]+),([0-9]+)\s\@\@/) { | ||
| 100 | $minus_lines = $2; | ||
| 101 | $plus_lines = $4; | ||
| 102 | if ($minus_lines || $plus_lines) { | ||
| 103 | $in_hunk = 1; | ||
| 104 | @hunk_lines = ($line); | ||
| 105 | } | ||
| 106 | } else { | ||
| 107 | push(@lines, $line); | ||
| 108 | $out_bytes += length($line); | ||
| 109 | } | ||
| 110 | } else { | ||
| 111 | # We're in a hunk | ||
| 112 | |||
| 113 | if ($line =~ /^\+/) { | ||
| 114 | $plus_lines--; | ||
| 115 | |||
| 116 | $text = substr($line, 1); | ||
| 117 | $text =~ s/[ \t\r]*$//; # Remove trailing spaces | ||
| 118 | $text = clean_space_tabs($text); | ||
| 119 | |||
| 120 | push(@hunk_lines, '+'.$text); | ||
| 121 | } elsif ($line =~ /^\-/) { | ||
| 122 | $minus_lines--; | ||
| 123 | push(@hunk_lines, $line); | ||
| 124 | } elsif ($line =~ /^ /) { | ||
| 125 | $plus_lines--; | ||
| 126 | $minus_lines--; | ||
| 127 | push(@hunk_lines, $line); | ||
| 128 | } else { | ||
| 129 | print STDERR "$name: $f: malformed patch\n"; | ||
| 130 | $err = 1; | ||
| 131 | last; | ||
| 132 | } | ||
| 133 | |||
| 134 | if ($plus_lines < 0 || $minus_lines < 0) { | ||
| 135 | print STDERR "$name: $f: malformed patch\n"; | ||
| 136 | $err = 1; | ||
| 137 | last; | ||
| 138 | } elsif ($plus_lines == 0 && $minus_lines == 0) { | ||
| 139 | # End of a hunk. Process this hunk. | ||
| 140 | my $i; | ||
| 141 | my $l; | ||
| 142 | my @h = (); | ||
| 143 | my $adj = 0; | ||
| 144 | my $done = 0; | ||
| 145 | |||
| 146 | for ($i = scalar(@hunk_lines)-1; $i > 0; $i--) { | ||
| 147 | $l = $hunk_lines[$i]; | ||
| 148 | if (!$done && $l eq "+\n") { | ||
| 149 | $adj++; # Skip this line | ||
| 150 | } elsif ($l =~ /^[ +]/) { | ||
| 151 | $done = 1; | ||
| 152 | unshift(@h, $l); | ||
| 153 | } else { | ||
| 154 | unshift(@h, $l); | ||
| 155 | } | ||
| 156 | } | ||
| 157 | |||
| 158 | $l = $hunk_lines[0]; # Hunk header | ||
| 159 | undef @hunk_lines; # Free memory | ||
| 160 | |||
| 161 | if ($adj) { | ||
| 162 | die unless | ||
| 163 | ($l =~ /^\@\@\s+\-([0-9]+),([0-9]+)\s+\+([0-9]+),([0-9]+)\s\@\@(.*)$/); | ||
| 164 | my $mstart = $1; | ||
| 165 | my $mlin = $2; | ||
| 166 | my $pstart = $3; | ||
| 167 | my $plin = $4; | ||
| 168 | my $tail = $5; # doesn't include the final newline | ||
| 169 | |||
| 170 | $l = sprintf("@@ -%d,%d +%d,%d @@%s\n", | ||
| 171 | $mstart, $mlin, $pstart, $plin-$adj, | ||
| 172 | $tail); | ||
| 173 | } | ||
| 174 | unshift(@h, $l); | ||
| 175 | |||
| 176 | # Transfer to the output array | ||
| 177 | foreach $l (@h) { | ||
| 178 | $out_bytes += length($l); | ||
| 179 | push(@lines, $l); | ||
| 180 | } | ||
| 181 | |||
| 182 | $in_hunk = 0; | ||
| 183 | } | ||
| 184 | } | ||
| 185 | } | ||
| 186 | |||
| 187 | if ($in_hunk) { | ||
| 188 | print STDERR "$name: $f: malformed patch\n"; | ||
| 189 | $err = 1; | ||
| 190 | } | ||
| 191 | |||
| 192 | if (!$err) { | ||
| 193 | if ($in_bytes != $out_bytes) { | ||
| 194 | # Only write to the file if changed | ||
| 195 | seek(FILE, 0, 0); | ||
| 196 | print FILE @lines; | ||
| 197 | |||
| 198 | if ( !defined($where = tell(FILE)) || | ||
| 199 | !truncate(FILE, $where) ) { | ||
| 200 | die "$name: Failed to truncate modified file: $f: $!\n"; | ||
| 201 | } | ||
| 202 | } | ||
| 203 | } | ||
| 204 | |||
| 205 | close(FILE); | ||
| 206 | } | ||
diff --git a/scripts/gen_initramfs_list.sh b/scripts/gen_initramfs_list.sh index 43f75d6e4d96..683eb12babbb 100644 --- a/scripts/gen_initramfs_list.sh +++ b/scripts/gen_initramfs_list.sh | |||
| @@ -171,7 +171,7 @@ dir_filelist() { | |||
| 171 | ${dep_list}header "$1" | 171 | ${dep_list}header "$1" |
| 172 | 172 | ||
| 173 | srcdir=$(echo "$1" | sed -e 's://*:/:g') | 173 | srcdir=$(echo "$1" | sed -e 's://*:/:g') |
| 174 | dirlist=$(find "${srcdir}" -printf "%p %m %U %G\n" 2>/dev/null) | 174 | dirlist=$(find "${srcdir}" -printf "%p %m %U %G\n") |
| 175 | 175 | ||
| 176 | # If $dirlist is only one line, then the directory is empty | 176 | # If $dirlist is only one line, then the directory is empty |
| 177 | if [ "$(echo "${dirlist}" | wc -l)" -gt 1 ]; then | 177 | if [ "$(echo "${dirlist}" | wc -l)" -gt 1 ]; then |
| @@ -191,9 +191,10 @@ input_file() { | |||
| 191 | source="$1" | 191 | source="$1" |
| 192 | if [ -f "$1" ]; then | 192 | if [ -f "$1" ]; then |
| 193 | ${dep_list}header "$1" | 193 | ${dep_list}header "$1" |
| 194 | is_cpio="$(echo "$1" | sed 's/^.*\.cpio/cpio/')" | 194 | is_cpio="$(echo "$1" | sed 's/^.*\.cpio\(\..*\)\?/cpio/')" |
| 195 | if [ $2 -eq 0 -a ${is_cpio} == "cpio" ]; then | 195 | if [ $2 -eq 0 -a ${is_cpio} == "cpio" ]; then |
| 196 | cpio_file=$1 | 196 | cpio_file=$1 |
| 197 | echo "$1" | grep -q '^.*\.cpio\..*' && is_cpio_compressed="compressed" | ||
| 197 | [ ! -z ${dep_list} ] && echo "$1" | 198 | [ ! -z ${dep_list} ] && echo "$1" |
| 198 | return 0 | 199 | return 0 |
| 199 | fi | 200 | fi |
| @@ -223,6 +224,7 @@ cpio_file= | |||
| 223 | cpio_list= | 224 | cpio_list= |
| 224 | output="/dev/stdout" | 225 | output="/dev/stdout" |
| 225 | output_file="" | 226 | output_file="" |
| 227 | is_cpio_compressed= | ||
| 226 | 228 | ||
| 227 | arg="$1" | 229 | arg="$1" |
| 228 | case "$arg" in | 230 | case "$arg" in |
| @@ -282,7 +284,11 @@ if [ ! -z ${output_file} ]; then | |||
| 282 | cpio_tfile=${cpio_file} | 284 | cpio_tfile=${cpio_file} |
| 283 | fi | 285 | fi |
| 284 | rm ${cpio_list} | 286 | rm ${cpio_list} |
| 285 | cat ${cpio_tfile} | gzip -f -9 - > ${output_file} | 287 | if [ "${is_cpio_compressed}" = "compressed" ]; then |
| 288 | cat ${cpio_tfile} > ${output_file} | ||
| 289 | else | ||
| 290 | cat ${cpio_tfile} | gzip -f -9 - > ${output_file} | ||
| 291 | fi | ||
| 286 | [ -z ${cpio_file} ] && rm ${cpio_tfile} | 292 | [ -z ${cpio_file} ] && rm ${cpio_tfile} |
| 287 | fi | 293 | fi |
| 288 | exit 0 | 294 | exit 0 |
diff --git a/scripts/kconfig/Makefile b/scripts/kconfig/Makefile index 7e7e147875bf..fb2bb3099dd9 100644 --- a/scripts/kconfig/Makefile +++ b/scripts/kconfig/Makefile | |||
| @@ -140,6 +140,7 @@ endif | |||
| 140 | 140 | ||
| 141 | clean-files := lkc_defs.h qconf.moc .tmp_qtcheck \ | 141 | clean-files := lkc_defs.h qconf.moc .tmp_qtcheck \ |
| 142 | .tmp_gtkcheck zconf.tab.c lex.zconf.c zconf.hash.c | 142 | .tmp_gtkcheck zconf.tab.c lex.zconf.c zconf.hash.c |
| 143 | clean-files += mconf qconf gconf | ||
| 143 | 144 | ||
| 144 | # Needed for systems without gettext | 145 | # Needed for systems without gettext |
| 145 | KBUILD_HAVE_NLS := $(shell \ | 146 | KBUILD_HAVE_NLS := $(shell \ |
| @@ -183,8 +184,8 @@ $(obj)/.tmp_qtcheck: | |||
| 183 | done; \ | 184 | done; \ |
| 184 | if [ -z "$$dir" ]; then \ | 185 | if [ -z "$$dir" ]; then \ |
| 185 | echo "*"; \ | 186 | echo "*"; \ |
| 186 | echo "* Unable to find the QT installation. Please make sure that"; \ | 187 | echo "* Unable to find the QT3 installation. Please make sure that"; \ |
| 187 | echo "* the QT development package is correctly installed and"; \ | 188 | echo "* the QT3 development package is correctly installed and"; \ |
| 188 | echo "* either install pkg-config or set the QTDIR environment"; \ | 189 | echo "* either install pkg-config or set the QTDIR environment"; \ |
| 189 | echo "* variable to the correct location."; \ | 190 | echo "* variable to the correct location."; \ |
| 190 | echo "*"; \ | 191 | echo "*"; \ |
diff --git a/scripts/kconfig/conf.c b/scripts/kconfig/conf.c index 124b341a18c0..1199baf866ca 100644 --- a/scripts/kconfig/conf.c +++ b/scripts/kconfig/conf.c | |||
| @@ -558,6 +558,7 @@ int main(int ac, char **av) | |||
| 558 | if (stat(".config", &tmpstat)) { | 558 | if (stat(".config", &tmpstat)) { |
| 559 | printf(_("***\n" | 559 | printf(_("***\n" |
| 560 | "*** You have not yet configured your kernel!\n" | 560 | "*** You have not yet configured your kernel!\n" |
| 561 | "*** (missing kernel .config file)\n" | ||
| 561 | "***\n" | 562 | "***\n" |
| 562 | "*** Please run some configurator (e.g. \"make oldconfig\" or\n" | 563 | "*** Please run some configurator (e.g. \"make oldconfig\" or\n" |
| 563 | "*** \"make menuconfig\" or \"make xconfig\").\n" | 564 | "*** \"make menuconfig\" or \"make xconfig\").\n" |
diff --git a/scripts/kconfig/lex.zconf.c_shipped b/scripts/kconfig/lex.zconf.c_shipped index 800f8c71c407..0fdc9049296f 100644 --- a/scripts/kconfig/lex.zconf.c_shipped +++ b/scripts/kconfig/lex.zconf.c_shipped | |||
| @@ -2264,7 +2264,7 @@ FILE *zconf_fopen(const char *name) | |||
| 2264 | FILE *f; | 2264 | FILE *f; |
| 2265 | 2265 | ||
| 2266 | f = fopen(name, "r"); | 2266 | f = fopen(name, "r"); |
| 2267 | if (!f && name[0] != '/') { | 2267 | if (!f && name != NULL && name[0] != '/') { |
| 2268 | env = getenv(SRCTREE); | 2268 | env = getenv(SRCTREE); |
| 2269 | if (env) { | 2269 | if (env) { |
| 2270 | sprintf(fullname, "%s/%s", env, name); | 2270 | sprintf(fullname, "%s/%s", env, name); |
diff --git a/scripts/kconfig/lkc.h b/scripts/kconfig/lkc.h index 9b2706a41548..8a07ee4f6bd4 100644 --- a/scripts/kconfig/lkc.h +++ b/scripts/kconfig/lkc.h | |||
| @@ -64,6 +64,7 @@ int zconf_lineno(void); | |||
| 64 | char *zconf_curname(void); | 64 | char *zconf_curname(void); |
| 65 | 65 | ||
| 66 | /* confdata.c */ | 66 | /* confdata.c */ |
| 67 | const char *conf_get_configname(void); | ||
| 67 | char *conf_get_default_confname(void); | 68 | char *conf_get_default_confname(void); |
| 68 | void sym_set_change_count(int count); | 69 | void sym_set_change_count(int count); |
| 69 | void sym_add_change_count(int count); | 70 | void sym_add_change_count(int count); |
diff --git a/scripts/kconfig/lxdialog/dialog.h b/scripts/kconfig/lxdialog/dialog.h index fd695e1070f7..7e17eba75ae8 100644 --- a/scripts/kconfig/lxdialog/dialog.h +++ b/scripts/kconfig/lxdialog/dialog.h | |||
| @@ -188,6 +188,7 @@ int on_key_esc(WINDOW *win); | |||
| 188 | int on_key_resize(void); | 188 | int on_key_resize(void); |
| 189 | 189 | ||
| 190 | void init_dialog(const char *backtitle); | 190 | void init_dialog(const char *backtitle); |
| 191 | void set_dialog_backtitle(const char *backtitle); | ||
| 191 | void reset_dialog(void); | 192 | void reset_dialog(void); |
| 192 | void end_dialog(void); | 193 | void end_dialog(void); |
| 193 | void attr_clear(WINDOW * win, int height, int width, chtype attr); | 194 | void attr_clear(WINDOW * win, int height, int width, chtype attr); |
diff --git a/scripts/kconfig/lxdialog/util.c b/scripts/kconfig/lxdialog/util.c index d54440fc166c..a1bddefe73d0 100644 --- a/scripts/kconfig/lxdialog/util.c +++ b/scripts/kconfig/lxdialog/util.c | |||
| @@ -272,6 +272,11 @@ void init_dialog(const char *backtitle) | |||
| 272 | color_setup(getenv("MENUCONFIG_COLOR")); | 272 | color_setup(getenv("MENUCONFIG_COLOR")); |
| 273 | } | 273 | } |
| 274 | 274 | ||
| 275 | void set_dialog_backtitle(const char *backtitle) | ||
| 276 | { | ||
| 277 | dlg.backtitle = backtitle; | ||
| 278 | } | ||
| 279 | |||
| 275 | void reset_dialog(void) | 280 | void reset_dialog(void) |
| 276 | { | 281 | { |
| 277 | initscr(); /* Init curses */ | 282 | initscr(); /* Init curses */ |
| @@ -336,7 +341,7 @@ void print_autowrap(WINDOW * win, const char *prompt, int width, int y, int x) | |||
| 336 | newl = 1; | 341 | newl = 1; |
| 337 | word = tempstr; | 342 | word = tempstr; |
| 338 | while (word && *word) { | 343 | while (word && *word) { |
| 339 | sp = index(word, ' '); | 344 | sp = strchr(word, ' '); |
| 340 | if (sp) | 345 | if (sp) |
| 341 | *sp++ = 0; | 346 | *sp++ = 0; |
| 342 | 347 | ||
| @@ -348,7 +353,7 @@ void print_autowrap(WINDOW * win, const char *prompt, int width, int y, int x) | |||
| 348 | if (wlen > room || | 353 | if (wlen > room || |
| 349 | (newl && wlen < 4 && sp | 354 | (newl && wlen < 4 && sp |
| 350 | && wlen + 1 + strlen(sp) > room | 355 | && wlen + 1 + strlen(sp) > room |
| 351 | && (!(sp2 = index(sp, ' ')) | 356 | && (!(sp2 = strchr(sp, ' ')) |
| 352 | || wlen + 1 + (sp2 - sp) > room))) { | 357 | || wlen + 1 + (sp2 - sp) > room))) { |
| 353 | cur_y++; | 358 | cur_y++; |
| 354 | cur_x = x; | 359 | cur_x = x; |
diff --git a/scripts/kconfig/mconf.c b/scripts/kconfig/mconf.c index 3f9a1321b3e6..d0e4fa594fc7 100644 --- a/scripts/kconfig/mconf.c +++ b/scripts/kconfig/mconf.c | |||
| @@ -26,7 +26,6 @@ | |||
| 26 | #include "lkc.h" | 26 | #include "lkc.h" |
| 27 | #include "lxdialog/dialog.h" | 27 | #include "lxdialog/dialog.h" |
| 28 | 28 | ||
| 29 | static char menu_backtitle[128]; | ||
| 30 | static const char mconf_readme[] = N_( | 29 | static const char mconf_readme[] = N_( |
| 31 | "Overview\n" | 30 | "Overview\n" |
| 32 | "--------\n" | 31 | "--------\n" |
| @@ -271,7 +270,6 @@ search_help[] = N_( | |||
| 271 | " USB$ => find all CONFIG_ symbols ending with USB\n" | 270 | " USB$ => find all CONFIG_ symbols ending with USB\n" |
| 272 | "\n"); | 271 | "\n"); |
| 273 | 272 | ||
| 274 | static char filename[PATH_MAX+1] = ".config"; | ||
| 275 | static int indent; | 273 | static int indent; |
| 276 | static struct termios ios_org; | 274 | static struct termios ios_org; |
| 277 | static int rows = 0, cols = 0; | 275 | static int rows = 0, cols = 0; |
| @@ -395,6 +393,28 @@ static struct gstr get_relations_str(struct symbol **sym_arr) | |||
| 395 | return res; | 393 | return res; |
| 396 | } | 394 | } |
| 397 | 395 | ||
| 396 | static char filename[PATH_MAX+1]; | ||
| 397 | static void set_config_filename(const char *config_filename) | ||
| 398 | { | ||
| 399 | static char menu_backtitle[PATH_MAX+128]; | ||
| 400 | int size; | ||
| 401 | struct symbol *sym; | ||
| 402 | |||
| 403 | sym = sym_lookup("KERNELVERSION", 0); | ||
| 404 | sym_calc_value(sym); | ||
| 405 | size = snprintf(menu_backtitle, sizeof(menu_backtitle), | ||
| 406 | _("%s - Linux Kernel v%s Configuration"), | ||
| 407 | config_filename, sym_get_string_value(sym)); | ||
| 408 | if (size >= sizeof(menu_backtitle)) | ||
| 409 | menu_backtitle[sizeof(menu_backtitle)-1] = '\0'; | ||
| 410 | set_dialog_backtitle(menu_backtitle); | ||
| 411 | |||
| 412 | size = snprintf(filename, sizeof(filename), "%s", config_filename); | ||
| 413 | if (size >= sizeof(filename)) | ||
| 414 | filename[sizeof(filename)-1] = '\0'; | ||
| 415 | } | ||
| 416 | |||
| 417 | |||
| 398 | static void search_conf(void) | 418 | static void search_conf(void) |
| 399 | { | 419 | { |
| 400 | struct symbol **sym_arr; | 420 | struct symbol **sym_arr; |
| @@ -816,8 +836,10 @@ static void conf_load(void) | |||
| 816 | case 0: | 836 | case 0: |
| 817 | if (!dialog_input_result[0]) | 837 | if (!dialog_input_result[0]) |
| 818 | return; | 838 | return; |
| 819 | if (!conf_read(dialog_input_result)) | 839 | if (!conf_read(dialog_input_result)) { |
| 840 | set_config_filename(dialog_input_result); | ||
| 820 | return; | 841 | return; |
| 842 | } | ||
| 821 | show_textbox(NULL, _("File does not exist!"), 5, 38); | 843 | show_textbox(NULL, _("File does not exist!"), 5, 38); |
| 822 | break; | 844 | break; |
| 823 | case 1: | 845 | case 1: |
| @@ -840,8 +862,10 @@ static void conf_save(void) | |||
| 840 | case 0: | 862 | case 0: |
| 841 | if (!dialog_input_result[0]) | 863 | if (!dialog_input_result[0]) |
| 842 | return; | 864 | return; |
| 843 | if (!conf_write(dialog_input_result)) | 865 | if (!conf_write(dialog_input_result)) { |
| 866 | set_config_filename(dialog_input_result); | ||
| 844 | return; | 867 | return; |
| 868 | } | ||
| 845 | show_textbox(NULL, _("Can't create file! Probably a nonexistent directory."), 5, 60); | 869 | show_textbox(NULL, _("Can't create file! Probably a nonexistent directory."), 5, 60); |
| 846 | break; | 870 | break; |
| 847 | case 1: | 871 | case 1: |
| @@ -860,7 +884,6 @@ static void conf_cleanup(void) | |||
| 860 | 884 | ||
| 861 | int main(int ac, char **av) | 885 | int main(int ac, char **av) |
| 862 | { | 886 | { |
| 863 | struct symbol *sym; | ||
| 864 | char *mode; | 887 | char *mode; |
| 865 | int res; | 888 | int res; |
| 866 | 889 | ||
| @@ -871,11 +894,6 @@ int main(int ac, char **av) | |||
| 871 | conf_parse(av[1]); | 894 | conf_parse(av[1]); |
| 872 | conf_read(NULL); | 895 | conf_read(NULL); |
| 873 | 896 | ||
| 874 | sym = sym_lookup("KERNELVERSION", 0); | ||
| 875 | sym_calc_value(sym); | ||
| 876 | sprintf(menu_backtitle, _("Linux Kernel v%s Configuration"), | ||
| 877 | sym_get_string_value(sym)); | ||
| 878 | |||
| 879 | mode = getenv("MENUCONFIG_MODE"); | 897 | mode = getenv("MENUCONFIG_MODE"); |
| 880 | if (mode) { | 898 | if (mode) { |
| 881 | if (!strcasecmp(mode, "single_menu")) | 899 | if (!strcasecmp(mode, "single_menu")) |
| @@ -886,7 +904,8 @@ int main(int ac, char **av) | |||
| 886 | atexit(conf_cleanup); | 904 | atexit(conf_cleanup); |
| 887 | init_wsize(); | 905 | init_wsize(); |
| 888 | reset_dialog(); | 906 | reset_dialog(); |
| 889 | init_dialog(menu_backtitle); | 907 | init_dialog(NULL); |
| 908 | set_config_filename(conf_get_configname()); | ||
| 890 | do { | 909 | do { |
| 891 | conf(&rootmenu); | 910 | conf(&rootmenu); |
| 892 | dialog_clear(); | 911 | dialog_clear(); |
| @@ -903,7 +922,7 @@ int main(int ac, char **av) | |||
| 903 | 922 | ||
| 904 | switch (res) { | 923 | switch (res) { |
| 905 | case 0: | 924 | case 0: |
| 906 | if (conf_write(NULL)) { | 925 | if (conf_write(filename)) { |
| 907 | fprintf(stderr, _("\n\n" | 926 | fprintf(stderr, _("\n\n" |
| 908 | "Error during writing of the kernel configuration.\n" | 927 | "Error during writing of the kernel configuration.\n" |
| 909 | "Your kernel configuration changes were NOT saved." | 928 | "Your kernel configuration changes were NOT saved." |
diff --git a/scripts/kconfig/menu.c b/scripts/kconfig/menu.c index c86c27f2c761..f14aeac67d4f 100644 --- a/scripts/kconfig/menu.c +++ b/scripts/kconfig/menu.c | |||
| @@ -203,7 +203,7 @@ void sym_check_prop(struct symbol *sym) | |||
| 203 | else if (sym2->type == S_UNKNOWN) | 203 | else if (sym2->type == S_UNKNOWN) |
| 204 | prop_warn(prop, | 204 | prop_warn(prop, |
| 205 | "'select' used by config symbol '%s' " | 205 | "'select' used by config symbol '%s' " |
| 206 | "refer to undefined symbol '%s'", | 206 | "refers to undefined symbol '%s'", |
| 207 | sym->name, sym2->name); | 207 | sym->name, sym2->name); |
| 208 | else if (sym2->type != S_BOOLEAN && sym2->type != S_TRISTATE) | 208 | else if (sym2->type != S_BOOLEAN && sym2->type != S_TRISTATE) |
| 209 | prop_warn(prop, | 209 | prop_warn(prop, |
diff --git a/scripts/kconfig/qconf.cc b/scripts/kconfig/qconf.cc index 512c2f5c341d..f2a23a9c3938 100644 --- a/scripts/kconfig/qconf.cc +++ b/scripts/kconfig/qconf.cc | |||
| @@ -1182,7 +1182,7 @@ void ConfigInfoView::contentsContextMenuEvent(QContextMenuEvent *e) | |||
| 1182 | Parent::contentsContextMenuEvent(e); | 1182 | Parent::contentsContextMenuEvent(e); |
| 1183 | } | 1183 | } |
| 1184 | 1184 | ||
| 1185 | ConfigSearchWindow::ConfigSearchWindow(QWidget* parent, const char *name) | 1185 | ConfigSearchWindow::ConfigSearchWindow(ConfigMainWindow* parent, const char *name) |
| 1186 | : Parent(parent, name), result(NULL) | 1186 | : Parent(parent, name), result(NULL) |
| 1187 | { | 1187 | { |
| 1188 | setCaption("Search Config"); | 1188 | setCaption("Search Config"); |
| @@ -1206,6 +1206,9 @@ ConfigSearchWindow::ConfigSearchWindow(QWidget* parent, const char *name) | |||
| 1206 | info = new ConfigInfoView(split, name); | 1206 | info = new ConfigInfoView(split, name); |
| 1207 | connect(list->list, SIGNAL(menuChanged(struct menu *)), | 1207 | connect(list->list, SIGNAL(menuChanged(struct menu *)), |
| 1208 | info, SLOT(setInfo(struct menu *))); | 1208 | info, SLOT(setInfo(struct menu *))); |
| 1209 | connect(list->list, SIGNAL(menuChanged(struct menu *)), | ||
| 1210 | parent, SLOT(setMenuLink(struct menu *))); | ||
| 1211 | |||
| 1209 | layout1->addWidget(split); | 1212 | layout1->addWidget(split); |
| 1210 | 1213 | ||
| 1211 | if (name) { | 1214 | if (name) { |
diff --git a/scripts/kconfig/qconf.h b/scripts/kconfig/qconf.h index 6fc1c5f14425..b3b5657b6b35 100644 --- a/scripts/kconfig/qconf.h +++ b/scripts/kconfig/qconf.h | |||
| @@ -279,7 +279,7 @@ class ConfigSearchWindow : public QDialog { | |||
| 279 | Q_OBJECT | 279 | Q_OBJECT |
| 280 | typedef class QDialog Parent; | 280 | typedef class QDialog Parent; |
| 281 | public: | 281 | public: |
| 282 | ConfigSearchWindow(QWidget* parent, const char *name = 0); | 282 | ConfigSearchWindow(ConfigMainWindow* parent, const char *name = 0); |
| 283 | 283 | ||
| 284 | public slots: | 284 | public slots: |
| 285 | void saveSettings(void); | 285 | void saveSettings(void); |
diff --git a/scripts/kconfig/symbol.c b/scripts/kconfig/symbol.c index 8f06c474d800..c35dcc5d6189 100644 --- a/scripts/kconfig/symbol.c +++ b/scripts/kconfig/symbol.c | |||
| @@ -786,13 +786,15 @@ static struct symbol *sym_check_expr_deps(struct expr *e) | |||
| 786 | return NULL; | 786 | return NULL; |
| 787 | } | 787 | } |
| 788 | 788 | ||
| 789 | /* return NULL when dependencies are OK */ | ||
| 789 | struct symbol *sym_check_deps(struct symbol *sym) | 790 | struct symbol *sym_check_deps(struct symbol *sym) |
| 790 | { | 791 | { |
| 791 | struct symbol *sym2; | 792 | struct symbol *sym2; |
| 792 | struct property *prop; | 793 | struct property *prop; |
| 793 | 794 | ||
| 794 | if (sym->flags & SYMBOL_CHECK) { | 795 | if (sym->flags & SYMBOL_CHECK) { |
| 795 | printf("Warning! Found recursive dependency: %s", sym->name); | 796 | fprintf(stderr, "%s:%d:error: found recursive dependency: %s", |
| 797 | sym->prop->file->name, sym->prop->lineno, sym->name); | ||
| 796 | return sym; | 798 | return sym; |
| 797 | } | 799 | } |
| 798 | if (sym->flags & SYMBOL_CHECKED) | 800 | if (sym->flags & SYMBOL_CHECKED) |
| @@ -816,13 +818,8 @@ struct symbol *sym_check_deps(struct symbol *sym) | |||
| 816 | goto out; | 818 | goto out; |
| 817 | } | 819 | } |
| 818 | out: | 820 | out: |
| 819 | if (sym2) { | 821 | if (sym2) |
| 820 | printf(" %s", sym->name); | 822 | fprintf(stderr, " -> %s%s", sym->name, sym2 == sym? "\n": ""); |
| 821 | if (sym2 == sym) { | ||
| 822 | printf("\n"); | ||
| 823 | sym2 = NULL; | ||
| 824 | } | ||
| 825 | } | ||
| 826 | sym->flags &= ~SYMBOL_CHECK; | 823 | sym->flags &= ~SYMBOL_CHECK; |
| 827 | return sym2; | 824 | return sym2; |
| 828 | } | 825 | } |
diff --git a/scripts/kconfig/zconf.l b/scripts/kconfig/zconf.l index cfa46077c6b4..187d38ccadd5 100644 --- a/scripts/kconfig/zconf.l +++ b/scripts/kconfig/zconf.l | |||
| @@ -265,7 +265,7 @@ FILE *zconf_fopen(const char *name) | |||
| 265 | FILE *f; | 265 | FILE *f; |
| 266 | 266 | ||
| 267 | f = fopen(name, "r"); | 267 | f = fopen(name, "r"); |
| 268 | if (!f && name[0] != '/') { | 268 | if (!f && name != NULL && name[0] != '/') { |
| 269 | env = getenv(SRCTREE); | 269 | env = getenv(SRCTREE); |
| 270 | if (env) { | 270 | if (env) { |
| 271 | sprintf(fullname, "%s/%s", env, name); | 271 | sprintf(fullname, "%s/%s", env, name); |
diff --git a/scripts/kconfig/zconf.tab.c_shipped b/scripts/kconfig/zconf.tab.c_shipped index d777fe85627f..9a06b6771eee 100644 --- a/scripts/kconfig/zconf.tab.c_shipped +++ b/scripts/kconfig/zconf.tab.c_shipped | |||
| @@ -2132,9 +2132,11 @@ void conf_parse(const char *name) | |||
| 2132 | } | 2132 | } |
| 2133 | menu_finalize(&rootmenu); | 2133 | menu_finalize(&rootmenu); |
| 2134 | for_all_symbols(i, sym) { | 2134 | for_all_symbols(i, sym) { |
| 2135 | sym_check_deps(sym); | 2135 | if (sym_check_deps(sym)) |
| 2136 | zconfnerrs++; | ||
| 2136 | } | 2137 | } |
| 2137 | 2138 | if (zconfnerrs) | |
| 2139 | exit(1); | ||
| 2138 | sym_set_change_count(1); | 2140 | sym_set_change_count(1); |
| 2139 | } | 2141 | } |
| 2140 | 2142 | ||
diff --git a/scripts/kconfig/zconf.y b/scripts/kconfig/zconf.y index 04a5864c03b1..92eb02bdf9c5 100644 --- a/scripts/kconfig/zconf.y +++ b/scripts/kconfig/zconf.y | |||
| @@ -501,9 +501,11 @@ void conf_parse(const char *name) | |||
| 501 | } | 501 | } |
| 502 | menu_finalize(&rootmenu); | 502 | menu_finalize(&rootmenu); |
| 503 | for_all_symbols(i, sym) { | 503 | for_all_symbols(i, sym) { |
| 504 | sym_check_deps(sym); | 504 | if (sym_check_deps(sym)) |
| 505 | zconfnerrs++; | ||
| 505 | } | 506 | } |
| 506 | 507 | if (zconfnerrs) | |
| 508 | exit(1); | ||
| 507 | sym_set_change_count(1); | 509 | sym_set_change_count(1); |
| 508 | } | 510 | } |
| 509 | 511 | ||
diff --git a/scripts/mkcompile_h b/scripts/mkcompile_h index 82d0af46f0ef..a8740df07b09 100755 --- a/scripts/mkcompile_h +++ b/scripts/mkcompile_h | |||
| @@ -18,19 +18,32 @@ fi | |||
| 18 | # Do not expand names | 18 | # Do not expand names |
| 19 | set -f | 19 | set -f |
| 20 | 20 | ||
| 21 | if [ -r .version ]; then | 21 | # Fix the language to get consistent output |
| 22 | VERSION=`cat .version` | 22 | LC_ALL=C |
| 23 | export LC_ALL | ||
| 24 | |||
| 25 | if [ -z "$KBUILD_BUILD_VERSION" ]; then | ||
| 26 | if [ -r .version ]; then | ||
| 27 | VERSION=`cat .version` | ||
| 28 | else | ||
| 29 | VERSION=0 | ||
| 30 | echo 0 > .version | ||
| 31 | fi | ||
| 23 | else | 32 | else |
| 24 | VERSION=0 | 33 | VERSION=$KBUILD_BUILD_VERSION |
| 25 | echo 0 > .version | ||
| 26 | fi | 34 | fi |
| 27 | 35 | ||
| 36 | if [ -z "$KBUILD_BUILD_TIMESTAMP" ]; then | ||
| 37 | TIMESTAMP=`date` | ||
| 38 | else | ||
| 39 | TIMESTAMP=$KBUILD_BUILD_TIMESTAMP | ||
| 40 | fi | ||
| 28 | 41 | ||
| 29 | UTS_VERSION="#$VERSION" | 42 | UTS_VERSION="#$VERSION" |
| 30 | CONFIG_FLAGS="" | 43 | CONFIG_FLAGS="" |
| 31 | if [ -n "$SMP" ] ; then CONFIG_FLAGS="SMP"; fi | 44 | if [ -n "$SMP" ] ; then CONFIG_FLAGS="SMP"; fi |
| 32 | if [ -n "$PREEMPT" ] ; then CONFIG_FLAGS="$CONFIG_FLAGS PREEMPT"; fi | 45 | if [ -n "$PREEMPT" ] ; then CONFIG_FLAGS="$CONFIG_FLAGS PREEMPT"; fi |
| 33 | UTS_VERSION="$UTS_VERSION $CONFIG_FLAGS `LC_ALL=C LANG=C date`" | 46 | UTS_VERSION="$UTS_VERSION $CONFIG_FLAGS $TIMESTAMP" |
| 34 | 47 | ||
| 35 | # Truncate to maximum length | 48 | # Truncate to maximum length |
| 36 | 49 | ||
| @@ -46,7 +59,7 @@ UTS_TRUNCATE="sed -e s/\(.\{1,$UTS_LEN\}\).*/\1/" | |||
| 46 | 59 | ||
| 47 | echo \#define UTS_VERSION \"`echo $UTS_VERSION | $UTS_TRUNCATE`\" | 60 | echo \#define UTS_VERSION \"`echo $UTS_VERSION | $UTS_TRUNCATE`\" |
| 48 | 61 | ||
| 49 | echo \#define LINUX_COMPILE_TIME \"`LC_ALL=C LANG=C date +%T`\" | 62 | echo \#define LINUX_COMPILE_TIME \"`date +%T`\" |
| 50 | echo \#define LINUX_COMPILE_BY \"`whoami`\" | 63 | echo \#define LINUX_COMPILE_BY \"`whoami`\" |
| 51 | echo \#define LINUX_COMPILE_HOST \"`hostname | $UTS_TRUNCATE`\" | 64 | echo \#define LINUX_COMPILE_HOST \"`hostname | $UTS_TRUNCATE`\" |
| 52 | 65 | ||
| @@ -58,7 +71,7 @@ UTS_TRUNCATE="sed -e s/\(.\{1,$UTS_LEN\}\).*/\1/" | |||
| 58 | echo \#define LINUX_COMPILE_DOMAIN | 71 | echo \#define LINUX_COMPILE_DOMAIN |
| 59 | fi | 72 | fi |
| 60 | 73 | ||
| 61 | echo \#define LINUX_COMPILER \"`LC_ALL=C LANG=C $CC -v 2>&1 | tail -n 1`\" | 74 | echo \#define LINUX_COMPILER \"`$CC -v 2>&1 | tail -n 1`\" |
| 62 | ) > .tmpcompile | 75 | ) > .tmpcompile |
| 63 | 76 | ||
| 64 | # Only replace the real compile.h if the new one is different, | 77 | # Only replace the real compile.h if the new one is different, |
diff --git a/scripts/mkuboot.sh b/scripts/mkuboot.sh index 4b06c5eea728..2e3d3cd916b8 100755 --- a/scripts/mkuboot.sh +++ b/scripts/mkuboot.sh | |||
| @@ -4,7 +4,7 @@ | |||
| 4 | # Build U-Boot image when `mkimage' tool is available. | 4 | # Build U-Boot image when `mkimage' tool is available. |
| 5 | # | 5 | # |
| 6 | 6 | ||
| 7 | MKIMAGE=$(type -path ${CROSS_COMPILE}mkimage) | 7 | MKIMAGE=$(type -path "${CROSS_COMPILE}mkimage") |
| 8 | 8 | ||
| 9 | if [ -z "${MKIMAGE}" ]; then | 9 | if [ -z "${MKIMAGE}" ]; then |
| 10 | MKIMAGE=$(type -path mkimage) | 10 | MKIMAGE=$(type -path mkimage) |
diff --git a/scripts/mod/file2alias.c b/scripts/mod/file2alias.c index b2f73ffb40bd..ed1244dd58d0 100644 --- a/scripts/mod/file2alias.c +++ b/scripts/mod/file2alias.c | |||
| @@ -37,7 +37,6 @@ typedef unsigned char __u8; | |||
| 37 | * even potentially has different endianness and word sizes, since | 37 | * even potentially has different endianness and word sizes, since |
| 38 | * we handle those differences explicitly below */ | 38 | * we handle those differences explicitly below */ |
| 39 | #include "../../include/linux/mod_devicetable.h" | 39 | #include "../../include/linux/mod_devicetable.h" |
| 40 | #include "../../include/linux/input.h" | ||
| 41 | 40 | ||
| 42 | #define ADD(str, sep, cond, field) \ | 41 | #define ADD(str, sep, cond, field) \ |
| 43 | do { \ | 42 | do { \ |
| @@ -416,31 +415,33 @@ static int do_input_entry(const char *filename, struct input_device_id *id, | |||
| 416 | 415 | ||
| 417 | sprintf(alias + strlen(alias), "-e*"); | 416 | sprintf(alias + strlen(alias), "-e*"); |
| 418 | if (id->flags & INPUT_DEVICE_ID_MATCH_EVBIT) | 417 | if (id->flags & INPUT_DEVICE_ID_MATCH_EVBIT) |
| 419 | do_input(alias, id->evbit, 0, EV_MAX); | 418 | do_input(alias, id->evbit, 0, INPUT_DEVICE_ID_EV_MAX); |
| 420 | sprintf(alias + strlen(alias), "k*"); | 419 | sprintf(alias + strlen(alias), "k*"); |
| 421 | if (id->flags & INPUT_DEVICE_ID_MATCH_KEYBIT) | 420 | if (id->flags & INPUT_DEVICE_ID_MATCH_KEYBIT) |
| 422 | do_input(alias, id->keybit, KEY_MIN_INTERESTING, KEY_MAX); | 421 | do_input(alias, id->keybit, |
| 422 | INPUT_DEVICE_ID_KEY_MIN_INTERESTING, | ||
| 423 | INPUT_DEVICE_ID_KEY_MAX); | ||
| 423 | sprintf(alias + strlen(alias), "r*"); | 424 | sprintf(alias + strlen(alias), "r*"); |
| 424 | if (id->flags & INPUT_DEVICE_ID_MATCH_RELBIT) | 425 | if (id->flags & INPUT_DEVICE_ID_MATCH_RELBIT) |
| 425 | do_input(alias, id->relbit, 0, REL_MAX); | 426 | do_input(alias, id->relbit, 0, INPUT_DEVICE_ID_REL_MAX); |
| 426 | sprintf(alias + strlen(alias), "a*"); | 427 | sprintf(alias + strlen(alias), "a*"); |
| 427 | if (id->flags & INPUT_DEVICE_ID_MATCH_ABSBIT) | 428 | if (id->flags & INPUT_DEVICE_ID_MATCH_ABSBIT) |
| 428 | do_input(alias, id->absbit, 0, ABS_MAX); | 429 | do_input(alias, id->absbit, 0, INPUT_DEVICE_ID_ABS_MAX); |
| 429 | sprintf(alias + strlen(alias), "m*"); | 430 | sprintf(alias + strlen(alias), "m*"); |
| 430 | if (id->flags & INPUT_DEVICE_ID_MATCH_MSCIT) | 431 | if (id->flags & INPUT_DEVICE_ID_MATCH_MSCIT) |
| 431 | do_input(alias, id->mscbit, 0, MSC_MAX); | 432 | do_input(alias, id->mscbit, 0, INPUT_DEVICE_ID_MSC_MAX); |
| 432 | sprintf(alias + strlen(alias), "l*"); | 433 | sprintf(alias + strlen(alias), "l*"); |
| 433 | if (id->flags & INPUT_DEVICE_ID_MATCH_LEDBIT) | 434 | if (id->flags & INPUT_DEVICE_ID_MATCH_LEDBIT) |
| 434 | do_input(alias, id->ledbit, 0, LED_MAX); | 435 | do_input(alias, id->ledbit, 0, INPUT_DEVICE_ID_LED_MAX); |
| 435 | sprintf(alias + strlen(alias), "s*"); | 436 | sprintf(alias + strlen(alias), "s*"); |
| 436 | if (id->flags & INPUT_DEVICE_ID_MATCH_SNDBIT) | 437 | if (id->flags & INPUT_DEVICE_ID_MATCH_SNDBIT) |
| 437 | do_input(alias, id->sndbit, 0, SND_MAX); | 438 | do_input(alias, id->sndbit, 0, INPUT_DEVICE_ID_SND_MAX); |
| 438 | sprintf(alias + strlen(alias), "f*"); | 439 | sprintf(alias + strlen(alias), "f*"); |
| 439 | if (id->flags & INPUT_DEVICE_ID_MATCH_FFBIT) | 440 | if (id->flags & INPUT_DEVICE_ID_MATCH_FFBIT) |
| 440 | do_input(alias, id->ffbit, 0, FF_MAX); | 441 | do_input(alias, id->ffbit, 0, INPUT_DEVICE_ID_FF_MAX); |
| 441 | sprintf(alias + strlen(alias), "w*"); | 442 | sprintf(alias + strlen(alias), "w*"); |
| 442 | if (id->flags & INPUT_DEVICE_ID_MATCH_SWBIT) | 443 | if (id->flags & INPUT_DEVICE_ID_MATCH_SWBIT) |
| 443 | do_input(alias, id->swbit, 0, SW_MAX); | 444 | do_input(alias, id->swbit, 0, INPUT_DEVICE_ID_SW_MAX); |
| 444 | return 1; | 445 | return 1; |
| 445 | } | 446 | } |
| 446 | 447 | ||
diff --git a/scripts/mod/modpost.c b/scripts/mod/modpost.c index 78d659cbb36a..4ab36de45aa2 100644 --- a/scripts/mod/modpost.c +++ b/scripts/mod/modpost.c | |||
| @@ -55,6 +55,17 @@ void warn(const char *fmt, ...) | |||
| 55 | va_end(arglist); | 55 | va_end(arglist); |
| 56 | } | 56 | } |
| 57 | 57 | ||
| 58 | void merror(const char *fmt, ...) | ||
| 59 | { | ||
| 60 | va_list arglist; | ||
| 61 | |||
| 62 | fprintf(stderr, "ERROR: "); | ||
| 63 | |||
| 64 | va_start(arglist, fmt); | ||
| 65 | vfprintf(stderr, fmt, arglist); | ||
| 66 | va_end(arglist); | ||
| 67 | } | ||
| 68 | |||
| 58 | static int is_vmlinux(const char *modname) | 69 | static int is_vmlinux(const char *modname) |
| 59 | { | 70 | { |
| 60 | const char *myname; | 71 | const char *myname; |
| @@ -333,10 +344,10 @@ void release_file(void *file, unsigned long size) | |||
| 333 | munmap(file, size); | 344 | munmap(file, size); |
| 334 | } | 345 | } |
| 335 | 346 | ||
| 336 | static void parse_elf(struct elf_info *info, const char *filename) | 347 | static int parse_elf(struct elf_info *info, const char *filename) |
| 337 | { | 348 | { |
| 338 | unsigned int i; | 349 | unsigned int i; |
| 339 | Elf_Ehdr *hdr = info->hdr; | 350 | Elf_Ehdr *hdr; |
| 340 | Elf_Shdr *sechdrs; | 351 | Elf_Shdr *sechdrs; |
| 341 | Elf_Sym *sym; | 352 | Elf_Sym *sym; |
| 342 | 353 | ||
| @@ -346,9 +357,18 @@ static void parse_elf(struct elf_info *info, const char *filename) | |||
| 346 | exit(1); | 357 | exit(1); |
| 347 | } | 358 | } |
| 348 | info->hdr = hdr; | 359 | info->hdr = hdr; |
| 349 | if (info->size < sizeof(*hdr)) | 360 | if (info->size < sizeof(*hdr)) { |
| 350 | goto truncated; | 361 | /* file too small, assume this is an empty .o file */ |
| 351 | 362 | return 0; | |
| 363 | } | ||
| 364 | /* Is this a valid ELF file? */ | ||
| 365 | if ((hdr->e_ident[EI_MAG0] != ELFMAG0) || | ||
| 366 | (hdr->e_ident[EI_MAG1] != ELFMAG1) || | ||
| 367 | (hdr->e_ident[EI_MAG2] != ELFMAG2) || | ||
| 368 | (hdr->e_ident[EI_MAG3] != ELFMAG3)) { | ||
| 369 | /* Not an ELF file - silently ignore it */ | ||
| 370 | return 0; | ||
| 371 | } | ||
| 352 | /* Fix endianness in ELF header */ | 372 | /* Fix endianness in ELF header */ |
| 353 | hdr->e_shoff = TO_NATIVE(hdr->e_shoff); | 373 | hdr->e_shoff = TO_NATIVE(hdr->e_shoff); |
| 354 | hdr->e_shstrndx = TO_NATIVE(hdr->e_shstrndx); | 374 | hdr->e_shstrndx = TO_NATIVE(hdr->e_shstrndx); |
| @@ -371,8 +391,10 @@ static void parse_elf(struct elf_info *info, const char *filename) | |||
| 371 | = (void *)hdr + sechdrs[hdr->e_shstrndx].sh_offset; | 391 | = (void *)hdr + sechdrs[hdr->e_shstrndx].sh_offset; |
| 372 | const char *secname; | 392 | const char *secname; |
| 373 | 393 | ||
| 374 | if (sechdrs[i].sh_offset > info->size) | 394 | if (sechdrs[i].sh_offset > info->size) { |
| 375 | goto truncated; | 395 | fatal("%s is truncated. sechdrs[i].sh_offset=%u > sizeof(*hrd)=%ul\n", filename, (unsigned int)sechdrs[i].sh_offset, sizeof(*hdr)); |
| 396 | return 0; | ||
| 397 | } | ||
| 376 | secname = secstrings + sechdrs[i].sh_name; | 398 | secname = secstrings + sechdrs[i].sh_name; |
| 377 | if (strcmp(secname, ".modinfo") == 0) { | 399 | if (strcmp(secname, ".modinfo") == 0) { |
| 378 | info->modinfo = (void *)hdr + sechdrs[i].sh_offset; | 400 | info->modinfo = (void *)hdr + sechdrs[i].sh_offset; |
| @@ -407,10 +429,7 @@ static void parse_elf(struct elf_info *info, const char *filename) | |||
| 407 | sym->st_value = TO_NATIVE(sym->st_value); | 429 | sym->st_value = TO_NATIVE(sym->st_value); |
| 408 | sym->st_size = TO_NATIVE(sym->st_size); | 430 | sym->st_size = TO_NATIVE(sym->st_size); |
| 409 | } | 431 | } |
| 410 | return; | 432 | return 1; |
| 411 | |||
| 412 | truncated: | ||
| 413 | fatal("%s is truncated.\n", filename); | ||
| 414 | } | 433 | } |
| 415 | 434 | ||
| 416 | static void parse_elf_finish(struct elf_info *info) | 435 | static void parse_elf_finish(struct elf_info *info) |
| @@ -581,9 +600,17 @@ static int strrcmp(const char *s, const char *sub) | |||
| 581 | * the pattern is identified by: | 600 | * the pattern is identified by: |
| 582 | * tosec = .init.text | .exit.text | .init.data | 601 | * tosec = .init.text | .exit.text | .init.data |
| 583 | * fromsec = .data | 602 | * fromsec = .data |
| 584 | * atsym = *driver, *_template, *_sht, *_ops, *_probe, *probe_one | 603 | * atsym = *driver, *_template, *_sht, *_ops, *_probe, *probe_one, *_console |
| 585 | * | 604 | * |
| 586 | * Pattern 3: | 605 | * Pattern 3: |
| 606 | * Whitelist all references from .pci_fixup* section to .init.text | ||
| 607 | * This is part of the PCI init when built-in | ||
| 608 | * | ||
| 609 | * Pattern 4: | ||
| 610 | * Whitelist all refereces from .text.head to .init.data | ||
| 611 | * Whitelist all refereces from .text.head to .init.text | ||
| 612 | * | ||
| 613 | * Pattern 5: | ||
| 587 | * Some symbols belong to init section but still it is ok to reference | 614 | * Some symbols belong to init section but still it is ok to reference |
| 588 | * these from non-init sections as these symbols don't have any memory | 615 | * these from non-init sections as these symbols don't have any memory |
| 589 | * allocated for them and symbol address and value are same. So even | 616 | * allocated for them and symbol address and value are same. So even |
| @@ -591,6 +618,30 @@ static int strrcmp(const char *s, const char *sub) | |||
| 591 | * For ex. symbols marking the init section boundaries. | 618 | * For ex. symbols marking the init section boundaries. |
| 592 | * This pattern is identified by | 619 | * This pattern is identified by |
| 593 | * refsymname = __init_begin, _sinittext, _einittext | 620 | * refsymname = __init_begin, _sinittext, _einittext |
| 621 | * | ||
| 622 | * Pattern 6: | ||
| 623 | * During the early init phase we have references from .init.text to | ||
| 624 | * .text we have an intended section mismatch - do not warn about it. | ||
| 625 | * See kernel_init() in init/main.c | ||
| 626 | * tosec = .init.text | ||
| 627 | * fromsec = .text | ||
| 628 | * atsym = kernel_init | ||
| 629 | * | ||
| 630 | * Pattern 7: | ||
| 631 | * Logos used in drivers/video/logo reside in __initdata but the | ||
| 632 | * funtion that references them are EXPORT_SYMBOL() so cannot be | ||
| 633 | * marker __init. So we whitelist them here. | ||
| 634 | * The pattern is: | ||
| 635 | * tosec = .init.data | ||
| 636 | * fromsec = .text* | ||
| 637 | * refsymname = logo_ | ||
| 638 | * | ||
| 639 | * Pattern 8: | ||
| 640 | * Symbols contained in .paravirtprobe may safely reference .init.text. | ||
| 641 | * The pattern is: | ||
| 642 | * tosec = .init.text | ||
| 643 | * fromsec = .paravirtprobe | ||
| 644 | * | ||
| 594 | **/ | 645 | **/ |
| 595 | static int secref_whitelist(const char *modname, const char *tosec, | 646 | static int secref_whitelist(const char *modname, const char *tosec, |
| 596 | const char *fromsec, const char *atsym, | 647 | const char *fromsec, const char *atsym, |
| @@ -642,25 +693,39 @@ static int secref_whitelist(const char *modname, const char *tosec, | |||
| 642 | if (f1 && f2) | 693 | if (f1 && f2) |
| 643 | return 1; | 694 | return 1; |
| 644 | 695 | ||
| 645 | /* Whitelist all references from .pci_fixup section if vmlinux | 696 | /* Check for pattern 3 */ |
| 646 | * Whitelist all refereces from .text.head to .init.data if vmlinux | 697 | if ((strncmp(fromsec, ".pci_fixup", strlen(".pci_fixup")) == 0) && |
| 647 | * Whitelist all refereces from .text.head to .init.text if vmlinux | 698 | (strcmp(tosec, ".init.text") == 0)) |
| 648 | */ | 699 | return 1; |
| 649 | if (is_vmlinux(modname)) { | 700 | |
| 650 | if ((strcmp(fromsec, ".pci_fixup") == 0) && | 701 | /* Check for pattern 4 */ |
| 651 | (strcmp(tosec, ".init.text") == 0)) | 702 | if ((strcmp(fromsec, ".text.head") == 0) && |
| 703 | ((strcmp(tosec, ".init.data") == 0) || | ||
| 704 | (strcmp(tosec, ".init.text") == 0))) | ||
| 705 | return 1; | ||
| 706 | |||
| 707 | /* Check for pattern 5 */ | ||
| 708 | for (s = pat3refsym; *s; s++) | ||
| 709 | if (strcmp(refsymname, *s) == 0) | ||
| 710 | return 1; | ||
| 711 | |||
| 712 | /* Check for pattern 6 */ | ||
| 713 | if ((strcmp(tosec, ".init.text") == 0) && | ||
| 714 | (strcmp(fromsec, ".text") == 0) && | ||
| 715 | (strcmp(refsymname, "kernel_init") == 0)) | ||
| 652 | return 1; | 716 | return 1; |
| 653 | 717 | ||
| 654 | if ((strcmp(fromsec, ".text.head") == 0) && | 718 | /* Check for pattern 7 */ |
| 655 | ((strcmp(tosec, ".init.data") == 0) || | 719 | if ((strcmp(tosec, ".init.data") == 0) && |
| 656 | (strcmp(tosec, ".init.text") == 0))) | 720 | (strncmp(fromsec, ".text", strlen(".text")) == 0) && |
| 721 | (strncmp(refsymname, "logo_", strlen("logo_")) == 0)) | ||
| 722 | return 1; | ||
| 723 | |||
| 724 | /* Check for pattern 8 */ | ||
| 725 | if ((strcmp(tosec, ".init.text") == 0) && | ||
| 726 | (strcmp(fromsec, ".paravirtprobe") == 0)) | ||
| 657 | return 1; | 727 | return 1; |
| 658 | 728 | ||
| 659 | /* Check for pattern 3 */ | ||
| 660 | for (s = pat3refsym; *s; s++) | ||
| 661 | if (strcmp(refsymname, *s) == 0) | ||
| 662 | return 1; | ||
| 663 | } | ||
| 664 | return 0; | 729 | return 0; |
| 665 | } | 730 | } |
| 666 | 731 | ||
| @@ -1090,7 +1155,8 @@ static void read_symbols(char *modname) | |||
| 1090 | struct elf_info info = { }; | 1155 | struct elf_info info = { }; |
| 1091 | Elf_Sym *sym; | 1156 | Elf_Sym *sym; |
| 1092 | 1157 | ||
| 1093 | parse_elf(&info, modname); | 1158 | if (!parse_elf(&info, modname)) |
| 1159 | return; | ||
| 1094 | 1160 | ||
| 1095 | mod = new_module(modname); | 1161 | mod = new_module(modname); |
| 1096 | 1162 | ||
| @@ -1265,9 +1331,14 @@ static int add_versions(struct buffer *b, struct module *mod) | |||
| 1265 | exp = find_symbol(s->name); | 1331 | exp = find_symbol(s->name); |
| 1266 | if (!exp || exp->module == mod) { | 1332 | if (!exp || exp->module == mod) { |
| 1267 | if (have_vmlinux && !s->weak) { | 1333 | if (have_vmlinux && !s->weak) { |
| 1268 | warn("\"%s\" [%s.ko] undefined!\n", | 1334 | if (warn_unresolved) { |
| 1269 | s->name, mod->name); | 1335 | warn("\"%s\" [%s.ko] undefined!\n", |
| 1270 | err = warn_unresolved ? 0 : 1; | 1336 | s->name, mod->name); |
| 1337 | } else { | ||
| 1338 | merror("\"%s\" [%s.ko] undefined!\n", | ||
| 1339 | s->name, mod->name); | ||
| 1340 | err = 1; | ||
| 1341 | } | ||
| 1271 | } | 1342 | } |
| 1272 | continue; | 1343 | continue; |
| 1273 | } | 1344 | } |
| @@ -1318,6 +1389,7 @@ static void add_depends(struct buffer *b, struct module *mod, | |||
| 1318 | buf_printf(b, "__attribute__((section(\".modinfo\"))) =\n"); | 1389 | buf_printf(b, "__attribute__((section(\".modinfo\"))) =\n"); |
| 1319 | buf_printf(b, "\"depends="); | 1390 | buf_printf(b, "\"depends="); |
| 1320 | for (s = mod->unres; s; s = s->next) { | 1391 | for (s = mod->unres; s; s = s->next) { |
| 1392 | const char *p; | ||
| 1321 | if (!s->module) | 1393 | if (!s->module) |
| 1322 | continue; | 1394 | continue; |
| 1323 | 1395 | ||
| @@ -1325,8 +1397,11 @@ static void add_depends(struct buffer *b, struct module *mod, | |||
| 1325 | continue; | 1397 | continue; |
| 1326 | 1398 | ||
| 1327 | s->module->seen = 1; | 1399 | s->module->seen = 1; |
| 1328 | buf_printf(b, "%s%s", first ? "" : ",", | 1400 | if ((p = strrchr(s->module->name, '/')) != NULL) |
| 1329 | strrchr(s->module->name, '/') + 1); | 1401 | p++; |
| 1402 | else | ||
| 1403 | p = s->module->name; | ||
| 1404 | buf_printf(b, "%s%s", first ? "" : ",", p); | ||
| 1330 | first = 0; | 1405 | first = 0; |
| 1331 | } | 1406 | } |
| 1332 | buf_printf(b, "\";\n"); | 1407 | buf_printf(b, "\";\n"); |
diff --git a/scripts/mod/modpost.h b/scripts/mod/modpost.h index d398c61e55ef..0858caa9c03f 100644 --- a/scripts/mod/modpost.h +++ b/scripts/mod/modpost.h | |||
| @@ -145,3 +145,4 @@ void release_file(void *file, unsigned long size); | |||
| 145 | 145 | ||
| 146 | void fatal(const char *fmt, ...); | 146 | void fatal(const char *fmt, ...); |
| 147 | void warn(const char *fmt, ...); | 147 | void warn(const char *fmt, ...); |
| 148 | void merror(const char *fmt, ...); | ||
diff --git a/scripts/mod/sumversion.c b/scripts/mod/sumversion.c index 8a2875689e4d..6873d5af80d5 100644 --- a/scripts/mod/sumversion.c +++ b/scripts/mod/sumversion.c | |||
| @@ -397,10 +397,9 @@ void get_src_version(const char *modname, char sum[], unsigned sumlen) | |||
| 397 | (int) strlen(basename) - 2, basename); | 397 | (int) strlen(basename) - 2, basename); |
| 398 | 398 | ||
| 399 | file = grab_file(filelist, &len); | 399 | file = grab_file(filelist, &len); |
| 400 | if (!file) { | 400 | if (!file) |
| 401 | warn("could not find versions for %s\n", filelist); | 401 | /* not a module or .mod file missing - ignore */ |
| 402 | return; | 402 | return; |
| 403 | } | ||
| 404 | 403 | ||
| 405 | sources = strchr(file, '\n'); | 404 | sources = strchr(file, '\n'); |
| 406 | if (!sources) { | 405 | if (!sources) { |
diff --git a/usr/Kconfig b/usr/Kconfig index 07727f3c7cea..86cecb59dd07 100644 --- a/usr/Kconfig +++ b/usr/Kconfig | |||
| @@ -17,7 +17,7 @@ config INITRAMFS_SOURCE | |||
| 17 | When multiple directories and files are specified then the | 17 | When multiple directories and files are specified then the |
| 18 | initramfs image will be the aggregate of all of them. | 18 | initramfs image will be the aggregate of all of them. |
| 19 | 19 | ||
| 20 | See <file:Documentation/early-userspace/README for more details. | 20 | See <file:Documentation/early-userspace/README> for more details. |
| 21 | 21 | ||
| 22 | If you are not sure, leave it blank. | 22 | If you are not sure, leave it blank. |
| 23 | 23 | ||
