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>
This commit is contained in:
parent
3206e7d5e2
commit
2aab9c3ca4
|
@ -103,11 +103,12 @@ __faddr2line() {
|
||||||
|
|
||||||
# Go through each of the object's symbols which match the func name.
|
# Go through each of the object's symbols which match the func name.
|
||||||
# In rare cases there might be duplicates.
|
# In rare cases there might be duplicates.
|
||||||
|
file_end=$(size -Ax $objfile | awk '$1 == ".text" {print $2}')
|
||||||
while read symbol; do
|
while read symbol; do
|
||||||
local fields=($symbol)
|
local fields=($symbol)
|
||||||
local sym_base=0x${fields[0]}
|
local sym_base=0x${fields[0]}
|
||||||
local sym_type=${fields[1]}
|
local sym_type=${fields[1]}
|
||||||
local sym_end=0x${fields[3]}
|
local sym_end=${fields[3]}
|
||||||
|
|
||||||
# calculate the size
|
# calculate the size
|
||||||
local sym_size=$(($sym_end - $sym_base))
|
local sym_size=$(($sym_end - $sym_base))
|
||||||
|
@ -157,7 +158,7 @@ __faddr2line() {
|
||||||
addr2line -fpie $objfile $addr | sed "s; $dir_prefix\(\./\)*; ;"
|
addr2line -fpie $objfile $addr | sed "s; $dir_prefix\(\./\)*; ;"
|
||||||
DONE=1
|
DONE=1
|
||||||
|
|
||||||
done < <(nm -n $objfile | awk -v fn=$func '$3 == fn { found=1; line=$0; start=$1; next } found == 1 { found=0; print line, $1 }')
|
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; }')
|
||||||
}
|
}
|
||||||
|
|
||||||
[[ $# -lt 2 ]] && usage
|
[[ $# -lt 2 ]] && usage
|
||||||
|
|
Loading…
Reference in New Issue