Skip to content

Commit 86bf86e

Browse files
willdeaconjpoimboe
authored andcommitted
scripts/faddr2line: Use LLVM addr2line and readelf if LLVM=1
GNU utilities cannot necessarily parse objects built by LLVM, which can result in confusing errors when using 'faddr2line': $ CROSS_COMPILE=aarch64-linux-gnu- ./scripts/faddr2line vmlinux do_one_initcall+0xf4/0x260 aarch64-linux-gnu-addr2line: vmlinux: unknown type [0x13] section `.relr.dyn' aarch64-linux-gnu-addr2line: DWARF error: invalid or unhandled FORM value: 0x25 do_one_initcall+0xf4/0x260: aarch64-linux-gnu-addr2line: vmlinux: unknown type [0x13] section `.relr.dyn' aarch64-linux-gnu-addr2line: DWARF error: invalid or unhandled FORM value: 0x25 $x.73 at main.c:? Although this can be worked around by setting CROSS_COMPILE to "llvm=-", it's cleaner to follow the same syntax as the top-level Makefile and accept LLVM= as an indication to use the llvm- tools, optionally specifying their location or specific version number. Suggested-by: Masahiro Yamada <[email protected]> Signed-off-by: Will Deacon <[email protected]> Reviewed-by: Nick Desaulniers <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Josh Poimboeuf <[email protected]>
1 parent 180af1a commit 86bf86e

File tree

1 file changed

+15
-2
lines changed

1 file changed

+15
-2
lines changed

scripts/faddr2line

+15-2
Original file line numberDiff line numberDiff line change
@@ -58,8 +58,21 @@ die() {
5858
exit 1
5959
}
6060

61-
READELF="${CROSS_COMPILE:-}readelf"
62-
ADDR2LINE="${CROSS_COMPILE:-}addr2line"
61+
UTIL_SUFFIX=""
62+
if [[ "${LLVM:-}" == "" ]]; then
63+
UTIL_PREFIX=${CROSS_COMPILE:-}
64+
else
65+
UTIL_PREFIX=llvm-
66+
67+
if [[ "${LLVM}" == *"/" ]]; then
68+
UTIL_PREFIX=${LLVM}${UTIL_PREFIX}
69+
elif [[ "${LLVM}" == "-"* ]]; then
70+
UTIL_SUFFIX=${LLVM}
71+
fi
72+
fi
73+
74+
READELF="${UTIL_PREFIX}readelf${UTIL_SUFFIX}"
75+
ADDR2LINE="${UTIL_PREFIX}addr2line${UTIL_SUFFIX}"
6376
AWK="awk"
6477
GREP="grep"
6578

0 commit comments

Comments
 (0)