From: Nicholas Piggin <npiggin@gmail.com>
To: linuxppc-dev@lists.ozlabs.org
Cc: Nicholas Piggin <npiggin@gmail.com>,
Stephen Rothwell <sfr@canb.auug.org.au>
Subject: [PATCH 3/7] powerpc/64s: tool to flag direct branches from unrelocated interrupt vectors
Date: Wed, 19 Oct 2016 14:15:56 +1100 [thread overview]
Message-ID: <20161019031600.17933-4-npiggin@gmail.com> (raw)
In-Reply-To: <20161019031600.17933-1-npiggin@gmail.com>
Direct banches from code below __end_interrupts to code above
__end_interrupts when built with CONFIG_RELOCATABLE are disallowed
because they will break when the kernel is not located at 0.
Sample output:
WARNING: Unrelocated relative branches
c000000000000118 bl-> 0xc000000000038fb8 <pnv_restore_hyp_resource>
c00000000000013c b-> 0xc0000000001068a4 <kvm_start_guest>
c000000000000148 b-> 0xc00000000003919c <pnv_wakeup_loss>
c00000000000014c b-> 0xc00000000003923c <pnv_wakeup_noloss>
c0000000000005a4 b-> 0xc000000000106ffc <kvmppc_interrupt_hv>
c000000000001af0 b-> 0xc000000000106ffc <kvmppc_interrupt_hv>
c000000000001b24 b-> 0xc000000000106ffc <kvmppc_interrupt_hv>
c000000000001b58 b-> 0xc000000000106ffc <kvmppc_interrupt_hv>
Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
---
arch/powerpc/Makefile.postlink | 9 ++++-
arch/powerpc/tools/unrel_branch_check.sh | 56 ++++++++++++++++++++++++++++++++
2 files changed, 64 insertions(+), 1 deletion(-)
create mode 100755 arch/powerpc/tools/unrel_branch_check.sh
diff --git a/arch/powerpc/Makefile.postlink b/arch/powerpc/Makefile.postlink
index 29c0a3a..1725e64 100644
--- a/arch/powerpc/Makefile.postlink
+++ b/arch/powerpc/Makefile.postlink
@@ -11,7 +11,14 @@ include include/config/auto.conf
include scripts/Kbuild.include
quiet_cmd_relocs_check = CHKREL $@
- cmd_relocs_check = $(CONFIG_SHELL) $(srctree)/arch/powerpc/tools/relocs_check.sh "$(OBJDUMP)" "$@"
+ifeq ($(CONFIG_PPC_BOOK3S_64),y)
+ cmd_relocs_check = \
+ $(CONFIG_SHELL) $(srctree)/arch/powerpc/tools/relocs_check.sh "$(OBJDUMP)" "$@" ; \
+ $(CONFIG_SHELL) $(srctree)/arch/powerpc/tools/unrel_branch_check.sh "$(OBJDUMP)" "$@"
+else
+ cmd_relocs_check = \
+ $(CONFIG_SHELL) $(srctree)/arch/powerpc/tools/relocs_check.sh "$(OBJDUMP)" "$@"
+endif
# `@true` prevents complaint when there is nothing to be done
diff --git a/arch/powerpc/tools/unrel_branch_check.sh b/arch/powerpc/tools/unrel_branch_check.sh
new file mode 100755
index 0000000..524a9e2
--- /dev/null
+++ b/arch/powerpc/tools/unrel_branch_check.sh
@@ -0,0 +1,56 @@
+#!/bin/bash
+#
+# Copyright © 2016 IBM Corporation
+#
+# 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.
+#
+# This script checks the relocations of a vmlinux for "suspicious"
+# branches from unrelocated code (head_64.S code).
+
+# Have Kbuild supply the path to objdump so we handle cross compilation.
+objdump="$1"
+vmlinux="$2"
+
+#__end_interrupts should be located within the first 64K
+
+end_intr=0x$(
+"$objdump" -R "$vmlinux" -d --start-address=0xc000000000000000 \
+ --stop-address=0xc000000000010000 |
+grep '\<__end_interrupts>:' |
+awk '{print $1}'
+)
+
+BRANCHES=$(
+"$objdump" -R "$vmlinux" -D --start-address=0xc000000000000000 \
+ --stop-address=${end_intr} |
+grep -e "^c[0-9a-f]*:[[:space:]]*\([0-9a-f][0-9a-f][[:space:]]\)\{4\}[[:space:]]*b" |
+grep -v '\<__start_initialization_multiplatform>' |
+grep -v -e 'b.\?.\?ctr' |
+grep -v -e 'b.\?.\?lr' |
+sed 's/://' |
+awk '{ print $1 ":" $6 ":0x" $7 ":" $8 " "}'
+)
+
+for tuple in $BRANCHES
+do
+ from=`echo $tuple | cut -d':' -f1`
+ branch=`echo $tuple | cut -d':' -f2`
+ to=`echo $tuple | cut -d':' -f3 | sed 's/cr[0-7],//'`
+ sym=`echo $tuple | cut -d':' -f4`
+
+ if (( $to > $end_intr ))
+ then
+ if [ -z "$bad_branches" ]; then
+ echo "WARNING: Unrelocated relative branches"
+ bad_branches="yes"
+ fi
+ echo "$from $branch-> $to $sym"
+ fi
+done
+
+if [ -z "$bad_branches" ]; then
+ exit 0
+fi
--
2.9.3
next prev parent reply other threads:[~2016-10-19 3:16 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-10-19 3:15 [PATCH 0/7] build updates Nicholas Piggin
2016-10-19 3:15 ` [PATCH 1/7] powerpc: use the new post-link pass to check relocations Nicholas Piggin
2016-10-19 3:15 ` [PATCH 2/7] powerpc: add arch/powerpc/tools directory Nicholas Piggin
2016-10-19 3:15 ` Nicholas Piggin [this message]
2016-10-19 4:28 ` [PATCH 3/7] powerpc/64s: tool to flag direct branches from unrelocated interrupt vectors Balbir Singh
2016-10-19 6:01 ` Nicholas Piggin
2016-10-19 10:57 ` Michael Ellerman
2016-10-19 3:15 ` [PATCH 4/7] powerpc/64: tool to check head sections location sanity Nicholas Piggin
2016-11-15 0:55 ` Michael Ellerman
2016-11-22 4:54 ` Nicholas Piggin
2016-11-22 5:56 ` Michael Ellerman
2016-10-19 3:15 ` [PATCH 5/7] powerpc/64: handle linker stubs in low .text code Nicholas Piggin
2016-10-19 3:15 ` [PATCH 6/7] powerpc: switch to using thin archives if COMPILE_TEST is set Nicholas Piggin
2016-10-19 5:57 ` Stephen Rothwell
2016-10-19 9:26 ` Nicholas Piggin
2016-10-19 11:00 ` Michael Ellerman
2016-10-20 3:48 ` Nicholas Piggin
2016-11-22 0:34 ` [6/7] " Michael Ellerman
2016-10-19 3:16 ` [PATCH 7/7] powerpc/64: allow CONFIG_RELOCATABLE if COMPILE_TEST Nicholas Piggin
2017-05-03 22:18 ` [7/7] " Michael Ellerman
2016-10-19 7:44 ` [PATCH 0/7] build updates Nicholas Piggin
2016-10-21 6:35 ` [PATCH 0/7] build updates (and RFC on one-pass kallsyms generation) Nicholas Piggin
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20161019031600.17933-4-npiggin@gmail.com \
--to=npiggin@gmail.com \
--cc=linuxppc-dev@lists.ozlabs.org \
--cc=sfr@canb.auug.org.au \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.