Skip to content

Commit 110e196

Browse files
authored
Merge pull request #1233 from omatiusha/master
kpatch-build: add cross-compilation support (#1224 fix)
2 parents aaaebaf + 0decc79 commit 110e196

File tree

2 files changed

+29
-18
lines changed

2 files changed

+29
-18
lines changed

kpatch-build/Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ ifeq ($(ARCH),ppc64le)
1717
SOURCES += gcc-plugins/ppc64le-plugin.c
1818
PLUGIN = gcc-plugins/ppc64le-plugin.so
1919
TARGETS += $(PLUGIN)
20-
GCC_PLUGINS_DIR := $(shell gcc -print-file-name=plugin)
20+
GCC_PLUGINS_DIR := $(shell $(CROSS_COMPILE)gcc -print-file-name=plugin)
2121
PLUGIN_CFLAGS := $(filter-out -Wconversion, $(CFLAGS))
2222
PLUGIN_CFLAGS += -shared -I$(GCC_PLUGINS_DIR)/include \
2323
-Igcc-plugins -fPIC -fno-rtti -O2 -Wall

kpatch-build/kpatch-build

Lines changed: 28 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,13 @@ APPLIED_PATCHES=0
5858
OOT_MODULE=
5959
KLP_REPLACE=1
6060

61+
GCC="${CROSS_COMPILE:-}gcc"
62+
CLANG="${CROSS_COMPILE:-}clang"
63+
LD="${CROSS_COMPILE:-}ld"
64+
LLD="${CROSS_COMPILE:-}ld.lld"
65+
READELF="${CROSS_COMPILE:-}readelf"
66+
OBJCOPY="${CROSS_COMPILE:-}objcopy"
67+
6168
warn() {
6269
echo "ERROR: $1" >&2
6370
}
@@ -267,7 +274,7 @@ find_core_symvers() {
267274
}
268275

269276
gcc_version_from_file() {
270-
readelf -p .comment "$1" | grep -m 1 -o 'GCC:.*'
277+
"$READELF" -p .comment "$1" | grep -m 1 -o 'GCC:.*'
271278
}
272279

273280
gcc_version_check() {
@@ -278,7 +285,7 @@ gcc_version_check() {
278285
# gcc --version varies between distributions therefore extract version
279286
# by compiling a test file and compare it to vmlinux's version.
280287
echo 'void main(void) {}' > "$c"
281-
out="$(gcc -c -pg -ffunction-sections -o "$o" "$c" 2>&1)"
288+
out="$("$GCC" -c -pg -ffunction-sections -o "$o" "$c" 2>&1)"
282289
gccver="$(gcc_version_from_file "$o")"
283290
kgccver="$(gcc_version_from_file "$target")"
284291

@@ -288,7 +295,7 @@ gcc_version_check() {
288295
return 1
289296
fi
290297

291-
out="$(gcc -c -gz=none -o "$o" "$c" 2>&1)"
298+
out="$("$GCC" -c -gz=none -o "$o" "$c" 2>&1)"
292299
if [[ -z "$out" ]]; then
293300
DEBUG_KCFLAGS="-gz=none"
294301
fi
@@ -308,14 +315,14 @@ gcc_version_check() {
308315
}
309316

310317
clang_version_from_file() {
311-
readelf -p .comment "$1" | grep -m 1 -Eo 'clang version [0-9.]+'
318+
"$READELF" -p .comment "$1" | grep -m 1 -Eo 'clang version [0-9.]+'
312319
}
313320

314321
clang_version_check() {
315322
local target="$1"
316323
local clangver kclangver
317324

318-
clangver=$(clang --version | grep -m 1 -Eo 'clang version [0-9.]+')
325+
clangver=$("$CLANG" --version | grep -m 1 -Eo 'clang version [0-9.]+')
319326
kclangver="$(clang_version_from_file "$target")"
320327

321328
# ensure clang version matches that used to build the kernel
@@ -360,7 +367,7 @@ find_special_section_data() {
360367
local SPECIAL_VARS
361368
# If $AWK_OPTIONS are blank gawk would treat "" as a blank script
362369
# shellcheck disable=SC2086
363-
SPECIAL_VARS="$(readelf -wi "$VMLINUX" |
370+
SPECIAL_VARS="$("$READELF" -wi "$VMLINUX" |
364371
gawk --non-decimal-data $AWK_OPTIONS '
365372
BEGIN { a = b = e = f = i = j = o = p = s = 0 }
366373
@@ -698,8 +705,11 @@ fi
698705

699706
# Don't check external file.
700707
# shellcheck disable=SC1090
701-
[[ -f "$RELEASE_FILE" ]] && source "$RELEASE_FILE"
702-
DISTRO="$ID"
708+
if [[ -z "$USERSRCDIR" ]] && [[ -f "$RELEASE_FILE" ]]; then
709+
source "$RELEASE_FILE"
710+
DISTRO="$ID"
711+
fi
712+
703713
if [[ "$DISTRO" = fedora ]] || [[ "$DISTRO" = rhel ]] || [[ "$DISTRO" = ol ]] || [[ "$DISTRO" = centos ]] || [[ "$DISTRO" = openEuler ]]; then
704714
[[ -z "$VMLINUX" ]] && VMLINUX="/usr/lib/debug/lib/modules/$ARCHVERSION/vmlinux"
705715
[[ -e "$VMLINUX" ]] || die "kernel-debuginfo-$ARCHVERSION not installed"
@@ -929,17 +939,17 @@ unset KPATCH_GCC_TEMPDIR
929939
KPATCH_CC_PREFIX="$TOOLSDIR/kpatch-cc "
930940
declare -a MAKEVARS
931941
if [[ -n "$CONFIG_CC_IS_CLANG" ]]; then
932-
MAKEVARS+=("CC=${KPATCH_CC_PREFIX}clang")
942+
MAKEVARS+=("CC=${KPATCH_CC_PREFIX}${CLANG}")
933943
MAKEVARS+=("HOSTCC=clang")
934944
else
935-
MAKEVARS+=("CC=${KPATCH_CC_PREFIX}gcc")
945+
MAKEVARS+=("CC=${KPATCH_CC_PREFIX}${GCC}")
936946
fi
937947

938948
if [[ -n "$CONFIG_LD_IS_LLD" ]]; then
939-
MAKEVARS+=("LD=${KPATCH_CC_PREFIX}ld.lld")
949+
MAKEVARS+=("LD=${KPATCH_CC_PREFIX}${LLD}")
940950
MAKEVARS+=("HOSTLD=ld.lld")
941951
else
942-
MAKEVARS+=("LD=${KPATCH_CC_PREFIX}ld")
952+
MAKEVARS+=("LD=${KPATCH_CC_PREFIX}${LD}")
943953
fi
944954

945955

@@ -1072,7 +1082,7 @@ for i in $FILES; do
10721082
SYMVERS_FILE="$BUILDDIR/Module.symvers"
10731083
fi
10741084

1075-
readelf -s --wide "$KOBJFILE_PATH" > "$SYMTAB"
1085+
"$READELF" -s --wide "$KOBJFILE_PATH" > "$SYMTAB"
10761086
if [[ "$ARCH" = "ppc64le" ]]; then
10771087
sed -ri 's/\s+\[<localentry>: 8\]//' "$SYMTAB"
10781088
fi
@@ -1129,7 +1139,7 @@ fi
11291139
cd "$TEMPDIR/output" || die
11301140
# $KPATCH_LDFLAGS and result of find used as list, no quotes.
11311141
# shellcheck disable=SC2086,SC2046
1132-
ld -r $KPATCH_LDFLAGS -o ../patch/tmp_output.o $(find . -name "*.o") 2>&1 | logger || die
1142+
"$LD" -r $KPATCH_LDFLAGS -o ../patch/tmp_output.o $(find . -name "*.o") 2>&1 | logger || die
11331143

11341144
if [[ "$USE_KLP" -eq 1 ]]; then
11351145
cp -f "$TEMPDIR"/patch/tmp_output.o "$TEMPDIR"/patch/output.o || die
@@ -1138,7 +1148,7 @@ if [[ "$USE_KLP" -eq 1 ]]; then
11381148
else
11391149
# Add .kpatch.checksum for kpatch script
11401150
md5sum ../patch/tmp_output.o | awk '{printf "%s\0", $1}' > checksum.tmp || die
1141-
objcopy --add-section .kpatch.checksum=checksum.tmp --set-section-flags .kpatch.checksum=alloc,load,contents,readonly ../patch/tmp_output.o || die
1151+
"$OBJCOPY" --add-section .kpatch.checksum=checksum.tmp --set-section-flags .kpatch.checksum=alloc,load,contents,readonly ../patch/tmp_output.o || die
11421152
rm -f checksum.tmp
11431153
"$TOOLSDIR"/create-kpatch-module "$TEMPDIR"/patch/tmp_output.o "$TEMPDIR"/patch/output.o 2>&1 | logger 1
11441154
check_pipe_status create-kpatch-module
@@ -1154,7 +1164,8 @@ done
11541164

11551165
export KPATCH_BUILD="$KERNEL_SRCDIR" KPATCH_NAME="$MODNAME" \
11561166
KBUILD_EXTRA_SYMBOLS="$KBUILD_EXTRA_SYMBOLS" \
1157-
KPATCH_LDFLAGS="$KPATCH_LDFLAGS"
1167+
KPATCH_LDFLAGS="$KPATCH_LDFLAGS" \
1168+
CROSS_COMPILE="$CROSS_COMPILE"
11581169
save_env
11591170

11601171
make "${MAKEVARS[@]}" 2>&1 | logger || die
@@ -1192,7 +1203,7 @@ if [[ -n "$CONFIG_MODVERSIONS" ]]; then
11921203
fi
11931204
fi
11941205

1195-
readelf --wide --symbols "$TEMPDIR/patch/$MODNAME.ko" 2>/dev/null | \
1206+
"$READELF" --wide --symbols "$TEMPDIR/patch/$MODNAME.ko" 2>/dev/null | \
11961207
sed -r 's/\s+\[<localentry>: 8\]//' | \
11971208
awk '($4=="FUNC" || $4=="OBJECT") && ($5=="GLOBAL" || $5=="WEAK") && $7!="UND" {print $NF}' \
11981209
>"${TEMPDIR}"/new_symbols

0 commit comments

Comments
 (0)