File: kpatch-cc

package info (click to toggle)
kpatch 0.9.10-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 4,716 kB
  • sloc: ansic: 9,716; sh: 2,592; makefile: 260; asm: 35
file content (92 lines) | stat: -rwxr-xr-x 1,995 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
#!/bin/bash

if [[ ${KPATCH_GCC_DEBUG:-0} -ne 0 ]]; then
	set -o xtrace
fi

TOOLCHAINCMD="$1"
shift

if [[ -z "$KPATCH_GCC_TEMPDIR" ]]; then
	exec "$TOOLCHAINCMD" "$@"
fi

declare -a args=("$@")

if [[ "$TOOLCHAINCMD" =~ ^(.*-)?gcc$ || "$TOOLCHAINCMD" =~ ^(.*-)?clang$ ]] ; then
	while [ "$#" -gt 0 ]; do
		if [ "$1" = "-o" ]; then
			obj="$2"

			# skip copying the temporary .o files created by
			# recordmcount.pl
			[[ "$obj" = */.tmp_mc_*.o ]] && break;

			[[ "$obj" = */.tmp_*.o ]] && obj="${obj/.tmp_/}"
			relobj=${obj##"$KPATCH_GCC_SRCDIR"/}
			case "$relobj" in
				*.mod.o|\
				*built-in.o|\
				*built-in.a|\
				vmlinux.o|\
				.tmp_kallsyms1.o|\
				.tmp_kallsyms2.o|\
				arch/x86/boot/*|\
				arch/x86/entry/vdso/*|\
				arch/x86/purgatory/*|\
				arch/x86/realmode/*|\
				arch/x86/tools/*|\
				arch/x86/vdso/*|\
				arch/powerpc/kernel/prom_init.o|\
				arch/powerpc/kernel/vdso64/*|\
				arch/s390/boot/*|\
				arch/s390/purgatory/*|\
				arch/s390/kernel/vdso64/*|\
				drivers/firmware/efi/libstub/*|\
				init/version.o|\
				init/version-timestamp.o|\
				kernel/system_certificates.o|\
				lib/*|\
				tools/*|\
				.*.o|\
				*/.lib_exports.o)
					break
					;;
				*.o)
					mkdir -p "$KPATCH_GCC_TEMPDIR/orig/$(dirname "$relobj")"
					[[ -e "$obj" ]] && cp -f "$obj" "$KPATCH_GCC_TEMPDIR/orig/$relobj"
					echo "$relobj" >> "$KPATCH_GCC_TEMPDIR/changed_objs"
					break
					;;
				*)
					break
					;;
			esac
		fi
		shift
	done
elif [[ "$TOOLCHAINCMD" =~ ^(.*-)?ld || "$TOOLCHAINCMD" =~ ^(.*-)?ld.lld ]] ; then
	while [ "$#" -gt 0 ]; do
		if [ "$1" = "-o" ]; then
			obj="$2"
			relobj=${obj//$KPATCH_GCC_SRCDIR\//}
			case "$obj" in
				*.ko)
					mkdir -p "$KPATCH_GCC_TEMPDIR/module/$(dirname "$relobj")"
					cp -f "$obj" "$KPATCH_GCC_TEMPDIR/module/$relobj"
					break
					;;
				.tmp_vmlinux*|vmlinux)
					args+=(--warn-unresolved-symbols)
					break
					;;
				*)
					break
					;;
			esac
		fi
		shift
	done
fi

exec "$TOOLCHAINCMD" "${args[@]}"