On Mon, Oct 2, 2023 at 9:58 AM Will Deacon <will@xxxxxxxxxx> wrote: > > 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. > > Cc: Josh Poimboeuf <jpoimboe@xxxxxxxxxx> > Cc: John Stultz <jstultz@xxxxxxxxxx> > Suggested-by: Masahiro Yamada <masahiroy@xxxxxxxxxx> > Signed-off-by: Will Deacon <will@xxxxxxxxxx> Thanks for the patch! Reviewed-by: Nick Desaulniers <ndesaulniers@xxxxxxxxxx> > --- > scripts/faddr2line | 17 +++++++++++++++-- > 1 file changed, 15 insertions(+), 2 deletions(-) > > diff --git a/scripts/faddr2line b/scripts/faddr2line > index a35a420d0f26..6b8206802157 100755 > --- a/scripts/faddr2line > +++ b/scripts/faddr2line > @@ -58,8 +58,21 @@ die() { > exit 1 > } > > -READELF="${CROSS_COMPILE:-}readelf" > -ADDR2LINE="${CROSS_COMPILE:-}addr2line" > +UTIL_SUFFIX="" > +if [[ "${LLVM:-}" == "" ]]; then > + UTIL_PREFIX=${CROSS_COMPILE:-} > +else > + UTIL_PREFIX=llvm- > + > + if [[ "${LLVM}" == *"/" ]]; then > + UTIL_PREFIX=${LLVM}${UTIL_PREFIX} > + elif [[ "${LLVM}" == "-"* ]]; then > + UTIL_SUFFIX=${LLVM} > + fi > +fi > + > +READELF="${UTIL_PREFIX}readelf${UTIL_SUFFIX}" > +ADDR2LINE="${UTIL_PREFIX}addr2line${UTIL_SUFFIX}" > AWK="awk" > GREP="grep" > > -- > 2.42.0.582.g8ccd20d70d-goog > -- Thanks, ~Nick Desaulniers