On Fri, Jul 28, 2023 at 8:34 PM 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=1 as an indication to use the llvm- tools. Just a note. The top Makefile accepts not only LLVM=1 but also LLVM=/usr/lib/llvm-16/bin/. The latter is useful when you want to use a particular version or a custom one. Another idea might be to use a generic '${prefix}' as this is not hooked to the Makefile, but I do not have a strong opinion. > > Cc: Josh Poimboeuf <jpoimboe@xxxxxxxxxx> > Cc: John Stultz <jstultz@xxxxxxxxxx> > Signed-off-by: Will Deacon <will@xxxxxxxxxx> > --- > scripts/faddr2line | 10 ++++++++-- > 1 file changed, 8 insertions(+), 2 deletions(-) > > diff --git a/scripts/faddr2line b/scripts/faddr2line > index 0e73aca4f908..62a3fa6f6f59 100755 > --- a/scripts/faddr2line > +++ b/scripts/faddr2line > @@ -58,8 +58,14 @@ die() { > exit 1 > } > > -READELF="${CROSS_COMPILE:-}readelf" > -ADDR2LINE="${CROSS_COMPILE:-}addr2line" > +if [ "${LLVM:-}" == "1" ]; then > + UTIL_PREFIX=llvm- > +else > + UTIL_PREFIX=${CROSS_COMPILE:-} > +fi > + > +READELF="${UTIL_PREFIX}readelf" > +ADDR2LINE="${UTIL_PREFIX}addr2line" > AWK="awk" > GREP="grep" > > -- > 2.41.0.487.g6d72f3e995-goog > -- Best Regards Masahiro Yamada