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