Skip to content

Commit f99c5cd

Browse files
rbilovolomatiusha
authored andcommitted
kpatch-build: add cross-compilation support
This patch introduces ability to pick a CROSS_COMPILE environment variable which can be used for specifying cross-complier prefix. It allows to build live patches not only on target system, but also on hosts for a target other than the one on which the compiler is running
1 parent 61fc3f1 commit f99c5cd

File tree

1 file changed

+9
-7
lines changed

1 file changed

+9
-7
lines changed

kpatch-build/kpatch-build

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ declare -a PATCH_LIST
5757
APPLIED_PATCHES=0
5858
OOT_MODULE=
5959
KLP_REPLACE=1
60+
KPATCH_CROSS_COMPILE="$CROSS_COMPILE"
6061

6162
warn() {
6263
echo "ERROR: $1" >&2
@@ -278,7 +279,7 @@ gcc_version_check() {
278279
# gcc --version varies between distributions therefore extract version
279280
# by compiling a test file and compare it to vmlinux's version.
280281
echo 'void main(void) {}' > "$c"
281-
out="$(gcc -c -pg -ffunction-sections -o "$o" "$c" 2>&1)"
282+
out="$("${KPATCH_CROSS_COMPILE}"gcc -c -pg -ffunction-sections -o "$o" "$c" 2>&1)"
282283
gccver="$(gcc_version_from_file "$o")"
283284
kgccver="$(gcc_version_from_file "$target")"
284285

@@ -288,7 +289,7 @@ gcc_version_check() {
288289
return 1
289290
fi
290291

291-
out="$(gcc -c -gz=none -o "$o" "$c" 2>&1)"
292+
out="$("${KPATCH_CROSS_COMPILE}"gcc -c -gz=none -o "$o" "$c" 2>&1)"
292293
if [[ -z "$out" ]]; then
293294
DEBUG_KCFLAGS="-gz=none"
294295
fi
@@ -946,14 +947,14 @@ if [ "$CONFIG_CC_IS_CLANG" -eq 1 ]; then
946947
MAKEVARS+=("CC=${KPATCH_CC_PREFIX}clang")
947948
MAKEVARS+=("HOSTCC=clang")
948949
else
949-
MAKEVARS+=("CC=${KPATCH_CC_PREFIX}gcc")
950+
MAKEVARS+=("CC=${KPATCH_CC_PREFIX}${KPATCH_CROSS_COMPILE}gcc")
950951
fi
951952

952953
if [ "$CONFIG_LD_IS_LLD" -eq 1 ]; then
953954
MAKEVARS+=("LD=${KPATCH_CC_PREFIX}ld.lld")
954955
MAKEVARS+=("HOSTLD=ld.lld")
955956
else
956-
MAKEVARS+=("LD=${KPATCH_CC_PREFIX}ld")
957+
MAKEVARS+=("LD=${KPATCH_CC_PREFIX}${KPATCH_CROSS_COMPILE}ld")
957958
fi
958959

959960

@@ -1144,7 +1145,7 @@ fi
11441145
cd "$TEMPDIR/output" || die
11451146
# $KPATCH_LDFLAGS and result of find used as list, no quotes.
11461147
# shellcheck disable=SC2086,SC2046
1147-
ld -r $KPATCH_LDFLAGS -o ../patch/tmp_output.o $(find . -name "*.o") 2>&1 | logger || die
1148+
"$KPATCH_CROSS_COMPILE"ld -r $KPATCH_LDFLAGS -o ../patch/tmp_output.o $(find . -name "*.o") 2>&1 | logger || die
11481149

11491150
if [[ "$USE_KLP" -eq 1 ]]; then
11501151
cp -f "$TEMPDIR"/patch/tmp_output.o "$TEMPDIR"/patch/output.o || die
@@ -1153,7 +1154,7 @@ if [[ "$USE_KLP" -eq 1 ]]; then
11531154
else
11541155
# Add .kpatch.checksum for kpatch script
11551156
md5sum ../patch/tmp_output.o | awk '{printf "%s\0", $1}' > checksum.tmp || die
1156-
objcopy --add-section .kpatch.checksum=checksum.tmp --set-section-flags .kpatch.checksum=alloc,load,contents,readonly ../patch/tmp_output.o || die
1157+
"$KPATCH_CROSS_COMPILE"objcopy --add-section .kpatch.checksum=checksum.tmp --set-section-flags .kpatch.checksum=alloc,load,contents,readonly ../patch/tmp_output.o || die
11571158
rm -f checksum.tmp
11581159
"$TOOLSDIR"/create-kpatch-module "$TEMPDIR"/patch/tmp_output.o "$TEMPDIR"/patch/output.o 2>&1 | logger 1
11591160
check_pipe_status create-kpatch-module
@@ -1174,7 +1175,8 @@ done
11741175

11751176
export KPATCH_BUILD="$KPATCH_BUILD" KPATCH_NAME="$MODNAME" \
11761177
KBUILD_EXTRA_SYMBOLS="$KBUILD_EXTRA_SYMBOLS" \
1177-
KPATCH_LDFLAGS="$KPATCH_LDFLAGS"
1178+
KPATCH_LDFLAGS="$KPATCH_LDFLAGS" \
1179+
CROSS_COMPILE="$KPATCH_CROSS_COMPILE"
11781180
save_env
11791181

11801182
make "${MAKEVARS[@]}" 2>&1 | logger || die

0 commit comments

Comments
 (0)