![Thomas Gleixner](/assets/img/avatar_default.png)
Based on 1 normalized pattern(s): this program is free software you can redistribute it and or modify it under the terms of the gnu general public license as published by the free software foundation either version 2 of the license or at your option any later version extracted by the scancode license scanner the SPDX license identifier GPL-2.0-or-later has been chosen to replace the boilerplate/reference in 3029 file(s). Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Reviewed-by: Allison Randal <allison@lohutok.net> Cc: linux-spdx@vger.kernel.org Link: https://lkml.kernel.org/r/20190527070032.746973796@linutronix.de Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
59 lines
1.3 KiB
Bash
Executable file
59 lines
1.3 KiB
Bash
Executable file
#!/bin/sh
|
|
# SPDX-License-Identifier: GPL-2.0-or-later
|
|
|
|
# Copyright © 2015 IBM Corporation
|
|
|
|
|
|
# This script checks the relocations of a vmlinux for "suspicious"
|
|
# relocations.
|
|
|
|
# based on relocs_check.pl
|
|
# Copyright © 2009 IBM Corporation
|
|
|
|
if [ $# -lt 2 ]; then
|
|
echo "$0 [path to objdump] [path to vmlinux]" 1>&2
|
|
exit 1
|
|
fi
|
|
|
|
# Have Kbuild supply the path to objdump so we handle cross compilation.
|
|
objdump="$1"
|
|
vmlinux="$2"
|
|
|
|
bad_relocs=$(
|
|
"$objdump" -R "$vmlinux" |
|
|
# Only look at relocation lines.
|
|
grep -E '\<R_' |
|
|
# These relocations are okay
|
|
# On PPC64:
|
|
# R_PPC64_RELATIVE, R_PPC64_NONE
|
|
# R_PPC64_ADDR64 mach_<name>
|
|
# R_PPC64_ADDR64 __crc_<name>
|
|
# On PPC:
|
|
# R_PPC_RELATIVE, R_PPC_ADDR16_HI,
|
|
# R_PPC_ADDR16_HA,R_PPC_ADDR16_LO,
|
|
# R_PPC_NONE
|
|
grep -F -w -v 'R_PPC64_RELATIVE
|
|
R_PPC64_NONE
|
|
R_PPC_ADDR16_LO
|
|
R_PPC_ADDR16_HI
|
|
R_PPC_ADDR16_HA
|
|
R_PPC_RELATIVE
|
|
R_PPC_NONE' |
|
|
grep -E -v '\<R_PPC64_ADDR64[[:space:]]+mach_' |
|
|
grep -E -v '\<R_PPC64_ADDR64[[:space:]]+__crc_'
|
|
)
|
|
|
|
if [ -z "$bad_relocs" ]; then
|
|
exit 0
|
|
fi
|
|
|
|
num_bad=$(echo "$bad_relocs" | wc -l)
|
|
echo "WARNING: $num_bad bad relocations"
|
|
echo "$bad_relocs"
|
|
|
|
# If we see this type of relocation it's an idication that
|
|
# we /may/ be using an old version of binutils.
|
|
if echo "$bad_relocs" | grep -q -F -w R_PPC64_UADDR64; then
|
|
echo "WARNING: You need at least binutils >= 2.19 to build a CONFIG_RELOCATABLE kernel"
|
|
fi
|