Skip to content

Commit 085cf5d

Browse files
committed
kpatch-build: add support for clang pgo
For clang with Profile-Guided Optimization (PGO), profile data is needed to compile the livepatch properly. Add option -p|--profile-data, which specifies the profile data file. This option is only valid with CONFIG_CC_IS_CLANG and CONFIG_PGO_CLANG. Signed-off-by: Song Liu <[email protected]>
1 parent ac947f2 commit 085cf5d

File tree

1 file changed

+19
-1
lines changed

1 file changed

+19
-1
lines changed

kpatch-build/kpatch-build

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -535,9 +535,10 @@ usage() {
535535
echo " --skip-cleanup Skip post-build cleanup" >&2
536536
echo " --skip-compiler-check Skip compiler version matching check" >&2
537537
echo " (not recommended)" >&2
538+
echo " -p, --profile-data specify profile data for PGO (clang only)" >&2
538539
}
539540

540-
options="$(getopt -o ha:r:s:c:v:j:t:n:o:dR -l "help,archversion:,sourcerpm:,sourcedir:,config:,vmlinux:,jobs:,target:,name:,output:,oot-module:,oot-module-src:,debug,skip-gcc-check,skip-compiler-check,skip-cleanup,non-replace" -- "$@")" || die "getopt failed"
541+
options="$(getopt -o ha:r:s:c:v:j:t:n:o:dRp: -l "help,archversion:,sourcerpm:,sourcedir:,config:,vmlinux:,jobs:,target:,name:,output:,oot-module:,oot-module-src:,debug,skip-gcc-check,skip-compiler-check,skip-cleanup,non-replace,profile-data" -- "$@")" || die "getopt failed"
541542

542543
eval set -- "$options"
543544

@@ -619,6 +620,10 @@ while [[ $# -gt 0 ]]; do
619620
echo "WARNING: Skipping compiler version matching check (not recommended)"
620621
SKIPCOMPILERCHECK=1
621622
;;
623+
-p|--profile-data)
624+
PROFILE_DATA="$(readlink -f "$2")"
625+
shift
626+
;;
622627
*)
623628
[[ "$1" = "--" ]] && shift && continue
624629
[[ ! -f "$1" ]] && die "patch file '$1' not found"
@@ -896,6 +901,16 @@ fi
896901

897902
if [[ -n "$CONFIG_CC_IS_CLANG" ]]; then
898903
echo "WARNING: Clang support is experimental"
904+
if [[ -z "$PROFILE_DATA" ]] && [[ -n "$CONFIG_PGO_CLANG" ]]; then
905+
die "Please specify profile-data for CONFIG_PGO_CLANG"
906+
fi
907+
if [[ -n "$PROFILE_DATA" ]] && [[ -z "$CONFIG_PGO_CLANG" ]]; then
908+
echo "WARNING profile-data specified w/o CONFIG_PGO_CLANG, ignore it"
909+
fi
910+
else
911+
if [[ -n "$PROFILE_DATA" ]]; then
912+
die "Only supports profile-data with Clang"
913+
fi
899914
fi
900915

901916
if [[ "$SKIPCOMPILERCHECK" -eq 0 ]]; then
@@ -943,6 +958,9 @@ declare -a MAKEVARS
943958
if [[ -n "$CONFIG_CC_IS_CLANG" ]]; then
944959
MAKEVARS+=("CC=${KPATCH_CC_PREFIX}${CLANG}")
945960
MAKEVARS+=("HOSTCC=clang")
961+
if [[ -n "$CONFIG_PGO_CLANG" ]]; then
962+
MAKEVARS+=("CFLAGS_PGO_CLANG=-fprofile-use=$PROFILE_DATA")
963+
fi
946964
else
947965
MAKEVARS+=("CC=${KPATCH_CC_PREFIX}${GCC}")
948966
fi

0 commit comments

Comments
 (0)