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"