diff mbox series

rust-target-config: fix target_features for vfpv3d16

Message ID 20230802-rust-vfpv3d16-v1-1-9af645a4b407@skidata.com
State New
Headers show
Series rust-target-config: fix target_features for vfpv3d16 | expand

Commit Message

Benjamin Bara Aug. 2, 2023, 8:07 p.m. UTC
From: Benjamin Bara <benjamin.bara@skidata.com>

A build with vfpv3d16 (armv7at2hf-vfpv3d16) tune currently warns:
'+d16' is not a recognized feature for this target (ignoring feature)

This correlates with the supported target_features for arm[1].

With the now enabled features, rustc might use vdiv.f64 with register
d17, which leads to an illegal instruction on the given platform.

Therefore, adapt the features s.t. they correspond to the
armv7_unknown_linux_gnueabihf target[2].

[1] https://github.com/rust-lang/rust/blob/1.70.0/compiler/rustc_codegen_ssa/src/target_features.rs#L32
[2] https://github.com/rust-lang/rust/blob/1.70.0/compiler/rustc_target/src/spec/armv7_unknown_linux_gnueabihf.rs#L15

Signed-off-by: Benjamin Bara <benjamin.bara@skidata.com>
---
 meta/classes-recipe/rust-target-config.bbclass | 15 ++++++++-------
 1 file changed, 8 insertions(+), 7 deletions(-)


---
base-commit: b2594471209fafd45ea907371b5bd26df95ab2ac
change-id: 20230801-rust-vfpv3d16-a65080a9bcfa

Best regards,

Comments

Alexandre Belloni Aug. 7, 2023, 10:27 a.m. UTC | #1
Hello,

This causes failures:

https://autobuilder.yoctoproject.org/typhoon/#/builders/151/builds/304/steps/12/logs/stdio
https://autobuilder.yoctoproject.org/typhoon/#/builders/147/builds/301/steps/12/logs/stdio
https://autobuilder.yoctoproject.org/typhoon/#/builders/148/builds/306/steps/13/logs/stdio
https://autobuilder.yoctoproject.org/typhoon/#/builders/145/builds/299/steps/12/logs/stdio
https://autobuilder.yoctoproject.org/typhoon/#/builders/154/builds/301/steps/13/logs/stdio

2023-08-04 17:28:45,215 - oe-selftest - INFO - ======================================================================
2023-08-04 17:28:45,215 - oe-selftest - INFO - FAIL: rust.RustSelfTestSystemEmulated.test_rust (subunit.RemotedTestCase)
2023-08-04 17:28:45,215 - oe-selftest - INFO - ----------------------------------------------------------------------
2023-08-04 17:28:45,215 - oe-selftest - INFO - testtools.testresult.real._StringException: Traceback (most recent call last):
  File "/home/pokybuild/yocto-worker/qemumips-tc/build/meta/lib/oeqa/selftest/cases/rust.py", line 293, in test_rust
    runCmd(cmd)
  File "/home/pokybuild/yocto-worker/qemumips-tc/build/meta/lib/oeqa/utils/commands.py", line 212, in runCmd
    raise AssertionError("Command '%s' returned non-zero exit status %d:\n%s" % (command, result.status, exc_output))
AssertionError: Command ' export PATH=/home/pokybuild/yocto-worker/qemumips-tc/build/build-st-3391980/tmp/work/mips32r2-poky-linux/rust/1.70.0-r0/recipe-sysroot-native/usr/bin:$PATH; export TARGET_VENDOR="-poky"; export PATH=/home/pokybuild/yocto-worker/qemumips-tc/build/build-st-3391980/tmp/work/mips32r2-poky-linux/rust/1.70.0-r0/recipe-sysroot-native/usr/bin/mips-poky-linux:/home/pokybuild/yocto-worker/qemumips-tc/build/build-st-3391980/tmp/hosttools:$PATH; export RUST_TARGET_PATH=/home/pokybuild/yocto-worker/qemumips-tc/build/build-st-3391980/tmp/work/mips32r2-poky-linux/rust/1.70.0-r0/rust-targets; export TEST_DEVICE_ADDR="192.168.7.2:12345"; cd /home/pokybuild/yocto-worker/qemumips-tc/build/build-st-3391980/tmp/work/mips32r2-poky-linux/rust/1.70.0-r0/rustc-1.70.0-src; python3 src/bootstrap/bootstrap.py test  --exclude compiler/rustc  --exclude compiler/rustc_interface/src/tests.rs  --exclude library/panic_abort  --exclude library/panic_unwind  --exclude library/test/src/stats/tests.rs  --exclude src/bootstrap/builder/tests.rs  --exclude src/doc/rustc  --exclude src/doc/rustdoc  --exclude src/doc/unstable-book  --exclude src/librustdoc  --exclude src/rustdoc-json-types  --exclude src/tools/compiletest/src/common.rs  --exclude src/tools/lint-docs  --exclude src/tools/rust-analyzer  --exclude src/tools/rustdoc-themes  --exclude src/tools/tidy  --exclude tests/assembly/asm/aarch64-outline-atomics.rs  --exclude tests/codegen/abi-main-signature-32bit-c-int.rs  --exclude tests/codegen/abi-repr-ext.rs  --exclude tests/codegen/abi-x86-interrupt.rs  --exclude tests/codegen/branch-protection.rs  --exclude tests/codegen/catch-unwind.rs  --exclude tests/codegen/cf-protection.rs  --exclude tests/codegen/enum-bounds-check-derived-idx.rs  --exclude tests/codegen/force-unwind-tables.rs  --exclude tests/codegen/intrinsic-no-unnamed-attr.rs  --exclude tests/codegen/issues/issue-103840.rs  --exclude tests/codegen/issues/issue-47278.rs  --exclude tests/codegen/issues/issue-73827-bounds-check-index-in-subexpr.rs  --exclude tests/codegen/lifetime_start_end.rs  --exclude tests/codegen/local-generics-in-exe-internalized.rs  --exclude tests/codegen/match-unoptimized.rs  --exclude tests/codegen/noalias-rwlockreadguard.rs  --exclude tests/codegen/non-terminate/nonempty-infinite-loop.rs  --exclude tests/codegen/noreturn-uninhabited.rs  --exclude tests/codegen/repr-transparent-aggregates-3.rs  --exclude tests/codegen/sse42-implies-crc32.rs  --exclude tests/codegen/thread-local.rs  --exclude tests/codegen/uninit-consts.rs  --exclude tests/pretty/raw-str-nonexpr.rs  --exclude tests/run-make  --exclude tests/run-make/cdylib-fewer-symbols/foo.rs  --exclude tests/run-make/doctests-keep-binaries/t.rs  --exclude tests/run-make-fulldeps  --exclude tests/run-make/issue-22131/foo.rs  --exclude tests/run-make/issue-36710/Makefile  --exclude tests/run-make/issue-47551  --exclude tests/run-make/pgo-branch-weights  --exclude tests/run-make/pgo-gen  --exclude tests/run-make/pgo-gen-lto  --exclude tests/run-make/pgo-indirect-call-promotion  --exclude tests/run-make/pgo-use  --exclude tests/run-make/pointer-auth-link-with-c/Makefile  --exclude tests/run-make/profile  --exclude tests/run-make/static-pie  --exclude tests/run-make/sysroot-crates-are-unstable  --exclude tests/run-make/target-specs  --exclude tests/rustdoc  --exclude tests/rustdoc/async-move-doctest.rs  --exclude tests/rustdoc/async-trait.rs  --exclude tests/rustdoc/auto-traits.rs  --exclude tests/rustdoc/check-source-code-urls-to-def.rs  --exclude tests/rustdoc/comment-in-doctest.rs  --exclude tests/rustdoc/const-generics/const-generics-docs.rs  --exclude tests/rustdoc/cross-crate-hidden-assoc-trait-items.rs  --exclude tests/rustdoc/cross-crate-hidden-impl-parameter.rs  --exclude tests/rustdoc/cross-crate-links.rs  --exclude tests/rustdoc/cross-crate-primitive-doc.rs  --exclude tests/rustdoc/doctest-manual-crate-name.rs  --exclude tests/rustdoc/edition-doctest.rs  --exclude tests/rustdoc/edition-flag.rs  --exclude tests/rustdoc/elided-lifetime.rs  --exclude tests/rustdoc/external-macro-src.rs  --ex
stdoc-ui/nocapture.rs  --exclude tests/rustdoc-ui/no-run-flag.rs  --exclude tests/rustdoc-ui/run-directory.rs  --exclude tests/rustdoc-ui/test-no_std.rs  --exclude tests/rustdoc-ui/test-type.rs  --exclude tests/rustdoc/unit-return.rs  --exclude tests/ui/abi/stack-probes-lto.rs  --exclude tests/ui/abi/stack-probes.rs  --exclude tests/ui/array-slice-vec/subslice-patterns-const-eval-match.rs  --exclude tests/ui/asm/x86_64/sym.rs  --exclude tests/ui/associated-type-bounds/fn-apit.rs  --exclude tests/ui/associated-type-bounds/fn-dyn-apit.rs  --exclude tests/ui/associated-type-bounds/fn-wrap-apit.rs  --exclude tests/ui/debuginfo/debuginfo-emit-llvm-ir-and-split-debuginfo.rs  --exclude tests/ui/drop/dynamic-drop.rs  --exclude tests/ui/empty_global_asm.rs  --exclude tests/ui-fulldeps/deriving-encodable-decodable-box.rs  --exclude tests/ui-fulldeps/deriving-encodable-decodable-cell-refcell.rs  --exclude tests/ui-fulldeps/deriving-global.rs  --exclude tests/ui-fulldeps/deriving-hygiene.rs  --exclude tests/ui-fulldeps/dropck_tarena_sound_drop.rs  --exclude tests/ui-fulldeps/empty-struct-braces-derive.rs  --exclude tests/ui-fulldeps/internal-lints/bad_opt_access.rs  --exclude tests/ui-fulldeps/internal-lints/bad_opt_access.stderr  --exclude tests/ui-fulldeps/internal-lints/default_hash_types.rs  --exclude tests/ui-fulldeps/internal-lints/diagnostics.rs  --exclude tests/ui-fulldeps/internal-lints/lint_pass_impl_without_macro.rs  --exclude tests/ui-fulldeps/internal-lints/qualified_ty_ty_ctxt.rs  --exclude tests/ui-fulldeps/internal-lints/query_stability.rs  --exclude tests/ui-fulldeps/internal-lints/rustc_pass_by_value.rs  --exclude tests/ui-fulldeps/internal-lints/ty_tykind_usage.rs  --exclude tests/ui-fulldeps/issue-14021.rs  --exclude tests/ui-fulldeps/lint-group-denied-lint-allowed.rs  --exclude tests/ui-fulldeps/lint-group-forbid-always-trumps-cli.rs  --exclude tests/ui-fulldeps/lint-pass-macros.rs  --exclude tests/ui-fulldeps/regions-mock-tcx.rs  --exclude tests/ui-fulldeps/rustc_encodable_hygiene.rs  --exclude tests/ui-fulldeps/session-diagnostic/enforce_slug_naming.rs  --exclude tests/ui/functions-closures/fn-help-with-err.rs  --exclude tests/ui/linkage-attr/issue-10755.rs  --exclude tests/ui/macros/restricted-shadowing-legacy.rs  --exclude tests/ui/process/nofile-limit.rs  --exclude tests/ui/process/process-panic-after-fork.rs  --exclude tests/ui/process/process-sigpipe.rs  --exclude tests/ui/simd/target-feature-mixup.rs  --exclude tests/ui/structs-enums/multiple-reprs.rs --doc --no-fail-fast --bless --target mips-poky-linux-gnu > summary.txt 2>&1;' returned non-zero exit status 1:


On 02/08/2023 22:07:54+0200, Benjamin Bara wrote:
> From: Benjamin Bara <benjamin.bara@skidata.com>
> 
> A build with vfpv3d16 (armv7at2hf-vfpv3d16) tune currently warns:
> '+d16' is not a recognized feature for this target (ignoring feature)
> 
> This correlates with the supported target_features for arm[1].
> 
> With the now enabled features, rustc might use vdiv.f64 with register
> d17, which leads to an illegal instruction on the given platform.
> 
> Therefore, adapt the features s.t. they correspond to the
> armv7_unknown_linux_gnueabihf target[2].
> 
> [1] https://github.com/rust-lang/rust/blob/1.70.0/compiler/rustc_codegen_ssa/src/target_features.rs#L32
> [2] https://github.com/rust-lang/rust/blob/1.70.0/compiler/rustc_target/src/spec/armv7_unknown_linux_gnueabihf.rs#L15
> 
> Signed-off-by: Benjamin Bara <benjamin.bara@skidata.com>
> ---
>  meta/classes-recipe/rust-target-config.bbclass | 15 ++++++++-------
>  1 file changed, 8 insertions(+), 7 deletions(-)
> 
> diff --git a/meta/classes-recipe/rust-target-config.bbclass b/meta/classes-recipe/rust-target-config.bbclass
> index 21a56ede3e..7d3965ed2e 100644
> --- a/meta/classes-recipe/rust-target-config.bbclass
> +++ b/meta/classes-recipe/rust-target-config.bbclass
> @@ -19,18 +19,22 @@ def llvm_features_from_tune(d):
>      mach_overrides = d.getVar('MACHINEOVERRIDES')
>      mach_overrides = frozenset(mach_overrides.split(':'))
>  
> +    if target_is_armv7(d):
> +        f.append('+v7')
> +
>      if 'vfpv4' in feat:
>          f.append("+vfp4")
> -    if 'vfpv3' in feat:
> +    if 'vfpv3' in feat or 'vfpv3d16' in feat:
>          f.append("+vfp3")
> -    if 'vfpv3d16' in feat:
> -        f.append("+d16")
> -
>      if 'vfpv2' in feat or 'vfp' in feat:
>          f.append("+vfp2")
> +    if 'vfpv3d16' in feat:
> +        f.append("-d32")
>  
>      if 'neon' in feat:
>          f.append("+neon")
> +    else:
> +        f.append("-neon")
>  
>      if 'mips32' in feat:
>          f.append("+mips32")
> @@ -38,9 +42,6 @@ def llvm_features_from_tune(d):
>      if 'mips32r2' in feat:
>          f.append("+mips32r2")
>  
> -    if target_is_armv7(d):
> -        f.append('+v7')
> -
>      if ('armv6' in mach_overrides) or ('armv6' in feat):
>          f.append("+v6")
>      if 'armv5te' in feat:
> 
> ---
> base-commit: b2594471209fafd45ea907371b5bd26df95ab2ac
> change-id: 20230801-rust-vfpv3d16-a65080a9bcfa
> 
> Best regards,
> -- 
> Benjamin Bara <benjamin.bara@skidata.com>
> 

> 
> -=-=-=-=-=-=-=-=-=-=-=-
> Links: You receive all messages sent to this group.
> View/Reply Online (#185433): https://lists.openembedded.org/g/openembedded-core/message/185433
> Mute This Topic: https://lists.openembedded.org/mt/100513507/3617179
> Group Owner: openembedded-core+owner@lists.openembedded.org
> Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [alexandre.belloni@bootlin.com]
> -=-=-=-=-=-=-=-=-=-=-=-
>
Benjamin Bara Aug. 7, 2023, 4:50 p.m. UTC | #2
Hi!

On Mon, 7 Aug 2023 at 12:27, Alexandre Belloni
<alexandre.belloni@bootlin.com> wrote:
> This causes failures:
> https://autobuilder.yoctoproject.org/typhoon/#/builders/151/builds/304/steps/12/logs/stdio
> https://autobuilder.yoctoproject.org/typhoon/#/builders/147/builds/301/steps/12/logs/stdio
> https://autobuilder.yoctoproject.org/typhoon/#/builders/148/builds/306/steps/13/logs/stdio
> https://autobuilder.yoctoproject.org/typhoon/#/builders/145/builds/299/steps/12/logs/stdio
> https://autobuilder.yoctoproject.org/typhoon/#/builders/154/builds/301/steps/13/logs/stdio

Thank you for the pointers! I guess it would be good to have the content
of summary.txt in case of a failure? Anyways, as the failure occurs for
different targets and the only added "common piece of code" is the
"else" for "-neon", I will add an elif instead which additionally
checks for armv7.
This should leave the other targets as-is.

Thanks and best regards,
Benjamin
diff mbox series

Patch

diff --git a/meta/classes-recipe/rust-target-config.bbclass b/meta/classes-recipe/rust-target-config.bbclass
index 21a56ede3e..7d3965ed2e 100644
--- a/meta/classes-recipe/rust-target-config.bbclass
+++ b/meta/classes-recipe/rust-target-config.bbclass
@@ -19,18 +19,22 @@  def llvm_features_from_tune(d):
     mach_overrides = d.getVar('MACHINEOVERRIDES')
     mach_overrides = frozenset(mach_overrides.split(':'))
 
+    if target_is_armv7(d):
+        f.append('+v7')
+
     if 'vfpv4' in feat:
         f.append("+vfp4")
-    if 'vfpv3' in feat:
+    if 'vfpv3' in feat or 'vfpv3d16' in feat:
         f.append("+vfp3")
-    if 'vfpv3d16' in feat:
-        f.append("+d16")
-
     if 'vfpv2' in feat or 'vfp' in feat:
         f.append("+vfp2")
+    if 'vfpv3d16' in feat:
+        f.append("-d32")
 
     if 'neon' in feat:
         f.append("+neon")
+    else:
+        f.append("-neon")
 
     if 'mips32' in feat:
         f.append("+mips32")
@@ -38,9 +42,6 @@  def llvm_features_from_tune(d):
     if 'mips32r2' in feat:
         f.append("+mips32r2")
 
-    if target_is_armv7(d):
-        f.append('+v7')
-
     if ('armv6' in mach_overrides) or ('armv6' in feat):
         f.append("+v6")
     if 'armv5te' in feat: