hc
2024-01-03 2f7c68cb55ecb7331f2381deb497c27155f32faf
kernel/arch/powerpc/tools/relocs_check.sh
....@@ -1,11 +1,8 @@
11 #!/bin/sh
2
+# SPDX-License-Identifier: GPL-2.0-or-later
23
34 # Copyright © 2015 IBM Corporation
45
5
-# This program is free software; you can redistribute it and/or
6
-# modify it under the terms of the GNU General Public License
7
-# as published by the Free Software Foundation; either version
8
-# 2 of the License, or (at your option) any later version.
96
107 # This script checks the relocations of a vmlinux for "suspicious"
118 # relocations.
....@@ -13,14 +10,21 @@
1310 # based on relocs_check.pl
1411 # Copyright © 2009 IBM Corporation
1512
16
-if [ $# -lt 2 ]; then
17
- echo "$0 [path to objdump] [path to vmlinux]" 1>&2
13
+if [ $# -lt 3 ]; then
14
+ echo "$0 [path to objdump] [path to nm] [path to vmlinux]" 1>&2
1815 exit 1
1916 fi
2017
21
-# Have Kbuild supply the path to objdump so we handle cross compilation.
18
+# Have Kbuild supply the path to objdump and nm so we handle cross compilation.
2219 objdump="$1"
23
-vmlinux="$2"
20
+nm="$2"
21
+vmlinux="$3"
22
+
23
+# Remove from the bad relocations those that match an undefined weak symbol
24
+# which will result in an absolute relocation to 0.
25
+# Weak unresolved symbols are of that form in nm output:
26
+# " w _binary__btf_vmlinux_bin_end"
27
+undef_weak_symbols=$($nm "$vmlinux" | awk '$1 ~ /w/ { print $2 }')
2428
2529 bad_relocs=$(
2630 $objdump -R "$vmlinux" |
....@@ -29,8 +33,6 @@
2933 # These relocations are okay
3034 # On PPC64:
3135 # R_PPC64_RELATIVE, R_PPC64_NONE
32
- # R_PPC64_ADDR64 mach_<name>
33
- # R_PPC64_ADDR64 __crc_<name>
3436 # On PPC:
3537 # R_PPC_RELATIVE, R_PPC_ADDR16_HI,
3638 # R_PPC_ADDR16_HA,R_PPC_ADDR16_LO,
....@@ -42,8 +44,7 @@
4244 R_PPC_ADDR16_HA
4345 R_PPC_RELATIVE
4446 R_PPC_NONE' |
45
- grep -E -v '\<R_PPC64_ADDR64[[:space:]]+mach_' |
46
- grep -E -v '\<R_PPC64_ADDR64[[:space:]]+__crc_'
47
+ ([ "$undef_weak_symbols" ] && grep -F -w -v "$undef_weak_symbols" || cat)
4748 )
4849
4950 if [ -z "$bad_relocs" ]; then