mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-26 06:33:19 -04:00
Kbuild updates for v4.19 (2nd)
- add build_{menu,n,g,x}config targets for compile-testing Kconfig
- fix and improve recursive dependency detection in Kconfig
- fix parallel building of menuconfig/nconfig
- fix syntax error in clang-version.sh
- suppress distracting log from syncconfig
- remove obsolete "rpm" target
- remove VMLINUX_SYMBOL(_STR) macro entirely
- fix microblaze build with CONFIG_DYNAMIC_FTRACE
- move compiler test for dead code/data elimination to Kconfig
- rename well-known LDFLAGS variable to KBUILD_LDFLAGS
- misc fixes and cleanups
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1
iQIcBAABAgAGBQJbgYhCAAoJED2LAQed4NsGErAP/jt7gt76+N0PZmADBZqyVR/H
4k286g3OiT7DIcdvwqE5BRvu+zNOamDujnnXw63/jwu2RjrkLX/JnhzTbC0IZleZ
KeO4bU4ZH0WFa0Ny9pp0LAnzbXGMnQjDXygcUd5BFoEd5JSLKW2PISEEjRh6b5B7
swJRdgySFaMrUBRNf13FwH5EvX/D0xZQe/wFhFCOv6L4gJZFMmpGUIepgTjTUmxZ
wcNN6xxXg+ulLHVcPdPQ9EYssNHN5xNys02+IdIrhhXuNHji/TFm4dGYuU+dDGeE
Eu4O6Qs7pg0PFGrZ5gLxXDJEp75W+uaTNOqV+jcjq8MRxJuWxyy2biUeelKRT/KH
0iv4ZQJVOMOhl8fZgLtQaXHyQ++5uwd6kvPPf+XFdkogGAIXK0wKWLoALFEOXwb6
z1BBnFx09LrKPGt0ZlKX624OEczedv/UAFiSh3Ic2S3PFEpq4oHrEGhTnyKRobPv
OEcF3RqKjmAdK7PLy4kVpTLhkutkWWhw6Giy9qXUkXYJWonJR7NTQ1mIan2LoGZC
sGi+qKae/8xgO2Nerx59tZpkiHYTMfYeAo8frzWurOxm3YzEfaxNNGPl+IMW7VKz
cNPzQZ5tMUy4i4PAhk/gIWibnUTPfjDbWsZSMtIbO0GFcao56EvllwD8/awuy7lO
QkaAeZHFcF+qgU3muaYK
=Vsb2
-----END PGP SIGNATURE-----
Merge tag 'kbuild-v4.19-2' of git://git.kernel.org/pub/scm/linux/kernel/git/masahiroy/linux-kbuild
Pull more Kbuild updates from Masahiro Yamada:
- add build_{menu,n,g,x}config targets for compile-testing Kconfig
- fix and improve recursive dependency detection in Kconfig
- fix parallel building of menuconfig/nconfig
- fix syntax error in clang-version.sh
- suppress distracting log from syncconfig
- remove obsolete "rpm" target
- remove VMLINUX_SYMBOL(_STR) macro entirely
- fix microblaze build with CONFIG_DYNAMIC_FTRACE
- move compiler test for dead code/data elimination to Kconfig
- rename well-known LDFLAGS variable to KBUILD_LDFLAGS
- misc fixes and cleanups
* tag 'kbuild-v4.19-2' of git://git.kernel.org/pub/scm/linux/kernel/git/masahiroy/linux-kbuild:
kbuild: rename LDFLAGS to KBUILD_LDFLAGS
kbuild: pass LDFLAGS to recordmcount.pl
kbuild: test dead code/data elimination support in Kconfig
initramfs: move gen_initramfs_list.sh from scripts/ to usr/
vmlinux.lds.h: remove stale <linux/export.h> include
export.h: remove VMLINUX_SYMBOL() and VMLINUX_SYMBOL_STR()
Coccinelle: remove pci_alloc_consistent semantic to detect in zalloc-simple.cocci
kbuild: make sorting initramfs contents independent of locale
kbuild: remove "rpm" target, which is alias of "rpm-pkg"
kbuild: Fix LOADLIBES rename in Documentation/kbuild/makefiles.txt
kconfig: suppress "configuration written to .config" for syncconfig
kconfig: fix "Can't open ..." in parallel build
kbuild: Add a space after `!` to prevent parsing as file pattern
scripts: modpost: check memory allocation results
kconfig: improve the recursive dependency report
kconfig: report recursive dependency involving 'imply'
kconfig: error out when seeing recursive dependency
kconfig: add build-only configurator targets
scripts/dtc: consolidate include path options in Makefile
This commit is contained in:
commit
1bc276775d
52 changed files with 188 additions and 209 deletions
|
|
@ -163,8 +163,8 @@ cc-ldoption = $(call try-run,\
|
|||
$(CC) $(1) $(KBUILD_CPPFLAGS) $(CC_OPTION_CFLAGS) -nostdlib -x c /dev/null -o "$$TMP",$(1),$(2))
|
||||
|
||||
# ld-option
|
||||
# Usage: LDFLAGS += $(call ld-option, -X, -Y)
|
||||
ld-option = $(call try-run, $(LD) $(LDFLAGS) $(1) -v,$(1),$(2),$(3))
|
||||
# Usage: KBUILD_LDFLAGS += $(call ld-option, -X, -Y)
|
||||
ld-option = $(call try-run, $(LD) $(KBUILD_LDFLAGS) $(1) -v,$(1),$(2),$(3))
|
||||
|
||||
# ar-option
|
||||
# Usage: KBUILD_ARFLAGS := $(call ar-option,D)
|
||||
|
|
|
|||
|
|
@ -190,7 +190,7 @@ cmd_modversions_c = \
|
|||
$(call cmd_gensymtypes_c,$(KBUILD_SYMTYPES),$(@:.o=.symtypes)) \
|
||||
> $(@D)/.tmp_$(@F:.o=.ver); \
|
||||
\
|
||||
$(LD) $(LDFLAGS) -r -o $@ $(@D)/.tmp_$(@F) \
|
||||
$(LD) $(KBUILD_LDFLAGS) -r -o $@ $(@D)/.tmp_$(@F) \
|
||||
-T $(@D)/.tmp_$(@F:.o=.ver); \
|
||||
rm -f $(@D)/.tmp_$(@F) $(@D)/.tmp_$(@F:.o=.ver); \
|
||||
else \
|
||||
|
|
@ -220,7 +220,7 @@ sub_cmd_record_mcount = set -e ; perl $(srctree)/scripts/recordmcount.pl "$(ARCH
|
|||
"$(if $(CONFIG_CPU_BIG_ENDIAN),big,little)" \
|
||||
"$(if $(CONFIG_64BIT),64,32)" \
|
||||
"$(OBJDUMP)" "$(OBJCOPY)" "$(CC) $(KBUILD_CFLAGS)" \
|
||||
"$(LD)" "$(NM)" "$(RM)" "$(MV)" \
|
||||
"$(LD) $(KBUILD_LDFLAGS)" "$(NM)" "$(RM)" "$(MV)" \
|
||||
"$(if $(part-of-module),1,0)" "$(@)";
|
||||
recordmcount_source := $(srctree)/scripts/recordmcount.pl
|
||||
endif # BUILD_C_RECORDMCOUNT
|
||||
|
|
@ -394,7 +394,7 @@ cmd_modversions_S = \
|
|||
$(call cmd_gensymtypes_S,$(KBUILD_SYMTYPES),$(@:.o=.symtypes)) \
|
||||
> $(@D)/.tmp_$(@F:.o=.ver); \
|
||||
\
|
||||
$(LD) $(LDFLAGS) -r -o $@ $(@D)/.tmp_$(@F) \
|
||||
$(LD) $(KBUILD_LDFLAGS) -r -o $@ $(@D)/.tmp_$(@F) \
|
||||
-T $(@D)/.tmp_$(@F:.o=.ver); \
|
||||
rm -f $(@D)/.tmp_$(@F) $(@D)/.tmp_$(@F:.o=.ver); \
|
||||
else \
|
||||
|
|
|
|||
|
|
@ -162,7 +162,7 @@ a_flags = -Wp,-MD,$(depfile) $(NOSTDINC_FLAGS) $(LINUXINCLUDE) \
|
|||
cpp_flags = -Wp,-MD,$(depfile) $(NOSTDINC_FLAGS) $(LINUXINCLUDE) \
|
||||
$(__cpp_flags)
|
||||
|
||||
ld_flags = $(LDFLAGS) $(ldflags-y) $(LDFLAGS_$(@F))
|
||||
ld_flags = $(KBUILD_LDFLAGS) $(ldflags-y) $(LDFLAGS_$(@F))
|
||||
|
||||
DTC_INCLUDE := $(srctree)/scripts/dtc/include-prefixes
|
||||
|
||||
|
|
|
|||
|
|
@ -120,7 +120,7 @@ ARCH_POSTLINK := $(wildcard $(srctree)/arch/$(SRCARCH)/Makefile.postlink)
|
|||
# Step 6), final link of the modules with optional arch pass after final link
|
||||
quiet_cmd_ld_ko_o = LD [M] $@
|
||||
cmd_ld_ko_o = \
|
||||
$(LD) -r $(LDFLAGS) \
|
||||
$(LD) -r $(KBUILD_LDFLAGS) \
|
||||
$(KBUILD_LDFLAGS_MODULE) $(LDFLAGS_MODULE) \
|
||||
-o $@ $(filter-out FORCE,$^) ; \
|
||||
$(if $(ARCH_POSTLINK), $(MAKE) -f $(ARCH_POSTLINK) $@, true)
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@
|
|||
|
||||
compiler="$*"
|
||||
|
||||
if !( $compiler --version | grep -q clang) ; then
|
||||
if ! ( $compiler --version | grep -q clang) ; then
|
||||
echo 0
|
||||
exit 1
|
||||
fi
|
||||
|
|
|
|||
|
|
@ -35,8 +35,7 @@ statement S;
|
|||
|
||||
* x = (T)\(kmalloc(E1, ...)\|vmalloc(E1)\|dma_alloc_coherent(...,E1,...)\|
|
||||
kmalloc_node(E1, ...)\|kmem_cache_alloc(...)\|kmem_alloc(E1, ...)\|
|
||||
devm_kmalloc(...,E1,...)\|kvmalloc(E1, ...)\|pci_alloc_consistent(...,E1,...)\|
|
||||
kvmalloc_node(E1,...)\);
|
||||
devm_kmalloc(...,E1,...)\|kvmalloc(E1, ...)\|kvmalloc_node(E1,...)\);
|
||||
if ((x==NULL) || ...) S
|
||||
* memset((T2)x,0,E1);
|
||||
|
||||
|
|
@ -124,15 +123,6 @@ statement S;
|
|||
- x = (T)kvmalloc(E1,E2);
|
||||
+ x = (T)kvzalloc(E1,E2);
|
||||
|
|
||||
- x = pci_alloc_consistent(E2,E1,E3);
|
||||
+ x = pci_zalloc_consistent(E2,E1,E3);
|
||||
|
|
||||
- x = (T *)pci_alloc_consistent(E2,E1,E3);
|
||||
+ x = pci_zalloc_consistent(E2,E1,E3);
|
||||
|
|
||||
- x = (T)pci_alloc_consistent(E2,E1,E3);
|
||||
+ x = (T)pci_zalloc_consistent(E2,E1,E3);
|
||||
|
|
||||
- x = kvmalloc_node(E1,E2,E3);
|
||||
+ x = kvzalloc_node(E1,E2,E3);
|
||||
|
|
||||
|
|
@ -388,35 +378,6 @@ x << r7.x;
|
|||
msg="WARNING: kvzalloc should be used for %s, instead of kvmalloc/memset" % (x)
|
||||
coccilib.report.print_report(p[0], msg)
|
||||
|
||||
//-----------------------------------------------------------------
|
||||
@r8 depends on org || report@
|
||||
type T, T2;
|
||||
expression x;
|
||||
expression E1,E2,E3;
|
||||
statement S;
|
||||
position p;
|
||||
@@
|
||||
|
||||
x = (T)pci_alloc_consistent@p(E2,E1,E3);
|
||||
if ((x==NULL) || ...) S
|
||||
memset((T2)x,0,E1);
|
||||
|
||||
@script:python depends on org@
|
||||
p << r8.p;
|
||||
x << r8.x;
|
||||
@@
|
||||
|
||||
msg="%s" % (x)
|
||||
msg_safe=msg.replace("[","@(").replace("]",")")
|
||||
coccilib.org.print_todo(p[0], msg_safe)
|
||||
|
||||
@script:python depends on report@
|
||||
p << r8.p;
|
||||
x << r8.x;
|
||||
@@
|
||||
|
||||
msg="WARNING: pci_zalloc_consistent should be used for %s, instead of pci_alloc_consistent/memset" % (x)
|
||||
coccilib.report.print_report(p[0], msg)
|
||||
//-----------------------------------------------------------------
|
||||
@r9 depends on org || report@
|
||||
type T, T2;
|
||||
|
|
|
|||
|
|
@ -9,21 +9,11 @@ dtc-objs := dtc.o flattree.o fstree.o data.o livetree.o treesource.o \
|
|||
dtc-objs += dtc-lexer.lex.o dtc-parser.tab.o
|
||||
|
||||
# Source files need to get at the userspace version of libfdt_env.h to compile
|
||||
HOST_EXTRACFLAGS := -I$(src)/libfdt
|
||||
|
||||
HOSTCFLAGS_DTC := -I$(src) -I$(src)/libfdt
|
||||
|
||||
HOSTCFLAGS_checks.o := $(HOSTCFLAGS_DTC)
|
||||
HOSTCFLAGS_data.o := $(HOSTCFLAGS_DTC)
|
||||
HOSTCFLAGS_dtc.o := $(HOSTCFLAGS_DTC)
|
||||
HOSTCFLAGS_flattree.o := $(HOSTCFLAGS_DTC)
|
||||
HOSTCFLAGS_fstree.o := $(HOSTCFLAGS_DTC)
|
||||
HOSTCFLAGS_livetree.o := $(HOSTCFLAGS_DTC)
|
||||
HOSTCFLAGS_srcpos.o := $(HOSTCFLAGS_DTC)
|
||||
HOSTCFLAGS_treesource.o := $(HOSTCFLAGS_DTC)
|
||||
HOSTCFLAGS_util.o := $(HOSTCFLAGS_DTC)
|
||||
|
||||
HOSTCFLAGS_dtc-lexer.lex.o := $(HOSTCFLAGS_DTC)
|
||||
HOSTCFLAGS_dtc-parser.tab.o := $(HOSTCFLAGS_DTC)
|
||||
# Generated files need one more search path to include headers in source tree
|
||||
HOSTCFLAGS_dtc-lexer.lex.o := -I$(src)
|
||||
HOSTCFLAGS_dtc-parser.tab.o := -I$(src)
|
||||
|
||||
# dependencies on generated files need to be listed explicitly
|
||||
$(obj)/dtc-lexer.lex.o: $(obj)/dtc-parser.tab.h
|
||||
|
|
|
|||
|
|
@ -1,328 +0,0 @@
|
|||
#!/bin/sh
|
||||
# Copyright (C) Martin Schlemmer <azarah@nosferatu.za.org>
|
||||
# Copyright (C) 2006 Sam Ravnborg <sam@ravnborg.org>
|
||||
#
|
||||
# Released under the terms of the GNU GPL
|
||||
#
|
||||
# Generate a cpio packed initramfs. It uses gen_init_cpio to generate
|
||||
# the cpio archive, and then compresses it.
|
||||
# The script may also be used to generate the inputfile used for gen_init_cpio
|
||||
# This script assumes that gen_init_cpio is located in usr/ directory
|
||||
|
||||
# error out on errors
|
||||
set -e
|
||||
|
||||
usage() {
|
||||
cat << EOF
|
||||
Usage:
|
||||
$0 [-o <file>] [-u <uid>] [-g <gid>] {-d | <cpio_source>} ...
|
||||
-o <file> Create compressed initramfs file named <file> using
|
||||
gen_init_cpio and compressor depending on the extension
|
||||
-u <uid> User ID to map to user ID 0 (root).
|
||||
<uid> is only meaningful if <cpio_source> is a
|
||||
directory. "squash" forces all files to uid 0.
|
||||
-g <gid> Group ID to map to group ID 0 (root).
|
||||
<gid> is only meaningful if <cpio_source> is a
|
||||
directory. "squash" forces all files to gid 0.
|
||||
<cpio_source> File list or directory for cpio archive.
|
||||
If <cpio_source> is a .cpio file it will be used
|
||||
as direct input to initramfs.
|
||||
-d Output the default cpio list.
|
||||
|
||||
All options except -o and -l may be repeated and are interpreted
|
||||
sequentially and immediately. -u and -g states are preserved across
|
||||
<cpio_source> options so an explicit "-u 0 -g 0" is required
|
||||
to reset the root/group mapping.
|
||||
EOF
|
||||
}
|
||||
|
||||
# awk style field access
|
||||
# $1 - field number; rest is argument string
|
||||
field() {
|
||||
shift $1 ; echo $1
|
||||
}
|
||||
|
||||
list_default_initramfs() {
|
||||
# echo usr/kinit/kinit
|
||||
:
|
||||
}
|
||||
|
||||
default_initramfs() {
|
||||
cat <<-EOF >> ${output}
|
||||
# This is a very simple, default initramfs
|
||||
|
||||
dir /dev 0755 0 0
|
||||
nod /dev/console 0600 0 0 c 5 1
|
||||
dir /root 0700 0 0
|
||||
# file /kinit usr/kinit/kinit 0755 0 0
|
||||
# slink /init kinit 0755 0 0
|
||||
EOF
|
||||
}
|
||||
|
||||
filetype() {
|
||||
local argv1="$1"
|
||||
|
||||
# symlink test must come before file test
|
||||
if [ -L "${argv1}" ]; then
|
||||
echo "slink"
|
||||
elif [ -f "${argv1}" ]; then
|
||||
echo "file"
|
||||
elif [ -d "${argv1}" ]; then
|
||||
echo "dir"
|
||||
elif [ -b "${argv1}" -o -c "${argv1}" ]; then
|
||||
echo "nod"
|
||||
elif [ -p "${argv1}" ]; then
|
||||
echo "pipe"
|
||||
elif [ -S "${argv1}" ]; then
|
||||
echo "sock"
|
||||
else
|
||||
echo "invalid"
|
||||
fi
|
||||
return 0
|
||||
}
|
||||
|
||||
list_print_mtime() {
|
||||
:
|
||||
}
|
||||
|
||||
print_mtime() {
|
||||
local my_mtime="0"
|
||||
|
||||
if [ -e "$1" ]; then
|
||||
my_mtime=$(find "$1" -printf "%T@\n" | sort -r | head -n 1)
|
||||
fi
|
||||
|
||||
echo "# Last modified: ${my_mtime}" >> ${output}
|
||||
echo "" >> ${output}
|
||||
}
|
||||
|
||||
list_parse() {
|
||||
if [ -L "$1" ]; then
|
||||
return
|
||||
fi
|
||||
echo "$1" | sed 's/:/\\:/g; s/$/ \\/'
|
||||
}
|
||||
|
||||
# for each file print a line in following format
|
||||
# <filetype> <name> <path to file> <octal mode> <uid> <gid>
|
||||
# for links, devices etc the format differs. See gen_init_cpio for details
|
||||
parse() {
|
||||
local location="$1"
|
||||
local name="/${location#${srcdir}}"
|
||||
# change '//' into '/'
|
||||
name=$(echo "$name" | sed -e 's://*:/:g')
|
||||
local mode="$2"
|
||||
local uid="$3"
|
||||
local gid="$4"
|
||||
local ftype=$(filetype "${location}")
|
||||
# remap uid/gid to 0 if necessary
|
||||
[ "$root_uid" = "squash" ] && uid=0 || [ "$uid" -eq "$root_uid" ] && uid=0
|
||||
[ "$root_gid" = "squash" ] && gid=0 || [ "$gid" -eq "$root_gid" ] && gid=0
|
||||
local str="${mode} ${uid} ${gid}"
|
||||
|
||||
[ "${ftype}" = "invalid" ] && return 0
|
||||
[ "${location}" = "${srcdir}" ] && return 0
|
||||
|
||||
case "${ftype}" in
|
||||
"file")
|
||||
str="${ftype} ${name} ${location} ${str}"
|
||||
;;
|
||||
"nod")
|
||||
local dev=`LC_ALL=C ls -l "${location}"`
|
||||
local maj=`field 5 ${dev}`
|
||||
local min=`field 6 ${dev}`
|
||||
maj=${maj%,}
|
||||
|
||||
[ -b "${location}" ] && dev="b" || dev="c"
|
||||
|
||||
str="${ftype} ${name} ${str} ${dev} ${maj} ${min}"
|
||||
;;
|
||||
"slink")
|
||||
local target=`readlink "${location}"`
|
||||
str="${ftype} ${name} ${target} ${str}"
|
||||
;;
|
||||
*)
|
||||
str="${ftype} ${name} ${str}"
|
||||
;;
|
||||
esac
|
||||
|
||||
echo "${str}" >> ${output}
|
||||
|
||||
return 0
|
||||
}
|
||||
|
||||
unknown_option() {
|
||||
printf "ERROR: unknown option \"$arg\"\n" >&2
|
||||
printf "If the filename validly begins with '-', " >&2
|
||||
printf "then it must be prefixed\n" >&2
|
||||
printf "by './' so that it won't be interpreted as an option." >&2
|
||||
printf "\n" >&2
|
||||
usage >&2
|
||||
exit 1
|
||||
}
|
||||
|
||||
list_header() {
|
||||
:
|
||||
}
|
||||
|
||||
header() {
|
||||
printf "\n#####################\n# $1\n" >> ${output}
|
||||
}
|
||||
|
||||
# process one directory (incl sub-directories)
|
||||
dir_filelist() {
|
||||
${dep_list}header "$1"
|
||||
|
||||
srcdir=$(echo "$1" | sed -e 's://*:/:g')
|
||||
dirlist=$(find "${srcdir}" -printf "%p %m %U %G\n" | sort)
|
||||
|
||||
# If $dirlist is only one line, then the directory is empty
|
||||
if [ "$(echo "${dirlist}" | wc -l)" -gt 1 ]; then
|
||||
${dep_list}print_mtime "$1"
|
||||
|
||||
echo "${dirlist}" | \
|
||||
while read x; do
|
||||
${dep_list}parse ${x}
|
||||
done
|
||||
fi
|
||||
}
|
||||
|
||||
# if only one file is specified and it is .cpio file then use it direct as fs
|
||||
# if a directory is specified then add all files in given direcotry to fs
|
||||
# if a regular file is specified assume it is in gen_initramfs format
|
||||
input_file() {
|
||||
source="$1"
|
||||
if [ -f "$1" ]; then
|
||||
${dep_list}header "$1"
|
||||
is_cpio="$(echo "$1" | sed 's/^.*\.cpio\(\..*\)\{0,1\}/cpio/')"
|
||||
if [ $2 -eq 0 -a ${is_cpio} = "cpio" ]; then
|
||||
cpio_file=$1
|
||||
echo "$1" | grep -q '^.*\.cpio\..*' && is_cpio_compressed="compressed"
|
||||
[ ! -z ${dep_list} ] && echo "$1"
|
||||
return 0
|
||||
fi
|
||||
if [ -z ${dep_list} ]; then
|
||||
print_mtime "$1" >> ${output}
|
||||
cat "$1" >> ${output}
|
||||
else
|
||||
echo "$1 \\"
|
||||
cat "$1" | while read type dir file perm ; do
|
||||
if [ "$type" = "file" ]; then
|
||||
echo "$file \\";
|
||||
fi
|
||||
done
|
||||
fi
|
||||
elif [ -d "$1" ]; then
|
||||
dir_filelist "$1"
|
||||
else
|
||||
echo " ${prog}: Cannot open '$1'" >&2
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
prog=$0
|
||||
root_uid=0
|
||||
root_gid=0
|
||||
dep_list=
|
||||
cpio_file=
|
||||
cpio_list=
|
||||
output="/dev/stdout"
|
||||
output_file=""
|
||||
is_cpio_compressed=
|
||||
compr="gzip -n -9 -f"
|
||||
|
||||
arg="$1"
|
||||
case "$arg" in
|
||||
"-l") # files included in initramfs - used by kbuild
|
||||
dep_list="list_"
|
||||
echo "deps_initramfs := $0 \\"
|
||||
shift
|
||||
;;
|
||||
"-o") # generate compressed cpio image named $1
|
||||
shift
|
||||
output_file="$1"
|
||||
cpio_list="$(mktemp ${TMPDIR:-/tmp}/cpiolist.XXXXXX)"
|
||||
output=${cpio_list}
|
||||
echo "$output_file" | grep -q "\.gz$" \
|
||||
&& [ -x "`which gzip 2> /dev/null`" ] \
|
||||
&& compr="gzip -n -9 -f"
|
||||
echo "$output_file" | grep -q "\.bz2$" \
|
||||
&& [ -x "`which bzip2 2> /dev/null`" ] \
|
||||
&& compr="bzip2 -9 -f"
|
||||
echo "$output_file" | grep -q "\.lzma$" \
|
||||
&& [ -x "`which lzma 2> /dev/null`" ] \
|
||||
&& compr="lzma -9 -f"
|
||||
echo "$output_file" | grep -q "\.xz$" \
|
||||
&& [ -x "`which xz 2> /dev/null`" ] \
|
||||
&& compr="xz --check=crc32 --lzma2=dict=1MiB"
|
||||
echo "$output_file" | grep -q "\.lzo$" \
|
||||
&& [ -x "`which lzop 2> /dev/null`" ] \
|
||||
&& compr="lzop -9 -f"
|
||||
echo "$output_file" | grep -q "\.lz4$" \
|
||||
&& [ -x "`which lz4 2> /dev/null`" ] \
|
||||
&& compr="lz4 -l -9 -f"
|
||||
echo "$output_file" | grep -q "\.cpio$" && compr="cat"
|
||||
shift
|
||||
;;
|
||||
esac
|
||||
while [ $# -gt 0 ]; do
|
||||
arg="$1"
|
||||
shift
|
||||
case "$arg" in
|
||||
"-u") # map $1 to uid=0 (root)
|
||||
root_uid="$1"
|
||||
[ "$root_uid" = "-1" ] && root_uid=$(id -u || echo 0)
|
||||
shift
|
||||
;;
|
||||
"-g") # map $1 to gid=0 (root)
|
||||
root_gid="$1"
|
||||
[ "$root_gid" = "-1" ] && root_gid=$(id -g || echo 0)
|
||||
shift
|
||||
;;
|
||||
"-d") # display default initramfs list
|
||||
default_list="$arg"
|
||||
${dep_list}default_initramfs
|
||||
;;
|
||||
"-h")
|
||||
usage
|
||||
exit 0
|
||||
;;
|
||||
*)
|
||||
case "$arg" in
|
||||
"-"*)
|
||||
unknown_option
|
||||
;;
|
||||
*) # input file/dir - process it
|
||||
input_file "$arg" "$#"
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
# If output_file is set we will generate cpio archive and compress it
|
||||
# we are careful to delete tmp files
|
||||
if [ ! -z ${output_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)"
|
||||
usr/gen_init_cpio $timestamp ${cpio_list} > ${cpio_tfile}
|
||||
else
|
||||
cpio_tfile=${cpio_file}
|
||||
fi
|
||||
rm ${cpio_list}
|
||||
if [ "${is_cpio_compressed}" = "compressed" ]; then
|
||||
cat ${cpio_tfile} > ${output_file}
|
||||
else
|
||||
(cat ${cpio_tfile} | ${compr} - > ${output_file}) \
|
||||
|| (rm -f ${output_file} ; false)
|
||||
fi
|
||||
[ -z ${cpio_file} ] && rm ${cpio_tfile}
|
||||
fi
|
||||
exit 0
|
||||
|
|
@ -3,7 +3,8 @@
|
|||
# Kernel configuration targets
|
||||
# These targets are used from top-level makefile
|
||||
|
||||
PHONY += xconfig gconfig menuconfig config localmodconfig localyesconfig
|
||||
PHONY += xconfig gconfig menuconfig config localmodconfig localyesconfig \
|
||||
build_menuconfig build_nconfig build_gconfig build_xconfig
|
||||
|
||||
ifdef KBUILD_KCONFIG
|
||||
Kconfig := $(KBUILD_KCONFIG)
|
||||
|
|
@ -33,6 +34,14 @@ config: $(obj)/conf
|
|||
nconfig: $(obj)/nconf
|
||||
$< $(silent) $(Kconfig)
|
||||
|
||||
build_menuconfig: $(obj)/mconf
|
||||
|
||||
build_nconfig: $(obj)/nconf
|
||||
|
||||
build_gconfig: $(obj)/gconf
|
||||
|
||||
build_xconfig: $(obj)/qconf
|
||||
|
||||
localyesconfig localmodconfig: $(obj)/conf
|
||||
$(Q)perl $(srctree)/$(src)/streamline_config.pl --$@ $(srctree) $(Kconfig) > .tmp.config
|
||||
$(Q)if [ -f .config ]; then \
|
||||
|
|
@ -169,7 +178,7 @@ HOSTLDLIBS_nconf = $(shell . $(obj)/.nconf-cfg && echo $$libs)
|
|||
HOSTCFLAGS_nconf.o = $(shell . $(obj)/.nconf-cfg && echo $$cflags)
|
||||
HOSTCFLAGS_nconf.gui.o = $(shell . $(obj)/.nconf-cfg && echo $$cflags)
|
||||
|
||||
$(obj)/nconf.o: $(obj)/.nconf-cfg
|
||||
$(obj)/nconf.o $(obj)/nconf.gui.o: $(obj)/.nconf-cfg
|
||||
|
||||
# mconf: Used for the menuconfig target based on lxdialog
|
||||
hostprogs-y += mconf
|
||||
|
|
@ -180,7 +189,8 @@ HOSTLDLIBS_mconf = $(shell . $(obj)/.mconf-cfg && echo $$libs)
|
|||
$(foreach f, mconf.o $(lxdialog), \
|
||||
$(eval HOSTCFLAGS_$f = $$(shell . $(obj)/.mconf-cfg && echo $$$$cflags)))
|
||||
|
||||
$(addprefix $(obj)/, mconf.o $(lxdialog)): $(obj)/.mconf-cfg
|
||||
$(obj)/mconf.o: $(obj)/.mconf-cfg
|
||||
$(addprefix $(obj)/lxdialog/, $(lxdialog)): $(obj)/.mconf-cfg
|
||||
|
||||
# qconf: Used for the xconfig target based on Qt
|
||||
hostprogs-y += qconf
|
||||
|
|
|
|||
|
|
@ -508,6 +508,11 @@ int main(int ac, char **av)
|
|||
input_mode = (enum input_mode)opt;
|
||||
switch (opt) {
|
||||
case syncconfig:
|
||||
/*
|
||||
* syncconfig is invoked during the build stage.
|
||||
* Suppress distracting "configuration written to ..."
|
||||
*/
|
||||
conf_set_message_callback(NULL);
|
||||
sync_kconfig = 1;
|
||||
break;
|
||||
case defconfig:
|
||||
|
|
|
|||
|
|
@ -1011,7 +1011,7 @@ static struct dep_stack {
|
|||
struct dep_stack *prev, *next;
|
||||
struct symbol *sym;
|
||||
struct property *prop;
|
||||
struct expr *expr;
|
||||
struct expr **expr;
|
||||
} *check_top;
|
||||
|
||||
static void dep_stack_insert(struct dep_stack *stack, struct symbol *sym)
|
||||
|
|
@ -1076,18 +1076,7 @@ static void sym_check_print_recursive(struct symbol *last_sym)
|
|||
fprintf(stderr, "%s:%d:error: recursive dependency detected!\n",
|
||||
prop->file->name, prop->lineno);
|
||||
|
||||
if (stack->expr) {
|
||||
fprintf(stderr, "%s:%d:\tsymbol %s %s value contains %s\n",
|
||||
prop->file->name, prop->lineno,
|
||||
sym->name ? sym->name : "<choice>",
|
||||
prop_get_type_name(prop->type),
|
||||
next_sym->name ? next_sym->name : "<choice>");
|
||||
} else if (stack->prop) {
|
||||
fprintf(stderr, "%s:%d:\tsymbol %s depends on %s\n",
|
||||
prop->file->name, prop->lineno,
|
||||
sym->name ? sym->name : "<choice>",
|
||||
next_sym->name ? next_sym->name : "<choice>");
|
||||
} else if (sym_is_choice(sym)) {
|
||||
if (sym_is_choice(sym)) {
|
||||
fprintf(stderr, "%s:%d:\tchoice %s contains symbol %s\n",
|
||||
menu->file->name, menu->lineno,
|
||||
sym->name ? sym->name : "<choice>",
|
||||
|
|
@ -1097,11 +1086,33 @@ static void sym_check_print_recursive(struct symbol *last_sym)
|
|||
menu->file->name, menu->lineno,
|
||||
sym->name ? sym->name : "<choice>",
|
||||
next_sym->name ? next_sym->name : "<choice>");
|
||||
} else {
|
||||
} else if (stack->expr == &sym->dir_dep.expr) {
|
||||
fprintf(stderr, "%s:%d:\tsymbol %s depends on %s\n",
|
||||
prop->file->name, prop->lineno,
|
||||
sym->name ? sym->name : "<choice>",
|
||||
next_sym->name ? next_sym->name : "<choice>");
|
||||
} else if (stack->expr == &sym->rev_dep.expr) {
|
||||
fprintf(stderr, "%s:%d:\tsymbol %s is selected by %s\n",
|
||||
prop->file->name, prop->lineno,
|
||||
sym->name ? sym->name : "<choice>",
|
||||
next_sym->name ? next_sym->name : "<choice>");
|
||||
} else if (stack->expr == &sym->implied.expr) {
|
||||
fprintf(stderr, "%s:%d:\tsymbol %s is implied by %s\n",
|
||||
prop->file->name, prop->lineno,
|
||||
sym->name ? sym->name : "<choice>",
|
||||
next_sym->name ? next_sym->name : "<choice>");
|
||||
} else if (stack->expr) {
|
||||
fprintf(stderr, "%s:%d:\tsymbol %s %s value contains %s\n",
|
||||
prop->file->name, prop->lineno,
|
||||
sym->name ? sym->name : "<choice>",
|
||||
prop_get_type_name(prop->type),
|
||||
next_sym->name ? next_sym->name : "<choice>");
|
||||
} else {
|
||||
fprintf(stderr, "%s:%d:\tsymbol %s %s is visible depending on %s\n",
|
||||
prop->file->name, prop->lineno,
|
||||
sym->name ? sym->name : "<choice>",
|
||||
prop_get_type_name(prop->type),
|
||||
next_sym->name ? next_sym->name : "<choice>");
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1157,12 +1168,26 @@ static struct symbol *sym_check_sym_deps(struct symbol *sym)
|
|||
|
||||
dep_stack_insert(&stack, sym);
|
||||
|
||||
stack.expr = &sym->dir_dep.expr;
|
||||
sym2 = sym_check_expr_deps(sym->dir_dep.expr);
|
||||
if (sym2)
|
||||
goto out;
|
||||
|
||||
stack.expr = &sym->rev_dep.expr;
|
||||
sym2 = sym_check_expr_deps(sym->rev_dep.expr);
|
||||
if (sym2)
|
||||
goto out;
|
||||
|
||||
stack.expr = &sym->implied.expr;
|
||||
sym2 = sym_check_expr_deps(sym->implied.expr);
|
||||
if (sym2)
|
||||
goto out;
|
||||
|
||||
stack.expr = NULL;
|
||||
|
||||
for (prop = sym->prop; prop; prop = prop->next) {
|
||||
if (prop->type == P_CHOICE || prop->type == P_SELECT)
|
||||
if (prop->type == P_CHOICE || prop->type == P_SELECT ||
|
||||
prop->type == P_IMPLY)
|
||||
continue;
|
||||
stack.prop = prop;
|
||||
sym2 = sym_check_expr_deps(prop->visible.expr);
|
||||
|
|
@ -1170,7 +1195,7 @@ static struct symbol *sym_check_sym_deps(struct symbol *sym)
|
|||
break;
|
||||
if (prop->type != P_DEFAULT || sym_is_choice(sym))
|
||||
continue;
|
||||
stack.expr = prop->expr;
|
||||
stack.expr = &prop->expr;
|
||||
sym2 = sym_check_expr_deps(prop->expr);
|
||||
if (sym2)
|
||||
break;
|
||||
|
|
@ -1248,9 +1273,6 @@ struct symbol *sym_check_deps(struct symbol *sym)
|
|||
sym->flags &= ~SYMBOL_CHECK;
|
||||
}
|
||||
|
||||
if (sym2 && sym2 == sym)
|
||||
sym2 = NULL;
|
||||
|
||||
return sym2;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,3 +1,5 @@
|
|||
# SPDX-License-Identifier: GPL-2.0
|
||||
|
||||
# depends on itself
|
||||
|
||||
config A
|
||||
|
|
@ -31,7 +33,6 @@ config D2
|
|||
bool
|
||||
|
||||
# depends on and imply
|
||||
# This is not recursive dependency
|
||||
|
||||
config E1
|
||||
bool "E1"
|
||||
10
scripts/kconfig/tests/err_recursive_dep/__init__.py
Normal file
10
scripts/kconfig/tests/err_recursive_dep/__init__.py
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
# SPDX-License-Identifier: GPL-2.0
|
||||
"""
|
||||
Detect recursive dependency error.
|
||||
|
||||
Recursive dependency should be treated as an error.
|
||||
"""
|
||||
|
||||
def test(conf):
|
||||
assert conf.oldaskconfig() == 1
|
||||
assert conf.stderr_contains('expected_stderr')
|
||||
38
scripts/kconfig/tests/err_recursive_dep/expected_stderr
Normal file
38
scripts/kconfig/tests/err_recursive_dep/expected_stderr
Normal file
|
|
@ -0,0 +1,38 @@
|
|||
Kconfig:11:error: recursive dependency detected!
|
||||
Kconfig:11: symbol B is selected by B
|
||||
For a resolution refer to Documentation/kbuild/kconfig-language.txt
|
||||
subsection "Kconfig recursive dependency limitations"
|
||||
|
||||
Kconfig:5:error: recursive dependency detected!
|
||||
Kconfig:5: symbol A depends on A
|
||||
For a resolution refer to Documentation/kbuild/kconfig-language.txt
|
||||
subsection "Kconfig recursive dependency limitations"
|
||||
|
||||
Kconfig:17:error: recursive dependency detected!
|
||||
Kconfig:17: symbol C1 depends on C2
|
||||
Kconfig:21: symbol C2 depends on C1
|
||||
For a resolution refer to Documentation/kbuild/kconfig-language.txt
|
||||
subsection "Kconfig recursive dependency limitations"
|
||||
|
||||
Kconfig:32:error: recursive dependency detected!
|
||||
Kconfig:32: symbol D2 is selected by D1
|
||||
Kconfig:27: symbol D1 depends on D2
|
||||
For a resolution refer to Documentation/kbuild/kconfig-language.txt
|
||||
subsection "Kconfig recursive dependency limitations"
|
||||
|
||||
Kconfig:37:error: recursive dependency detected!
|
||||
Kconfig:37: symbol E1 depends on E2
|
||||
Kconfig:42: symbol E2 is implied by E1
|
||||
For a resolution refer to Documentation/kbuild/kconfig-language.txt
|
||||
subsection "Kconfig recursive dependency limitations"
|
||||
|
||||
Kconfig:60:error: recursive dependency detected!
|
||||
Kconfig:60: symbol G depends on G
|
||||
For a resolution refer to Documentation/kbuild/kconfig-language.txt
|
||||
subsection "Kconfig recursive dependency limitations"
|
||||
|
||||
Kconfig:51:error: recursive dependency detected!
|
||||
Kconfig:51: symbol F2 depends on F1
|
||||
Kconfig:49: symbol F1 default value contains F2
|
||||
For a resolution refer to Documentation/kbuild/kconfig-language.txt
|
||||
subsection "Kconfig recursive dependency limitations"
|
||||
|
|
@ -1,9 +0,0 @@
|
|||
"""
|
||||
Warn recursive inclusion.
|
||||
|
||||
Recursive dependency should be warned.
|
||||
"""
|
||||
|
||||
def test(conf):
|
||||
assert conf.oldaskconfig() == 0
|
||||
assert conf.stderr_contains('expected_stderr')
|
||||
|
|
@ -1,30 +0,0 @@
|
|||
Kconfig:9:error: recursive dependency detected!
|
||||
Kconfig:9: symbol B is selected by B
|
||||
For a resolution refer to Documentation/kbuild/kconfig-language.txt
|
||||
subsection "Kconfig recursive dependency limitations"
|
||||
|
||||
Kconfig:3:error: recursive dependency detected!
|
||||
Kconfig:3: symbol A depends on A
|
||||
For a resolution refer to Documentation/kbuild/kconfig-language.txt
|
||||
subsection "Kconfig recursive dependency limitations"
|
||||
|
||||
Kconfig:15:error: recursive dependency detected!
|
||||
Kconfig:15: symbol C1 depends on C2
|
||||
Kconfig:19: symbol C2 depends on C1
|
||||
For a resolution refer to Documentation/kbuild/kconfig-language.txt
|
||||
subsection "Kconfig recursive dependency limitations"
|
||||
|
||||
Kconfig:30:error: recursive dependency detected!
|
||||
Kconfig:30: symbol D2 is selected by D1
|
||||
Kconfig:25: symbol D1 depends on D2
|
||||
For a resolution refer to Documentation/kbuild/kconfig-language.txt
|
||||
subsection "Kconfig recursive dependency limitations"
|
||||
|
||||
Kconfig:59:error: recursive dependency detected!
|
||||
Kconfig:59: symbol G depends on G
|
||||
For a resolution refer to Documentation/kbuild/kconfig-language.txt
|
||||
subsection "Kconfig recursive dependency limitations"
|
||||
|
||||
Kconfig:50:error: recursive dependency detected!
|
||||
Kconfig:50: symbol F2 depends on F1
|
||||
Kconfig:48: symbol F1 default value contains F2
|
||||
|
|
@ -75,7 +75,7 @@ modpost_link()
|
|||
${KBUILD_VMLINUX_LIBS} \
|
||||
--end-group"
|
||||
|
||||
${LD} ${LDFLAGS} -r -o ${1} ${objects}
|
||||
${LD} ${KBUILD_LDFLAGS} -r -o ${1} ${objects}
|
||||
}
|
||||
|
||||
# Link of vmlinux
|
||||
|
|
@ -95,7 +95,7 @@ vmlinux_link()
|
|||
--end-group \
|
||||
${1}"
|
||||
|
||||
${LD} ${LDFLAGS} ${LDFLAGS_vmlinux} -o ${2} \
|
||||
${LD} ${KBUILD_LDFLAGS} ${LDFLAGS_vmlinux} -o ${2} \
|
||||
-T ${lds} ${objects}
|
||||
else
|
||||
objects="-Wl,--whole-archive \
|
||||
|
|
|
|||
|
|
@ -672,7 +672,7 @@ static void handle_modversions(struct module *mod, struct elf_info *info,
|
|||
if (ELF_ST_TYPE(sym->st_info) == STT_SPARC_REGISTER)
|
||||
break;
|
||||
if (symname[0] == '.') {
|
||||
char *munged = strdup(symname);
|
||||
char *munged = NOFAIL(strdup(symname));
|
||||
munged[0] = '_';
|
||||
munged[1] = toupper(munged[1]);
|
||||
symname = munged;
|
||||
|
|
@ -1318,7 +1318,7 @@ static Elf_Sym *find_elf_symbol2(struct elf_info *elf, Elf_Addr addr,
|
|||
static char *sec2annotation(const char *s)
|
||||
{
|
||||
if (match(s, init_exit_sections)) {
|
||||
char *p = malloc(20);
|
||||
char *p = NOFAIL(malloc(20));
|
||||
char *r = p;
|
||||
|
||||
*p++ = '_';
|
||||
|
|
@ -1338,7 +1338,7 @@ static char *sec2annotation(const char *s)
|
|||
strcat(p, " ");
|
||||
return r;
|
||||
} else {
|
||||
return strdup("");
|
||||
return NOFAIL(strdup(""));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -2036,7 +2036,7 @@ void buf_write(struct buffer *buf, const char *s, int len)
|
|||
{
|
||||
if (buf->size - buf->pos < len) {
|
||||
buf->size += len + SZ;
|
||||
buf->p = realloc(buf->p, buf->size);
|
||||
buf->p = NOFAIL(realloc(buf->p, buf->size));
|
||||
}
|
||||
strncpy(buf->p + buf->pos, s, len);
|
||||
buf->pos += len;
|
||||
|
|
|
|||
Loading…
Reference in a new issue