Message ID | 20231002165750.1661-3-will@kernel.org (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Fix 'faddr2line' for LLVM arm64 builds | expand |
On Mon, Oct 2, 2023 at 9:58 AM Will Deacon <will@kernel.org> 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@kernel.org> > Cc: John Stultz <jstultz@google.com> > Suggested-by: Masahiro Yamada <masahiroy@kernel.org> > Signed-off-by: Will Deacon <will@kernel.org> Thanks for the patch! Reviewed-by: Nick Desaulniers <ndesaulniers@google.com> > --- > 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 >
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"
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@kernel.org> Cc: John Stultz <jstultz@google.com> Suggested-by: Masahiro Yamada <masahiroy@kernel.org> Signed-off-by: Will Deacon <will@kernel.org> --- scripts/faddr2line | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-)