forked from Minki/linux
9413e76405
The *.mod files have two lines; the first line lists the member objects
of the module, and the second line, if CONFIG_TRIM_UNUSED_KSYMS=y, lists
the undefined symbols.
Currently, we generate *.mod after constructing composite modules,
otherwise, we cannot compute the second line. No prerequisite is
required to print the first line.
They are orthogonal. Splitting them into separate commands will ease
further cleanups.
This commit splits the list of undefined symbols out to *.usyms files.
Previously, the list of undefined symbols ended up with a very long
line, but now it has one symbol per line.
Use sed like we did before commit 7d32358be8
("kbuild: avoid split
lines in .mod files").
Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
Reviewed-by: Nicolas Schier <nicolas@fjasle.eu>
60 lines
1.4 KiB
Bash
Executable File
60 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 in *.usyms files and the user-provided symbol whitelist.
|
|
|
|
set -e
|
|
|
|
# Use "make V=1" to debug this script.
|
|
case "$KBUILD_VERBOSE" in
|
|
*1*)
|
|
set -x
|
|
;;
|
|
esac
|
|
|
|
read_modorder=
|
|
|
|
if [ "$1" = --modorder ]; then
|
|
shift
|
|
read_modorder=1
|
|
fi
|
|
|
|
output_file="$1"
|
|
|
|
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
|
|
|
|
{
|
|
[ -n "${read_modorder}" ] && sed 's/ko$/usyms/' modules.order | xargs cat
|
|
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"
|