Alexandre Ghiti <a...@ghiti.fr> writes: > Relocating kernel at runtime is done very early in the boot process, so > it is not convenient to check for relocations there and react in case a > relocation was not expected. > > Powerpc architecture has a script that allows to check at compile time > for such unexpected relocations: extract the common logic to scripts/ > so that other architectures can take advantage of it. > > Signed-off-by: Alexandre Ghiti <a...@ghiti.fr> > Reviewed-by: Anup Patel <a...@brainfault.org> > --- > arch/powerpc/tools/relocs_check.sh | 18 ++---------------- > scripts/relocs_check.sh | 20 ++++++++++++++++++++ > 2 files changed, 22 insertions(+), 16 deletions(-) > create mode 100755 scripts/relocs_check.sh
I'm not sure that script is really big/complicated enough to warrant sharing vs just copying, but I don't mind either. Acked-by: Michael Ellerman <m...@ellerman.id.au> (powerpc) cheers > diff --git a/arch/powerpc/tools/relocs_check.sh > b/arch/powerpc/tools/relocs_check.sh > index 014e00e74d2b..e367895941ae 100755 > --- a/arch/powerpc/tools/relocs_check.sh > +++ b/arch/powerpc/tools/relocs_check.sh > @@ -15,21 +15,8 @@ if [ $# -lt 3 ]; then > exit 1 > fi > > -# Have Kbuild supply the path to objdump and nm so we handle cross > compilation. > -objdump="$1" > -nm="$2" > -vmlinux="$3" > - > -# Remove from the bad relocations those that match an undefined weak symbol > -# which will result in an absolute relocation to 0. > -# Weak unresolved symbols are of that form in nm output: > -# " w _binary__btf_vmlinux_bin_end" > -undef_weak_symbols=$($nm "$vmlinux" | awk '$1 ~ /w/ { print $2 }') > - > bad_relocs=$( > -$objdump -R "$vmlinux" | > - # Only look at relocation lines. > - grep -E '\<R_' | > +${srctree}/scripts/relocs_check.sh "$@" | > # These relocations are okay > # On PPC64: > # R_PPC64_RELATIVE, R_PPC64_NONE > @@ -43,8 +30,7 @@ R_PPC_ADDR16_LO > R_PPC_ADDR16_HI > R_PPC_ADDR16_HA > R_PPC_RELATIVE > -R_PPC_NONE' | > - ([ "$undef_weak_symbols" ] && grep -F -w -v "$undef_weak_symbols" || > cat) > +R_PPC_NONE' > ) > > if [ -z "$bad_relocs" ]; then > diff --git a/scripts/relocs_check.sh b/scripts/relocs_check.sh > new file mode 100755 > index 000000000000..137c660499f3 > --- /dev/null > +++ b/scripts/relocs_check.sh > @@ -0,0 +1,20 @@ > +#!/bin/sh > +# SPDX-License-Identifier: GPL-2.0-or-later > + > +# Get a list of all the relocations, remove from it the relocations > +# that are known to be legitimate and return this list to arch specific > +# script that will look for suspicious relocations. > + > +objdump="$1" > +nm="$2" > +vmlinux="$3" > + > +# Remove from the possible bad relocations those that match an undefined > +# weak symbol which will result in an absolute relocation to 0. > +# Weak unresolved symbols are of that form in nm output: > +# " w _binary__btf_vmlinux_bin_end" > +undef_weak_symbols=$($nm "$vmlinux" | awk '$1 ~ /w/ { print $2 }') > + > +$objdump -R "$vmlinux" | > + grep -E '\<R_' | > + ([ "$undef_weak_symbols" ] && grep -F -w -v "$undef_weak_symbols" || > cat) > -- > 2.30.2 > > > _______________________________________________ > linux-riscv mailing list > linux-ri...@lists.infradead.org > http://lists.infradead.org/mailman/listinfo/linux-riscv