mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-23 17:30:02 +00:00
![Masahiro Yamada](/assets/img/avatar_default.png)
The previous commit fixed up all shell scripts to not include include/config/auto.conf. Now that include/config/auto.conf is only included by Makefiles, we can change it into a more Make-friendly form. Previously, Kconfig output string values enclosed with double-quotes (both in the .config and include/config/auto.conf): CONFIG_X="foo bar" Unlike shell, Make handles double-quotes (and single-quotes as well) verbatim. We must rip them off when used. There are some patterns: [1] $(patsubst "%",%,$(CONFIG_X)) [2] $(CONFIG_X:"%"=%) [3] $(subst ",,$(CONFIG_X)) [4] $(shell echo $(CONFIG_X)) These are not only ugly, but also fragile. [1] and [2] do not work if the value contains spaces, like CONFIG_X=" foo bar " [3] does not work correctly if the value contains double-quotes like CONFIG_X="foo\"bar" [4] seems to work better, but has a cost of forking a process. Anyway, quoted strings were always PITA for our Makefiles. This commit changes Kconfig to stop quoting in include/config/auto.conf. These are the string type symbols referenced in Makefiles or scripts: ACPI_CUSTOM_DSDT_FILE ARC_BUILTIN_DTB_NAME ARC_TUNE_MCPU BUILTIN_DTB_SOURCE CC_IMPLICIT_FALLTHROUGH CC_VERSION_TEXT CFG80211_EXTRA_REGDB_KEYDIR EXTRA_FIRMWARE EXTRA_FIRMWARE_DIR EXTRA_TARGETS H8300_BUILTIN_DTB INITRAMFS_SOURCE LOCALVERSION MODULE_SIG_HASH MODULE_SIG_KEY NDS32_BUILTIN_DTB NIOS2_DTB_SOURCE OPENRISC_BUILTIN_DTB SOC_CANAAN_K210_DTB_SOURCE SYSTEM_BLACKLIST_HASH_LIST SYSTEM_REVOCATION_KEYS SYSTEM_TRUSTED_KEYS TARGET_CPU UNUSED_KSYMS_WHITELIST XILINX_MICROBLAZE0_FAMILY XILINX_MICROBLAZE0_HW_VER XTENSA_VARIANT_NAME I checked them one by one, and fixed up the code where necessary. Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
55 lines
1.4 KiB
Bash
Executable file
55 lines
1.4 KiB
Bash
Executable file
#!/bin/sh
|
|
# SPDX-License-Identifier: GPL-2.0-only
|
|
|
|
# Create an autoksyms.h header file from the list of all module's needed symbols
|
|
# as recorded on the second line of *.mod files and the user-provided symbol
|
|
# whitelist.
|
|
|
|
set -e
|
|
|
|
output_file="$1"
|
|
|
|
# Use "make V=1" to debug this script.
|
|
case "$KBUILD_VERBOSE" in
|
|
*1*)
|
|
set -x
|
|
;;
|
|
esac
|
|
|
|
needed_symbols=
|
|
|
|
# Special case for modversions (see modpost.c)
|
|
if grep -q "^CONFIG_MODVERSIONS=y$" include/config/auto.conf; then
|
|
needed_symbols="$needed_symbols module_layout"
|
|
fi
|
|
|
|
ksym_wl=$(sed -n 's/^CONFIG_UNUSED_KSYMS_WHITELIST=\(.*\)$/\1/p' include/config/auto.conf)
|
|
if [ -n "$ksym_wl" ]; then
|
|
[ "${ksym_wl}" != "${ksym_wl#/}" ] || ksym_wl="$abs_srctree/$ksym_wl"
|
|
if [ ! -f "$ksym_wl" ] || [ ! -r "$ksym_wl" ]; then
|
|
echo "ERROR: '$ksym_wl' whitelist file not found" >&2
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
# Generate a new ksym list file with symbols needed by the current
|
|
# set of modules.
|
|
cat > "$output_file" << EOT
|
|
/*
|
|
* Automatically generated file; DO NOT EDIT.
|
|
*/
|
|
|
|
EOT
|
|
|
|
[ -f modules.order ] && modlist=modules.order || modlist=/dev/null
|
|
|
|
{
|
|
sed 's/ko$/mod/' $modlist | xargs -n1 sed -n -e '2p'
|
|
echo "$needed_symbols"
|
|
[ -n "$ksym_wl" ] && cat "$ksym_wl"
|
|
} | sed -e 's/ /\n/g' | sed -n -e '/^$/!p' |
|
|
# Remove the dot prefix for ppc64; symbol names with a dot (.) hold entry
|
|
# point addresses.
|
|
sed -e 's/^\.//' |
|
|
sort -u |
|
|
sed -e 's/\(.*\)/#define __KSYM_\1 1/' >> "$output_file"
|