From 102a0743326a03cd1a1202ceda21e175b7d3575c Mon Sep 17 00:00:00 2001 From: hc <hc@nodka.com> Date: Tue, 20 Feb 2024 01:20:52 +0000 Subject: [PATCH] add new system file --- kernel/scripts/gen_autoksyms.sh | 44 ++++++++++++++++++++++++++++++++------------ 1 files changed, 32 insertions(+), 12 deletions(-) diff --git a/kernel/scripts/gen_autoksyms.sh b/kernel/scripts/gen_autoksyms.sh index 846dde7..da32015 100755 --- a/kernel/scripts/gen_autoksyms.sh +++ b/kernel/scripts/gen_autoksyms.sh @@ -2,7 +2,7 @@ # 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 third line of *.mod files and the user-provided symbol +# as recorded on the second line of *.mod files and the user-provided symbol # whitelist. set -e @@ -19,7 +19,26 @@ # We need access to CONFIG_ symbols . include/config/auto.conf -ksym_wl=/dev/null +needed_symbols= + +# Special case for modversions (see modpost.c) +if [ -n "$CONFIG_MODVERSIONS" ]; then + needed_symbols="$needed_symbols module_layout" +fi + +# With CONFIG_LTO_CLANG, LLVM bitcode has not yet been compiled into a binary +# when the .mod files are generated, which means they don't yet contain +# references to certain symbols that will be present in the final binaries. +if [ -n "$CONFIG_LTO_CLANG" ]; then + # intrinsic functions + needed_symbols="$needed_symbols memcpy memmove memset" + # ftrace + needed_symbols="$needed_symbols _mcount" + # stack protector symbols + needed_symbols="$needed_symbols __stack_chk_fail __stack_chk_guard" +fi + +ksym_wl= if [ -n "$CONFIG_UNUSED_KSYMS_WHITELIST" ]; then # Use 'eval' to expand the whitelist path and check if it is relative eval ksym_wl="$CONFIG_UNUSED_KSYMS_WHITELIST" @@ -39,14 +58,15 @@ EOT -for mod in "$MODVERDIR"/*.mod; do - [ -f "$mod" ] && sed -n -e '3{s/ /\n/g;/^$/!p;}' "$mod" -done | cat - "$ksym_wl" | sort -u | -while read sym; do - echo "#define __KSYM_${sym} 1" -done >> "$output_file" +[ -f modules.order ] && modlist=modules.order || modlist=/dev/null -# Special case for modversions (see modpost.c) -if [ -n "$CONFIG_MODVERSIONS" ]; then - echo "#define __KSYM_module_layout 1" >> "$output_file" -fi +{ + 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" -- Gitblit v1.6.2