]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
livepatch/klp-build: Add --debug option to show cloning decisions
authorJosh Poimboeuf <jpoimboe@kernel.org>
Wed, 17 Sep 2025 16:04:09 +0000 (09:04 -0700)
committerJosh Poimboeuf <jpoimboe@kernel.org>
Tue, 14 Oct 2025 21:50:19 +0000 (14:50 -0700)
Add a --debug option which gets passed to "objtool klp diff" to enable
debug output related to cloning decisions.

Acked-by: Petr Mladek <pmladek@suse.com>
Tested-by: Joe Lawrence <joe.lawrence@redhat.com>
Signed-off-by: Josh Poimboeuf <jpoimboe@kernel.org>
scripts/livepatch/klp-build

index 01ed0b66bfaff6a928e5a7022a5d1921ec386965..28ee259ce5f6e22d6b77ce84aafe287879cc2f58 100755 (executable)
@@ -20,7 +20,7 @@ set -o nounset
 # This helps keep execution in pipes so pipefail+errexit can catch errors.
 shopt -s lastpipe
 
-unset SKIP_CLEANUP XTRACE
+unset DEBUG_CLONE SKIP_CLEANUP XTRACE
 
 REPLACE=1
 SHORT_CIRCUIT=0
@@ -120,6 +120,7 @@ Options:
    -v, --verbose               Pass V=1 to kernel/module builds
 
 Advanced Options:
+   -d, --debug                 Show symbol/reloc cloning decisions
    -S, --short-circuit=STEP    Start at build step (requires prior --keep-tmp)
                                   1|orig       Build original kernel (default)
                                   2|patched    Build patched kernel
@@ -140,8 +141,8 @@ process_args() {
        local long
        local args
 
-       short="hj:o:vS:T"
-       long="help,jobs:,output:,no-replace,verbose,short-circuit:,keep-tmp"
+       short="hj:o:vdS:T"
+       long="help,jobs:,output:,no-replace,verbose,debug,short-circuit:,keep-tmp"
 
        args=$(getopt --options "$short" --longoptions "$long" -- "$@") || {
                echo; usage; exit
@@ -174,6 +175,11 @@ process_args() {
                                VERBOSE="V=1"
                                shift
                                ;;
+                       -d | --debug)
+                               DEBUG_CLONE=1
+                               keep_tmp=1
+                               shift
+                               ;;
                        -S | --short-circuit)
                                [[ ! -d "$TMP_DIR" ]] && die "--short-circuit requires preserved klp-tmp dir"
                                keep_tmp=1
@@ -596,6 +602,7 @@ copy_patched_objects() {
 diff_objects() {
        local log="$KLP_DIFF_LOG"
        local files=()
+       local opts=()
 
        rm -rf "$DIFF_DIR"
        mkdir -p "$DIFF_DIR"
@@ -603,6 +610,8 @@ diff_objects() {
        find "$PATCHED_DIR" -type f -name "*.o" | mapfile -t files
        [[ ${#files[@]} -eq 0 ]] && die "no changes detected"
 
+       [[ -v DEBUG_CLONE ]] && opts=("--debug")
+
        # Diff all changed objects
        for file in "${files[@]}"; do
                local rel_file="${file#"$PATCHED_DIR"/}"
@@ -616,6 +625,7 @@ diff_objects() {
                cmd=("$SRC/tools/objtool/objtool")
                cmd+=("klp")
                cmd+=("diff")
+               (( ${#opts[@]} > 0 )) && cmd+=("${opts[@]}")
                cmd+=("$orig_file")
                cmd+=("$patched_file")
                cmd+=("$out_file")