Skip to content

Commit

Permalink
scripts/faddr2line: make the new code listing format optional
Browse files Browse the repository at this point in the history
Commit 6870c01 ("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: 6870c01 ("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>
  • Loading branch information
Peter Zijlstra (Intel) authored and Linus Torvalds committed Jun 5, 2018
1 parent 29dcea8 commit 689135f
Showing 1 changed file with 16 additions and 2 deletions.
18 changes: 16 additions & 2 deletions scripts/faddr2line
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ command -v ${SIZE} >/dev/null 2>&1 || die "size isn't installed"
command -v ${NM} >/dev/null 2>&1 || die "nm isn't installed"

usage() {
echo "usage: faddr2line <object file> <func+offset> <func+offset>..." >&2
echo "usage: faddr2line [--list] <object file> <func+offset> <func+offset>..." >&2
exit 1
}

Expand Down Expand Up @@ -166,15 +166,25 @@ __faddr2line() {
local file_lines=$(${ADDR2LINE} -fpie $objfile $addr | sed "s; $dir_prefix\(\./\)*; ;")
[[ -z $file_lines ]] && return

if [[ $LIST = 0 ]]; then
echo "$file_lines" | while read -r line
do
echo $line
done
DONE=1;
return
fi

# show each line with context
echo "$file_lines" | while read -r line
do
echo
echo $line
n=$(echo $line | sed 's/.*:\([0-9]\+\).*/\1/g')
n1=$[$n-5]
n2=$[$n+5]
f=$(echo $line | sed 's/.*at \(.\+\):.*/\1/g')
awk 'NR>=strtonum("'$n1'") && NR<=strtonum("'$n2'") {printf("%d\t%s\n", NR, $0)}' $f
awk 'NR>=strtonum("'$n1'") && NR<=strtonum("'$n2'") { if (NR=='$n') printf(">%d<", NR); else printf(" %d ", NR); printf("\t%s\n", $0)}' $f
done

DONE=1
Expand All @@ -185,6 +195,10 @@ __faddr2line() {
[[ $# -lt 2 ]] && usage

objfile=$1

LIST=0
[[ "$objfile" == "--list" ]] && LIST=1 && shift && objfile=$1

[[ ! -f $objfile ]] && die "can't find objfile $objfile"
shift

Expand Down

0 comments on commit 689135f

Please sign in to comment.