Re: [PATCH 4.14 103/156] scripts/faddr2line: extend usage on generic arch
On Sun, Feb 04, 2018 at 02:46:58PM +0800, Liu, Changcheng wrote: > Hi Greg Kroah-Hartman, > Below commit is needed to resolve issue in this patch: > Upstream commit 4cc90b4cc3d4955f79eae4f7f9d64e67e17b468e Many thanks for letting me know, I'll go queue that up. greg k-h
Re: [PATCH 4.14 103/156] scripts/faddr2line: extend usage on generic arch
Hi Greg Kroah-Hartman, Below commit is needed to resolve issue in this patch: Upstream commit 4cc90b4cc3d4955f79eae4f7f9d64e67e17b468e B.R. Changcheng On 17:58 Fri 02 Feb, Greg Kroah-Hartman wrote: > 4.14-stable review patch. If anyone has any objections, please let me know. > > -- > > From: "Liu, Changcheng" > > > [ Upstream commit 95a87982541932503d3f59aba4c30b0bde0a6294 ] > > When cross-compiling, fadd2line should use the binary tool used for the > target system, rather than that of the host. > > Link: http://lkml.kernel.org/r/20171121092911.GA150711@sofia > Signed-off-by: Liu Changcheng > Cc: Kate Stewart > Cc: NeilBrown > Cc: Thomas Gleixner > Cc: Greg Kroah-Hartman > Signed-off-by: Andrew Morton > Signed-off-by: Linus Torvalds > Signed-off-by: Sasha Levin > Signed-off-by: Greg Kroah-Hartman > --- > scripts/faddr2line | 21 ++--- > 1 file changed, 14 insertions(+), 7 deletions(-) > > --- a/scripts/faddr2line > +++ b/scripts/faddr2line > @@ -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 ..." > >&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 > >
[PATCH 4.14 103/156] scripts/faddr2line: extend usage on generic arch
4.14-stable review patch. If anyone has any objections, please let me know. -- From: "Liu, Changcheng" [ Upstream commit 95a87982541932503d3f59aba4c30b0bde0a6294 ] When cross-compiling, fadd2line should use the binary tool used for the target system, rather than that of the host. Link: http://lkml.kernel.org/r/20171121092911.GA150711@sofia Signed-off-by: Liu Changcheng Cc: Kate Stewart Cc: NeilBrown Cc: Thomas Gleixner Cc: Greg Kroah-Hartman Signed-off-by: Andrew Morton Signed-off-by: Linus Torvalds Signed-off-by: Sasha Levin Signed-off-by: Greg Kroah-Hartman --- scripts/faddr2line | 21 ++--- 1 file changed, 14 insertions(+), 7 deletions(-) --- a/scripts/faddr2line +++ b/scripts/faddr2line @@ -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 ..." >&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