Blame kpatch-build/kpatch-gcc
|
Packit |
c71e3f |
#!/bin/bash
|
|
Packit |
c71e3f |
|
|
Packit |
c71e3f |
if [[ ${KPATCH_GCC_DEBUG:-0} -ne 0 ]]; then
|
|
Packit |
c71e3f |
set -o xtrace
|
|
Packit |
c71e3f |
fi
|
|
Packit |
c71e3f |
|
|
Packit |
c71e3f |
TOOLCHAINCMD="$1"
|
|
Packit |
c71e3f |
shift
|
|
Packit |
c71e3f |
|
|
Packit |
c71e3f |
if [[ -z "$KPATCH_GCC_TEMPDIR" ]]; then
|
|
Packit |
c71e3f |
exec "$TOOLCHAINCMD" "$@"
|
|
Packit |
c71e3f |
fi
|
|
Packit |
c71e3f |
|
|
Packit |
c71e3f |
declare -a args=("$@")
|
|
Packit |
c71e3f |
|
|
Packit |
c71e3f |
if [[ "$TOOLCHAINCMD" = "gcc" ]] ; then
|
|
Packit |
c71e3f |
while [ "$#" -gt 0 ]; do
|
|
Packit |
c71e3f |
if [ "$1" = "-o" ]; then
|
|
Packit |
c71e3f |
obj="$2"
|
|
Packit |
c71e3f |
|
|
Packit |
c71e3f |
# skip copying the temporary .o files created by
|
|
Packit |
c71e3f |
# recordmcount.pl
|
|
Packit |
c71e3f |
[[ "$obj" = */.tmp_mc_*.o ]] && break;
|
|
Packit |
c71e3f |
|
|
Packit |
c71e3f |
[[ "$obj" = */.tmp_*.o ]] && obj="${obj/.tmp_/}"
|
|
Packit |
c71e3f |
case "$obj" in
|
|
Packit |
c71e3f |
*.mod.o|\
|
|
Packit |
c71e3f |
*built-in.o|\
|
|
Packit |
c71e3f |
*built-in.a|\
|
|
Packit |
c71e3f |
vmlinux.o|\
|
|
Packit |
c71e3f |
.tmp_kallsyms1.o|\
|
|
Packit |
c71e3f |
.tmp_kallsyms2.o|\
|
|
Packit |
c71e3f |
init/version.o|\
|
|
Packit |
c71e3f |
arch/x86/boot/version.o|\
|
|
Packit |
c71e3f |
arch/x86/boot/compressed/eboot.o|\
|
|
Packit |
c71e3f |
arch/x86/boot/header.o|\
|
|
Packit |
c71e3f |
arch/x86/boot/compressed/efi_stub_64.o|\
|
|
Packit |
c71e3f |
arch/x86/boot/compressed/piggy.o|\
|
|
Packit |
c71e3f |
kernel/system_certificates.o|\
|
|
Packit |
c71e3f |
arch/x86/vdso/*|\
|
|
Packit |
c71e3f |
arch/x86/entry/vdso/*|\
|
|
Packit |
c71e3f |
drivers/firmware/efi/libstub/*|\
|
|
Packit |
c71e3f |
arch/powerpc/kernel/prom_init.o|\
|
|
Packit |
c71e3f |
lib/*|\
|
|
Packit |
c71e3f |
.*.o|\
|
|
Packit |
c71e3f |
*/.lib_exports.o)
|
|
Packit |
c71e3f |
break
|
|
Packit |
c71e3f |
;;
|
|
Packit |
c71e3f |
*.o)
|
|
Packit |
c71e3f |
mkdir -p "$KPATCH_GCC_TEMPDIR/orig/$(dirname "$obj")"
|
|
Packit |
c71e3f |
[[ -e "$obj" ]] && cp -f "$obj" "$KPATCH_GCC_TEMPDIR/orig/$obj"
|
|
Packit |
c71e3f |
echo "$obj" >> "$KPATCH_GCC_TEMPDIR/changed_objs"
|
|
Packit |
c71e3f |
break
|
|
Packit |
c71e3f |
;;
|
|
Packit |
c71e3f |
*)
|
|
Packit |
c71e3f |
break
|
|
Packit |
c71e3f |
;;
|
|
Packit |
c71e3f |
esac
|
|
Packit |
c71e3f |
fi
|
|
Packit |
c71e3f |
shift
|
|
Packit |
c71e3f |
done
|
|
Packit |
c71e3f |
elif [[ "$TOOLCHAINCMD" = "ld" ]] ; then
|
|
Packit |
c71e3f |
while [ "$#" -gt 0 ]; do
|
|
Packit |
c71e3f |
if [ "$1" = "-o" ]; then
|
|
Packit |
c71e3f |
obj="$2"
|
|
Packit |
c71e3f |
case "$obj" in
|
|
Packit |
c71e3f |
*.ko)
|
|
Packit |
c71e3f |
mkdir -p "$KPATCH_GCC_TEMPDIR/module/$(dirname "$obj")"
|
|
Packit |
c71e3f |
cp -f "$obj" "$KPATCH_GCC_TEMPDIR/module/$obj"
|
|
Packit |
c71e3f |
break
|
|
Packit |
c71e3f |
;;
|
|
Packit |
c71e3f |
.tmp_vmlinux*|vmlinux)
|
|
Packit |
c71e3f |
args+=(--warn-unresolved-symbols)
|
|
Packit |
c71e3f |
break
|
|
Packit |
c71e3f |
;;
|
|
Packit |
c71e3f |
*)
|
|
Packit |
c71e3f |
break
|
|
Packit |
c71e3f |
;;
|
|
Packit |
c71e3f |
esac
|
|
Packit |
c71e3f |
fi
|
|
Packit |
c71e3f |
shift
|
|
Packit |
c71e3f |
done
|
|
Packit |
c71e3f |
fi
|
|
Packit |
c71e3f |
|
|
Packit |
c71e3f |
exec "$TOOLCHAINCMD" "${args[@]}"
|