Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

scripts: fix faddr2line to work on last symbol

If faddr2line is given a function name which is the last one listed by
"nm -n", it will fail because it never finds the next symbol.

So teach the awk script to catch that possibility, and use 'size' to
provide the end point of the last function.

Signed-off-by: NeilBrown <neilb@suse.com>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>

authored by

NeilBrown and committed by
Linus Torvalds
2aab9c3c 3206e7d5

+3 -2
+3 -2
scripts/faddr2line
··· 103 103 104 104 # Go through each of the object's symbols which match the func name. 105 105 # In rare cases there might be duplicates. 106 + file_end=$(size -Ax $objfile | awk '$1 == ".text" {print $2}') 106 107 while read symbol; do 107 108 local fields=($symbol) 108 109 local sym_base=0x${fields[0]} 109 110 local sym_type=${fields[1]} 110 - local sym_end=0x${fields[3]} 111 + local sym_end=${fields[3]} 111 112 112 113 # calculate the size 113 114 local sym_size=$(($sym_end - $sym_base)) ··· 158 157 addr2line -fpie $objfile $addr | sed "s; $dir_prefix\(\./\)*; ;" 159 158 DONE=1 160 159 161 - done < <(nm -n $objfile | awk -v fn=$func '$3 == fn { found=1; line=$0; start=$1; next } found == 1 { found=0; print line, $1 }') 160 + done < <(nm -n $objfile | awk -v fn=$func -v end=$file_end '$3 == fn { found=1; line=$0; start=$1; next } found == 1 { found=0; print line, "0x"$1 } END {if (found == 1) print line, end; }') 162 161 } 163 162 164 163 [[ $# -lt 2 ]] && usage