mirror of
https://github.com/tbsdtv/linux_media.git
synced 2025-07-23 04:33:26 +02:00
Merge tag 'kbuild-v5.12' of git://git.kernel.org/pub/scm/linux/kernel/git/masahiroy/linux-kbuild
Pull Kbuild updates from Masahiro Yamada: - Fix false-positive build warnings for ARCH=ia64 builds - Optimize dictionary size for module compression with xz - Check the compiler and linker versions in Kconfig - Fix misuse of extra-y - Support DWARF v5 debug info - Clamp SUBLEVEL to 255 because stable releases 4.4.x and 4.9.x exceeded the limit - Add generic syscall{tbl,hdr}.sh for cleanups across arches - Minor cleanups of genksyms - Minor cleanups of Kconfig * tag 'kbuild-v5.12' of git://git.kernel.org/pub/scm/linux/kernel/git/masahiroy/linux-kbuild: (38 commits) initramfs: Remove redundant dependency of RD_ZSTD on BLK_DEV_INITRD kbuild: remove deprecated 'always' and 'hostprogs-y/m' kbuild: parse C= and M= before changing the working directory kbuild: reuse this-makefile to define abs_srctree kconfig: unify rule of config, menuconfig, nconfig, gconfig, xconfig kconfig: omit --oldaskconfig option for 'make config' kconfig: fix 'invalid option' for help option kconfig: remove dead code in conf_askvalue() kconfig: clean up nested if-conditionals in check_conf() kconfig: Remove duplicate call to sym_get_string_value() Makefile: Remove # characters from compiler string Makefile: reuse CC_VERSION_TEXT kbuild: check the minimum linker version in Kconfig kbuild: remove ld-version macro scripts: add generic syscallhdr.sh scripts: add generic syscalltbl.sh arch: syscalls: remove $(srctree)/ prefix from syscall tables arch: syscalls: add missing FORCE and fix 'targets' to make if_changed work gen_compile_commands: prune some directories kbuild: simplify access to the kernel's version ...
This commit is contained in:
@@ -141,13 +141,9 @@ cc-ifversion = $(shell [ $(CONFIG_GCC_VERSION)0 $(1) $(2)000 ] && echo $(3) || e
|
||||
# Usage: KBUILD_LDFLAGS += $(call ld-option, -X, -Y)
|
||||
ld-option = $(call try-run, $(LD) $(KBUILD_LDFLAGS) $(1) -v,$(1),$(2),$(3))
|
||||
|
||||
# ld-version
|
||||
# Note this is mainly for HJ Lu's 3 number binutil versions
|
||||
ld-version = $(shell $(LD) --version | $(srctree)/scripts/ld-version.sh)
|
||||
|
||||
# ld-ifversion
|
||||
# Usage: $(call ld-ifversion, -ge, 22252, y)
|
||||
ld-ifversion = $(shell [ $(ld-version) $(1) $(2) ] && echo $(3) || echo $(4))
|
||||
ld-ifversion = $(shell [ $(CONFIG_LD_VERSION)0 $(1) $(2)0 ] && echo $(3) || echo $(4))
|
||||
|
||||
######
|
||||
|
||||
|
@@ -39,8 +39,17 @@ as-instr = $(success,printf "%b\n" "$(1)" | $(CC) $(CLANG_FLAGS) -c -x assembler
|
||||
$(error-if,$(failure,command -v $(CC)),compiler '$(CC)' not found)
|
||||
$(error-if,$(failure,command -v $(LD)),linker '$(LD)' not found)
|
||||
|
||||
# Fail if the linker is gold as it's not capable of linking the kernel proper
|
||||
$(error-if,$(success, $(LD) -v | grep -q gold), gold linker '$(LD)' not supported)
|
||||
# Get the compiler name, version, and error out if it is not supported.
|
||||
cc-info := $(shell,$(srctree)/scripts/cc-version.sh $(CC))
|
||||
$(error-if,$(success,test -z "$(cc-info)"),Sorry$(comma) this compiler is not supported.)
|
||||
cc-name := $(shell,set -- $(cc-info) && echo $1)
|
||||
cc-version := $(shell,set -- $(cc-info) && echo $2)
|
||||
|
||||
# Get the linker name, version, and error out if it is not supported.
|
||||
ld-info := $(shell,$(srctree)/scripts/ld-version.sh $(LD))
|
||||
$(error-if,$(success,test -z "$(ld-info)"),Sorry$(comma) this linker is not supported.)
|
||||
ld-name := $(shell,set -- $(ld-info) && echo $1)
|
||||
ld-version := $(shell,set -- $(ld-info) && echo $2)
|
||||
|
||||
# machine bit flags
|
||||
# $(m32-flag): -m32 if the compiler supports it, or an empty string otherwise.
|
||||
|
@@ -15,7 +15,6 @@ obj-y :=
|
||||
obj-m :=
|
||||
lib-y :=
|
||||
lib-m :=
|
||||
always :=
|
||||
always-y :=
|
||||
always-m :=
|
||||
targets :=
|
||||
|
@@ -34,9 +34,6 @@ __clean-files := \
|
||||
$(hostprogs-always-y) $(hostprogs-always-m) $(hostprogs-always-) \
|
||||
$(userprogs-always-y) $(userprogs-always-m) $(userprogs-always-)
|
||||
|
||||
# deprecated
|
||||
__clean-files += $(always) $(hostprogs-y) $(hostprogs-m) $(hostprogs-)
|
||||
|
||||
__clean-files := $(filter-out $(no-clean-files), $(__clean-files))
|
||||
|
||||
# clean-files is given relative to the current directory, unless it
|
||||
|
@@ -4,18 +4,6 @@ asflags-y += $(EXTRA_AFLAGS)
|
||||
ccflags-y += $(EXTRA_CFLAGS)
|
||||
cppflags-y += $(EXTRA_CPPFLAGS)
|
||||
ldflags-y += $(EXTRA_LDFLAGS)
|
||||
ifneq ($(always),)
|
||||
$(warning 'always' is deprecated. Please use 'always-y' instead)
|
||||
always-y += $(always)
|
||||
endif
|
||||
ifneq ($(hostprogs-y),)
|
||||
$(warning 'hostprogs-y' is deprecated. Please use 'hostprogs' instead)
|
||||
hostprogs += $(hostprogs-y)
|
||||
endif
|
||||
ifneq ($(hostprogs-m),)
|
||||
$(warning 'hostprogs-m' is deprecated. Please use 'hostprogs' instead)
|
||||
hostprogs += $(hostprogs-m)
|
||||
endif
|
||||
|
||||
# flags that take effect in current and sub directories
|
||||
KBUILD_AFLAGS += $(subdir-asflags-y)
|
||||
@@ -56,15 +44,19 @@ else
|
||||
obj-y := $(filter-out %/, $(obj-y))
|
||||
endif
|
||||
|
||||
# Expand $(foo-objs) $(foo-y) by calling $(call suffix-search,foo.o,-objs -y)
|
||||
suffix-search = $(foreach s,$(2),$($(1:.o=$s)))
|
||||
# If $(foo-objs), $(foo-y), $(foo-m), or $(foo-) exists, foo.o is a composite object
|
||||
multi-used-y := $(sort $(foreach m,$(obj-y), $(if $(strip $($(m:.o=-objs)) $($(m:.o=-y)) $($(m:.o=-))), $(m))))
|
||||
multi-used-m := $(sort $(foreach m,$(obj-m), $(if $(strip $($(m:.o=-objs)) $($(m:.o=-y)) $($(m:.o=-m)) $($(m:.o=-))), $(m))))
|
||||
multi-search = $(sort $(foreach m,$(1), $(if $(strip $(call suffix-search,$(m),$(2) -)), $(m))))
|
||||
multi-used-y := $(call multi-search,$(obj-y),-objs -y)
|
||||
multi-used-m := $(call multi-search,$(obj-m),-objs -y -m)
|
||||
multi-used := $(multi-used-y) $(multi-used-m)
|
||||
|
||||
# Replace multi-part objects by their individual parts,
|
||||
# including built-in.a from subdirectories
|
||||
real-obj-y := $(foreach m, $(obj-y), $(if $(strip $($(m:.o=-objs)) $($(m:.o=-y)) $($(m:.o=-))),$($(m:.o=-objs)) $($(m:.o=-y)),$(m)))
|
||||
real-obj-m := $(foreach m, $(obj-m), $(if $(strip $($(m:.o=-objs)) $($(m:.o=-y)) $($(m:.o=-m)) $($(m:.o=-))),$($(m:.o=-objs)) $($(m:.o=-y)) $($(m:.o=-m)),$(m)))
|
||||
real-search = $(foreach m,$(1), $(if $(strip $(call suffix-search,$(m),$(2) -)),$(call suffix-search,$(m),$(2)),$(m)))
|
||||
real-obj-y := $(call real-search, $(obj-y),-objs -y)
|
||||
real-obj-m := $(call real-search, $(obj-m),-objs -y -m)
|
||||
|
||||
always-y += $(always-m)
|
||||
|
||||
@@ -81,14 +73,14 @@ always-y += $(userprogs-always-y) $(userprogs-always-m)
|
||||
|
||||
# DTB
|
||||
# If CONFIG_OF_ALL_DTBS is enabled, all DT blobs are built
|
||||
extra-y += $(dtb-y)
|
||||
extra-$(CONFIG_OF_ALL_DTBS) += $(dtb-)
|
||||
always-y += $(dtb-y)
|
||||
always-$(CONFIG_OF_ALL_DTBS) += $(dtb-)
|
||||
|
||||
ifneq ($(CHECK_DTBS),)
|
||||
extra-y += $(patsubst %.dtb,%.dt.yaml, $(dtb-y))
|
||||
extra-y += $(patsubst %.dtbo,%.dt.yaml, $(dtb-y))
|
||||
extra-$(CONFIG_OF_ALL_DTBS) += $(patsubst %.dtb,%.dt.yaml, $(dtb-))
|
||||
extra-$(CONFIG_OF_ALL_DTBS) += $(patsubst %.dtbo,%.dt.yaml, $(dtb-))
|
||||
always-y += $(patsubst %.dtb,%.dt.yaml, $(dtb-y))
|
||||
always-y += $(patsubst %.dtbo,%.dt.yaml, $(dtb-y))
|
||||
always-$(CONFIG_OF_ALL_DTBS) += $(patsubst %.dtb,%.dt.yaml, $(dtb-))
|
||||
always-$(CONFIG_OF_ALL_DTBS) += $(patsubst %.dtbo,%.dt.yaml, $(dtb-))
|
||||
endif
|
||||
|
||||
# Add subdir path
|
||||
@@ -263,7 +255,7 @@ $(obj)/%: $(src)/%_shipped
|
||||
# target: source(s) FORCE
|
||||
# $(if_changed,ld/objcopy/gzip)
|
||||
#
|
||||
# and add target to extra-y so that we know we have to
|
||||
# and add target to 'targets' so that we know we have to
|
||||
# read in the saved command line
|
||||
|
||||
# Linking
|
||||
|
82
scripts/cc-version.sh
Executable file
82
scripts/cc-version.sh
Executable file
@@ -0,0 +1,82 @@
|
||||
#!/bin/sh
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
#
|
||||
# Print the compiler name and its version in a 5 or 6-digit form.
|
||||
# Also, perform the minimum version check.
|
||||
|
||||
set -e
|
||||
|
||||
# When you raise the minimum compiler version, please update
|
||||
# Documentation/process/changes.rst as well.
|
||||
gcc_min_version=4.9.0
|
||||
clang_min_version=10.0.1
|
||||
icc_min_version=16.0.3 # temporary
|
||||
|
||||
# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63293
|
||||
# https://lore.kernel.org/r/20210107111841.GN1551@shell.armlinux.org.uk
|
||||
if [ "$SRCARCH" = arm64 ]; then
|
||||
gcc_min_version=5.1.0
|
||||
fi
|
||||
|
||||
# Print the compiler name and some version components.
|
||||
get_compiler_info()
|
||||
{
|
||||
cat <<- EOF | "$@" -E -P -x c - 2>/dev/null
|
||||
#if defined(__clang__)
|
||||
Clang __clang_major__ __clang_minor__ __clang_patchlevel__
|
||||
#elif defined(__INTEL_COMPILER)
|
||||
ICC __INTEL_COMPILER __INTEL_COMPILER_UPDATE
|
||||
#elif defined(__GNUC__)
|
||||
GCC __GNUC__ __GNUC_MINOR__ __GNUC_PATCHLEVEL__
|
||||
#else
|
||||
unknown
|
||||
#endif
|
||||
EOF
|
||||
}
|
||||
|
||||
# Convert the version string x.y.z to a canonical 5 or 6-digit form.
|
||||
get_canonical_version()
|
||||
{
|
||||
IFS=.
|
||||
set -- $1
|
||||
echo $((10000 * $1 + 100 * $2 + $3))
|
||||
}
|
||||
|
||||
# $@ instead of $1 because multiple words might be given, e.g. CC="ccache gcc".
|
||||
orig_args="$@"
|
||||
set -- $(get_compiler_info "$@")
|
||||
|
||||
name=$1
|
||||
|
||||
case "$name" in
|
||||
GCC)
|
||||
version=$2.$3.$4
|
||||
min_version=$gcc_min_version
|
||||
;;
|
||||
Clang)
|
||||
version=$2.$3.$4
|
||||
min_version=$clang_min_version
|
||||
;;
|
||||
ICC)
|
||||
version=$(($2 / 100)).$(($2 % 100)).$3
|
||||
min_version=$icc_min_version
|
||||
;;
|
||||
*)
|
||||
echo "$orig_args: unknown compiler" >&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
cversion=$(get_canonical_version $version)
|
||||
min_cversion=$(get_canonical_version $min_version)
|
||||
|
||||
if [ "$cversion" -lt "$min_cversion" ]; then
|
||||
echo >&2 "***"
|
||||
echo >&2 "*** Compiler is too old."
|
||||
echo >&2 "*** Your $name version: $version"
|
||||
echo >&2 "*** Minimum $name version: $min_version"
|
||||
echo >&2 "***"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo $name $cversion
|
@@ -20,7 +20,9 @@ _DEFAULT_LOG_LEVEL = 'WARNING'
|
||||
_FILENAME_PATTERN = r'^\..*\.cmd$'
|
||||
_LINE_PATTERN = r'^cmd_[^ ]*\.o := (.* )([^ ]*\.c)$'
|
||||
_VALID_LOG_LEVELS = ['DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL']
|
||||
|
||||
# The tools/ directory adopts a different build system, and produces .cmd
|
||||
# files in a different format. Do not support it.
|
||||
_EXCLUDE_DIRS = ['.git', 'Documentation', 'include', 'tools']
|
||||
|
||||
def parse_arguments():
|
||||
"""Sets up and parses command-line arguments.
|
||||
@@ -80,8 +82,14 @@ def cmdfiles_in_dir(directory):
|
||||
"""
|
||||
|
||||
filename_matcher = re.compile(_FILENAME_PATTERN)
|
||||
exclude_dirs = [ os.path.join(directory, d) for d in _EXCLUDE_DIRS ]
|
||||
|
||||
for dirpath, dirnames, filenames in os.walk(directory, topdown=True):
|
||||
# Prune unwanted directories.
|
||||
if dirpath in exclude_dirs:
|
||||
dirnames[:] = []
|
||||
continue
|
||||
|
||||
for dirpath, _, filenames in os.walk(directory):
|
||||
for filename in filenames:
|
||||
if filename_matcher.match(filename):
|
||||
yield os.path.join(dirpath, filename)
|
||||
|
@@ -1,19 +0,0 @@
|
||||
#!/bin/sh
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
#
|
||||
# clang-version clang-command
|
||||
#
|
||||
# Print the compiler version of `clang-command' in a 5 or 6-digit form
|
||||
# such as `50001' for clang-5.0.1 etc.
|
||||
|
||||
compiler="$*"
|
||||
|
||||
if ! ( $compiler --version | grep -q clang) ; then
|
||||
echo 0
|
||||
exit 1
|
||||
fi
|
||||
|
||||
MAJOR=$(echo __clang_major__ | $compiler -E -x c - | tail -n 1)
|
||||
MINOR=$(echo __clang_minor__ | $compiler -E -x c - | tail -n 1)
|
||||
PATCHLEVEL=$(echo __clang_patchlevel__ | $compiler -E -x c - | tail -n 1)
|
||||
printf "%d%02d%02d\\n" $MAJOR $MINOR $PATCHLEVEL
|
@@ -1,20 +0,0 @@
|
||||
#!/bin/sh
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
#
|
||||
# gcc-version gcc-command
|
||||
#
|
||||
# Print the gcc version of `gcc-command' in a 5 or 6-digit form
|
||||
# such as `29503' for gcc-2.95.3, `30301' for gcc-3.3.1, etc.
|
||||
|
||||
compiler="$*"
|
||||
|
||||
if [ ${#compiler} -eq 0 ]; then
|
||||
echo "Error: No compiler specified." >&2
|
||||
printf "Usage:\n\t$0 <gcc-command>\n" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
MAJOR=$(echo __GNUC__ | $compiler -E -x c - | tail -n 1)
|
||||
MINOR=$(echo __GNUC_MINOR__ | $compiler -E -x c - | tail -n 1)
|
||||
PATCHLEVEL=$(echo __GNUC_PATCHLEVEL__ | $compiler -E -x c - | tail -n 1)
|
||||
printf "%d%02d%02d\\n" $MAJOR $MINOR $PATCHLEVEL
|
@@ -7,7 +7,7 @@ symlinks := $(patsubst $(srctree)/$(src)/%,%,$(wildcard $(srctree)/$(src)/*.py))
|
||||
quiet_cmd_symlink = SYMLINK $@
|
||||
cmd_symlink = ln -fsn $(patsubst $(obj)/%,$(abspath $(srctree))/$(src)/%,$@) $@
|
||||
|
||||
extra-y += $(symlinks)
|
||||
always-y += $(symlinks)
|
||||
$(addprefix $(obj)/, $(symlinks)): FORCE
|
||||
$(call if_changed,symlink)
|
||||
|
||||
@@ -18,7 +18,7 @@ quiet_cmd_gen_constants_py = GEN $@
|
||||
$(CPP) -E -x c -P $(c_flags) $< > $@ ;\
|
||||
sed -i '1,/<!-- end-c-headers -->/d;' $@
|
||||
|
||||
extra-y += constants.py
|
||||
always-y += constants.py
|
||||
$(obj)/constants.py: $(src)/constants.py.in FORCE
|
||||
$(call if_changed_dep,gen_constants_py)
|
||||
|
||||
|
@@ -29,7 +29,7 @@ static struct symbol *symtab[HASH_BUCKETS];
|
||||
static FILE *debugfile;
|
||||
|
||||
int cur_line = 1;
|
||||
char *cur_filename, *source_file;
|
||||
char *cur_filename;
|
||||
int in_source_file;
|
||||
|
||||
static int flag_debug, flag_dump_defs, flag_reference, flag_dump_types,
|
||||
|
@@ -47,7 +47,7 @@ typedef struct string_list **yystype;
|
||||
#define YYSTYPE yystype
|
||||
|
||||
extern int cur_line;
|
||||
extern char *cur_filename, *source_file;
|
||||
extern char *cur_filename;
|
||||
extern int in_source_file;
|
||||
|
||||
struct symbol *find_symbol(const char *name, enum symbol_type ns, int exact);
|
||||
|
@@ -119,12 +119,11 @@ yylex(void)
|
||||
static enum {
|
||||
ST_NOTSTARTED, ST_NORMAL, ST_ATTRIBUTE, ST_ASM, ST_TYPEOF, ST_TYPEOF_1,
|
||||
ST_BRACKET, ST_BRACE, ST_EXPRESSION, ST_STATIC_ASSERT,
|
||||
ST_TABLE_1, ST_TABLE_2, ST_TABLE_3, ST_TABLE_4,
|
||||
ST_TABLE_5, ST_TABLE_6
|
||||
} lexstate = ST_NOTSTARTED;
|
||||
|
||||
static int suppress_type_lookup, dont_want_brace_phrase;
|
||||
static struct string_list *next_node;
|
||||
static char *source_file;
|
||||
|
||||
int token, count = 0;
|
||||
struct string_list *cur_node;
|
||||
@@ -235,7 +234,6 @@ repeat:
|
||||
lexstate = ST_EXPRESSION;
|
||||
break;
|
||||
|
||||
case DOTS:
|
||||
default:
|
||||
APP;
|
||||
break;
|
||||
@@ -426,58 +424,6 @@ repeat:
|
||||
}
|
||||
break;
|
||||
|
||||
case ST_TABLE_1:
|
||||
goto repeat;
|
||||
|
||||
case ST_TABLE_2:
|
||||
if (token == IDENT && yyleng == 1 && yytext[0] == 'X')
|
||||
{
|
||||
token = EXPORT_SYMBOL_KEYW;
|
||||
lexstate = ST_TABLE_5;
|
||||
APP;
|
||||
break;
|
||||
}
|
||||
lexstate = ST_TABLE_6;
|
||||
/* FALLTHRU */
|
||||
|
||||
case ST_TABLE_6:
|
||||
switch (token)
|
||||
{
|
||||
case '{': case '[': case '(':
|
||||
++count;
|
||||
break;
|
||||
case '}': case ']': case ')':
|
||||
--count;
|
||||
break;
|
||||
case ',':
|
||||
if (count == 0)
|
||||
lexstate = ST_TABLE_2;
|
||||
break;
|
||||
};
|
||||
goto repeat;
|
||||
|
||||
case ST_TABLE_3:
|
||||
goto repeat;
|
||||
|
||||
case ST_TABLE_4:
|
||||
if (token == ';')
|
||||
lexstate = ST_NORMAL;
|
||||
goto repeat;
|
||||
|
||||
case ST_TABLE_5:
|
||||
switch (token)
|
||||
{
|
||||
case ',':
|
||||
token = ';';
|
||||
lexstate = ST_TABLE_2;
|
||||
APP;
|
||||
break;
|
||||
default:
|
||||
APP;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
exit(1);
|
||||
}
|
||||
|
@@ -3,9 +3,6 @@
|
||||
# Kernel configuration targets
|
||||
# These targets are used from top-level makefile
|
||||
|
||||
PHONY += xconfig gconfig menuconfig config localmodconfig localyesconfig \
|
||||
build_menuconfig build_nconfig build_gconfig build_xconfig
|
||||
|
||||
ifdef KBUILD_KCONFIG
|
||||
Kconfig := $(KBUILD_KCONFIG)
|
||||
else
|
||||
@@ -19,29 +16,24 @@ endif
|
||||
# We need this, in case the user has it in its environment
|
||||
unexport CONFIG_
|
||||
|
||||
xconfig: $(obj)/qconf
|
||||
$(Q)$< $(silent) $(Kconfig)
|
||||
config-prog := conf
|
||||
menuconfig-prog := mconf
|
||||
nconfig-prog := nconf
|
||||
gconfig-prog := gconf
|
||||
xconfig-prog := qconf
|
||||
|
||||
gconfig: $(obj)/gconf
|
||||
$(Q)$< $(silent) $(Kconfig)
|
||||
define config_rule
|
||||
PHONY += $(1)
|
||||
$(1): $(obj)/$($(1)-prog)
|
||||
$(Q)$$< $(silent) $(Kconfig)
|
||||
|
||||
menuconfig: $(obj)/mconf
|
||||
$(Q)$< $(silent) $(Kconfig)
|
||||
PHONY += build_$(1)
|
||||
build_$(1): $(obj)/$($(1)-prog)
|
||||
endef
|
||||
|
||||
config: $(obj)/conf
|
||||
$(Q)$< $(silent) --oldaskconfig $(Kconfig)
|
||||
|
||||
nconfig: $(obj)/nconf
|
||||
$(Q)$< $(silent) $(Kconfig)
|
||||
|
||||
build_menuconfig: $(obj)/mconf
|
||||
|
||||
build_nconfig: $(obj)/nconf
|
||||
|
||||
build_gconfig: $(obj)/gconf
|
||||
|
||||
build_xconfig: $(obj)/qconf
|
||||
$(foreach c, config menuconfig nconfig gconfig xconfig, $(eval $(call config_rule,$(c))))
|
||||
|
||||
PHONY += localmodconfig localyesconfig
|
||||
localyesconfig localmodconfig: $(obj)/conf
|
||||
$(Q)$(PERL) $(srctree)/$(src)/streamline_config.pl --$@ $(srctree) $(Kconfig) > .tmp.config
|
||||
$(Q)if [ -f .config ]; then \
|
||||
|
@@ -84,8 +84,6 @@ static void xfgets(char *str, int size, FILE *in)
|
||||
|
||||
static int conf_askvalue(struct symbol *sym, const char *def)
|
||||
{
|
||||
enum symbol_type type = sym_get_type(sym);
|
||||
|
||||
if (!sym_has_value(sym))
|
||||
printf("(NEW) ");
|
||||
|
||||
@@ -107,24 +105,12 @@ static int conf_askvalue(struct symbol *sym, const char *def)
|
||||
return 0;
|
||||
}
|
||||
/* fall through */
|
||||
case oldaskconfig:
|
||||
default:
|
||||
fflush(stdout);
|
||||
xfgets(line, sizeof(line), stdin);
|
||||
return 1;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
switch (type) {
|
||||
case S_INT:
|
||||
case S_HEX:
|
||||
case S_STRING:
|
||||
printf("%s\n", def);
|
||||
return 1;
|
||||
default:
|
||||
;
|
||||
}
|
||||
printf("%s", line);
|
||||
return 1;
|
||||
}
|
||||
|
||||
@@ -137,7 +123,7 @@ static int conf_string(struct menu *menu)
|
||||
printf("%*s%s ", indent - 1, "", menu->prompt->text);
|
||||
printf("(%s) ", sym->name);
|
||||
def = sym_get_string_value(sym);
|
||||
if (sym_get_string_value(sym))
|
||||
if (def)
|
||||
printf("[%s] ", def);
|
||||
if (!conf_askvalue(sym, def))
|
||||
return 0;
|
||||
@@ -419,34 +405,37 @@ static void check_conf(struct menu *menu)
|
||||
return;
|
||||
|
||||
sym = menu->sym;
|
||||
if (sym && !sym_has_value(sym)) {
|
||||
if (sym_is_changeable(sym) ||
|
||||
(sym_is_choice(sym) && sym_get_tristate_value(sym) == yes)) {
|
||||
if (input_mode == listnewconfig) {
|
||||
if (sym->name) {
|
||||
const char *str;
|
||||
if (sym && !sym_has_value(sym) &&
|
||||
(sym_is_changeable(sym) ||
|
||||
(sym_is_choice(sym) && sym_get_tristate_value(sym) == yes))) {
|
||||
|
||||
if (sym->type == S_STRING) {
|
||||
str = sym_get_string_value(sym);
|
||||
str = sym_escape_string_value(str);
|
||||
printf("%s%s=%s\n", CONFIG_, sym->name, str);
|
||||
free((void *)str);
|
||||
} else {
|
||||
str = sym_get_string_value(sym);
|
||||
printf("%s%s=%s\n", CONFIG_, sym->name, str);
|
||||
}
|
||||
switch (input_mode) {
|
||||
case listnewconfig:
|
||||
if (sym->name) {
|
||||
const char *str;
|
||||
|
||||
if (sym->type == S_STRING) {
|
||||
str = sym_get_string_value(sym);
|
||||
str = sym_escape_string_value(str);
|
||||
printf("%s%s=%s\n", CONFIG_, sym->name, str);
|
||||
free((void *)str);
|
||||
} else {
|
||||
str = sym_get_string_value(sym);
|
||||
printf("%s%s=%s\n", CONFIG_, sym->name, str);
|
||||
}
|
||||
} else if (input_mode == helpnewconfig) {
|
||||
printf("-----\n");
|
||||
print_help(menu);
|
||||
printf("-----\n");
|
||||
|
||||
} else {
|
||||
if (!conf_cnt++)
|
||||
printf("*\n* Restart config...\n*\n");
|
||||
rootEntry = menu_get_parent_menu(menu);
|
||||
conf(rootEntry);
|
||||
}
|
||||
break;
|
||||
case helpnewconfig:
|
||||
printf("-----\n");
|
||||
print_help(menu);
|
||||
printf("-----\n");
|
||||
break;
|
||||
default:
|
||||
if (!conf_cnt++)
|
||||
printf("*\n* Restart config...\n*\n");
|
||||
rootEntry = menu_get_parent_menu(menu);
|
||||
conf(rootEntry);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -494,6 +483,7 @@ static void conf_usage(const char *progname)
|
||||
printf(" --randconfig New config with random answer to all options\n");
|
||||
printf(" --yes2modconfig Change answers from yes to mod if possible\n");
|
||||
printf(" --mod2yesconfig Change answers from mod to yes if possible\n");
|
||||
printf(" (If none of the above is given, --oldaskconfig is the default)\n");
|
||||
}
|
||||
|
||||
int main(int ac, char **av)
|
||||
@@ -505,7 +495,7 @@ int main(int ac, char **av)
|
||||
|
||||
tty_stdio = isatty(0) && isatty(1);
|
||||
|
||||
while ((opt = getopt_long(ac, av, "s", long_opts, NULL)) != -1) {
|
||||
while ((opt = getopt_long(ac, av, "hs", long_opts, NULL)) != -1) {
|
||||
if (opt == 's') {
|
||||
conf_set_message_callback(NULL);
|
||||
continue;
|
||||
@@ -561,7 +551,7 @@ int main(int ac, char **av)
|
||||
case yes2modconfig:
|
||||
case mod2yesconfig:
|
||||
break;
|
||||
case '?':
|
||||
case 'h':
|
||||
conf_usage(progname);
|
||||
exit(1);
|
||||
break;
|
||||
|
@@ -1,11 +1,73 @@
|
||||
#!/usr/bin/awk -f
|
||||
#!/bin/sh
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
# extract linker version number from stdin and turn into single number
|
||||
{
|
||||
gsub(".*\\)", "");
|
||||
gsub(".*version ", "");
|
||||
gsub("-.*", "");
|
||||
split($1,a, ".");
|
||||
print a[1]*100000000 + a[2]*1000000 + a[3]*10000;
|
||||
exit
|
||||
}
|
||||
#
|
||||
# Print the linker name and its version in a 5 or 6-digit form.
|
||||
# Also, perform the minimum version check.
|
||||
|
||||
set -e
|
||||
|
||||
# When you raise the minimum linker version, please update
|
||||
# Documentation/process/changes.rst as well.
|
||||
bfd_min_version=2.23.0
|
||||
lld_min_version=10.0.1
|
||||
|
||||
# Convert the version string x.y.z to a canonical 5 or 6-digit form.
|
||||
get_canonical_version()
|
||||
{
|
||||
IFS=.
|
||||
set -- $1
|
||||
|
||||
# If the 2nd or 3rd field is missing, fill it with a zero.
|
||||
#
|
||||
# The 4th field, if present, is ignored.
|
||||
# This occurs in development snapshots as in 2.35.1.20201116
|
||||
echo $((10000 * $1 + 100 * ${2:-0} + ${3:-0}))
|
||||
}
|
||||
|
||||
orig_args="$@"
|
||||
|
||||
# Get the first line of the --version output.
|
||||
IFS='
|
||||
'
|
||||
set -- $("$@" --version)
|
||||
|
||||
# Split the line on spaces.
|
||||
IFS=' '
|
||||
set -- $1
|
||||
|
||||
if [ "$1" = GNU -a "$2" = ld ]; then
|
||||
shift $(($# - 1))
|
||||
version=$1
|
||||
min_version=$bfd_min_version
|
||||
name=BFD
|
||||
disp_name="GNU ld"
|
||||
elif [ "$1" = GNU -a "$2" = gold ]; then
|
||||
echo "gold linker is not supported as it is not capable of linking the kernel proper." >&2
|
||||
exit 1
|
||||
elif [ "$1" = LLD ]; then
|
||||
version=$2
|
||||
min_version=$lld_min_version
|
||||
name=LLD
|
||||
disp_name=LLD
|
||||
else
|
||||
echo "$orig_args: unknown linker" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Some distributions append a package release number, as in 2.34-4.fc32
|
||||
# Trim the hyphen and any characters that follow.
|
||||
version=${version%-*}
|
||||
|
||||
cversion=$(get_canonical_version $version)
|
||||
min_cversion=$(get_canonical_version $min_version)
|
||||
|
||||
if [ "$cversion" -lt "$min_cversion" ]; then
|
||||
echo >&2 "***"
|
||||
echo >&2 "*** Linker is too old."
|
||||
echo >&2 "*** Your $disp_name version: $version"
|
||||
echo >&2 "*** Minimum $disp_name version: $min_version"
|
||||
echo >&2 "***"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo $name $cversion
|
||||
|
@@ -1,20 +0,0 @@
|
||||
#!/bin/sh
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
#
|
||||
# Usage: $ ./scripts/lld-version.sh ld.lld
|
||||
#
|
||||
# Print the linker version of `ld.lld' in a 5 or 6-digit form
|
||||
# such as `100001' for ld.lld 10.0.1 etc.
|
||||
|
||||
linker_string="$($* --version)"
|
||||
|
||||
if ! ( echo $linker_string | grep -q LLD ); then
|
||||
echo 0
|
||||
exit 1
|
||||
fi
|
||||
|
||||
VERSION=$(echo $linker_string | cut -d ' ' -f 2)
|
||||
MAJOR=$(echo $VERSION | cut -d . -f 1)
|
||||
MINOR=$(echo $VERSION | cut -d . -f 2)
|
||||
PATCHLEVEL=$(echo $VERSION | cut -d . -f 3)
|
||||
printf "%d%02d%02d\\n" $MAJOR $MINOR $PATCHLEVEL
|
98
scripts/syscallhdr.sh
Executable file
98
scripts/syscallhdr.sh
Executable file
@@ -0,0 +1,98 @@
|
||||
#!/bin/sh
|
||||
# SPDX-License-Identifier: GPL-2.0-only
|
||||
#
|
||||
# Generate a syscall number header.
|
||||
#
|
||||
# Each line of the syscall table should have the following format:
|
||||
#
|
||||
# NR ABI NAME [NATIVE] [COMPAT]
|
||||
#
|
||||
# NR syscall number
|
||||
# ABI ABI name
|
||||
# NAME syscall name
|
||||
# NATIVE native entry point (optional)
|
||||
# COMPAT compat entry point (optional)
|
||||
|
||||
set -e
|
||||
|
||||
usage() {
|
||||
echo >&2 "usage: $0 [--abis ABIS] [--emit-nr] [--offset OFFSET] [--prefix PREFIX] INFILE OUTFILE" >&2
|
||||
echo >&2
|
||||
echo >&2 " INFILE input syscall table"
|
||||
echo >&2 " OUTFILE output header file"
|
||||
echo >&2
|
||||
echo >&2 "options:"
|
||||
echo >&2 " --abis ABIS ABI(s) to handle (By default, all lines are handled)"
|
||||
echo >&2 " --emit-nr Emit the macro of the number of syscalls (__NR_syscalls)"
|
||||
echo >&2 " --offset OFFSET The offset of syscall numbers"
|
||||
echo >&2 " --prefix PREFIX The prefix to the macro like __NR_<PREFIX><NAME>"
|
||||
exit 1
|
||||
}
|
||||
|
||||
# default unless specified by options
|
||||
abis=
|
||||
emit_nr=
|
||||
offset=
|
||||
prefix=
|
||||
|
||||
while [ $# -gt 0 ]
|
||||
do
|
||||
case $1 in
|
||||
--abis)
|
||||
abis=$(echo "($2)" | tr ',' '|')
|
||||
shift 2;;
|
||||
--emit-nr)
|
||||
emit_nr=1
|
||||
shift 1;;
|
||||
--offset)
|
||||
offset=$2
|
||||
shift 2;;
|
||||
--prefix)
|
||||
prefix=$2
|
||||
shift 2;;
|
||||
-*)
|
||||
echo "$1: unknown option" >&2
|
||||
usage;;
|
||||
*)
|
||||
break;;
|
||||
esac
|
||||
done
|
||||
|
||||
if [ $# -ne 2 ]; then
|
||||
usage
|
||||
fi
|
||||
|
||||
infile="$1"
|
||||
outfile="$2"
|
||||
|
||||
guard=_UAPI_ASM_$(basename "$outfile" |
|
||||
sed -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/' \
|
||||
-e 's/[^A-Z0-9_]/_/g' -e 's/__/_/g')
|
||||
|
||||
grep -E "^[0-9A-Fa-fXx]+[[:space:]]+$abis" "$infile" | sort -n | {
|
||||
echo "#ifndef $guard"
|
||||
echo "#define $guard"
|
||||
echo
|
||||
|
||||
max=0
|
||||
while read nr abi name native compat ; do
|
||||
|
||||
max=$nr
|
||||
|
||||
if [ -n "$offset" ]; then
|
||||
nr="($offset + $nr)"
|
||||
fi
|
||||
|
||||
echo "#define __NR_$prefix$name $nr"
|
||||
done
|
||||
|
||||
if [ -n "$emit_nr" ]; then
|
||||
echo
|
||||
echo "#ifdef __KERNEL__"
|
||||
echo "#define __NR_${prefix}syscalls $(($max + 1))"
|
||||
echo "#endif"
|
||||
fi
|
||||
|
||||
echo
|
||||
echo "#endif /* $guard */"
|
||||
} > "$outfile"
|
73
scripts/syscalltbl.sh
Executable file
73
scripts/syscalltbl.sh
Executable file
@@ -0,0 +1,73 @@
|
||||
#!/bin/sh
|
||||
# SPDX-License-Identifier: GPL-2.0-only
|
||||
#
|
||||
# Generate a syscall table header.
|
||||
#
|
||||
# Each line of the syscall table should have the following format:
|
||||
#
|
||||
# NR ABI NAME [NATIVE] [COMPAT]
|
||||
#
|
||||
# NR syscall number
|
||||
# ABI ABI name
|
||||
# NAME syscall name
|
||||
# NATIVE native entry point (optional)
|
||||
# COMPAT compat entry point (optional)
|
||||
|
||||
set -e
|
||||
|
||||
usage() {
|
||||
echo >&2 "usage: $0 [--abis ABIS] INFILE OUTFILE" >&2
|
||||
echo >&2
|
||||
echo >&2 " INFILE input syscall table"
|
||||
echo >&2 " OUTFILE output header file"
|
||||
echo >&2
|
||||
echo >&2 "options:"
|
||||
echo >&2 " --abis ABIS ABI(s) to handle (By default, all lines are handled)"
|
||||
exit 1
|
||||
}
|
||||
|
||||
# default unless specified by options
|
||||
abis=
|
||||
|
||||
while [ $# -gt 0 ]
|
||||
do
|
||||
case $1 in
|
||||
--abis)
|
||||
abis=$(echo "($2)" | tr ',' '|')
|
||||
shift 2;;
|
||||
-*)
|
||||
echo "$1: unknown option" >&2
|
||||
usage;;
|
||||
*)
|
||||
break;;
|
||||
esac
|
||||
done
|
||||
|
||||
if [ $# -ne 2 ]; then
|
||||
usage
|
||||
fi
|
||||
|
||||
infile="$1"
|
||||
outfile="$2"
|
||||
|
||||
nxt=0
|
||||
|
||||
grep -E "^[0-9]+[[:space:]]+$abis" "$infile" | sort -n | {
|
||||
|
||||
while read nr abi name native compat ; do
|
||||
|
||||
while [ $nxt -lt $nr ]; do
|
||||
echo "__SYSCALL($nxt, sys_ni_syscall)"
|
||||
nxt=$((nxt + 1))
|
||||
done
|
||||
|
||||
if [ -n "$compat" ]; then
|
||||
echo "__SYSCALL_WITH_COMPAT($nr, $native, $compat)"
|
||||
elif [ -n "$native" ]; then
|
||||
echo "__SYSCALL($nr, $native)"
|
||||
else
|
||||
echo "__SYSCALL($nr, sys_ni_syscall)"
|
||||
fi
|
||||
nxt=$((nr + 1))
|
||||
done
|
||||
} > "$outfile"
|
8
scripts/test_dwarf5_support.sh
Executable file
8
scripts/test_dwarf5_support.sh
Executable file
@@ -0,0 +1,8 @@
|
||||
#!/bin/sh
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
|
||||
# Test that the assembler doesn't need -Wa,-gdwarf-5 when presented with DWARF
|
||||
# v5 input, such as `.file 0` and `md5 0x00`. Should be fixed in GNU binutils
|
||||
# 2.35.2. https://sourceware.org/bugzilla/show_bug.cgi?id=25611
|
||||
echo '.file 0 "filename" md5 0x7a0b65214090b6693bd1dc24dd248245' | \
|
||||
$* -gdwarf-5 -Wno-unused-command-line-argument -c -x assembler -o /dev/null -
|
Reference in New Issue
Block a user