Merge tag 'kvm-s390-master-6.1-2' of https://git.kernel.org/pub/scm/linux/kernel...
[platform/kernel/linux-starfive.git] / scripts / faddr2line
index 94ed98d..0e73aca 100755 (executable)
@@ -61,6 +61,7 @@ die() {
 READELF="${CROSS_COMPILE:-}readelf"
 ADDR2LINE="${CROSS_COMPILE:-}addr2line"
 AWK="awk"
+GREP="grep"
 
 command -v ${AWK} >/dev/null 2>&1 || die "${AWK} isn't installed"
 command -v ${READELF} >/dev/null 2>&1 || die "${READELF} isn't installed"
@@ -73,7 +74,8 @@ command -v ${ADDR2LINE} >/dev/null 2>&1 || die "${ADDR2LINE} isn't installed"
 find_dir_prefix() {
        local objfile=$1
 
-       local start_kernel_addr=$(${READELF} --symbols --wide $objfile | ${AWK} '$8 == "start_kernel" {printf "0x%s", $2}')
+       local start_kernel_addr=$(${READELF} --symbols --wide $objfile | sed 's/\[.*\]//' |
+               ${AWK} '$8 == "start_kernel" {printf "0x%s", $2}')
        [[ -z $start_kernel_addr ]] && return
 
        local file_line=$(${ADDR2LINE} -e $objfile $start_kernel_addr)
@@ -112,7 +114,9 @@ __faddr2line() {
        # section offsets.
        local file_type=$(${READELF} --file-header $objfile |
                ${AWK} '$1 == "Type:" { print $2; exit }')
-       [[ $file_type = "EXEC" ]] && is_vmlinux=1
+       if [[ $file_type = "EXEC" ]] || [[ $file_type == "DYN" ]]; then
+               is_vmlinux=1
+       fi
 
        # Go through each of the object's symbols which match the func name.
        # In rare cases there might be duplicates, in which case we print all
@@ -175,7 +179,7 @@ __faddr2line() {
                                found=2
                                break
                        fi
-               done < <(${READELF} --symbols --wide $objfile | ${AWK} -v sec=$sym_sec '$7 == sec' | sort --key=2)
+               done < <(${READELF} --symbols --wide $objfile | sed 's/\[.*\]//' | ${AWK} -v sec=$sym_sec '$7 == sec' | sort --key=2)
 
                if [[ $found = 0 ]]; then
                        warn "can't find symbol: sym_name: $sym_name sym_sec: $sym_sec sym_addr: $sym_addr sym_elf_size: $sym_elf_size"
@@ -256,7 +260,7 @@ __faddr2line() {
 
                DONE=1
 
-       done < <(${READELF} --symbols --wide $objfile | ${AWK} -v fn=$sym_name '$4 == "FUNC" && $8 == fn')
+       done < <(${READELF} --symbols --wide $objfile | sed 's/\[.*\]//' | ${AWK} -v fn=$sym_name '$4 == "FUNC" && $8 == fn')
 }
 
 [[ $# -lt 2 ]] && usage
@@ -269,6 +273,8 @@ LIST=0
 [[ ! -f $objfile ]] && die "can't find objfile $objfile"
 shift
 
+${READELF} --section-headers --wide $objfile | ${GREP} -q '\.debug_info' || die "CONFIG_DEBUG_INFO not enabled"
+
 DIR_PREFIX=supercalifragilisticexpialidocious
 find_dir_prefix $objfile