Skip to content

Commit 689135f

Browse files
Peter Zijlstra (Intel)torvalds
authored andcommitted
scripts/faddr2line: make the new code listing format optional
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 <[email protected]> Fixes: 6870c01 ("scripts/faddr2line: show the code context") Signed-off-by: Peter Zijlstra (Intel) <[email protected]> Signed-off-by: Josh Poimboeuf <[email protected]> Signed-off-by: Linus Torvalds <[email protected]>
1 parent 29dcea8 commit 689135f

File tree

1 file changed

+16
-2
lines changed

1 file changed

+16
-2
lines changed

scripts/faddr2line

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ command -v ${SIZE} >/dev/null 2>&1 || die "size isn't installed"
5656
command -v ${NM} >/dev/null 2>&1 || die "nm isn't installed"
5757

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

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

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+
169178
# show each line with context
170179
echo "$file_lines" | while read -r line
171180
do
181+
echo
172182
echo $line
173183
n=$(echo $line | sed 's/.*:\([0-9]\+\).*/\1/g')
174184
n1=$[$n-5]
175185
n2=$[$n+5]
176186
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
178188
done
179189

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

187197
objfile=$1
198+
199+
LIST=0
200+
[[ "$objfile" == "--list" ]] && LIST=1 && shift && objfile=$1
201+
188202
[[ ! -f $objfile ]] && die "can't find objfile $objfile"
189203
shift
190204

0 commit comments

Comments
 (0)