Commit efffbeee authored by Linus Torvalds's avatar Linus Torvalds

Merge git://git.kernel.org/pub/scm/linux/kernel/git/sam/kbuild

* git://git.kernel.org/pub/scm/linux/kernel/git/sam/kbuild: (33 commits)
  xtensa: use DATA_DATA in xtensa
  powerpc: add missing DATA_DATA to powerpc
  cris: use DATA_DATA in cris
  kallsyms: remove usage of memmem and _GNU_SOURCE from scripts/kallsyms.c
  kbuild: use -fno-optimize-sibling-calls unconditionally
  kconfig: reset generated values only if Kconfig and .config agree.
  kbuild: fix the warning when running make tags
  kconfig: strip 'CONFIG_' automatically in kernel configuration search
  kbuild: use POSIX BRE in headers install target
  Whitelist references from __dbe_table to .init
  modpost white list pattern adjustment
  kbuild: do section mismatch check on full vmlinux
  kbuild: whitelist references from variables named _timer to .init.text
  kbuild: remove hardcoded _logo names from modpost
  kbuild: remove hardcoded apic_es7000 from modpost
  kbuild: warn about references from .init.text to .exit.text
  kbuild: consolidate section checks
  kbuild: refactor code in modpost to improve maintainability
  kbuild: ignore section mismatch warnings originating from .note section
  kbuild: .paravirtprobe section is obsolete, so modpost doesn't need to handle it
  ...
parents 40b42f1e b8243254
...@@ -501,6 +501,20 @@ more details, with real examples. ...@@ -501,6 +501,20 @@ more details, with real examples.
The third parameter may be a text as in this example, but it may also The third parameter may be a text as in this example, but it may also
be an expanded variable or a macro. be an expanded variable or a macro.
cc-fullversion
cc-fullversion is useful when the exact version of gcc is needed.
One typical use-case is when a specific GCC version is broken.
cc-fullversion points out a more specific version than cc-version does.
Example:
#arch/powerpc/Makefile
$(Q)if test "$(call cc-fullversion)" = "040200" ; then \
echo -n '*** GCC-4.2.0 cannot compile the 64-bit powerpc ' ; \
false ; \
fi
In this example for a specific GCC version the build will error out explaining
to the user why it stops.
=== 4 Host Program support === 4 Host Program support
......
...@@ -13,6 +13,7 @@ offsets-file := include/asm-$(ARCH)/asm-offsets.h ...@@ -13,6 +13,7 @@ offsets-file := include/asm-$(ARCH)/asm-offsets.h
always := $(offsets-file) always := $(offsets-file)
targets := $(offsets-file) targets := $(offsets-file)
targets += arch/$(ARCH)/kernel/asm-offsets.s targets += arch/$(ARCH)/kernel/asm-offsets.s
clean-files := $(addprefix $(objtree)/,$(targets))
# Default sed regexp - multiline due to syntax constraints # Default sed regexp - multiline due to syntax constraints
define sed-y define sed-y
......
...@@ -492,7 +492,7 @@ endif ...@@ -492,7 +492,7 @@ endif
include $(srctree)/arch/$(ARCH)/Makefile include $(srctree)/arch/$(ARCH)/Makefile
ifdef CONFIG_FRAME_POINTER ifdef CONFIG_FRAME_POINTER
CFLAGS += -fno-omit-frame-pointer $(call cc-option,-fno-optimize-sibling-calls,) CFLAGS += -fno-omit-frame-pointer -fno-optimize-sibling-calls
else else
CFLAGS += -fomit-frame-pointer CFLAGS += -fomit-frame-pointer
endif endif
...@@ -618,7 +618,7 @@ quiet_cmd_vmlinux__ ?= LD $@ ...@@ -618,7 +618,7 @@ quiet_cmd_vmlinux__ ?= LD $@
cmd_vmlinux__ ?= $(LD) $(LDFLAGS) $(LDFLAGS_vmlinux) -o $@ \ cmd_vmlinux__ ?= $(LD) $(LDFLAGS) $(LDFLAGS_vmlinux) -o $@ \
-T $(vmlinux-lds) $(vmlinux-init) \ -T $(vmlinux-lds) $(vmlinux-init) \
--start-group $(vmlinux-main) --end-group \ --start-group $(vmlinux-main) --end-group \
$(filter-out $(vmlinux-lds) $(vmlinux-init) $(vmlinux-main) FORCE ,$^) $(filter-out $(vmlinux-lds) $(vmlinux-init) $(vmlinux-main) vmlinux.o FORCE ,$^)
# Generate new vmlinux version # Generate new vmlinux version
quiet_cmd_vmlinux_version = GEN .version quiet_cmd_vmlinux_version = GEN .version
...@@ -742,15 +742,31 @@ debug_kallsyms: .tmp_map$(last_kallsyms) ...@@ -742,15 +742,31 @@ debug_kallsyms: .tmp_map$(last_kallsyms)
endif # ifdef CONFIG_KALLSYMS endif # ifdef CONFIG_KALLSYMS
# Do modpost on a prelinked vmlinux. The finally linked vmlinux has
# relevant sections renamed as per the linker script.
quiet_cmd_vmlinux-modpost = LD $@
cmd_vmlinux-modpost = $(LD) $(LDFLAGS) -r -o $@ \
$(vmlinux-init) --start-group $(vmlinux-main) --end-group \
$(filter-out $(vmlinux-init) $(vmlinux-main) $(vmlinux-lds) FORCE ,$^)
define rule_vmlinux-modpost
:
+$(call cmd,vmlinux-modpost)
$(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modpost $@
$(Q)echo 'cmd_$@ := $(cmd_vmlinux-modpost)' > $(dot-target).cmd
endef
# vmlinux image - including updated kernel symbols # vmlinux image - including updated kernel symbols
vmlinux: $(vmlinux-lds) $(vmlinux-init) $(vmlinux-main) $(kallsyms.o) FORCE vmlinux: $(vmlinux-lds) $(vmlinux-init) $(vmlinux-main) $(kallsyms.o) vmlinux.o FORCE
ifdef CONFIG_HEADERS_CHECK ifdef CONFIG_HEADERS_CHECK
$(Q)$(MAKE) -f $(srctree)/Makefile headers_check $(Q)$(MAKE) -f $(srctree)/Makefile headers_check
endif endif
$(call vmlinux-modpost)
$(call if_changed_rule,vmlinux__) $(call if_changed_rule,vmlinux__)
$(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modpost $@
$(Q)rm -f .old_version $(Q)rm -f .old_version
vmlinux.o: $(vmlinux-lds) $(vmlinux-init) $(vmlinux-main) $(kallsyms.o) FORCE
$(call if_changed_rule,vmlinux-modpost)
# The actual objects are generated when descending, # The actual objects are generated when descending,
# make sure no implicit rule kicks in # make sure no implicit rule kicks in
$(sort $(vmlinux-init) $(vmlinux-main)) $(vmlinux-lds): $(vmlinux-dirs) ; $(sort $(vmlinux-init) $(vmlinux-main)) $(vmlinux-lds): $(vmlinux-dirs) ;
...@@ -1323,7 +1339,7 @@ define xtags ...@@ -1323,7 +1339,7 @@ define xtags
-I __initdata,__exitdata,__acquires,__releases \ -I __initdata,__exitdata,__acquires,__releases \
-I EXPORT_SYMBOL,EXPORT_SYMBOL_GPL \ -I EXPORT_SYMBOL,EXPORT_SYMBOL_GPL \
--extra=+f --c-kinds=+px \ --extra=+f --c-kinds=+px \
--regex-asm='/ENTRY\(([^)]*)\).*/\1/'; \ --regex-asm='/^ENTRY\(([^)]*)\).*/\1/'; \
$(all-kconfigs) | xargs $1 -a \ $(all-kconfigs) | xargs $1 -a \
--langdef=kconfig \ --langdef=kconfig \
--language-force=kconfig \ --language-force=kconfig \
......
...@@ -44,7 +44,7 @@ SECTIONS ...@@ -44,7 +44,7 @@ SECTIONS
___data_start = . ; ___data_start = . ;
__Sdata = . ; __Sdata = . ;
.data : { /* Data */ .data : { /* Data */
*(.data) DATA_DATA
} }
__edata = . ; /* End of data section */ __edata = . ; /* End of data section */
_edata = . ; _edata = . ;
......
...@@ -49,7 +49,7 @@ SECTIONS ...@@ -49,7 +49,7 @@ SECTIONS
___data_start = . ; ___data_start = . ;
__Sdata = . ; __Sdata = . ;
.data : { /* Data */ .data : { /* Data */
*(.data) DATA_DATA
} }
__edata = . ; /* End of data section. */ __edata = . ; /* End of data section. */
_edata = . ; _edata = . ;
......
...@@ -66,4 +66,4 @@ static int __init acpi_madt_oem_check(char *oem_id, char *oem_table_id) ...@@ -66,4 +66,4 @@ static int __init acpi_madt_oem_check(char *oem_id, char *oem_table_id)
} }
#endif #endif
struct genapic apic_es7000 = APIC_INIT("es7000", probe_es7000); struct genapic __initdata_refok apic_es7000 = APIC_INIT("es7000", probe_es7000);
...@@ -201,6 +201,14 @@ checkbin: ...@@ -201,6 +201,14 @@ checkbin:
false; \ false; \
fi ; \ fi ; \
fi fi
@if test "$(call cc-fullversion)" = "040200" \
&& test "x${CONFIG_MODULES}${CONFIG_PPC64}" = "xyy" ; then \
echo -n '*** GCC-4.2.0 cannot compile the 64-bit powerpc ' ; \
echo 'kernel with modules enabled.' ; \
echo -n '*** Please use a different GCC version or ' ; \
echo 'disable kernel modules' ; \
false ; \
fi
@if ! /bin/echo dssall | $(AS) -many -o $(TOUT) >/dev/null 2>&1 ; then \ @if ! /bin/echo dssall | $(AS) -many -o $(TOUT) >/dev/null 2>&1 ; then \
echo -n '*** ${VERSION}.${PATCHLEVEL} kernels no longer build ' ; \ echo -n '*** ${VERSION}.${PATCHLEVEL} kernels no longer build ' ; \
echo 'correctly with old versions of binutils.' ; \ echo 'correctly with old versions of binutils.' ; \
......
...@@ -177,7 +177,9 @@ SECTIONS ...@@ -177,7 +177,9 @@ SECTIONS
} }
#else #else
.data : { .data : {
*(.data .data.rel* .toc1) DATA_DATA
*(.data.rel*)
*(.toc1)
*(.branch_lt) *(.branch_lt)
} }
......
...@@ -118,7 +118,8 @@ SECTIONS ...@@ -118,7 +118,8 @@ SECTIONS
_fdata = .; _fdata = .;
.data : .data :
{ {
*(.data) CONSTRUCTORS DATA_DATA
CONSTRUCTORS
. = ALIGN(XCHAL_ICACHE_LINESIZE); . = ALIGN(XCHAL_ICACHE_LINESIZE);
*(.data.cacheline_aligned) *(.data.cacheline_aligned)
} }
......
...@@ -34,8 +34,11 @@ extern const struct linux_logo logo_superh_vga16; ...@@ -34,8 +34,11 @@ extern const struct linux_logo logo_superh_vga16;
extern const struct linux_logo logo_superh_clut224; extern const struct linux_logo logo_superh_clut224;
extern const struct linux_logo logo_m32r_clut224; extern const struct linux_logo logo_m32r_clut224;
/* logo's are marked __initdata. Use __init_refok to tell
const struct linux_logo *fb_find_logo(int depth) * modpost that it is intended that this function uses data
* marked __initdata.
*/
const struct linux_logo * __init_refok fb_find_logo(int depth)
{ {
const struct linux_logo *logo = NULL; const struct linux_logo *logo = NULL;
......
...@@ -100,9 +100,14 @@ cc-option-align = $(subst -functions=0,,\ ...@@ -100,9 +100,14 @@ 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-version # cc-version
# Usage gcc-ver := $(call cc-version,$(CC)) # 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))
# cc-fullversion
# Usage gcc-ver := $(call cc-fullversion)
cc-fullversion = $(shell $(CONFIG_SHELL) \
$(srctree)/scripts/gcc-version.sh -p $(CC))
# cc-ifversion # cc-ifversion
# Usage: EXTRA_CFLAGS += $(call cc-ifversion, -lt, 0402, -O1) # Usage: EXTRA_CFLAGS += $(call cc-ifversion, -lt, 0402, -O1)
cc-ifversion = $(shell [ $(call cc-version, $(CC)) $(1) $(2) ] && echo $(3)) cc-ifversion = $(shell [ $(call cc-version, $(CC)) $(1) $(2) ] && echo $(3))
......
...@@ -7,6 +7,22 @@ src := $(obj) ...@@ -7,6 +7,22 @@ src := $(obj)
PHONY := __build PHONY := __build
__build: __build:
# Init all relevant variables used in kbuild files so
# 1) they have correct type
# 2) they do not inherit any value from the environment
obj-y :=
obj-m :=
lib-y :=
lib-m :=
always :=
targets :=
subdir-y :=
subdir-m :=
EXTRA_AFLAGS :=
EXTRA_CFLAGS :=
EXTRA_CPPFLAGS :=
EXTRA_LDFLAGS :=
# Read .config if it exist, otherwise ignore # Read .config if it exist, otherwise ignore
-include include/config/auto.conf -include include/config/auto.conf
......
...@@ -11,13 +11,13 @@ UNIFDEF := scripts/unifdef -U__KERNEL__ ...@@ -11,13 +11,13 @@ UNIFDEF := scripts/unifdef -U__KERNEL__
# Eliminate the contents of (and inclusions of) compiler.h # Eliminate the contents of (and inclusions of) compiler.h
HDRSED := sed -e "s/ inline / __inline__ /g" \ HDRSED := sed -e "s/ inline / __inline__ /g" \
-e "s/[[:space:]]__user[[:space:]]\+/ /g" \ -e "s/[[:space:]]__user[[:space:]]\{1,\}/ /g" \
-e "s/(__user[[:space:]]\+/ (/g" \ -e "s/(__user[[:space:]]\{1,\}/ (/g" \
-e "s/[[:space:]]__force[[:space:]]\+/ /g" \ -e "s/[[:space:]]__force[[:space:]]\{1,\}/ /g" \
-e "s/(__force[[:space:]]\+/ (/g" \ -e "s/(__force[[:space:]]\{1,\}/ (/g" \
-e "s/[[:space:]]__iomem[[:space:]]\+/ /g" \ -e "s/[[:space:]]__iomem[[:space:]]\{1,\}/ /g" \
-e "s/(__iomem[[:space:]]\+/ (/g" \ -e "s/(__iomem[[:space:]]\{1,\}/ (/g" \
-e "s/[[:space:]]__attribute_const__[[:space:]]\+/\ /g" \ -e "s/[[:space:]]__attribute_const__[[:space:]]\{1,\}/\ /g" \
-e "s/[[:space:]]__attribute_const__$$//" \ -e "s/[[:space:]]__attribute_const__$$//" \
-e "/^\#include <linux\/compiler.h>/d" -e "/^\#include <linux\/compiler.h>/d"
......
...@@ -70,10 +70,10 @@ __modpost: $(modules:.ko=.o) FORCE ...@@ -70,10 +70,10 @@ __modpost: $(modules:.ko=.o) FORCE
$(call cmd,modpost) $(wildcard vmlinux) $(filter-out FORCE,$^) $(call cmd,modpost) $(wildcard vmlinux) $(filter-out FORCE,$^)
quiet_cmd_kernel-mod = MODPOST $@ quiet_cmd_kernel-mod = MODPOST $@
cmd_kernel-mod = $(cmd_modpost) $(KBUILD_VMLINUX_OBJS) cmd_kernel-mod = $(cmd_modpost) $@
PHONY += vmlinux PHONY += vmlinux
vmlinux: FORCE vmlinux.o: FORCE
$(call cmd,kernel-mod) $(call cmd,kernel-mod)
# Declare generated files as targets for modpost # Declare generated files as targets for modpost
......
...@@ -7,7 +7,9 @@ ...@@ -7,7 +7,9 @@
use bytes; use bytes;
use File::Basename; use File::Basename;
# # Default options
$max_width = 79;
# Clean up space-tab sequences, either by removing spaces or # Clean up space-tab sequences, either by removing spaces or
# replacing them with tabs. # replacing them with tabs.
sub clean_space_tabs($) sub clean_space_tabs($)
...@@ -48,9 +50,49 @@ sub clean_space_tabs($) ...@@ -48,9 +50,49 @@ sub clean_space_tabs($)
return $lo; return $lo;
} }
# Compute the visual width of a string
sub strwidth($) {
no bytes; # Tab alignment depends on characters
my($li) = @_;
my($c, $i);
my $pos = 0;
my $mlen = 0;
for ($i = 0; $i < length($li); $i++) {
$c = substr($li,$i,1);
if ($c eq "\t") {
$pos = ($pos+8) & ~7;
} elsif ($c eq "\n") {
$mlen = $pos if ($pos > $mlen);
$pos = 0;
} else {
$pos++;
}
}
$mlen = $pos if ($pos > $mlen);
return $mlen;
}
$name = basename($0); $name = basename($0);
foreach $f ( @ARGV ) { @files = ();
while (defined($a = shift(@ARGV))) {
if ($a =~ /^-/) {
if ($a eq '-width' || $a eq '-w') {
$max_width = shift(@ARGV)+0;
} else {
print STDERR "Usage: $name [-width #] files...\n";
exit 1;
}
} else {
push(@files, $a);
}
}
foreach $f ( @files ) {
print STDERR "$name: $f\n"; print STDERR "$name: $f\n";
if (! -f $f) { if (! -f $f) {
...@@ -90,8 +132,10 @@ foreach $f ( @ARGV ) { ...@@ -90,8 +132,10 @@ foreach $f ( @ARGV ) {
@blanks = (); @blanks = ();
@lines = (); @lines = ();
$lineno = 0;
while ( defined($line = <FILE>) ) { while ( defined($line = <FILE>) ) {
$lineno++;
$in_bytes += length($line); $in_bytes += length($line);
$line =~ s/[ \t\r]*$//; # Remove trailing spaces $line =~ s/[ \t\r]*$//; # Remove trailing spaces
$line = clean_space_tabs($line); $line = clean_space_tabs($line);
...@@ -107,6 +151,12 @@ foreach $f ( @ARGV ) { ...@@ -107,6 +151,12 @@ foreach $f ( @ARGV ) {
@blanks = (); @blanks = ();
$blank_bytes = 0; $blank_bytes = 0;
} }
$l_width = strwidth($line);
if ($max_width && $l_width > $max_width) {
print STDERR
"$f:$lineno: line exceeds $max_width characters ($l_width)\n";
}
} }
# Any blanks at the end of the file are discarded # Any blanks at the end of the file are discarded
......
...@@ -7,7 +7,9 @@ ...@@ -7,7 +7,9 @@
use bytes; use bytes;
use File::Basename; use File::Basename;
# # Default options
$max_width = 79;
# Clean up space-tab sequences, either by removing spaces or # Clean up space-tab sequences, either by removing spaces or
# replacing them with tabs. # replacing them with tabs.
sub clean_space_tabs($) sub clean_space_tabs($)
...@@ -48,9 +50,49 @@ sub clean_space_tabs($) ...@@ -48,9 +50,49 @@ sub clean_space_tabs($)
return $lo; return $lo;
} }
# Compute the visual width of a string
sub strwidth($) {
no bytes; # Tab alignment depends on characters
my($li) = @_;
my($c, $i);
my $pos = 0;
my $mlen = 0;
for ($i = 0; $i < length($li); $i++) {
$c = substr($li,$i,1);
if ($c eq "\t") {
$pos = ($pos+8) & ~7;
} elsif ($c eq "\n") {
$mlen = $pos if ($pos > $mlen);
$pos = 0;
} else {
$pos++;
}
}
$mlen = $pos if ($pos > $mlen);
return $mlen;
}
$name = basename($0); $name = basename($0);
foreach $f ( @ARGV ) { @files = ();
while (defined($a = shift(@ARGV))) {
if ($a =~ /^-/) {
if ($a eq '-width' || $a eq '-w') {
$max_width = shift(@ARGV)+0;
} else {
print STDERR "Usage: $name [-width #] files...\n";
exit 1;
}
} else {
push(@files, $a);
}
}
foreach $f ( @files ) {
print STDERR "$name: $f\n"; print STDERR "$name: $f\n";
if (! -f $f) { if (! -f $f) {
...@@ -86,6 +128,7 @@ foreach $f ( @ARGV ) { ...@@ -86,6 +128,7 @@ foreach $f ( @ARGV ) {
$in_bytes = 0; $in_bytes = 0;
$out_bytes = 0; $out_bytes = 0;
$lineno = 0;
@lines = (); @lines = ();
...@@ -93,10 +136,12 @@ foreach $f ( @ARGV ) { ...@@ -93,10 +136,12 @@ foreach $f ( @ARGV ) {
$err = 0; $err = 0;
while ( defined($line = <FILE>) ) { while ( defined($line = <FILE>) ) {
$lineno++;
$in_bytes += length($line); $in_bytes += length($line);
if (!$in_hunk) { if (!$in_hunk) {
if ($line =~ /^\@\@\s+\-([0-9]+),([0-9]+)\s+\+([0-9]+),([0-9]+)\s\@\@/) { if ($line =~
/^\@\@\s+\-([0-9]+),([0-9]+)\s+\+([0-9]+),([0-9]+)\s\@\@/) {
$minus_lines = $2; $minus_lines = $2;
$plus_lines = $4; $plus_lines = $4;
if ($minus_lines || $plus_lines) { if ($minus_lines || $plus_lines) {
...@@ -117,6 +162,13 @@ foreach $f ( @ARGV ) { ...@@ -117,6 +162,13 @@ foreach $f ( @ARGV ) {
$text =~ s/[ \t\r]*$//; # Remove trailing spaces $text =~ s/[ \t\r]*$//; # Remove trailing spaces
$text = clean_space_tabs($text); $text = clean_space_tabs($text);
$l_width = strwidth($text);
if ($max_width && $l_width > $max_width) {
print STDERR
"$f:$lineno: adds line exceeds $max_width ",
"characters ($l_width)\n";
}
push(@hunk_lines, '+'.$text); push(@hunk_lines, '+'.$text);
} elsif ($line =~ /^\-/) { } elsif ($line =~ /^\-/) {
$minus_lines--; $minus_lines--;
......
#!/bin/sh #!/bin/sh
# #
# gcc-version gcc-command # gcc-version [-p] gcc-command
# #
# Prints the gcc version of `gcc-command' in a canonical 4-digit form # Prints the gcc version of `gcc-command' in a canonical 4-digit form
# such as `0295' for gcc-2.95, `0303' for gcc-3.3, etc. # such as `0295' for gcc-2.95, `0303' for gcc-3.3, etc.
# #
# With the -p option, prints the patchlevel as well, for example `029503' for
# gcc-2.95.3, `030301' for gcc-3.3.1, etc.
#
if [ $1 = "-p" ] ; then with_patchlevel=1; shift; fi
compiler="$*" compiler="$*"
MAJOR=$(echo __GNUC__ | $compiler -E -xc - | tail -n 1) MAJOR=$(echo __GNUC__ | $compiler -E -xc - | tail -n 1)
MINOR=$(echo __GNUC_MINOR__ | $compiler -E -xc - | tail -n 1) MINOR=$(echo __GNUC_MINOR__ | $compiler -E -xc - | tail -n 1)
printf "%02d%02d\\n" $MAJOR $MINOR if [ "x$with_patchlevel" != "x" ] ; then
PATCHLEVEL=$(echo __GNUC_PATCHLEVEL__ | $compiler -E -xc - | tail -n 1)
printf "%02d%02d%02d\\n" $MAJOR $MINOR $PATCHLEVEL
else
printf "%02d%02d\\n" $MAJOR $MINOR
fi
...@@ -19,11 +19,11 @@ $0 [-o <file>] [-u <uid>] [-g <gid>] {-d | <cpio_source>} ... ...@@ -19,11 +19,11 @@ $0 [-o <file>] [-u <uid>] [-g <gid>] {-d | <cpio_source>} ...
-o <file> Create gzipped initramfs file named <file> using -o <file> Create gzipped initramfs file named <file> using
gen_init_cpio and gzip gen_init_cpio and gzip
-u <uid> User ID to map to user ID 0 (root). -u <uid> User ID to map to user ID 0 (root).
<uid> is only meaningful if <cpio_source> <uid> is only meaningful if <cpio_source> is a
is a directory. directory. "squash" forces all files to uid 0.
-g <gid> Group ID to map to group ID 0 (root). -g <gid> Group ID to map to group ID 0 (root).
<gid> is only meaningful if <cpio_source> <gid> is only meaningful if <cpio_source> is a
is a directory. directory. "squash" forces all files to gid 0.
<cpio_source> File list or directory for cpio archive. <cpio_source> File list or directory for cpio archive.
If <cpio_source> is a .cpio file it will be used If <cpio_source> is a .cpio file it will be used
as direct input to initramfs. as direct input to initramfs.
...@@ -113,8 +113,8 @@ parse() { ...@@ -113,8 +113,8 @@ parse() {
local gid="$4" local gid="$4"
local ftype=$(filetype "${location}") local ftype=$(filetype "${location}")
# remap uid/gid to 0 if necessary # remap uid/gid to 0 if necessary
[ "$uid" -eq "$root_uid" ] && uid=0 [ "$root_uid" = "squash" ] && uid=0 || [ "$uid" -eq "$root_uid" ] && uid=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
......
...@@ -24,8 +24,6 @@ ...@@ -24,8 +24,6 @@
* *
*/ */
#define _GNU_SOURCE
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
...@@ -378,6 +376,17 @@ static void build_initial_tok_table(void) ...@@ -378,6 +376,17 @@ static void build_initial_tok_table(void)
table_cnt = pos; table_cnt = pos;
} }
static void *find_token(unsigned char *str, int len, unsigned char *token)
{
int i;
for (i = 0; i < len - 1; i++) {
if (str[i] == token[0] && str[i+1] == token[1])
return &str[i];
}
return NULL;
}
/* replace a given token in all the valid symbols. Use the sampled symbols /* replace a given token in all the valid symbols. Use the sampled symbols
* to update the counts */ * to update the counts */
static void compress_symbols(unsigned char *str, int idx) static void compress_symbols(unsigned char *str, int idx)
...@@ -391,7 +400,7 @@ static void compress_symbols(unsigned char *str, int idx) ...@@ -391,7 +400,7 @@ static void compress_symbols(unsigned char *str, int idx)
p1 = table[i].sym; p1 = table[i].sym;
/* find the token on the symbol */ /* find the token on the symbol */
p2 = memmem(p1, len, str, 2); p2 = find_token(p1, len, str);
if (!p2) continue; if (!p2) continue;
/* decrease the counts for this symbol's tokens */ /* decrease the counts for this symbol's tokens */
...@@ -410,7 +419,7 @@ static void compress_symbols(unsigned char *str, int idx) ...@@ -410,7 +419,7 @@ static void compress_symbols(unsigned char *str, int idx)
if (size < 2) break; if (size < 2) break;
/* find the token on the symbol */ /* find the token on the symbol */
p2 = memmem(p1, size, str, 2); p2 = find_token(p1, size, str);
} while (p2); } while (p2);
......
...@@ -22,24 +22,25 @@ oldconfig: $(obj)/conf ...@@ -22,24 +22,25 @@ oldconfig: $(obj)/conf
silentoldconfig: $(obj)/conf silentoldconfig: $(obj)/conf
$< -s arch/$(ARCH)/Kconfig $< -s arch/$(ARCH)/Kconfig
# Create new linux.po file
# Adjust charset to UTF-8 in .po file to accept UTF-8 in Kconfig files
# The symlink is used to repair a deficiency in arch/um
update-po-config: $(obj)/kxgettext update-po-config: $(obj)/kxgettext
xgettext --default-domain=linux \ xgettext --default-domain=linux \
--add-comments --keyword=_ --keyword=N_ \ --add-comments --keyword=_ --keyword=N_ \
--files-from=scripts/kconfig/POTFILES.in \ --from-code=UTF-8 \
--output scripts/kconfig/config.pot --files-from=scripts/kconfig/POTFILES.in \
$(Q)ln -fs Kconfig_i386 arch/um/Kconfig_arch --output $(obj)/config.pot
$(Q)for i in `ls arch/`; \ $(Q)sed -i s/CHARSET/UTF-8/ $(obj)/config.pot
do \ $(Q)ln -fs Kconfig.i386 arch/um/Kconfig.arch
scripts/kconfig/kxgettext arch/$$i/Kconfig \ (for i in `ls arch/`; \
| msguniq -o scripts/kconfig/linux_$${i}.pot; \ do \
done $(obj)/kxgettext arch/$$i/Kconfig; \
$(Q)msgcat scripts/kconfig/config.pot \ done ) >> $(obj)/config.pot
`find scripts/kconfig/ -type f -name linux_*.pot` \ msguniq --sort-by-file --to-code=UTF-8 $(obj)/config.pot \
--output scripts/kconfig/linux_raw.pot --output $(obj)/linux.pot
$(Q)msguniq --sort-by-file scripts/kconfig/linux_raw.pot \ $(Q)rm -f arch/um/Kconfig.arch
--output scripts/kconfig/linux.pot $(Q)rm -f $(obj)/config.pot
$(Q)rm -f arch/um/Kconfig_arch
$(Q)rm -f scripts/kconfig/linux_*.pot scripts/kconfig/config.pot
PHONY += randconfig allyesconfig allnoconfig allmodconfig defconfig PHONY += randconfig allyesconfig allnoconfig allmodconfig defconfig
......
...@@ -341,27 +341,42 @@ int conf_read(const char *name) ...@@ -341,27 +341,42 @@ int conf_read(const char *name)
conf_unsaved++; conf_unsaved++;
/* maybe print value in verbose mode... */ /* maybe print value in verbose mode... */
sym_ok: sym_ok:
if (!sym_is_choice(sym))
continue;
/* The choice symbol only has a set value (and thus is not new)
* if all its visible childs have values.
*/
prop = sym_get_choice_prop(sym);
flags = sym->flags;
for (e = prop->expr; e; e = e->left.expr)
if (e->right.sym->visible != no)
flags &= e->right.sym->flags;
sym->flags &= flags | ~SYMBOL_DEF_USER;
}
for_all_symbols(i, sym) {
if (sym_has_value(sym) && !sym_is_choice_value(sym)) { if (sym_has_value(sym) && !sym_is_choice_value(sym)) {
if (sym->visible == no) /* Reset values of generates values, so they'll appear
* as new, if they should become visible, but that
* doesn't quite work if the Kconfig and the saved
* configuration disagree.
*/
if (sym->visible == no && !conf_unsaved)
sym->flags &= ~SYMBOL_DEF_USER; sym->flags &= ~SYMBOL_DEF_USER;
switch (sym->type) { switch (sym->type) {
case S_STRING: case S_STRING:
case S_INT: case S_INT:
case S_HEX: case S_HEX:
if (!sym_string_within_range(sym, sym->def[S_DEF_USER].val)) /* Reset a string value if it's out of range */
sym->flags &= ~(SYMBOL_VALID|SYMBOL_DEF_USER); if (sym_string_within_range(sym, sym->def[S_DEF_USER].val))
break;
sym->flags &= ~(SYMBOL_VALID|SYMBOL_DEF_USER);
conf_unsaved++;
break;
default: default:
break; break;
} }
} }
if (!sym_is_choice(sym))
continue;
prop = sym_get_choice_prop(sym);
flags = sym->flags;
for (e = prop->expr; e; e = e->left.expr)
if (e->right.sym->visible != no)
flags &= e->right.sym->flags;
sym->flags &= flags | ~SYMBOL_DEF_USER;
} }
sym_add_change_count(conf_warnings || conf_unsaved); sym_add_change_count(conf_warnings || conf_unsaved);
......
...@@ -212,7 +212,9 @@ void menu__xgettext(void) ...@@ -212,7 +212,9 @@ void menu__xgettext(void)
struct message *m = message__list; struct message *m = message__list;
while (m != NULL) { while (m != NULL) {
message__print_gettext_msgid_msgstr(m); /* skip empty lines ("") */
if (strlen(m->msg) > sizeof("\"\""))
message__print_gettext_msgid_msgstr(m);
m = m->next; m = m->next;
} }
} }
......
...@@ -51,7 +51,7 @@ usage() { ...@@ -51,7 +51,7 @@ usage() {
printf "Usage: $0 [-check compiler options|-header|-library]\n" printf "Usage: $0 [-check compiler options|-header|-library]\n"
} }
if [ $# == 0 ]; then if [ $# -eq 0 ]; then
usage usage
exit 1 exit 1
fi fi
......
...@@ -419,11 +419,13 @@ static void search_conf(void) ...@@ -419,11 +419,13 @@ static void search_conf(void)
{ {
struct symbol **sym_arr; struct symbol **sym_arr;
struct gstr res; struct gstr res;
char *dialog_input;
int dres; int dres;
again: again:
dialog_clear(); dialog_clear();
dres = dialog_inputbox(_("Search Configuration Parameter"), dres = dialog_inputbox(_("Search Configuration Parameter"),
_("Enter CONFIG_ (sub)string to search for (omit CONFIG_)"), _("Enter CONFIG_ (sub)string to search for "
"(with or without \"CONFIG\")"),
10, 75, ""); 10, 75, "");
switch (dres) { switch (dres) {
case 0: case 0:
...@@ -435,7 +437,12 @@ static void search_conf(void) ...@@ -435,7 +437,12 @@ static void search_conf(void)
return; return;
} }
sym_arr = sym_re_search(dialog_input_result); /* strip CONFIG_ if necessary */
dialog_input = dialog_input_result;
if (strncasecmp(dialog_input_result, "CONFIG_", 7) == 0)
dialog_input += 7;
sym_arr = sym_re_search(dialog_input);
res = get_relations_str(sym_arr); res = get_relations_str(sym_arr);
free(sym_arr); free(sym_arr);
show_textbox(_("Search Results"), str_get(&res), 0, 0); show_textbox(_("Search Results"), str_get(&res), 0, 0);
......
This diff is collapsed.
...@@ -60,6 +60,9 @@ typedef union ...@@ -60,6 +60,9 @@ typedef union
#define ELF64_MIPS_R_SYM(i) \ #define ELF64_MIPS_R_SYM(i) \
((__extension__ (_Elf64_Mips_R_Info_union)(i)).r_info_fields.r_sym) ((__extension__ (_Elf64_Mips_R_Info_union)(i)).r_info_fields.r_sym)
#define ELF64_MIPS_R_TYPE(i) \
((__extension__ (_Elf64_Mips_R_Info_union)(i)).r_info_fields.r_type1)
#if KERNEL_ELFDATA != HOST_ELFDATA #if KERNEL_ELFDATA != HOST_ELFDATA
static inline void __endian(const void *src, void *dest, unsigned int size) static inline void __endian(const void *src, void *dest, unsigned int size)
......
...@@ -498,7 +498,9 @@ int main (int argc, char *argv[]) ...@@ -498,7 +498,9 @@ int main (int argc, char *argv[])
exit(1); exit(1);
} }
if (! (cpio_list = fopen(argv[1], "r"))) { if (!strcmp(argv[1], "-"))
cpio_list = stdin;
else if (! (cpio_list = fopen(argv[1], "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)); argv[1], strerror(errno));
usage(argv[0]); usage(argv[0]);
......
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