Message ID | 20211216091940.GE5920@codepurple |
---|---|
State | New |
Headers | show |
Series | rust: fix arm64 link failures when building rust apps | expand |
Discussion in https://github.com/rust-lang/git2-rs/pull/759 doesn't exactly fill one with confidence, but still, can this be handled and fixed in rust upstream? Non-upstreamable patches for what is a common use case aren't a good idea. Alex On Thu, 16 Dec 2021 at 10:19, S. Lockwood-Childs <sjl@vctlabs.com> wrote: > Typical error when trying to build a rust app (for example, librsvg) > for aarch64 targets looks like: > undefined references to `__aarch64_ldadd8_rel' > > The upstream rust commit > "add target feature outline-atomics" > 0f9f241aac21bc77fb9e757da18207abefdc841d > has caused a number of such link failure regressions on platforms with > aarch64 > toolchains that are not able to cope with -moutline-atomics flag. This > includes > musl toolchains [1] but some glibc toolchains also are not able to handle > this > flag [2,3] > > OE gcc-cross-aarch64 is currently one of the latter, but when it *is* able > to > handle outline-atomics this patch should go away, to take advantage of the > reported performance benefit. > > [1] https://github.com/rust-lang/git2-rs/issues/706 > [2] https://www.mail-archive.com/gcc-bugs@gcc.gnu.org/msg661738.html > [3] https://bugzilla.redhat.com/show_bug.cgi?id=1830472 > > Signed-off-by: S. Lockwood-Childs <sjl@vctlabs.com> > --- > meta/recipes-devtools/rust/rust-target.inc | 2 + > .../rust/rust-disable-outline-atomics.patch | 50 +++++++++++++++++++ > 2 files changed, 52 insertions(+) > create mode 100644 > meta/recipes-devtools/rust/rust/rust-disable-outline-atomics.patch > > diff --git a/meta/recipes-devtools/rust/rust-target.inc > b/meta/recipes-devtools/rust/rust-target.inc > index 3f637b3ba5..bac743f66d 100644 > --- a/meta/recipes-devtools/rust/rust-target.inc > +++ b/meta/recipes-devtools/rust/rust-target.inc > @@ -2,6 +2,8 @@ require rust.inc > > DEPENDS += "rust-llvm (=${PV})" > > +SRC_URI += "file://rust-disable-outline-atomics.patch" > + > # Otherwise we'll depend on what we provide > INHIBIT_DEFAULT_RUST_DEPS:class-native = "1" > # We don't need to depend on gcc-native because yocto assumes it exists > diff --git > a/meta/recipes-devtools/rust/rust/rust-disable-outline-atomics.patch > b/meta/recipes-devtools/rust/rust/rust-disable-outline-atomics.patch > new file mode 100644 > index 0000000000..fc99a06a6a > --- /dev/null > +++ b/meta/recipes-devtools/rust/rust/rust-disable-outline-atomics.patch > @@ -0,0 +1,50 @@ > +rust: fix arm64 link failures when building rust apps > + > +Typical error when trying to build a rust app looks like: > + undefined references to `__aarch64_ldadd8_rel' > + > +The upstream rust commit > +"add target feature outline-atomics" > 0f9f241aac21bc77fb9e757da18207abefdc841d > +has caused a number of such link failure regressions on platforms with > aarch64 > +toolchains that are not able to cope with -moutline-atomics flag. This > includes > +musl toolchains [1] but some glibc toolchains also are not able to handle > this > +flag [2,3] > + > +OE gcc-cross-aarch64 is currently one of the latter, but when it *is* > able to > +handle outline-atomics this patch should go away, to take advantage of the > +reported performance benefit. > + > +[1] https://github.com/rust-lang/git2-rs/issues/706 > +[2] https://www.mail-archive.com/gcc-bugs@gcc.gnu.org/msg661738.html > +[3] https://bugzilla.redhat.com/show_bug.cgi?id=1830472 > + > +Upstream-Status: Inappropriate [other] > + > +Signed-off-by: S. Lockwood-Childs <sjl@vctlabs.com> > + > +diff --git a/compiler/rustc_codegen_llvm/src/llvm_util.rs > b/compiler/rustc_codegen_llvm/src/llvm_util.rs > +index c2136f161..ca221eb4a 100644 > +--- a/compiler/rustc_codegen_llvm/src/llvm_util.rs > ++++ b/compiler/rustc_codegen_llvm/src/llvm_util.rs > +@@ -416,13 +416,14 @@ pub fn llvm_global_features(sess: &Session) -> > Vec<String> { > + // -Ctarget-features > + features.extend(sess.opts.cg > .target_feature.split(',').flat_map(&filter)); > + > +- // FIXME: Move outline-atomics to target definition when earliest > supported LLVM is 12. > +- if get_version() >= (12, 0, 0) > +- && sess.target.llvm_target.contains("aarch64-unknown-linux") > +- && sess.target.llvm_target != "aarch64-unknown-linux-musl" > +- { > +- features.push("+outline-atomics".to_string()); > +- } > ++// // FIXME: Move outline-atomics to target definition when earliest > supported LLVM is 12. > ++// if get_version() >= (12, 0, 0) > ++// && sess.target.llvm_target.contains("aarch64-unknown-linux") > ++// && sess.target.llvm_target != "aarch64-unknown-linux-musl" > ++// { > ++// features.push("+outline-atomics".to_string()); > ++// } > ++ > + > + features > + } > -- > 2.20.1 > > > -=-=-=-=-=-=-=-=-=-=-=- > Links: You receive all messages sent to this group. > View/Reply Online (#159774): > https://lists.openembedded.org/g/openembedded-core/message/159774 > Mute This Topic: https://lists.openembedded.org/mt/87763768/1686489 > Group Owner: openembedded-core+owner@lists.openembedded.org > Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [ > alex.kanavin@gmail.com] > -=-=-=-=-=-=-=-=-=-=-=- > >
Patch withdrawn: turns out meta-tegra was pulling in an old toolchain for CUDA reasons, and that just got fixed. Probably there isn't another aarch64 platform still using a non-fixed toolchain, and if there happens to be one maybe they will run across this patch to carry it in their own layer. Note: apologies for not CC-ing Alexander Kanavin, but I couldn't figure out how to directly reply to his question from this list's web UI & I don't have a copy of his email in my inbox. https://lists.openembedded.org/g/openembedded-core/message/159775 On Thu, Dec 16, 2021 at 01:19:45AM -0800, S. Lockwood-Childs wrote: > Typical error when trying to build a rust app (for example, librsvg) > for aarch64 targets looks like: > undefined references to `__aarch64_ldadd8_rel' > > The upstream rust commit > "add target feature outline-atomics" 0f9f241aac21bc77fb9e757da18207abefdc841d > has caused a number of such link failure regressions on platforms with aarch64 > toolchains that are not able to cope with -moutline-atomics flag. This includes > musl toolchains [1] but some glibc toolchains also are not able to handle this > flag [2,3] > > OE gcc-cross-aarch64 is currently one of the latter, but when it *is* able to > handle outline-atomics this patch should go away, to take advantage of the > reported performance benefit. > > [1] https://github.com/rust-lang/git2-rs/issues/706 > [2] https://www.mail-archive.com/gcc-bugs@gcc.gnu.org/msg661738.html > [3] https://bugzilla.redhat.com/show_bug.cgi?id=1830472 > > Signed-off-by: S. Lockwood-Childs <sjl@vctlabs.com> > --- > meta/recipes-devtools/rust/rust-target.inc | 2 + > .../rust/rust-disable-outline-atomics.patch | 50 +++++++++++++++++++ > 2 files changed, 52 insertions(+) > create mode 100644 meta/recipes-devtools/rust/rust/rust-disable-outline-atomics.patch > > diff --git a/meta/recipes-devtools/rust/rust-target.inc b/meta/recipes-devtools/rust/rust-target.inc > index 3f637b3ba5..bac743f66d 100644 > --- a/meta/recipes-devtools/rust/rust-target.inc > +++ b/meta/recipes-devtools/rust/rust-target.inc > @@ -2,6 +2,8 @@ require rust.inc > > DEPENDS += "rust-llvm (=${PV})" > > +SRC_URI += "file://rust-disable-outline-atomics.patch" > + > # Otherwise we'll depend on what we provide > INHIBIT_DEFAULT_RUST_DEPS:class-native = "1" > # We don't need to depend on gcc-native because yocto assumes it exists > diff --git a/meta/recipes-devtools/rust/rust/rust-disable-outline-atomics.patch b/meta/recipes-devtools/rust/rust/rust-disable-outline-atomics.patch > new file mode 100644 > index 0000000000..fc99a06a6a > --- /dev/null > +++ b/meta/recipes-devtools/rust/rust/rust-disable-outline-atomics.patch > @@ -0,0 +1,50 @@ > +rust: fix arm64 link failures when building rust apps > + > +Typical error when trying to build a rust app looks like: > + undefined references to `__aarch64_ldadd8_rel' > + > +The upstream rust commit > +"add target feature outline-atomics" 0f9f241aac21bc77fb9e757da18207abefdc841d > +has caused a number of such link failure regressions on platforms with aarch64 > +toolchains that are not able to cope with -moutline-atomics flag. This includes > +musl toolchains [1] but some glibc toolchains also are not able to handle this > +flag [2,3] > + > +OE gcc-cross-aarch64 is currently one of the latter, but when it *is* able to > +handle outline-atomics this patch should go away, to take advantage of the > +reported performance benefit. > + > +[1] https://github.com/rust-lang/git2-rs/issues/706 > +[2] https://www.mail-archive.com/gcc-bugs@gcc.gnu.org/msg661738.html > +[3] https://bugzilla.redhat.com/show_bug.cgi?id=1830472 > + > +Upstream-Status: Inappropriate [other] > + > +Signed-off-by: S. Lockwood-Childs <sjl@vctlabs.com> > + > +diff --git a/compiler/rustc_codegen_llvm/src/llvm_util.rs b/compiler/rustc_codegen_llvm/src/llvm_util.rs > +index c2136f161..ca221eb4a 100644 > +--- a/compiler/rustc_codegen_llvm/src/llvm_util.rs > ++++ b/compiler/rustc_codegen_llvm/src/llvm_util.rs > +@@ -416,13 +416,14 @@ pub fn llvm_global_features(sess: &Session) -> Vec<String> { > + // -Ctarget-features > + features.extend(sess.opts.cg.target_feature.split(',').flat_map(&filter)); > + > +- // FIXME: Move outline-atomics to target definition when earliest supported LLVM is 12. > +- if get_version() >= (12, 0, 0) > +- && sess.target.llvm_target.contains("aarch64-unknown-linux") > +- && sess.target.llvm_target != "aarch64-unknown-linux-musl" > +- { > +- features.push("+outline-atomics".to_string()); > +- } > ++// // FIXME: Move outline-atomics to target definition when earliest supported LLVM is 12. > ++// if get_version() >= (12, 0, 0) > ++// && sess.target.llvm_target.contains("aarch64-unknown-linux") > ++// && sess.target.llvm_target != "aarch64-unknown-linux-musl" > ++// { > ++// features.push("+outline-atomics".to_string()); > ++// } > ++ > + > + features > + } > -- > 2.20.1 >
We're stuck on thud (vendor related), I ended up backporting these two commits from upstream, to address this issue: https://github.com/zuma-array/meta-rust/commit/5631d561f16d88acf9cd6a014dd292cf20668501 But I don't think the issue appears in master because of the newer gcc. On Thu, Dec 16, 2021 at 11:04 PM S. Lockwood-Childs <sjl@vctlabs.com> wrote: > > Patch withdrawn: turns out meta-tegra was pulling in an old toolchain > for CUDA reasons, and that just got fixed. Probably there isn't another > aarch64 platform still using a non-fixed toolchain, and if there happens > to be one maybe they will run across this patch to carry it in their own > layer. > > Note: apologies for not CC-ing Alexander Kanavin, but I couldn't figure > out how to directly reply to his question from this list's web UI & I don't > have a copy of his email in my inbox. > https://lists.openembedded.org/g/openembedded-core/message/159775 > > On Thu, Dec 16, 2021 at 01:19:45AM -0800, S. Lockwood-Childs wrote: > > Typical error when trying to build a rust app (for example, librsvg) > > for aarch64 targets looks like: > > undefined references to `__aarch64_ldadd8_rel' > > > > The upstream rust commit > > "add target feature outline-atomics" 0f9f241aac21bc77fb9e757da18207abefdc841d > > has caused a number of such link failure regressions on platforms with aarch64 > > toolchains that are not able to cope with -moutline-atomics flag. This includes > > musl toolchains [1] but some glibc toolchains also are not able to handle this > > flag [2,3] > > > > OE gcc-cross-aarch64 is currently one of the latter, but when it *is* able to > > handle outline-atomics this patch should go away, to take advantage of the > > reported performance benefit. > > > > [1] https://github.com/rust-lang/git2-rs/issues/706 > > [2] https://www.mail-archive.com/gcc-bugs@gcc.gnu.org/msg661738.html > > [3] https://bugzilla.redhat.com/show_bug.cgi?id=1830472 > > > > Signed-off-by: S. Lockwood-Childs <sjl@vctlabs.com> > > --- > > meta/recipes-devtools/rust/rust-target.inc | 2 + > > .../rust/rust-disable-outline-atomics.patch | 50 +++++++++++++++++++ > > 2 files changed, 52 insertions(+) > > create mode 100644 meta/recipes-devtools/rust/rust/rust-disable-outline-atomics.patch > > > > diff --git a/meta/recipes-devtools/rust/rust-target.inc b/meta/recipes-devtools/rust/rust-target.inc > > index 3f637b3ba5..bac743f66d 100644 > > --- a/meta/recipes-devtools/rust/rust-target.inc > > +++ b/meta/recipes-devtools/rust/rust-target.inc > > @@ -2,6 +2,8 @@ require rust.inc > > > > DEPENDS += "rust-llvm (=${PV})" > > > > +SRC_URI += "file://rust-disable-outline-atomics.patch" > > + > > # Otherwise we'll depend on what we provide > > INHIBIT_DEFAULT_RUST_DEPS:class-native = "1" > > # We don't need to depend on gcc-native because yocto assumes it exists > > diff --git a/meta/recipes-devtools/rust/rust/rust-disable-outline-atomics.patch b/meta/recipes-devtools/rust/rust/rust-disable-outline-atomics.patch > > new file mode 100644 > > index 0000000000..fc99a06a6a > > --- /dev/null > > +++ b/meta/recipes-devtools/rust/rust/rust-disable-outline-atomics.patch > > @@ -0,0 +1,50 @@ > > +rust: fix arm64 link failures when building rust apps > > + > > +Typical error when trying to build a rust app looks like: > > + undefined references to `__aarch64_ldadd8_rel' > > + > > +The upstream rust commit > > +"add target feature outline-atomics" 0f9f241aac21bc77fb9e757da18207abefdc841d > > +has caused a number of such link failure regressions on platforms with aarch64 > > +toolchains that are not able to cope with -moutline-atomics flag. This includes > > +musl toolchains [1] but some glibc toolchains also are not able to handle this > > +flag [2,3] > > + > > +OE gcc-cross-aarch64 is currently one of the latter, but when it *is* able to > > +handle outline-atomics this patch should go away, to take advantage of the > > +reported performance benefit. > > + > > +[1] https://github.com/rust-lang/git2-rs/issues/706 > > +[2] https://www.mail-archive.com/gcc-bugs@gcc.gnu.org/msg661738.html > > +[3] https://bugzilla.redhat.com/show_bug.cgi?id=1830472 > > + > > +Upstream-Status: Inappropriate [other] > > + > > +Signed-off-by: S. Lockwood-Childs <sjl@vctlabs.com> > > + > > +diff --git a/compiler/rustc_codegen_llvm/src/llvm_util.rs b/compiler/rustc_codegen_llvm/src/llvm_util.rs > > +index c2136f161..ca221eb4a 100644 > > +--- a/compiler/rustc_codegen_llvm/src/llvm_util.rs > > ++++ b/compiler/rustc_codegen_llvm/src/llvm_util.rs > > +@@ -416,13 +416,14 @@ pub fn llvm_global_features(sess: &Session) -> Vec<String> { > > + // -Ctarget-features > > + features.extend(sess.opts.cg.target_feature.split(',').flat_map(&filter)); > > + > > +- // FIXME: Move outline-atomics to target definition when earliest supported LLVM is 12. > > +- if get_version() >= (12, 0, 0) > > +- && sess.target.llvm_target.contains("aarch64-unknown-linux") > > +- && sess.target.llvm_target != "aarch64-unknown-linux-musl" > > +- { > > +- features.push("+outline-atomics".to_string()); > > +- } > > ++// // FIXME: Move outline-atomics to target definition when earliest supported LLVM is 12. > > ++// if get_version() >= (12, 0, 0) > > ++// && sess.target.llvm_target.contains("aarch64-unknown-linux") > > ++// && sess.target.llvm_target != "aarch64-unknown-linux-musl" > > ++// { > > ++// features.push("+outline-atomics".to_string()); > > ++// } > > ++ > > + > > + features > > + } > > -- > > 2.20.1 > > > > -=-=-=-=-=-=-=-=-=-=-=- > Links: You receive all messages sent to this group. > View/Reply Online (#159810): https://lists.openembedded.org/g/openembedded-core/message/159810 > Mute This Topic: https://lists.openembedded.org/mt/87763768/3618097 > Group Owner: openembedded-core+owner@lists.openembedded.org > Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [alex.kiernan@gmail.com] > -=-=-=-=-=-=-=-=-=-=-=- >
diff --git a/meta/recipes-devtools/rust/rust-target.inc b/meta/recipes-devtools/rust/rust-target.inc index 3f637b3ba5..bac743f66d 100644 --- a/meta/recipes-devtools/rust/rust-target.inc +++ b/meta/recipes-devtools/rust/rust-target.inc @@ -2,6 +2,8 @@ require rust.inc DEPENDS += "rust-llvm (=${PV})" +SRC_URI += "file://rust-disable-outline-atomics.patch" + # Otherwise we'll depend on what we provide INHIBIT_DEFAULT_RUST_DEPS:class-native = "1" # We don't need to depend on gcc-native because yocto assumes it exists diff --git a/meta/recipes-devtools/rust/rust/rust-disable-outline-atomics.patch b/meta/recipes-devtools/rust/rust/rust-disable-outline-atomics.patch new file mode 100644 index 0000000000..fc99a06a6a --- /dev/null +++ b/meta/recipes-devtools/rust/rust/rust-disable-outline-atomics.patch @@ -0,0 +1,50 @@ +rust: fix arm64 link failures when building rust apps + +Typical error when trying to build a rust app looks like: + undefined references to `__aarch64_ldadd8_rel' + +The upstream rust commit +"add target feature outline-atomics" 0f9f241aac21bc77fb9e757da18207abefdc841d +has caused a number of such link failure regressions on platforms with aarch64 +toolchains that are not able to cope with -moutline-atomics flag. This includes +musl toolchains [1] but some glibc toolchains also are not able to handle this +flag [2,3] + +OE gcc-cross-aarch64 is currently one of the latter, but when it *is* able to +handle outline-atomics this patch should go away, to take advantage of the +reported performance benefit. + +[1] https://github.com/rust-lang/git2-rs/issues/706 +[2] https://www.mail-archive.com/gcc-bugs@gcc.gnu.org/msg661738.html +[3] https://bugzilla.redhat.com/show_bug.cgi?id=1830472 + +Upstream-Status: Inappropriate [other] + +Signed-off-by: S. Lockwood-Childs <sjl@vctlabs.com> + +diff --git a/compiler/rustc_codegen_llvm/src/llvm_util.rs b/compiler/rustc_codegen_llvm/src/llvm_util.rs +index c2136f161..ca221eb4a 100644 +--- a/compiler/rustc_codegen_llvm/src/llvm_util.rs ++++ b/compiler/rustc_codegen_llvm/src/llvm_util.rs +@@ -416,13 +416,14 @@ pub fn llvm_global_features(sess: &Session) -> Vec<String> { + // -Ctarget-features + features.extend(sess.opts.cg.target_feature.split(',').flat_map(&filter)); + +- // FIXME: Move outline-atomics to target definition when earliest supported LLVM is 12. +- if get_version() >= (12, 0, 0) +- && sess.target.llvm_target.contains("aarch64-unknown-linux") +- && sess.target.llvm_target != "aarch64-unknown-linux-musl" +- { +- features.push("+outline-atomics".to_string()); +- } ++// // FIXME: Move outline-atomics to target definition when earliest supported LLVM is 12. ++// if get_version() >= (12, 0, 0) ++// && sess.target.llvm_target.contains("aarch64-unknown-linux") ++// && sess.target.llvm_target != "aarch64-unknown-linux-musl" ++// { ++// features.push("+outline-atomics".to_string()); ++// } ++ + + features + }
Typical error when trying to build a rust app (for example, librsvg) for aarch64 targets looks like: undefined references to `__aarch64_ldadd8_rel' The upstream rust commit "add target feature outline-atomics" 0f9f241aac21bc77fb9e757da18207abefdc841d has caused a number of such link failure regressions on platforms with aarch64 toolchains that are not able to cope with -moutline-atomics flag. This includes musl toolchains [1] but some glibc toolchains also are not able to handle this flag [2,3] OE gcc-cross-aarch64 is currently one of the latter, but when it *is* able to handle outline-atomics this patch should go away, to take advantage of the reported performance benefit. [1] https://github.com/rust-lang/git2-rs/issues/706 [2] https://www.mail-archive.com/gcc-bugs@gcc.gnu.org/msg661738.html [3] https://bugzilla.redhat.com/show_bug.cgi?id=1830472 Signed-off-by: S. Lockwood-Childs <sjl@vctlabs.com> --- meta/recipes-devtools/rust/rust-target.inc | 2 + .../rust/rust-disable-outline-atomics.patch | 50 +++++++++++++++++++ 2 files changed, 52 insertions(+) create mode 100644 meta/recipes-devtools/rust/rust/rust-disable-outline-atomics.patch