aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPeter Zijlstra (Intel) <peterz@infradead.org>2018-06-04 14:48:31 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2018-06-05 12:04:37 -0400
commit689135f0ed61b6bf3adc215d2ee70be747cf8f93 (patch)
tree7dd2a007d4672ba43cf427c55c5f9ab81336c4c9
parent29dcea88779c856c7dc92040a0c01233263101d4 (diff)
scripts/faddr2line: make the new code listing format optional
Commit 6870c0165feaa5 ("scripts/faddr2line: show the code context") radically altered the output format of the faddr2line tool. And while the new list output format might have merit it broke my vim usage and was hard to read. Make the new format optional; using a '--list' argument and attempt to make the output slightly easier to read by adding a little whitespace to separate the different files and explicitly mark the line in question. Cc: Changbin Du <changbin.du@intel.com> Fixes: 6870c0165feaa5 ("scripts/faddr2line: show the code context") Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org> Signed-off-by: Josh Poimboeuf <jpoimboe@redhat.com> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
-rwxr-xr-xscripts/faddr2line18
1 files changed, 16 insertions, 2 deletions
diff --git a/scripts/faddr2line b/scripts/faddr2line
index 1876a741087c..a0149db00be7 100755
--- a/scripts/faddr2line
+++ b/scripts/faddr2line
@@ -56,7 +56,7 @@ command -v ${SIZE} >/dev/null 2>&1 || die "size isn't installed"
56command -v ${NM} >/dev/null 2>&1 || die "nm isn't installed" 56command -v ${NM} >/dev/null 2>&1 || die "nm isn't installed"
57 57
58usage() { 58usage() {
59 echo "usage: faddr2line <object file> <func+offset> <func+offset>..." >&2 59 echo "usage: faddr2line [--list] <object file> <func+offset> <func+offset>..." >&2
60 exit 1 60 exit 1
61} 61}
62 62
@@ -166,15 +166,25 @@ __faddr2line() {
166 local file_lines=$(${ADDR2LINE} -fpie $objfile $addr | sed "s; $dir_prefix\(\./\)*; ;") 166 local file_lines=$(${ADDR2LINE} -fpie $objfile $addr | sed "s; $dir_prefix\(\./\)*; ;")
167 [[ -z $file_lines ]] && return 167 [[ -z $file_lines ]] && return
168 168
169 if [[ $LIST = 0 ]]; then
170 echo "$file_lines" | while read -r line
171 do
172 echo $line
173 done
174 DONE=1;
175 return
176 fi
177
169 # show each line with context 178 # show each line with context
170 echo "$file_lines" | while read -r line 179 echo "$file_lines" | while read -r line
171 do 180 do
181 echo
172 echo $line 182 echo $line
173 n=$(echo $line | sed 's/.*:\([0-9]\+\).*/\1/g') 183 n=$(echo $line | sed 's/.*:\([0-9]\+\).*/\1/g')
174 n1=$[$n-5] 184 n1=$[$n-5]
175 n2=$[$n+5] 185 n2=$[$n+5]
176 f=$(echo $line | sed 's/.*at \(.\+\):.*/\1/g') 186 f=$(echo $line | sed 's/.*at \(.\+\):.*/\1/g')
177 awk 'NR>=strtonum("'$n1'") && NR<=strtonum("'$n2'") {printf("%d\t%s\n", NR, $0)}' $f 187 awk 'NR>=strtonum("'$n1'") && NR<=strtonum("'$n2'") { if (NR=='$n') printf(">%d<", NR); else printf(" %d ", NR); printf("\t%s\n", $0)}' $f
178 done 188 done
179 189
180 DONE=1 190 DONE=1
@@ -185,6 +195,10 @@ __faddr2line() {
185[[ $# -lt 2 ]] && usage 195[[ $# -lt 2 ]] && usage
186 196
187objfile=$1 197objfile=$1
198
199LIST=0
200[[ "$objfile" == "--list" ]] && LIST=1 && shift && objfile=$1
201
188[[ ! -f $objfile ]] && die "can't find objfile $objfile" 202[[ ! -f $objfile ]] && die "can't find objfile $objfile"
189shift 203shift
190 204