44
44
set -o errexit
45
45
set -o nounset
46
46
47
+ READELF=" ${CROSS_COMPILE} readelf"
48
+ ADDR2LINE=" ${CROSS_COMPILE} addr2line"
49
+ SIZE=" ${CROSS_COMPILE} size"
50
+ NM=" ${CROSS_COMPILE} nm"
51
+
47
52
command -v awk > /dev/null 2>&1 || die " awk isn't installed"
48
- command -v readelf > /dev/null 2>&1 || die " readelf isn't installed"
49
- command -v addr2line > /dev/null 2>&1 || die " addr2line isn't installed"
53
+ command -v ${READELF} > /dev/null 2>&1 || die " readelf isn't installed"
54
+ command -v ${ADDR2LINE} > /dev/null 2>&1 || die " addr2line isn't installed"
55
+ command -v ${SIZE} > /dev/null 2>&1 || die " size isn't installed"
56
+ command -v ${NM} > /dev/null 2>&1 || die " nm isn't installed"
50
57
51
58
usage () {
52
59
echo " usage: faddr2line <object file> <func+offset> <func+offset>..." >&2
@@ -69,10 +76,10 @@ die() {
69
76
find_dir_prefix () {
70
77
local objfile=$1
71
78
72
- local start_kernel_addr=$( readelf -sW $objfile | awk ' $8 == "start_kernel" {printf "0x%s", $2}' )
79
+ local start_kernel_addr=$( ${READELF} -sW $objfile | awk ' $8 == "start_kernel" {printf "0x%s", $2}' )
73
80
[[ -z $start_kernel_addr ]] && return
74
81
75
- local file_line=$( addr2line -e $objfile $start_kernel_addr )
82
+ local file_line=$( ${ADDR2LINE} -e $objfile $start_kernel_addr )
76
83
[[ -z $file_line ]] && return
77
84
78
85
local prefix=${file_line% init/ main.c:* }
@@ -104,7 +111,7 @@ __faddr2line() {
104
111
105
112
# Go through each of the object's symbols which match the func name.
106
113
# In rare cases there might be duplicates.
107
- file_end=$( size -Ax $objfile | awk ' $1 == ".text" {print $2}' )
114
+ file_end=$( ${SIZE} -Ax $objfile | awk ' $1 == ".text" {print $2}' )
108
115
while read symbol; do
109
116
local fields=($symbol )
110
117
local sym_base=0x${fields[0]}
@@ -156,10 +163,10 @@ __faddr2line() {
156
163
157
164
# pass real address to addr2line
158
165
echo " $func +$offset /$sym_size :"
159
- addr2line -fpie $objfile $addr | sed " s; $dir_prefix \(\./\)*; ;"
166
+ ${ADDR2LINE} -fpie $objfile $addr | sed " s; $dir_prefix \(\./\)*; ;"
160
167
DONE=1
161
168
162
- 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; }' )
169
+ 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; }' )
163
170
}
164
171
165
172
[[ $# -lt 2 ]] && usage
0 commit comments