On Fri, Jun 06, 2025 at 09:05:59AM -0400, Joe Lawrence wrote:
> Should the .cmd file copy come from the reference SRC and not original
> ORIG directory?
> 
>   cmd_file="$SRC/$(dirname "$rel_file")/.$(basename "$rel_file").cmd"
> 
> because I don't see any .cmd files in klp-tmp/orig/
> 
> FWIW, I only noticed this after backporting the series to
> centos-stream-10.  There, I got this build error:
> 
>   Building original kernel
>   Copying original object files
>   Fixing patches
>   Building patched kernel
>   Copying patched object files
>   Diffing objects
>   vmlinux.o: changed function: cmdline_proc_show
>   Building patch module: livepatch-test.ko
>   <...>/klp-tmp/kmod/.vmlinux.o.cmd: No such file or directory
>   make[2]: *** [scripts/Makefile.modpost:145:
> <...>/klp-tmp/kmod/Module.symvers] Error 1
>  make[1]: *** [<...>/Makefile:1936: modpost] Error 2
>  make: *** [Makefile:236: __sub-make] Error 2
> 
> The above edit worked for both your upstream branch and my downstream
> backport.

Hm, I broke this in one of my refactorings before posting.

Is this with CONFIG_MODVERSIONS?

If you get a chance to test, here's a fix (currently untested):

diff --git a/scripts/livepatch/klp-build b/scripts/livepatch/klp-build
index 277fbe948730..cd6e118da275 100755
--- a/scripts/livepatch/klp-build
+++ b/scripts/livepatch/klp-build
@@ -517,16 +517,29 @@ find_objects() {
 
 # Copy all objects (.o archives) to $ORIG_DIR
 copy_orig_objects() {
+       local files=()
 
        rm -rf "$ORIG_DIR"
        mkdir -p "$ORIG_DIR"
 
-       (
-               cd "$OBJ"
-               find_objects                                            \
-                       | sed 's/\.ko$/.o/'                             \
-                       | xargs cp --parents --target-directory="$ORIG_DIR"
-       )
+       find_objects | mapfile -t files
+
+       xtrace_save "copying orig objects"
+       for _file in "${files[@]}"; do
+               local rel_file="${_file/.ko/.o}"
+               local file="$OBJ/$rel_file"
+               local file_dir="$(dirname "$file")"
+               local orig_file="$ORIG_DIR/$rel_file"
+               local orig_dir="$(dirname "$orig_file")"
+               local cmd_file="$file_dir/.$(basename "$file").cmd"
+
+               [[ ! -f "$file" ]] && die "missing $(basename "$file") for 
$_file"
+
+               mkdir -p "$orig_dir"
+               cp -f "$file" "$orig_dir"
+               [[ -e "$cmd_file" ]] && cp -f "$cmd_file" "$orig_dir"
+       done
+       xtrace_restore
 
        mv -f "$TMP_DIR/build.log" "$ORIG_DIR"
        touch "$TIMESTAMP"

Reply via email to