Commit 2bb732cd authored by Linus Torvalds's avatar Linus Torvalds

Merge branch 'kbuild' of git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild-2.6

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

Fix up trivial conflict in Makefile
parents f50d1d9e c4d5ee13
...@@ -57,6 +57,7 @@ modules.builtin ...@@ -57,6 +57,7 @@ modules.builtin
include/config include/config
include/linux/version.h include/linux/version.h
include/generated include/generated
arch/*/include/generated
# stgit generated dirs # stgit generated dirs
patches-* patches-*
......
...@@ -73,7 +73,7 @@ installmandocs: mandocs ...@@ -73,7 +73,7 @@ installmandocs: mandocs
### ###
#External programs used #External programs used
KERNELDOC = $(srctree)/scripts/kernel-doc KERNELDOC = $(srctree)/scripts/kernel-doc
DOCPROC = $(objtree)/scripts/basic/docproc DOCPROC = $(objtree)/scripts/docproc
XMLTOFLAGS = -m $(srctree)/Documentation/DocBook/stylesheet.xsl XMLTOFLAGS = -m $(srctree)/Documentation/DocBook/stylesheet.xsl
XMLTOFLAGS += --skip-validation XMLTOFLAGS += --skip-validation
......
...@@ -201,3 +201,16 @@ KBUILD_ENABLE_EXTRA_GCC_CHECKS ...@@ -201,3 +201,16 @@ KBUILD_ENABLE_EXTRA_GCC_CHECKS
-------------------------------------------------- --------------------------------------------------
If enabled over the make command line with "W=1", it turns on additional If enabled over the make command line with "W=1", it turns on additional
gcc -W... options for more extensive build-time checking. gcc -W... options for more extensive build-time checking.
KBUILD_BUILD_TIMESTAMP
--------------------------------------------------
Setting this to a date string overrides the timestamp used in the
UTS_VERSION definition (uname -v in the running kernel). The value has to
be a string that can be passed to date -d. The default value
is the output of the date command at one point during build.
KBUILD_BUILD_USER, KBUILD_BUILD_HOST
--------------------------------------------------
These two variables allow to override the user@host string displayed during
boot and in /proc/version. The default value is the output of the commands
whoami and host, respectively.
...@@ -40,11 +40,13 @@ This document describes the Linux kernel Makefiles. ...@@ -40,11 +40,13 @@ This document describes the Linux kernel Makefiles.
--- 6.6 Commands useful for building a boot image --- 6.6 Commands useful for building a boot image
--- 6.7 Custom kbuild commands --- 6.7 Custom kbuild commands
--- 6.8 Preprocessing linker scripts --- 6.8 Preprocessing linker scripts
--- 6.9 Generic header files
=== 7 Kbuild syntax for exported headers === 7 Kbuild syntax for exported headers
--- 7.1 header-y --- 7.1 header-y
--- 7.2 objhdr-y --- 7.2 objhdr-y
--- 7.3 destination-y --- 7.3 destination-y
--- 7.4 generic-y
=== 8 Kbuild Variables === 8 Kbuild Variables
=== 9 Makefile language === 9 Makefile language
...@@ -499,6 +501,18 @@ more details, with real examples. ...@@ -499,6 +501,18 @@ more details, with real examples.
gcc >= 3.00. For gcc < 3.00, -malign-functions=4 is used. gcc >= 3.00. For gcc < 3.00, -malign-functions=4 is used.
Note: cc-option-align uses KBUILD_CFLAGS for $(CC) options Note: cc-option-align uses KBUILD_CFLAGS for $(CC) options
cc-disable-warning
cc-disable-warning checks if gcc supports a given warning and returns
the commandline switch to disable it. This special function is needed,
because gcc 4.4 and later accept any unknown -Wno-* option and only
warn about it if there is another warning in the source file.
Example:
KBUILD_CFLAGS += $(call cc-disable-warning, unused-but-set-variable)
In the above example, -Wno-unused-but-set-variable will be added to
KBUILD_CFLAGS only if gcc really accepts it.
cc-version cc-version
cc-version returns a numerical version of the $(CC) compiler version. cc-version returns a numerical version of the $(CC) compiler version.
The format is <major><minor> where both are two digits. So for example The format is <major><minor> where both are two digits. So for example
...@@ -955,6 +969,11 @@ When kbuild executes, the following steps are followed (roughly): ...@@ -955,6 +969,11 @@ When kbuild executes, the following steps are followed (roughly):
used when linking modules. This is often a linker script. used when linking modules. This is often a linker script.
From commandline LDFLAGS_MODULE shall be used (see kbuild.txt). From commandline LDFLAGS_MODULE shall be used (see kbuild.txt).
KBUILD_ARFLAGS Options for $(AR) when creating archives
$(KBUILD_ARFLAGS) set by the top level Makefile to "D" (deterministic
mode) if this option is supported by $(AR).
--- 6.2 Add prerequisites to archprepare: --- 6.2 Add prerequisites to archprepare:
The archprepare: rule is used to list prerequisites that need to be The archprepare: rule is used to list prerequisites that need to be
...@@ -1209,6 +1228,14 @@ When kbuild executes, the following steps are followed (roughly): ...@@ -1209,6 +1228,14 @@ When kbuild executes, the following steps are followed (roughly):
The kbuild infrastructure for *lds file are used in several The kbuild infrastructure for *lds file are used in several
architecture-specific files. architecture-specific files.
--- 6.9 Generic header files
The directory include/asm-generic contains the header files
that may be shared between individual architectures.
The recommended approach how to use a generic header file is
to list the file in the Kbuild file.
See "7.4 generic-y" for further info on syntax etc.
=== 7 Kbuild syntax for exported headers === 7 Kbuild syntax for exported headers
The kernel include a set of headers that is exported to userspace. The kernel include a set of headers that is exported to userspace.
...@@ -1265,6 +1292,32 @@ See subsequent chapter for the syntax of the Kbuild file. ...@@ -1265,6 +1292,32 @@ See subsequent chapter for the syntax of the Kbuild file.
In the example above all exported headers in the Kbuild file In the example above all exported headers in the Kbuild file
will be located in the directory "include/linux" when exported. will be located in the directory "include/linux" when exported.
--- 7.4 generic-y
If an architecture uses a verbatim copy of a header from
include/asm-generic then this is listed in the file
arch/$(ARCH)/include/asm/Kbuild like this:
Example:
#arch/x86/include/asm/Kbuild
generic-y += termios.h
generic-y += rtc.h
During the prepare phase of the build a wrapper include
file is generated in the directory:
arch/$(ARCH)/include/generated/asm
When a header is exported where the architecture uses
the generic header a similar wrapper is generated as part
of the set of exported headers in the directory:
usr/include/asm
The generated wrapper will in both cases look like the following:
Example: termios.h
#include <asm-generic/termios.h>
=== 8 Kbuild Variables === 8 Kbuild Variables
......
...@@ -103,7 +103,7 @@ ifeq ("$(origin O)", "command line") ...@@ -103,7 +103,7 @@ ifeq ("$(origin O)", "command line")
endif endif
ifeq ("$(origin W)", "command line") ifeq ("$(origin W)", "command line")
export KBUILD_ENABLE_EXTRA_GCC_CHECKS := 1 export KBUILD_ENABLE_EXTRA_GCC_CHECKS := $(W)
endif endif
# That's our default target when none is given on the command line # That's our default target when none is given on the command line
...@@ -349,7 +349,8 @@ CFLAGS_GCOV = -fprofile-arcs -ftest-coverage ...@@ -349,7 +349,8 @@ CFLAGS_GCOV = -fprofile-arcs -ftest-coverage
# Use LINUXINCLUDE when you must reference the include/ directory. # Use LINUXINCLUDE when you must reference the include/ directory.
# Needed to be compatible with the O= option # Needed to be compatible with the O= option
LINUXINCLUDE := -I$(srctree)/arch/$(hdr-arch)/include -Iinclude \ LINUXINCLUDE := -I$(srctree)/arch/$(hdr-arch)/include \
-Iarch/$(hdr-arch)/include/generated -Iinclude \
$(if $(KBUILD_SRC), -I$(srctree)/include) \ $(if $(KBUILD_SRC), -I$(srctree)/include) \
-include include/generated/autoconf.h -include include/generated/autoconf.h
...@@ -382,6 +383,7 @@ export KBUILD_CFLAGS CFLAGS_KERNEL CFLAGS_MODULE CFLAGS_GCOV ...@@ -382,6 +383,7 @@ export KBUILD_CFLAGS CFLAGS_KERNEL CFLAGS_MODULE CFLAGS_GCOV
export KBUILD_AFLAGS AFLAGS_KERNEL AFLAGS_MODULE export KBUILD_AFLAGS AFLAGS_KERNEL AFLAGS_MODULE
export KBUILD_AFLAGS_MODULE KBUILD_CFLAGS_MODULE KBUILD_LDFLAGS_MODULE export KBUILD_AFLAGS_MODULE KBUILD_CFLAGS_MODULE KBUILD_LDFLAGS_MODULE
export KBUILD_AFLAGS_KERNEL KBUILD_CFLAGS_KERNEL export KBUILD_AFLAGS_KERNEL KBUILD_CFLAGS_KERNEL
export KBUILD_ARFLAGS
# When compiling out-of-tree modules, put MODVERDIR in the module # When compiling out-of-tree modules, put MODVERDIR in the module
# tree rather than in the kernel tree. The kernel tree might # tree rather than in the kernel tree. The kernel tree might
...@@ -416,6 +418,12 @@ ifneq ($(KBUILD_SRC),) ...@@ -416,6 +418,12 @@ ifneq ($(KBUILD_SRC),)
$(srctree) $(objtree) $(VERSION) $(PATCHLEVEL) $(srctree) $(objtree) $(VERSION) $(PATCHLEVEL)
endif endif
# Support for using generic headers in asm-generic
PHONY += asm-generic
asm-generic:
$(Q)$(MAKE) -f $(srctree)/scripts/Makefile.asm-generic \
obj=arch/$(SRCARCH)/include/generated/asm
# To make sure we do not include .config for any of the *config targets # To make sure we do not include .config for any of the *config targets
# catch them early, and hand them over to scripts/kconfig/Makefile # catch them early, and hand them over to scripts/kconfig/Makefile
# It is allowed to specify more targets when calling make, including # It is allowed to specify more targets when calling make, including
...@@ -559,6 +567,10 @@ ifndef CONFIG_CC_STACKPROTECTOR ...@@ -559,6 +567,10 @@ ifndef CONFIG_CC_STACKPROTECTOR
KBUILD_CFLAGS += $(call cc-option, -fno-stack-protector) KBUILD_CFLAGS += $(call cc-option, -fno-stack-protector)
endif endif
# This warning generated too much noise in a regular build.
# Use make W=1 to enable this warning (see scripts/Makefile.build)
KBUILD_CFLAGS += $(call cc-disable-warning, unused-but-set-variable)
ifdef CONFIG_FRAME_POINTER ifdef CONFIG_FRAME_POINTER
KBUILD_CFLAGS += -fno-omit-frame-pointer -fno-optimize-sibling-calls KBUILD_CFLAGS += -fno-omit-frame-pointer -fno-optimize-sibling-calls
else else
...@@ -604,7 +616,7 @@ CHECKFLAGS += $(NOSTDINC_FLAGS) ...@@ -604,7 +616,7 @@ CHECKFLAGS += $(NOSTDINC_FLAGS)
KBUILD_CFLAGS += $(call cc-option,-Wdeclaration-after-statement,) KBUILD_CFLAGS += $(call cc-option,-Wdeclaration-after-statement,)
# disable pointer signed / unsigned warnings in gcc 4.0 # disable pointer signed / unsigned warnings in gcc 4.0
KBUILD_CFLAGS += $(call cc-option,-Wno-pointer-sign,) KBUILD_CFLAGS += $(call cc-disable-warning, pointer-sign)
# disable invalid "can't wrap" optimizations for signed / pointers # disable invalid "can't wrap" optimizations for signed / pointers
KBUILD_CFLAGS += $(call cc-option,-fno-strict-overflow) KBUILD_CFLAGS += $(call cc-option,-fno-strict-overflow)
...@@ -612,6 +624,9 @@ KBUILD_CFLAGS += $(call cc-option,-fno-strict-overflow) ...@@ -612,6 +624,9 @@ KBUILD_CFLAGS += $(call cc-option,-fno-strict-overflow)
# conserve stack if available # conserve stack if available
KBUILD_CFLAGS += $(call cc-option,-fconserve-stack) KBUILD_CFLAGS += $(call cc-option,-fconserve-stack)
# use the deterministic mode of AR if available
KBUILD_ARFLAGS := $(call ar-option,D)
# check for 'asm goto' # check for 'asm goto'
ifeq ($(shell $(CONFIG_SHELL) $(srctree)/scripts/gcc-goto.sh $(CC)), y) ifeq ($(shell $(CONFIG_SHELL) $(srctree)/scripts/gcc-goto.sh $(CC)), y)
KBUILD_CFLAGS += -DCC_HAVE_ASM_GOTO KBUILD_CFLAGS += -DCC_HAVE_ASM_GOTO
...@@ -797,15 +812,17 @@ ifdef CONFIG_KALLSYMS ...@@ -797,15 +812,17 @@ ifdef CONFIG_KALLSYMS
# o The correct .tmp_kallsyms2.o is linked into the final vmlinux. # o The correct .tmp_kallsyms2.o is linked into the final vmlinux.
# o Verify that the System.map from vmlinux matches the map from # o Verify that the System.map from vmlinux matches the map from
# .tmp_vmlinux2, just in case we did not generate kallsyms correctly. # .tmp_vmlinux2, just in case we did not generate kallsyms correctly.
# o If CONFIG_KALLSYMS_EXTRA_PASS is set, do an extra pass using # o If 'make KALLSYMS_EXTRA_PASS=1" was used, do an extra pass using
# .tmp_vmlinux3 and .tmp_kallsyms3.o. This is only meant as a # .tmp_vmlinux3 and .tmp_kallsyms3.o. This is only meant as a
# temporary bypass to allow the kernel to be built while the # temporary bypass to allow the kernel to be built while the
# maintainers work out what went wrong with kallsyms. # maintainers work out what went wrong with kallsyms.
ifdef CONFIG_KALLSYMS_EXTRA_PASS
last_kallsyms := 3
else
last_kallsyms := 2 last_kallsyms := 2
ifdef KALLSYMS_EXTRA_PASS
ifneq ($(KALLSYMS_EXTRA_PASS),0)
last_kallsyms := 3
endif
endif endif
kallsyms.o := .tmp_kallsyms$(last_kallsyms).o kallsyms.o := .tmp_kallsyms$(last_kallsyms).o
...@@ -816,7 +833,8 @@ define verify_kallsyms ...@@ -816,7 +833,8 @@ define verify_kallsyms
$(cmd_sysmap) .tmp_vmlinux$(last_kallsyms) .tmp_System.map $(cmd_sysmap) .tmp_vmlinux$(last_kallsyms) .tmp_System.map
$(Q)cmp -s System.map .tmp_System.map || \ $(Q)cmp -s System.map .tmp_System.map || \
(echo Inconsistent kallsyms data; \ (echo Inconsistent kallsyms data; \
echo Try setting CONFIG_KALLSYMS_EXTRA_PASS; \ echo This is a bug - please report about it; \
echo Try "make KALLSYMS_EXTRA_PASS=1" as a workaround; \
rm .tmp_kallsyms* ; /bin/false ) rm .tmp_kallsyms* ; /bin/false )
endef endef
...@@ -947,7 +965,7 @@ ifneq ($(KBUILD_SRC),) ...@@ -947,7 +965,7 @@ ifneq ($(KBUILD_SRC),)
endif endif
# prepare2 creates a makefile if using a separate output directory # prepare2 creates a makefile if using a separate output directory
prepare2: prepare3 outputmakefile prepare2: prepare3 outputmakefile asm-generic
prepare1: prepare2 include/linux/version.h include/generated/utsrelease.h \ prepare1: prepare2 include/linux/version.h include/generated/utsrelease.h \
include/config/auto.conf include/config/auto.conf
...@@ -1021,7 +1039,7 @@ hdr-inst := -rR -f $(srctree)/scripts/Makefile.headersinst obj ...@@ -1021,7 +1039,7 @@ hdr-inst := -rR -f $(srctree)/scripts/Makefile.headersinst obj
hdr-dst = $(if $(KBUILD_HEADERS), dst=include/asm-$(hdr-arch), dst=include/asm) hdr-dst = $(if $(KBUILD_HEADERS), dst=include/asm-$(hdr-arch), dst=include/asm)
PHONY += __headers PHONY += __headers
__headers: include/linux/version.h scripts_basic FORCE __headers: include/linux/version.h scripts_basic asm-generic FORCE
$(Q)$(MAKE) $(build)=scripts build_unifdef $(Q)$(MAKE) $(build)=scripts build_unifdef
PHONY += headers_install_all PHONY += headers_install_all
...@@ -1136,7 +1154,8 @@ CLEAN_FILES += vmlinux System.map \ ...@@ -1136,7 +1154,8 @@ CLEAN_FILES += vmlinux System.map \
.tmp_kallsyms* .tmp_version .tmp_vmlinux* .tmp_System.map .tmp_kallsyms* .tmp_version .tmp_vmlinux* .tmp_System.map
# Directories & files removed with 'make mrproper' # Directories & files removed with 'make mrproper'
MRPROPER_DIRS += include/config usr/include include/generated MRPROPER_DIRS += include/config usr/include include/generated \
arch/*/include/generated
MRPROPER_FILES += .config .config.old .version .old_version \ MRPROPER_FILES += .config .config.old .version .old_version \
include/linux/version.h \ include/linux/version.h \
Module.symvers tags TAGS cscope* GPATH GTAGS GRTAGS GSYMS Module.symvers tags TAGS cscope* GPATH GTAGS GRTAGS GSYMS
...@@ -1267,7 +1286,11 @@ help: ...@@ -1267,7 +1286,11 @@ help:
@echo ' make O=dir [targets] Locate all output files in "dir", including .config' @echo ' make O=dir [targets] Locate all output files in "dir", including .config'
@echo ' make C=1 [targets] Check all c source with $$CHECK (sparse by default)' @echo ' make C=1 [targets] Check all c source with $$CHECK (sparse by default)'
@echo ' make C=2 [targets] Force check of all c source with $$CHECK' @echo ' make C=2 [targets] Force check of all c source with $$CHECK'
@echo ' make W=1 [targets] Enable extra gcc checks' @echo ' make W=n [targets] Enable extra gcc checks, n=1,2,3 where'
@echo ' 1: warnings which may be relevant and do not occur too often'
@echo ' 2: warnings which occur quite often but may still be relevant'
@echo ' 3: more obscure warnings, can most likely be ignored'
@echo ' Multiple levels can be combined with W=12 or W=123'
@echo ' make RECORDMCOUNT_WARN=1 [targets] Warn about ignored mcount sections' @echo ' make RECORDMCOUNT_WARN=1 [targets] Warn about ignored mcount sections'
@echo '' @echo ''
@echo 'Execute "make" or "make all" to build all targets marked with [*] ' @echo 'Execute "make" or "make all" to build all targets marked with [*] '
...@@ -1291,6 +1314,7 @@ $(help-board-dirs): help-%: ...@@ -1291,6 +1314,7 @@ $(help-board-dirs): help-%:
# Documentation targets # Documentation targets
# --------------------------------------------------------------------------- # ---------------------------------------------------------------------------
%docs: scripts_basic FORCE %docs: scripts_basic FORCE
$(Q)$(MAKE) $(build)=scripts build_docproc
$(Q)$(MAKE) $(build)=Documentation/DocBook $@ $(Q)$(MAKE) $(build)=Documentation/DocBook $@
else # KBUILD_EXTMOD else # KBUILD_EXTMOD
...@@ -1375,7 +1399,7 @@ endif # KBUILD_EXTMOD ...@@ -1375,7 +1399,7 @@ endif # KBUILD_EXTMOD
clean: $(clean-dirs) clean: $(clean-dirs)
$(call cmd,rmdirs) $(call cmd,rmdirs)
$(call cmd,rmfiles) $(call cmd,rmfiles)
@find $(or $(KBUILD_EXTMOD), .) $(RCS_FIND_IGNORE) \ @find $(if $(KBUILD_EXTMOD), $(KBUILD_EXTMOD), .) $(RCS_FIND_IGNORE) \
\( -name '*.[oas]' -o -name '*.ko' -o -name '.*.cmd' \ \( -name '*.[oas]' -o -name '*.ko' -o -name '.*.cmd' \
-o -name '.*.d' -o -name '.*.tmp' -o -name '*.mod.c' \ -o -name '.*.d' -o -name '.*.tmp' -o -name '*.mod.c' \
-o -name '*.symtypes' -o -name 'modules.order' \ -o -name '*.symtypes' -o -name 'modules.order' \
......
...@@ -959,24 +959,18 @@ config KALLSYMS_ALL ...@@ -959,24 +959,18 @@ config KALLSYMS_ALL
bool "Include all symbols in kallsyms" bool "Include all symbols in kallsyms"
depends on DEBUG_KERNEL && KALLSYMS depends on DEBUG_KERNEL && KALLSYMS
help help
Normally kallsyms only contains the symbols of functions, for nicer Normally kallsyms only contains the symbols of functions for nicer
OOPS messages. Some debuggers can use kallsyms for other OOPS messages and backtraces (i.e., symbols from the text and inittext
symbols too: say Y here to include all symbols, if you need them sections). This is sufficient for most cases. And only in very rare
and you don't care about adding 300k to the size of your kernel. cases (e.g., when a debugger is used) all symbols are required (e.g.,
names of variables from the data sections, etc).
Say N.
This option makes sure that all symbols are loaded into the kernel
config KALLSYMS_EXTRA_PASS image (i.e., symbols from all sections) in cost of increased kernel
bool "Do an extra kallsyms pass" size (depending on the kernel configuration, it may be 300KiB or
depends on KALLSYMS something like this).
help
If kallsyms is not working correctly, the build will fail with Say N unless you really need all symbols.
inconsistent kallsyms data. If that occurs, log a bug report and
turn on KALLSYMS_EXTRA_PASS which should result in a stable build.
Always say N here unless you find a bug in kallsyms, which must be
reported. KALLSYMS_EXTRA_PASS is only a temporary workaround while
you wait for kallsyms to be fixed.
config HOTPLUG config HOTPLUG
bool "Support for hot-pluggable devices" if EXPERT bool "Support for hot-pluggable devices" if EXPERT
......
...@@ -8,3 +8,4 @@ bin2c ...@@ -8,3 +8,4 @@ bin2c
unifdef unifdef
ihex2fw ihex2fw
recordmcount recordmcount
docproc
...@@ -118,6 +118,11 @@ cc-option-yn = $(call try-run,\ ...@@ -118,6 +118,11 @@ cc-option-yn = $(call try-run,\
cc-option-align = $(subst -functions=0,,\ cc-option-align = $(subst -functions=0,,\
$(call cc-option,-falign-functions=0,-malign-functions=0)) $(call cc-option,-falign-functions=0,-malign-functions=0))
# cc-disable-warning
# Usage: cflags-y += $(call cc-disable-warning,unused-but-set-variable)
cc-disable-warning = $(call try-run,\
$(CC) $(KBUILD_CPPFLAGS) $(KBUILD_CFLAGS) -W$(strip $(1)) -c -xc /dev/null -o "$$TMP",-Wno-$(strip $(1)))
# cc-version # cc-version
# Usage gcc-ver := $(call cc-version) # Usage gcc-ver := $(call cc-version)
cc-version = $(shell $(CONFIG_SHELL) $(srctree)/scripts/gcc-version.sh $(CC)) cc-version = $(shell $(CONFIG_SHELL) $(srctree)/scripts/gcc-version.sh $(CC))
...@@ -141,6 +146,11 @@ cc-ldoption = $(call try-run,\ ...@@ -141,6 +146,11 @@ cc-ldoption = $(call try-run,\
ld-option = $(call try-run,\ ld-option = $(call try-run,\
$(CC) /dev/null -c -o "$$TMPO" ; $(LD) $(1) "$$TMPO" -o "$$TMP",$(1),$(2)) $(CC) /dev/null -c -o "$$TMPO" ; $(LD) $(1) "$$TMPO" -o "$$TMP",$(1),$(2))
# ar-option
# Usage: KBUILD_ARFLAGS := $(call ar-option,D)
# Important: no spaces around options
ar-option = $(call try-run, $(AR) rc$(1) "$$TMP",$(1),$(2))
###### ######
### ###
...@@ -187,6 +197,8 @@ ifneq ($(KBUILD_NOCMDDEP),1) ...@@ -187,6 +197,8 @@ ifneq ($(KBUILD_NOCMDDEP),1)
# User may override this check using make KBUILD_NOCMDDEP=1 # User may override this check using make KBUILD_NOCMDDEP=1
arg-check = $(strip $(filter-out $(cmd_$(1)), $(cmd_$@)) \ arg-check = $(strip $(filter-out $(cmd_$(1)), $(cmd_$@)) \
$(filter-out $(cmd_$@), $(cmd_$(1))) ) $(filter-out $(cmd_$@), $(cmd_$(1))) )
else
arg-check = $(if $(strip $(cmd_$@)),,1)
endif endif
# >'< substitution is for echo to work, # >'< substitution is for echo to work,
......
...@@ -6,6 +6,7 @@ ...@@ -6,6 +6,7 @@
# pnmttologo: Convert pnm files to logo files # pnmttologo: Convert pnm files to logo files
# conmakehash: Create chartable # conmakehash: Create chartable
# conmakehash: Create arrays for initializing the kernel console tables # conmakehash: Create arrays for initializing the kernel console tables
# docproc: Used in Documentation/DocBook
hostprogs-$(CONFIG_KALLSYMS) += kallsyms hostprogs-$(CONFIG_KALLSYMS) += kallsyms
hostprogs-$(CONFIG_LOGO) += pnmtologo hostprogs-$(CONFIG_LOGO) += pnmtologo
...@@ -16,12 +17,14 @@ hostprogs-$(BUILD_C_RECORDMCOUNT) += recordmcount ...@@ -16,12 +17,14 @@ hostprogs-$(BUILD_C_RECORDMCOUNT) += recordmcount
always := $(hostprogs-y) $(hostprogs-m) always := $(hostprogs-y) $(hostprogs-m)
# The following hostprogs-y programs are only build on demand # The following hostprogs-y programs are only build on demand
hostprogs-y += unifdef hostprogs-y += unifdef docproc
# This target is used internally to avoid "is up to date" messages # These targets are used internally to avoid "is up to date" messages
PHONY += build_unifdef PHONY += build_unifdef
build_unifdef: scripts/unifdef FORCE build_unifdef: scripts/unifdef FORCE
@: @:
build_docproc: scripts/docproc FORCE
@:
subdir-$(CONFIG_MODVERSIONS) += genksyms subdir-$(CONFIG_MODVERSIONS) += genksyms
subdir-y += mod subdir-y += mod
......
# include/asm-generic contains a lot of files that are used
# verbatim by several architectures.
#
# This Makefile reads the file arch/$(SRCARCH)/include/asm/Kbuild
# and for each file listed in this file with generic-y creates
# a small wrapper file in $(obj) (arch/$(SRCARCH)/include/generated/asm)
kbuild-file := $(srctree)/arch/$(SRCARCH)/include/asm/Kbuild
-include $(kbuild-file)
include scripts/Kbuild.include
# Create output directory if not already present
_dummy := $(shell [ -d $(obj) ] || mkdir -p $(obj))
quiet_cmd_wrap = WRAP $@
cmd_wrap = echo "\#include <asm-generic/$*.h>" >$@
all: $(patsubst %, $(obj)/%, $(generic-y))
$(obj)/%.h:
$(call cmd,wrap)
...@@ -51,36 +51,52 @@ ifeq ($(KBUILD_NOPEDANTIC),) ...@@ -51,36 +51,52 @@ ifeq ($(KBUILD_NOPEDANTIC),)
endif endif
# #
# make W=1 settings # make W=... settings
# #
# $(call cc-option... ) handles gcc -W.. options which # W=1 - warnings that may be relevant and does not occur too often
# W=2 - warnings that occur quite often but may still be relevant
# W=3 - the more obscure warnings, can most likely be ignored
#
# $(call cc-option, -W...) handles gcc -W.. options which
# are not supported by all versions of the compiler # are not supported by all versions of the compiler
ifdef KBUILD_ENABLE_EXTRA_GCC_CHECKS ifdef KBUILD_ENABLE_EXTRA_GCC_CHECKS
KBUILD_EXTRA_WARNINGS := -Wextra warning- := $(empty)
KBUILD_EXTRA_WARNINGS += -Wunused -Wno-unused-parameter
KBUILD_EXTRA_WARNINGS += -Waggregate-return warning-1 := -Wextra -Wunused -Wno-unused-parameter
KBUILD_EXTRA_WARNINGS += -Wbad-function-cast warning-1 += -Wmissing-declarations
KBUILD_EXTRA_WARNINGS += -Wcast-qual warning-1 += -Wmissing-format-attribute
KBUILD_EXTRA_WARNINGS += -Wcast-align warning-1 += -Wmissing-prototypes
KBUILD_EXTRA_WARNINGS += -Wconversion warning-1 += -Wold-style-definition
KBUILD_EXTRA_WARNINGS += -Wdisabled-optimization warning-1 += $(call cc-option, -Wmissing-include-dirs)
KBUILD_EXTRA_WARNINGS += -Wlogical-op warning-1 += $(call cc-option, -Wunused-but-set-variable)
KBUILD_EXTRA_WARNINGS += -Wmissing-declarations
KBUILD_EXTRA_WARNINGS += -Wmissing-format-attribute warning-2 := -Waggregate-return
KBUILD_EXTRA_WARNINGS += $(call cc-option, -Wmissing-include-dirs,) warning-2 += -Wcast-align
KBUILD_EXTRA_WARNINGS += -Wmissing-prototypes warning-2 += -Wdisabled-optimization
KBUILD_EXTRA_WARNINGS += -Wnested-externs warning-2 += -Wnested-externs
KBUILD_EXTRA_WARNINGS += -Wold-style-definition warning-2 += -Wshadow
KBUILD_EXTRA_WARNINGS += $(call cc-option, -Woverlength-strings,) warning-2 += $(call cc-option, -Wlogical-op)
KBUILD_EXTRA_WARNINGS += -Wpacked
KBUILD_EXTRA_WARNINGS += -Wpacked-bitfield-compat warning-3 := -Wbad-function-cast
KBUILD_EXTRA_WARNINGS += -Wpadded warning-3 += -Wcast-qual
KBUILD_EXTRA_WARNINGS += -Wpointer-arith warning-3 += -Wconversion
KBUILD_EXTRA_WARNINGS += -Wredundant-decls warning-3 += -Wpacked
KBUILD_EXTRA_WARNINGS += -Wshadow warning-3 += -Wpadded
KBUILD_EXTRA_WARNINGS += -Wswitch-default warning-3 += -Wpointer-arith
KBUILD_EXTRA_WARNINGS += $(call cc-option, -Wvla,) warning-3 += -Wredundant-decls
KBUILD_CFLAGS += $(KBUILD_EXTRA_WARNINGS) warning-3 += -Wswitch-default
warning-3 += $(call cc-option, -Wpacked-bitfield-compat)
warning-3 += $(call cc-option, -Wvla)
warning := $(warning-$(findstring 1, $(KBUILD_ENABLE_EXTRA_GCC_CHECKS)))
warning += $(warning-$(findstring 2, $(KBUILD_ENABLE_EXTRA_GCC_CHECKS)))
warning += $(warning-$(findstring 3, $(KBUILD_ENABLE_EXTRA_GCC_CHECKS)))
ifeq ("$(strip $(warning))","")
$(error W=$(KBUILD_ENABLE_EXTRA_GCC_CHECKS) is unknown)
endif
KBUILD_CFLAGS += $(warning)
endif endif
include scripts/Makefile.lib include scripts/Makefile.lib
...@@ -351,7 +367,7 @@ quiet_cmd_link_o_target = LD $@ ...@@ -351,7 +367,7 @@ quiet_cmd_link_o_target = LD $@
cmd_link_o_target = $(if $(strip $(obj-y)),\ cmd_link_o_target = $(if $(strip $(obj-y)),\
$(LD) $(ld_flags) -r -o $@ $(filter $(obj-y), $^) \ $(LD) $(ld_flags) -r -o $@ $(filter $(obj-y), $^) \
$(cmd_secanalysis),\ $(cmd_secanalysis),\
rm -f $@; $(AR) rcs $@) rm -f $@; $(AR) rcs$(KBUILD_ARFLAGS) $@)
$(builtin-target): $(obj-y) FORCE $(builtin-target): $(obj-y) FORCE
$(call if_changed,link_o_target) $(call if_changed,link_o_target)
...@@ -377,7 +393,7 @@ $(modorder-target): $(subdir-ym) FORCE ...@@ -377,7 +393,7 @@ $(modorder-target): $(subdir-ym) FORCE
# #
ifdef lib-target ifdef lib-target
quiet_cmd_link_l_target = AR $@ quiet_cmd_link_l_target = AR $@
cmd_link_l_target = rm -f $@; $(AR) rcs $@ $(lib-y) cmd_link_l_target = rm -f $@; $(AR) rcs$(KBUILD_ARFLAGS) $@ $(lib-y)
$(lib-target): $(lib-y) FORCE $(lib-target): $(lib-y) FORCE
$(call if_changed,link_l_target) $(call if_changed,link_l_target)
......
...@@ -27,8 +27,13 @@ header-y := $(filter-out %/, $(header-y)) ...@@ -27,8 +27,13 @@ header-y := $(filter-out %/, $(header-y))
install-file := $(install)/.install install-file := $(install)/.install
check-file := $(install)/.check check-file := $(install)/.check
# generic-y list all files an architecture uses from asm-generic
# Use this to build a list of headers which require a wrapper
wrapper-files := $(filter $(header-y), $(generic-y))
# all headers files for this dir # all headers files for this dir
all-files := $(header-y) $(objhdr-y) header-y := $(filter-out $(generic-y), $(header-y))
all-files := $(header-y) $(objhdr-y) $(wrapper-files)
input-files := $(addprefix $(srctree)/$(obj)/,$(header-y)) \ input-files := $(addprefix $(srctree)/$(obj)/,$(header-y)) \
$(addprefix $(objtree)/$(obj)/,$(objhdr-y)) $(addprefix $(objtree)/$(obj)/,$(objhdr-y))
output-files := $(addprefix $(install)/, $(all-files)) output-files := $(addprefix $(install)/, $(all-files))
...@@ -47,6 +52,9 @@ quiet_cmd_install = INSTALL $(printdir) ($(words $(all-files))\ ...@@ -47,6 +52,9 @@ quiet_cmd_install = INSTALL $(printdir) ($(words $(all-files))\
cmd_install = \ cmd_install = \
$(PERL) $< $(srctree)/$(obj) $(install) $(SRCARCH) $(header-y); \ $(PERL) $< $(srctree)/$(obj) $(install) $(SRCARCH) $(header-y); \
$(PERL) $< $(objtree)/$(obj) $(install) $(SRCARCH) $(objhdr-y); \ $(PERL) $< $(objtree)/$(obj) $(install) $(SRCARCH) $(objhdr-y); \
for F in $(wrapper-files); do \
echo "\#include <asm-generic/$$F>" > $(install)/$$F; \
done; \
touch $@ touch $@
quiet_cmd_remove = REMOVE $(unwanted) quiet_cmd_remove = REMOVE $(unwanted)
......
...@@ -197,7 +197,7 @@ cmd_objcopy = $(OBJCOPY) $(OBJCOPYFLAGS) $(OBJCOPYFLAGS_$(@F)) $< $@ ...@@ -197,7 +197,7 @@ cmd_objcopy = $(OBJCOPY) $(OBJCOPYFLAGS) $(OBJCOPYFLAGS_$(@F)) $< $@
# --------------------------------------------------------------------------- # ---------------------------------------------------------------------------
quiet_cmd_gzip = GZIP $@ quiet_cmd_gzip = GZIP $@
cmd_gzip = (cat $(filter-out FORCE,$^) | gzip -f -9 > $@) || \ cmd_gzip = (cat $(filter-out FORCE,$^) | gzip -n -f -9 > $@) || \
(rm -f $@ ; false) (rm -f $@ ; false)
# DTC # DTC
......
...@@ -7,9 +7,8 @@ ...@@ -7,9 +7,8 @@
# .config is included by main Makefile. # .config is included by main Makefile.
# --------------------------------------------------------------------------- # ---------------------------------------------------------------------------
# fixdep: Used to generate dependency information during build process # fixdep: Used to generate dependency information during build process
# docproc: Used in Documentation/DocBook
hostprogs-y := fixdep docproc hostprogs-y := fixdep
always := $(hostprogs-y) always := $(hostprogs-y)
# fixdep is needed to compile other host programs # fixdep is needed to compile other host programs
......
#!/bin/bash #!/bin/sh
# Copyright (C) Martin Schlemmer <azarah@nosferatu.za.org> # Copyright (C) Martin Schlemmer <azarah@nosferatu.za.org>
# Copyright (C) 2006 Sam Ravnborg <sam@ravnborg.org> # Copyright (C) 2006 Sam Ravnborg <sam@ravnborg.org>
# #
...@@ -105,9 +105,9 @@ list_parse() { ...@@ -105,9 +105,9 @@ list_parse() {
# for links, devices etc the format differs. See gen_init_cpio for details # for links, devices etc the format differs. See gen_init_cpio for details
parse() { parse() {
local location="$1" local location="$1"
local name="${location/${srcdir}//}" local name="/${location#${srcdir}}"
# change '//' into '/' # change '//' into '/'
name="${name//\/\///}" name=$(echo "$name" | sed -e 's://*:/:g')
local mode="$2" local mode="$2"
local uid="$3" local uid="$3"
local gid="$4" local gid="$4"
...@@ -117,8 +117,8 @@ parse() { ...@@ -117,8 +117,8 @@ parse() {
[ "$root_gid" = "squash" ] && gid=0 || [ "$gid" -eq "$root_gid" ] && gid=0 [ "$root_gid" = "squash" ] && gid=0 || [ "$gid" -eq "$root_gid" ] && gid=0
local str="${mode} ${uid} ${gid}" local str="${mode} ${uid} ${gid}"
[ "${ftype}" == "invalid" ] && return 0 [ "${ftype}" = "invalid" ] && return 0
[ "${location}" == "${srcdir}" ] && return 0 [ "${location}" = "${srcdir}" ] && return 0
case "${ftype}" in case "${ftype}" in
"file") "file")
...@@ -192,7 +192,7 @@ input_file() { ...@@ -192,7 +192,7 @@ input_file() {
if [ -f "$1" ]; then if [ -f "$1" ]; then
${dep_list}header "$1" ${dep_list}header "$1"
is_cpio="$(echo "$1" | sed 's/^.*\.cpio\(\..*\)\?/cpio/')" is_cpio="$(echo "$1" | sed 's/^.*\.cpio\(\..*\)\?/cpio/')"
if [ $2 -eq 0 -a ${is_cpio} == "cpio" ]; then if [ $2 -eq 0 -a ${is_cpio} = "cpio" ]; then
cpio_file=$1 cpio_file=$1
echo "$1" | grep -q '^.*\.cpio\..*' && is_cpio_compressed="compressed" echo "$1" | grep -q '^.*\.cpio\..*' && is_cpio_compressed="compressed"
[ ! -z ${dep_list} ] && echo "$1" [ ! -z ${dep_list} ] && echo "$1"
...@@ -204,7 +204,7 @@ input_file() { ...@@ -204,7 +204,7 @@ input_file() {
else else
echo "$1 \\" echo "$1 \\"
cat "$1" | while read type dir file perm ; do cat "$1" | while read type dir file perm ; do
if [ "$type" == "file" ]; then if [ "$type" = "file" ]; then
echo "$file \\"; echo "$file \\";
fi fi
done done
...@@ -226,7 +226,7 @@ cpio_list= ...@@ -226,7 +226,7 @@ cpio_list=
output="/dev/stdout" output="/dev/stdout"
output_file="" output_file=""
is_cpio_compressed= is_cpio_compressed=
compr="gzip -9 -f" compr="gzip -n -9 -f"
arg="$1" arg="$1"
case "$arg" in case "$arg" in
...@@ -240,7 +240,7 @@ case "$arg" in ...@@ -240,7 +240,7 @@ case "$arg" in
output_file="$1" output_file="$1"
cpio_list="$(mktemp ${TMPDIR:-/tmp}/cpiolist.XXXXXX)" cpio_list="$(mktemp ${TMPDIR:-/tmp}/cpiolist.XXXXXX)"
output=${cpio_list} output=${cpio_list}
echo "$output_file" | grep -q "\.gz$" && compr="gzip -9 -f" echo "$output_file" | grep -q "\.gz$" && compr="gzip -n -9 -f"
echo "$output_file" | grep -q "\.bz2$" && compr="bzip2 -9 -f" echo "$output_file" | grep -q "\.bz2$" && compr="bzip2 -9 -f"
echo "$output_file" | grep -q "\.lzma$" && compr="lzma -9 -f" echo "$output_file" | grep -q "\.lzma$" && compr="lzma -9 -f"
echo "$output_file" | grep -q "\.xz$" && \ echo "$output_file" | grep -q "\.xz$" && \
...@@ -287,8 +287,15 @@ done ...@@ -287,8 +287,15 @@ done
# we are careful to delete tmp files # we are careful to delete tmp files
if [ ! -z ${output_file} ]; then if [ ! -z ${output_file} ]; then
if [ -z ${cpio_file} ]; then if [ -z ${cpio_file} ]; then
timestamp=
if test -n "$KBUILD_BUILD_TIMESTAMP"; then
timestamp="$(date -d"$KBUILD_BUILD_TIMESTAMP" +%s || :)"
if test -n "$timestamp"; then
timestamp="-t $timestamp"
fi
fi
cpio_tfile="$(mktemp ${TMPDIR:-/tmp}/cpiofile.XXXXXX)" cpio_tfile="$(mktemp ${TMPDIR:-/tmp}/cpiofile.XXXXXX)"
usr/gen_init_cpio ${cpio_list} > ${cpio_tfile} usr/gen_init_cpio $timestamp ${cpio_list} > ${cpio_tfile}
else else
cpio_tfile=${cpio_file} cpio_tfile=${cpio_file}
fi fi
......
...@@ -500,6 +500,8 @@ static void optimize_result(void) ...@@ -500,6 +500,8 @@ static void optimize_result(void)
/* find the token with the breates profit value */ /* find the token with the breates profit value */
best = find_best_token(); best = find_best_token();
if (token_profit[best] == 0)
break;
/* place it in the "best" table */ /* place it in the "best" table */
best_table_len[i] = 2; best_table_len[i] = 2;
......
...@@ -42,6 +42,16 @@ if [ -z "$KBUILD_BUILD_TIMESTAMP" ]; then ...@@ -42,6 +42,16 @@ if [ -z "$KBUILD_BUILD_TIMESTAMP" ]; then
else else
TIMESTAMP=$KBUILD_BUILD_TIMESTAMP TIMESTAMP=$KBUILD_BUILD_TIMESTAMP
fi fi
if test -z "$KBUILD_BUILD_USER"; then
LINUX_COMPILE_BY=$(whoami | sed 's/\\/\\\\/')
else
LINUX_COMPILE_BY=$KBUILD_BUILD_USER
fi
if test -z "$KBUILD_BUILD_HOST"; then
LINUX_COMPILE_HOST=`hostname`
else
LINUX_COMPILE_HOST=$KBUILD_BUILD_HOST
fi
UTS_VERSION="#$VERSION" UTS_VERSION="#$VERSION"
CONFIG_FLAGS="" CONFIG_FLAGS=""
...@@ -63,20 +73,8 @@ UTS_TRUNCATE="cut -b -$UTS_LEN" ...@@ -63,20 +73,8 @@ UTS_TRUNCATE="cut -b -$UTS_LEN"
echo \#define UTS_VERSION \"`echo $UTS_VERSION | $UTS_TRUNCATE`\" echo \#define UTS_VERSION \"`echo $UTS_VERSION | $UTS_TRUNCATE`\"
echo \#define LINUX_COMPILE_TIME \"`date +%T`\" echo \#define LINUX_COMPILE_BY \"`echo $LINUX_COMPILE_BY | $UTS_TRUNCATE`\"
echo \#define LINUX_COMPILE_BY \"`whoami`\" echo \#define LINUX_COMPILE_HOST \"`echo $LINUX_COMPILE_HOST | $UTS_TRUNCATE`\"
echo \#define LINUX_COMPILE_HOST \"`hostname | $UTS_TRUNCATE`\"
domain=`dnsdomainname 2> /dev/null`
if [ -z "$domain" ]; then
domain=`domainname 2> /dev/null`
fi
if [ -n "$domain" ]; then
echo \#define LINUX_COMPILE_DOMAIN \"`echo $domain | $UTS_TRUNCATE`\"
else
echo \#define LINUX_COMPILE_DOMAIN
fi
echo \#define LINUX_COMPILER \"`$CC -v 2>&1 | tail -n 1`\" echo \#define LINUX_COMPILER \"`$CC -v 2>&1 | tail -n 1`\"
) > .tmpcompile ) > .tmpcompile
...@@ -91,8 +89,8 @@ UTS_TRUNCATE="cut -b -$UTS_LEN" ...@@ -91,8 +89,8 @@ UTS_TRUNCATE="cut -b -$UTS_LEN"
# first line. # first line.
if [ -r $TARGET ] && \ if [ -r $TARGET ] && \
grep -v 'UTS_VERSION\|LINUX_COMPILE_TIME' $TARGET > .tmpver.1 && \ grep -v 'UTS_VERSION' $TARGET > .tmpver.1 && \
grep -v 'UTS_VERSION\|LINUX_COMPILE_TIME' .tmpcompile > .tmpver.2 && \ grep -v 'UTS_VERSION' .tmpcompile > .tmpver.2 && \
cmp -s .tmpver.1 .tmpver.2; then cmp -s .tmpver.1 .tmpver.2; then
rm -f .tmpcompile rm -f .tmpcompile
else else
......
...@@ -22,6 +22,7 @@ ...@@ -22,6 +22,7 @@
static unsigned int offset; static unsigned int offset;
static unsigned int ino = 721; static unsigned int ino = 721;
static time_t default_mtime;
struct file_handler { struct file_handler {
const char *type; const char *type;
...@@ -102,7 +103,6 @@ static int cpio_mkslink(const char *name, const char *target, ...@@ -102,7 +103,6 @@ static int cpio_mkslink(const char *name, const char *target,
unsigned int mode, uid_t uid, gid_t gid) unsigned int mode, uid_t uid, gid_t gid)
{ {
char s[256]; char s[256];
time_t mtime = time(NULL);
if (name[0] == '/') if (name[0] == '/')
name++; name++;
...@@ -114,7 +114,7 @@ static int cpio_mkslink(const char *name, const char *target, ...@@ -114,7 +114,7 @@ static int cpio_mkslink(const char *name, const char *target,
(long) uid, /* uid */ (long) uid, /* uid */
(long) gid, /* gid */ (long) gid, /* gid */
1, /* nlink */ 1, /* nlink */
(long) mtime, /* mtime */ (long) default_mtime, /* mtime */
(unsigned)strlen(target)+1, /* filesize */ (unsigned)strlen(target)+1, /* filesize */
3, /* major */ 3, /* major */
1, /* minor */ 1, /* minor */
...@@ -152,7 +152,6 @@ static int cpio_mkgeneric(const char *name, unsigned int mode, ...@@ -152,7 +152,6 @@ static int cpio_mkgeneric(const char *name, unsigned int mode,
uid_t uid, gid_t gid) uid_t uid, gid_t gid)
{ {
char s[256]; char s[256];
time_t mtime = time(NULL);
if (name[0] == '/') if (name[0] == '/')
name++; name++;
...@@ -164,7 +163,7 @@ static int cpio_mkgeneric(const char *name, unsigned int mode, ...@@ -164,7 +163,7 @@ static int cpio_mkgeneric(const char *name, unsigned int mode,
(long) uid, /* uid */ (long) uid, /* uid */
(long) gid, /* gid */ (long) gid, /* gid */
2, /* nlink */ 2, /* nlink */
(long) mtime, /* mtime */ (long) default_mtime, /* mtime */
0, /* filesize */ 0, /* filesize */
3, /* major */ 3, /* major */
1, /* minor */ 1, /* minor */
...@@ -242,7 +241,6 @@ static int cpio_mknod(const char *name, unsigned int mode, ...@@ -242,7 +241,6 @@ static int cpio_mknod(const char *name, unsigned int mode,
unsigned int maj, unsigned int min) unsigned int maj, unsigned int min)
{ {
char s[256]; char s[256];
time_t mtime = time(NULL);
if (dev_type == 'b') if (dev_type == 'b')
mode |= S_IFBLK; mode |= S_IFBLK;
...@@ -259,7 +257,7 @@ static int cpio_mknod(const char *name, unsigned int mode, ...@@ -259,7 +257,7 @@ static int cpio_mknod(const char *name, unsigned int mode,
(long) uid, /* uid */ (long) uid, /* uid */
(long) gid, /* gid */ (long) gid, /* gid */
1, /* nlink */ 1, /* nlink */
(long) mtime, /* mtime */ (long) default_mtime, /* mtime */
0, /* filesize */ 0, /* filesize */
3, /* major */ 3, /* major */
1, /* minor */ 1, /* minor */
...@@ -460,7 +458,7 @@ static int cpio_mkfile_line(const char *line) ...@@ -460,7 +458,7 @@ static int cpio_mkfile_line(const char *line)
static void usage(const char *prog) static void usage(const char *prog)
{ {
fprintf(stderr, "Usage:\n" fprintf(stderr, "Usage:\n"
"\t%s <cpio_list>\n" "\t%s [-t <timestamp>] <cpio_list>\n"
"\n" "\n"
"<cpio_list> is a file containing newline separated entries that\n" "<cpio_list> is a file containing newline separated entries that\n"
"describe the files to be included in the initramfs archive:\n" "describe the files to be included in the initramfs archive:\n"
...@@ -491,7 +489,11 @@ static void usage(const char *prog) ...@@ -491,7 +489,11 @@ static void usage(const char *prog)
"nod /dev/console 0600 0 0 c 5 1\n" "nod /dev/console 0600 0 0 c 5 1\n"
"dir /root 0700 0 0\n" "dir /root 0700 0 0\n"
"dir /sbin 0755 0 0\n" "dir /sbin 0755 0 0\n"
"file /sbin/kinit /usr/src/klibc/kinit/kinit 0755 0 0\n", "file /sbin/kinit /usr/src/klibc/kinit/kinit 0755 0 0\n"
"\n"
"<timestamp> is time in seconds since Epoch that will be used\n"
"as mtime for symlinks, special files and directories. The default\n"
"is to use the current time for these entries.\n",
prog); prog);
} }
...@@ -529,17 +531,42 @@ int main (int argc, char *argv[]) ...@@ -529,17 +531,42 @@ int main (int argc, char *argv[])
char *args, *type; char *args, *type;
int ec = 0; int ec = 0;
int line_nr = 0; int line_nr = 0;
const char *filename;
default_mtime = time(NULL);
while (1) {
int opt = getopt(argc, argv, "t:h");
char *invalid;
if (2 != argc) { if (opt == -1)
break;
switch (opt) {
case 't':
default_mtime = strtol(optarg, &invalid, 10);
if (!*optarg || *invalid) {
fprintf(stderr, "Invalid timestamp: %s\n",
optarg);
usage(argv[0]);
exit(1);
}
break;
case 'h':
case '?':
usage(argv[0]);
exit(opt == 'h' ? 0 : 1);
}
}
if (argc - optind != 1) {
usage(argv[0]); usage(argv[0]);
exit(1); exit(1);
} }
filename = argv[optind];
if (!strcmp(argv[1], "-")) if (!strcmp(filename, "-"))
cpio_list = stdin; cpio_list = stdin;
else if (! (cpio_list = fopen(argv[1], "r"))) { else if (!(cpio_list = fopen(filename, "r"))) {
fprintf(stderr, "ERROR: unable to open '%s': %s\n\n", fprintf(stderr, "ERROR: unable to open '%s': %s\n\n",
argv[1], strerror(errno)); filename, strerror(errno));
usage(argv[0]); usage(argv[0]);
exit(1); exit(1);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment