@@ -40,6 +40,7 @@ set -o pipefail
4040BASE=" $PWD "
4141SCRIPTDIR=" $( readlink -f " $( dirname " $( type -p " $0 " ) " ) " ) "
4242ARCH=" $( uname -m) "
43+ TARGET_ARCH=" ${TARGET_ARCH:- $ARCH } "
4344CPUS=" $( getconf _NPROCESSORS_ONLN) "
4445CACHEDIR=" ${CACHEDIR:- $HOME / .kpatch} "
4546KERNEL_SRCDIR=" $CACHEDIR /src"
@@ -390,7 +391,7 @@ find_special_section_data() {
390391 check[e]=true # exception_table_entry
391392
392393 # Arch-specific features
393- case " $ARCH " in
394+ case " $TARGET_ARCH " in
394395 " x86_64" )
395396 check[a]=true # alt_instr
396397 kernel_version_gte 5.10.0 && check[s]=true # static_call_site
@@ -722,6 +723,15 @@ print_supported_distro(){
722723 fi
723724}
724725
726+ # Used in "make ARCH=xxx" when making the kernel.
727+ # Match "aarch64" to "arm64", while keep everything else the same.
728+ kernel_make_arch () {
729+ if [[ " $1 " == " aarch64" ]]; then
730+ echo " arm64"
731+ else
732+ echo " $1 "
733+ fi
734+ }
725735
726736usage () {
727737 echo " usage: $( basename " $0 " ) [options] <patch1 ... patchN>" >&2
@@ -1299,6 +1309,11 @@ else
12991309 MAKEVARS+=(" LD=${KPATCH_CC_PREFIX}${LD} " )
13001310fi
13011311
1312+ if [[ " $ARCH " != " $TARGET_ARCH " ]]; then
1313+ KARCH=$( kernel_make_arch " $TARGET_ARCH " )
1314+ MAKEVARS+=(" ARCH=$KARCH " )
1315+ fi
1316+
13021317
13031318# $TARGETS used as list, no quotes.
13041319# shellcheck disable=SC2086
@@ -1489,7 +1504,12 @@ fi
14891504cd " $TEMPDIR /output" || die
14901505# $KPATCH_LDFLAGS and result of find used as list, no quotes.
14911506# shellcheck disable=SC2086,SC2046
1492- " $LD " -r $KPATCH_LDFLAGS -o ../patch/tmp_output.o $( find . -name " *.o" ) 2>&1 | logger || die
1507+ if [[ " $ARCH " != " $TARGET_ARCH " ]]; then
1508+ # if cross compiling, use LLD to link
1509+ " $LLD " -r $KPATCH_LDFLAGS -o ../patch/tmp_output.o $( find . -name " *.o" ) 2>&1 | logger || die
1510+ else
1511+ " $LD " -r $KPATCH_LDFLAGS -o ../patch/tmp_output.o $( find . -name " *.o" ) 2>&1 | logger || die
1512+ fi
14931513
14941514if [[ " $USE_KLP " -eq 1 ]]; then
14951515 cp -f " $TEMPDIR " /patch/tmp_output.o " $TEMPDIR " /patch/output.o || die
0 commit comments