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