Skip to contentSkip to conversation

scripts/faddr2line: extend usage on generic arch

PATCH Applied Liu, Changcheng 2 participants 3 messages Nov 21, 2017 – Dec 6, 2017 FADDR2LINE

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 scripts/faddr2line: extend usage on generic arch

fadd2line script should use the binary tool
used for the target system.

scripts/faddr2line +14 -7
index 1f5ce95..39e07d8 100755
@@ -44,9 +44,16 @@
 set -o errexit
 set -o nounset
 
+READELF="${CROSS_COMPILE}readelf"
+ADDR2LINE="${CROSS_COMPILE}addr2line"
+SIZE="${CROSS_COMPILE}size"
+NM="${CROSS_COMPILE}nm"
+
 command -v awk >/dev/null 2>&1 || die "awk isn't installed"
-command -v readelf >/dev/null 2>&1 || die "readelf isn't installed"
-command -v addr2line >/dev/null 2>&1 || die "addr2line isn't installed"
+command -v ${READELF} >/dev/null 2>&1 || die "readelf isn't installed"
+command -v ${ADDR2LINE} >/dev/null 2>&1 || die "addr2line isn't installed"
+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
@@ -69,10 +76,10 @@ die() {
 find_dir_prefix() {
 	local objfile=$1
 
-	local start_kernel_addr=$(readelf -sW $objfile | awk '$8 == "start_kernel" {printf "0x%s", $2}')
+	local start_kernel_addr=$(${READELF} -sW $objfile | awk '$8 == "start_kernel" {printf "0x%s", $2}')
 	[[ -z $start_kernel_addr ]] && return
 
-	local file_line=$(addr2line -e $objfile $start_kernel_addr)
+	local file_line=$(${ADDR2LINE} -e $objfile $start_kernel_addr)
 	[[ -z $file_line ]] && return
 
 	local prefix=${file_line%init/main.c:*}
@@ -104,7 +111,7 @@ __faddr2line() {
 
 	# Go through each of the object's symbols which match the func name.
 	# In rare cases there might be duplicates.
-	file_end=$(size -Ax $objfile | awk '$1 == ".text" {print $2}')
+	file_end=$(${SIZE} -Ax $objfile | awk '$1 == ".text" {print $2}')
 	while read symbol; do
 		local fields=($symbol)
 		local sym_base=0x${fields[0]}
@@ -156,10 +163,10 @@ __faddr2line() {
 
 		# pass real address to addr2line
 		echo "$func+$offset/$sym_size:"
-		addr2line -fpie $objfile $addr | sed "s; $dir_prefix\(\./\)*; ;"
+		${ADDR2LINE} -fpie $objfile $addr | sed "s; $dir_prefix\(\./\)*; ;"
 		DONE=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; }')
+	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
Signature · 1 line
2.7.4
#1 lore raw
Quoted 10 lines · Changcheng

fadd2line script should use the binary tool
used for the target system.

scripts/faddr2line +0 -0
index 1f5ce95..39e07d8 100755

scripts/faddr2line line 50

Quoted 7 lines
scripts/faddr2line +4 -0
@@ -44,9 +44,16 @@
 set -o errexit
 set -o nounset
 
+READELF="${CROSS_COMPILE}readelf"
+ADDR2LINE="${CROSS_COMPILE}addr2line"
+SIZE="${CROSS_COMPILE}size"
+NM="${CROSS_COMPILE}nm"

How is this supposed to work when not cross compiling? When CROSS_COMPILE is not set this script will terminate because of the "set -o nounset" bash setting...

Signature · 2 lines
Thanks,
//richard
#2 lore raw
Quoted 15 lines · Richard Weinberger
Quoted 13 lines · Changcheng

fadd2line script should use the binary tool
used for the target system.

scripts/faddr2line +0 -0
index 1f5ce95..39e07d8 100755
@@ -44,9 +44,16 @@
 set -o errexit
 set -o nounset
 
Quoted 8 lines

scripts/faddr2line line 50

Quoted 4 lines
scripts/faddr2line +4 -0
+READELF="${CROSS_COMPILE}readelf"
+ADDR2LINE="${CROSS_COMPILE}addr2line"
+SIZE="${CROSS_COMPILE}size"
+NM="${CROSS_COMPILE}nm"

How is this supposed to work when not cross compiling? When CROSS_COMPILE is not set this script will terminate because of the "set -o nounset" bash setting...

[Changcheng]:@Richard. Thx for your check. I've sent the fix patch to resolve the unbound variable error.

Quoted 4 lines
Signature · 3 lines
-- 
Thanks,
//richard