From 7864b1f138641fef716a4374be6c8c64a415c110 Mon Sep 17 00:00:00 2001 From: RobinYin Date: Mon, 14 Nov 2022 21:13:24 +0800 Subject: [PATCH 1/3] kpatch:get gcc version from config file Signed-off-by: RobinYin --- kpatch-build/kpatch-build | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/kpatch-build/kpatch-build b/kpatch-build/kpatch-build index f2b6fab..2f8f55d 100755 --- a/kpatch-build/kpatch-build +++ b/kpatch-build/kpatch-build @@ -271,14 +271,23 @@ find_core_symvers() { } gcc_version_from_file() { - "$READELF" -p .comment "$1" | grep -m 1 -o 'GCC:.*'| awk '{$1=$2=""; print $0}'|awk '{gsub(/^\s+|\s+$/, "");print}' + "$READELF" -p .comment "$1" | grep -m 1 -o 'GCC:.*'| cut -d ' ' -f 3- } gcc_version_from_config() { - if [[ -n "$CONFIGFILE" ]]; then - cat "$CONFIGFILE" | grep -w "Compiler: gcc" | awk '{$1=$2=$3=$4=""; print $0}' | awk '{gsub(/^\s+|\s+$/, "");print}' + local gccver + if [[ -f "$CONFIGFILE" ]]; then + # Compiler: gcc (GCC) 8.5.0 20210514 (Red Hat 8.5.0-4) + gccver="$(sed -n '/Compiler:/p' "$CONFIGFILE" | cut -d ' ' -f 5-)" + if [[ -z "$gccver" ]];then + #CONFIG_CC_VERSION_TEXT="gcc (Ubuntu 11.2.0-19ubuntu1) 11.2.0" + gccver="$(sed -n '/CONFIG_CC_VERSION_TEXT/p' "$CONFIGFILE" | cut -d ' ' -f 3-)" + gccver=${gccver%\"*} + fi fi + return "$gccver" } + gcc_version_check() { local target="$1" local c="$TEMPDIR/test.c" o="$TEMPDIR/test.o" @@ -816,7 +825,9 @@ if [[ -n "$USERSRCDIR" ]]; then [[ -z "$VMLINUX" ]] && VMLINUX="$KERNEL_SRCDIR"/vmlinux # Extract the target kernel version from vmlinux in this case. - VMLINUX_VER="$(strings "$VMLINUX" | grep -m 1 -e "^Linux version" | awk '{ print($3); }')" + if [[ -f "$VMLINUX" ]]; then + VMLINUX_VER="$(strings "$VMLINUX" | grep -m 1 -e "^Linux version" | awk '{ print($3); }')" + fi if [[ -n "$ARCHVERSION" ]]; then if [[ -n "$VMLINUX_VER" ]] && [[ "$ARCHVERSION" != "$VMLINUX_VER" ]]; then die "Kernel version mismatch: $ARCHVERSION was specified but vmlinux was built for $VMLINUX_VER" -- Gitee From 3304dc05a4783168b55262c9260f488a3e148849 Mon Sep 17 00:00:00 2001 From: yinbinbin Date: Tue, 15 Nov 2022 14:21:59 +0800 Subject: [PATCH 2/3] get kernel version from kpatch-build Signed-off-by: yinbinbin --- kpatch-build/kpatch-build | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/kpatch-build/kpatch-build b/kpatch-build/kpatch-build index 2f8f55d..e046bc3 100755 --- a/kpatch-build/kpatch-build +++ b/kpatch-build/kpatch-build @@ -288,6 +288,12 @@ gcc_version_from_config() { return "$gccver" } +kernel_version_from_config() { + if [[ -f "$CONFIGFILE" ]]; then + sed -n '/Kernel Configuration/p' "$CONFIGFILE" | cut -d ' ' -f 3 + fi +} + gcc_version_check() { local target="$1" local c="$TEMPDIR/test.c" o="$TEMPDIR/test.o" @@ -837,6 +843,9 @@ if [[ -n "$USERSRCDIR" ]]; then die "Unable to determine the kernel version from vmlinux" fi ARCHVERSION="$VMLINUX_VER" + if [[ -z "$ARCHVERSION" ]] && [[ -f "$CONFIGFILE" ]]; then + ARCHVERSION="$(kernel_version_from_config)" + fi fi fi -- Gitee From 854a17c0114201d216e5ce82e5b91f4890fb753c Mon Sep 17 00:00:00 2001 From: yinbinbin Date: Tue, 15 Nov 2022 14:21:59 +0800 Subject: [PATCH 3/3] get kernel version from kpatch-build Signed-off-by: yinbinbin --- kpatch-build/kpatch-build | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/kpatch-build/kpatch-build b/kpatch-build/kpatch-build index 2f8f55d..086d28b 100755 --- a/kpatch-build/kpatch-build +++ b/kpatch-build/kpatch-build @@ -285,7 +285,13 @@ gcc_version_from_config() { gccver=${gccver%\"*} fi fi - return "$gccver" + echo "$gccver" +} + +kernel_version_from_config() { + if [[ -f "$CONFIGFILE" ]]; then + sed -n '/Kernel Configuration/p' "$CONFIGFILE" | cut -d ' ' -f 3 + fi } gcc_version_check() { @@ -837,6 +843,9 @@ if [[ -n "$USERSRCDIR" ]]; then die "Unable to determine the kernel version from vmlinux" fi ARCHVERSION="$VMLINUX_VER" + if [[ -z "$ARCHVERSION" ]] && [[ -f "$CONFIGFILE" ]]; then + ARCHVERSION="$(kernel_version_from_config)" + fi fi fi -- Gitee