|
| 1 | +# Copyright © 2016 IBM Corporation |
| 2 | +# |
| 3 | +# This program is free software; you can redistribute it and/or |
| 4 | +# modify it under the terms of the GNU General Public License |
| 5 | +# as published by the Free Software Foundation; either version |
| 6 | +# 2 of the License, or (at your option) any later version. |
| 7 | +# |
| 8 | +# This script checks the relocations of a vmlinux for "suspicious" |
| 9 | +# branches from unrelocated code (head_64.S code). |
| 10 | + |
| 11 | +# Turn this on if you want more debug output: |
| 12 | +# set -x |
| 13 | + |
| 14 | +# Have Kbuild supply the path to objdump so we handle cross compilation. |
| 15 | +objdump="$1" |
| 16 | +vmlinux="$2" |
| 17 | + |
| 18 | +#__end_interrupts should be located within the first 64K |
| 19 | + |
| 20 | +end_intr=0x$( |
| 21 | +"$objdump" -R "$vmlinux" -d --start-address=0xc000000000000000 \ |
| 22 | + --stop-address=0xc000000000010000 | |
| 23 | +grep '\<__end_interrupts>:' | |
| 24 | +awk '{print $1}' |
| 25 | +) |
| 26 | + |
| 27 | +BRANCHES=$( |
| 28 | +"$objdump" -R "$vmlinux" -D --start-address=0xc000000000000000 \ |
| 29 | + --stop-address=${end_intr} | |
| 30 | +grep -e "^c[0-9a-f]*:[[:space:]]*\([0-9a-f][0-9a-f][[:space:]]\)\{4\}[[:space:]]*b" | |
| 31 | +grep -v '\<__start_initialization_multiplatform>' | |
| 32 | +grep -v -e 'b.\?.\?ctr' | |
| 33 | +grep -v -e 'b.\?.\?lr' | |
| 34 | +sed 's/://' | |
| 35 | +awk '{ print $1 ":" $6 ":0x" $7 ":" $8 " "}' |
| 36 | +) |
| 37 | + |
| 38 | +for tuple in $BRANCHES |
| 39 | +do |
| 40 | + from=`echo $tuple | cut -d':' -f1` |
| 41 | + branch=`echo $tuple | cut -d':' -f2` |
| 42 | + to=`echo $tuple | cut -d':' -f3 | sed 's/cr[0-7],//'` |
| 43 | + sym=`echo $tuple | cut -d':' -f4` |
| 44 | + |
| 45 | + if (( $to > $end_intr )) |
| 46 | + then |
| 47 | + if [ -z "$bad_branches" ]; then |
| 48 | + echo "WARNING: Unrelocated relative branches" |
| 49 | + bad_branches="yes" |
| 50 | + fi |
| 51 | + echo "$from $branch-> $to $sym" |
| 52 | + fi |
| 53 | +done |
| 54 | + |
| 55 | +if [ -z "$bad_branches" ]; then |
| 56 | + exit 0 |
| 57 | +fi |
0 commit comments