Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/tools/perf/check-headers.sh
26282 views
1
#!/bin/bash
2
# SPDX-License-Identifier: GPL-2.0
3
4
YELLOW='\033[0;33m'
5
NC='\033[0m' # No Color
6
7
declare -a FILES=(
8
"include/uapi/linux/const.h"
9
"include/uapi/drm/drm.h"
10
"include/uapi/drm/i915_drm.h"
11
"include/uapi/linux/bits.h"
12
"include/uapi/linux/fadvise.h"
13
"include/uapi/linux/fscrypt.h"
14
"include/uapi/linux/kcmp.h"
15
"include/uapi/linux/kvm.h"
16
"include/uapi/linux/in.h"
17
"include/uapi/linux/perf_event.h"
18
"include/uapi/linux/seccomp.h"
19
"include/uapi/linux/stat.h"
20
"include/linux/bits.h"
21
"include/vdso/bits.h"
22
"include/linux/cfi_types.h"
23
"include/linux/const.h"
24
"include/vdso/const.h"
25
"include/vdso/unaligned.h"
26
"include/linux/hash.h"
27
"include/linux/list-sort.h"
28
"include/uapi/linux/hw_breakpoint.h"
29
"arch/x86/include/asm/cpufeatures.h"
30
"arch/x86/include/asm/inat_types.h"
31
"arch/x86/include/asm/emulate_prefix.h"
32
"arch/x86/include/asm/msr-index.h"
33
"arch/x86/lib/x86-opcode-map.txt"
34
"arch/x86/tools/gen-insn-attr-x86.awk"
35
"arch/arm/include/uapi/asm/perf_regs.h"
36
"arch/arm64/include/uapi/asm/perf_regs.h"
37
"arch/loongarch/include/uapi/asm/perf_regs.h"
38
"arch/mips/include/uapi/asm/perf_regs.h"
39
"arch/powerpc/include/uapi/asm/perf_regs.h"
40
"arch/s390/include/uapi/asm/perf_regs.h"
41
"arch/x86/include/uapi/asm/perf_regs.h"
42
"arch/x86/include/uapi/asm/kvm.h"
43
"arch/x86/include/uapi/asm/kvm_perf.h"
44
"arch/x86/include/uapi/asm/svm.h"
45
"arch/x86/include/uapi/asm/unistd.h"
46
"arch/x86/include/uapi/asm/vmx.h"
47
"arch/powerpc/include/uapi/asm/kvm.h"
48
"arch/s390/include/uapi/asm/kvm.h"
49
"arch/s390/include/uapi/asm/kvm_perf.h"
50
"arch/s390/include/uapi/asm/sie.h"
51
"arch/arm/include/uapi/asm/kvm.h"
52
"arch/arm64/include/uapi/asm/kvm.h"
53
"arch/arm64/include/uapi/asm/unistd.h"
54
"arch/alpha/include/uapi/asm/errno.h"
55
"arch/mips/include/asm/errno.h"
56
"arch/mips/include/uapi/asm/errno.h"
57
"arch/parisc/include/uapi/asm/errno.h"
58
"arch/powerpc/include/uapi/asm/errno.h"
59
"arch/sparc/include/uapi/asm/errno.h"
60
"arch/x86/include/uapi/asm/errno.h"
61
"include/asm-generic/bitops/arch_hweight.h"
62
"include/asm-generic/bitops/const_hweight.h"
63
"include/asm-generic/bitops/__fls.h"
64
"include/asm-generic/bitops/fls.h"
65
"include/asm-generic/bitops/fls64.h"
66
"include/linux/coresight-pmu.h"
67
"include/uapi/asm-generic/errno.h"
68
"include/uapi/asm-generic/errno-base.h"
69
"include/uapi/asm-generic/ioctls.h"
70
"include/uapi/asm-generic/mman-common.h"
71
"include/uapi/asm-generic/unistd.h"
72
"scripts/syscall.tbl"
73
)
74
75
declare -a SYNC_CHECK_FILES=(
76
"arch/x86/include/asm/inat.h"
77
"arch/x86/include/asm/insn.h"
78
"arch/x86/lib/inat.c"
79
"arch/x86/lib/insn.c"
80
)
81
82
# These copies are under tools/perf/trace/beauty/ as they are not used to in
83
# building object files only by scripts in tools/perf/trace/beauty/ to generate
84
# tables that then gets included in .c files for things like id->string syscall
85
# tables (and the reverse lookup as well: string -> id)
86
87
declare -a BEAUTY_FILES=(
88
"arch/x86/include/asm/irq_vectors.h"
89
"arch/x86/include/uapi/asm/prctl.h"
90
"include/linux/socket.h"
91
"include/uapi/linux/fcntl.h"
92
"include/uapi/linux/fs.h"
93
"include/uapi/linux/mount.h"
94
"include/uapi/linux/prctl.h"
95
"include/uapi/linux/sched.h"
96
"include/uapi/linux/stat.h"
97
"include/uapi/linux/usbdevice_fs.h"
98
"include/uapi/linux/vhost.h"
99
"include/uapi/sound/asound.h"
100
)
101
102
declare -a FAILURES
103
104
check_2 () {
105
tools_file=$1
106
orig_file=$2
107
108
shift
109
shift
110
111
cmd="diff $* $tools_file $orig_file > /dev/null"
112
113
if [ -f "$orig_file" ] && ! eval "$cmd"
114
then
115
FAILURES+=(
116
"$tools_file $orig_file"
117
)
118
fi
119
}
120
121
check () {
122
file=$1
123
124
shift
125
126
check_2 "tools/$file" "$file" "$@"
127
}
128
129
beauty_check () {
130
file=$1
131
132
shift
133
134
check_2 "tools/perf/trace/beauty/$file" "$file" "$@"
135
}
136
137
check_ignore_some_hunks () {
138
orig_file="$1"
139
tools_file="tools/$orig_file"
140
hunks_to_ignore="tools/perf/check-header_ignore_hunks/$orig_file"
141
142
if [ ! -f "$hunks_to_ignore" ]; then
143
echo "$hunks_to_ignore not found. Skipping $orig_file check."
144
FAILURES+=(
145
"$tools_file $orig_file"
146
)
147
return
148
fi
149
150
cmd="diff -u \"$tools_file\" \"$orig_file\" | grep -vf \"$hunks_to_ignore\" | wc -l | grep -qw 0"
151
152
if [ -f "$orig_file" ] && ! eval "$cmd"
153
then
154
FAILURES+=(
155
"$tools_file $orig_file"
156
)
157
fi
158
}
159
160
161
# Check if we have the kernel headers (tools/perf/../../include), else
162
# we're probably on a detached tarball, so no point in trying to check
163
# differences.
164
if ! [ -d ../../include ]
165
then
166
echo -e "${YELLOW}Warning${NC}: Skipped check-headers due to missing ../../include"
167
exit 0
168
fi
169
170
cd ../..
171
172
# simple diff check
173
for i in "${FILES[@]}"
174
do
175
check "$i" -B
176
done
177
178
for i in "${SYNC_CHECK_FILES[@]}"
179
do
180
check "$i" '-I "^.*\/\*.*__ignore_sync_check__.*\*\/.*$"'
181
done
182
183
# diff with extra ignore lines
184
check arch/x86/lib/memcpy_64.S '-I "^EXPORT_SYMBOL" -I "^#include <asm/export.h>" -I"^SYM_FUNC_START\(_LOCAL\)*(memcpy_\(erms\|orig\))" -I"^#include <linux/cfi_types.h>"'
185
check arch/x86/lib/memset_64.S '-I "^EXPORT_SYMBOL" -I "^#include <asm/export.h>" -I"^SYM_FUNC_START\(_LOCAL\)*(memset_\(erms\|orig\))"'
186
check arch/x86/include/asm/amd/ibs.h '-I "^#include .*/msr-index.h"'
187
check arch/arm64/include/asm/cputype.h '-I "^#include [<\"]\(asm/\)*sysreg.h"'
188
check include/linux/unaligned.h '-I "^#include <linux/unaligned/packed_struct.h>" -I "^#include <asm/byteorder.h>" -I "^#pragma GCC diagnostic"'
189
check include/uapi/asm-generic/mman.h '-I "^#include <\(uapi/\)*asm-generic/mman-common\(-tools\)*.h>"'
190
check include/uapi/linux/mman.h '-I "^#include <\(uapi/\)*asm/mman.h>"'
191
check include/linux/build_bug.h '-I "^#\(ifndef\|endif\)\( \/\/\)* static_assert$"'
192
check include/linux/ctype.h '-I "isdigit("'
193
check lib/ctype.c '-I "^EXPORT_SYMBOL" -I "^#include <linux/export.h>" -B'
194
195
# diff non-symmetric files
196
check_2 tools/perf/arch/x86/entry/syscalls/syscall_32.tbl arch/x86/entry/syscalls/syscall_32.tbl
197
check_2 tools/perf/arch/x86/entry/syscalls/syscall_64.tbl arch/x86/entry/syscalls/syscall_64.tbl
198
check_2 tools/perf/arch/powerpc/entry/syscalls/syscall.tbl arch/powerpc/kernel/syscalls/syscall.tbl
199
check_2 tools/perf/arch/s390/entry/syscalls/syscall.tbl arch/s390/kernel/syscalls/syscall.tbl
200
check_2 tools/perf/arch/mips/entry/syscalls/syscall_n64.tbl arch/mips/kernel/syscalls/syscall_n64.tbl
201
check_2 tools/perf/arch/arm/entry/syscalls/syscall.tbl arch/arm/tools/syscall.tbl
202
check_2 tools/perf/arch/sh/entry/syscalls/syscall.tbl arch/sh/kernel/syscalls/syscall.tbl
203
check_2 tools/perf/arch/sparc/entry/syscalls/syscall.tbl arch/sparc/kernel/syscalls/syscall.tbl
204
check_2 tools/perf/arch/xtensa/entry/syscalls/syscall.tbl arch/xtensa/kernel/syscalls/syscall.tbl
205
check_2 tools/perf/arch/alpha/entry/syscalls/syscall.tbl arch/alpha/entry/syscalls/syscall.tbl
206
check_2 tools/perf/arch/parisc/entry/syscalls/syscall.tbl arch/parisc/entry/syscalls/syscall.tbl
207
check_2 tools/perf/arch/arm64/entry/syscalls/syscall_32.tbl arch/arm64/entry/syscalls/syscall_32.tbl
208
check_2 tools/perf/arch/arm64/entry/syscalls/syscall_64.tbl arch/arm64/entry/syscalls/syscall_64.tbl
209
210
for i in "${BEAUTY_FILES[@]}"
211
do
212
beauty_check "$i" -B
213
done
214
215
# check duplicated library files
216
check_2 tools/perf/util/hashmap.h tools/lib/bpf/hashmap.h
217
check_2 tools/perf/util/hashmap.c tools/lib/bpf/hashmap.c
218
219
# Files with larger differences
220
221
check_ignore_some_hunks lib/list_sort.c
222
223
cd tools/perf || exit
224
225
if [ ${#FAILURES[@]} -gt 0 ]
226
then
227
echo -e "${YELLOW}Warning${NC}: Kernel ABI header differences:"
228
for i in "${FAILURES[@]}"
229
do
230
echo " diff -u $i"
231
done
232
fi
233
234