rust/compiler
Matthias Krüger 00236a0d3d
Rollup merge of #150138 - thejpster:add-armv6-bare-metal, r=madsmtm,davidtwco,wesleywiser
Add new Tier 3 targets for ARMv6

Adds three new targets to support ARMv6 processors running bare-metal:

* `armv6-none-eabi` - Arm ISA, soft-float
* `armv6-none-eabihf` - Arm ISA, hard-float
* `thumbv6-none-eabi` - Thumb-1 ISA, soft-float

There is no `thumbv6-none-eabihf` target because as far as I can tell, hard-float isn't support with the Thumb-1 instruction set (and you need the ARMv6T2 extension to enable Thumb-2 support).

The targets require ARMv6K as a minimum, which allows the two Arm ISA targets to have full CAS atomics. LLVM has a bug which means it emits some ARMv6K instructions even if you only call for ARMv6, and as no-one else has noticed the bug, and because basically all ARMv6 processors have ARMv6K, I think this is fine. The Thumb target also doesn't have any kind of atomics, just like the Armv5TE and Armv4 targets, because LLVM was emitting library calls to emulate them.

Testing will be added to https://github.com/rust-embedded/aarch32 once the target is accepted. I already have tests for the other non-M arm-none-eabi targets, and those tests pass on these targets.

> A tier 3 target must have a designated developer or developers (the "target maintainers") on record to be CCed when issues arise regarding the target. (The mechanism to track and CC such developers may evolve over time.)

I have listed myself. If accepted, I'll talk to the Embedded Devices Working Group about adding this one to the rosta with all the others they support.

> Targets must use naming consistent with any existing targets; for instance, a target for the same CPU or OS as an existing Rust target should use the same name for that CPU or OS. Targets should normally use the same names and naming conventions as used elsewhere in the broader ecosystem beyond Rust (such as in other toolchains), unless they have a very good reason to diverge. Changing the name of a target can be highly disruptive, especially once the target reaches a higher tier, so getting the name right is important even for a tier 3 target.

You might prefer `arm-none-eabi`, because `arm-unknown-linux-gnu` is an ARMv6 target - the implicit rule seems to be that if the Arm architecture version isn't specified, it's assumed to be v6. However, `armv6-none-eabi` seemed to fit better between `armv5te-none-eabi` and `armv7a/armv7r-none-eabi`.

The hamming distance between `thumbv6-none-eabi` and `thumbv6m-none-eabi` is unfortunately low, but I don't know how to make it better. They *are* the ARMv6 and ARMv6-M targets, and its perhaps not worse than `armv7a-none-eabi` and `armv7r-none-eabi`.

> Tier 3 targets may have unusual requirements to build or use, but must not create legal issues or impose onerous legal terms for the Rust project or for Rust developers or users.

No different to any other arm-none-eabi target.

> Neither this policy nor any decisions made regarding targets shall create any binding agreement or estoppel by any party. If any member of an approving Rust team serves as one of the maintainers of a target, or has any legal or employment requirement (explicit or implicit) that might affect their decisions regarding a target, they must recuse themselves from any approval decisions regarding the target's tier status, though they may otherwise participate in discussions.

Noted.

> Tier 3 targets should attempt to implement as much of the standard libraries as possible and appropriate...

Same as other arm-none-eabi targets.

> The target must provide documentation for the Rust community explaining how to build for the target, using cross-compilation if possible.

Same as other arm-none-eabi targets.

> Tier 3 targets must not impose burden on the authors of pull requests, or other developers in the community, to maintain the target. In particular, do not post comments (automated or manual) on a PR that derail or suggest a block on the PR based on a tier 3 target. Do not send automated messages or notifications (via any medium, including via @) to a PR author or others involved with a PR regarding a tier 3 target, unless they have opted into such messages.

Noted.

> Patches adding or updating tier 3 targets must not break any existing tier 2 or tier 1 target, and must not knowingly break another tier 3 target without approval of either the compiler team or the maintainers of the other tier 3 target.

Noted

> Tier 3 targets must be able to produce assembly using at least one of rustc's supported backends from any host target. (Having support in a fork of the backend is not sufficient, it must be upstream.)

Noted
2026-01-24 21:04:13 +01:00
..
rustc Auto merge of #148925 - madsmtm:jemalloc-perf, r=Kobzol 2025-11-23 20:34:07 +00:00
rustc_abi Temporarily re-export assert_matches! to reduce stabilization churn 2026-01-19 18:26:53 +11:00
rustc_arena Finish transition from semitransparent to semiopaque for rustc_macro_transparency 2026-01-08 19:14:45 +01:00
rustc_ast Rollup merge of #149174 - GrigorenkoPV:const_block_item, r=me,ytmimi 2026-01-24 15:35:08 +01:00
rustc_ast_ir Implement &pin patterns and ref pin bindings 2025-11-10 09:57:08 +08:00
rustc_ast_lowering const_block_items: do not create an AnonConst 2026-01-21 19:36:27 +03:00
rustc_ast_passes Sugar for const _: () = 2026-01-21 18:12:21 +03:00
rustc_ast_pretty const_block_items: do not create an AnonConst 2026-01-21 19:36:27 +03:00
rustc_attr_parsing Do not emit errors on non-metaitem diagnostic attr input 2026-01-22 23:42:01 +01:00
rustc_baked_icu_data Unify the configuration of the compiler docs 2025-11-05 11:25:27 +00:00
rustc_borrowck Rollup merge of #149639 - lqd:fix-typeck-constraints, r=jackh726 2026-01-23 11:07:55 +01:00
rustc_builtin_macros Rollup merge of #151516 - mejrs:ignore_nonmeta, r=jdonszelmann,jonathanbrouwer 2026-01-24 15:35:10 +01:00
rustc_codegen_cranelift Support debuginfo for assoc const bindings 2026-01-21 18:52:08 +01:00
rustc_codegen_gcc Rollup merge of #149209 - lto_refactors8, r=jackh726 2026-01-21 02:04:01 -05:00
rustc_codegen_llvm Rollup merge of #151527 - tgross35:f16-fixme-cleanup, r=folkertdev 2026-01-23 11:07:57 +01:00
rustc_codegen_ssa Auto merge of #149848 - bjorn3:alloc_shim_rework2, r=jackh726 2026-01-24 07:04:14 +00:00
rustc_const_eval Rollup merge of #151260 - reddevilmidzy:type_const, r=BoxyUwU 2026-01-22 13:35:40 +01:00
rustc_data_structures Rollup merge of #151423 - Voultapher:move-assert-matches, r=Amanieu 2026-01-22 13:35:41 +01:00
rustc_driver Unify the configuration of the compiler docs 2025-11-05 11:25:27 +00:00
rustc_driver_impl Move collect_crate_types to rustc_interface, and use new attribute parser 2026-01-22 02:34:28 +00:00
rustc_error_codes Port #[instruction_set] to attribute parser 2025-12-31 03:01:05 +01:00
rustc_error_messages Remove DiagMessage::Translated in favour of DiagMessage::Str 2026-01-18 18:30:11 +01:00
rustc_errors Rollup merge of #151439 - Mark-Simulacrum:bootstrap-bump, r=nnethercote 2026-01-22 00:37:43 -05:00
rustc_expand Rollup merge of #151516 - mejrs:ignore_nonmeta, r=jdonszelmann,jonathanbrouwer 2026-01-24 15:35:10 +01:00
rustc_feature Rollup merge of #149174 - GrigorenkoPV:const_block_item, r=me,ytmimi 2026-01-24 15:35:08 +01:00
rustc_fluent_macro Bump stage0 2026-01-21 20:03:56 -05:00
rustc_fs_util Avoid using env::temp when linking a binary 2025-12-24 06:41:42 +00:00
rustc_graphviz change non-canonical clone impl to {*self}, fix some doc comments 2025-12-20 13:46:22 +00:00
rustc_hashes some cleanups in compiler 2025-10-12 08:08:30 +00:00
rustc_hir Rollup merge of #149174 - GrigorenkoPV:const_block_item, r=me,ytmimi 2026-01-24 15:35:08 +01:00
rustc_hir_analysis Rollup merge of #151495 - enthropy7:fix-simd-zero-length-extern-static, r=JonathanBrouwer 2026-01-22 20:42:11 +01:00
rustc_hir_id
rustc_hir_pretty Introduce hir::ConstArgKind::Array 2026-01-10 12:41:50 +09:00
rustc_hir_typeck Rollup merge of #151412 - WhyNovaa:diagnostics-impl-enum-fix, r=lcnr 2026-01-22 20:42:10 +01:00
rustc_incremental Make Deps::name lookup a non-self associated function 2026-01-21 12:02:26 +11:00
rustc_index simplify words initialization using Rc::new_zeroed 2026-01-16 04:25:12 +05:30
rustc_index_macros
rustc_infer Temporarily re-export assert_matches! to reduce stabilization churn 2026-01-19 18:26:53 +11:00
rustc_interface Move collect_crate_types to rustc_interface, and use new attribute parser 2026-01-22 02:34:28 +00:00
rustc_lexer lexer/parser: ensure deps use the same unicode version 2025-12-27 11:20:42 +01:00
rustc_lint Rollup merge of #151442 - clubby789:crate-type-port, r=JonathanBrouwer 2026-01-22 00:37:43 -05:00
rustc_lint_defs Port crate_type to attribute parser 2026-01-22 02:34:28 +00:00
rustc_llvm Rollup merge of #150780 - fzakaria:fzakaria/section-threshold, r=jackh726 2026-01-23 11:07:55 +01:00
rustc_log Restrict sysroot crate imports to those defined in this repo. 2025-10-15 13:17:25 +01:00
rustc_macros Bump stage0 2026-01-21 20:03:56 -05:00
rustc_metadata Port crate_type to attribute parser 2026-01-22 02:34:28 +00:00
rustc_middle Rollup merge of #151282 - Zalathar:pin-pat, r=Nadrieril 2026-01-24 15:35:09 +01:00
rustc_mir_build THIR patterns: Explicitly distinguish &pin from plain &/&mut 2026-01-20 13:41:32 +11:00
rustc_mir_dataflow Temporarily re-export assert_matches! to reduce stabilization churn 2026-01-19 18:26:53 +11:00
rustc_mir_transform Bump stage0 2026-01-21 20:03:56 -05:00
rustc_monomorphize Rollup merge of #151441 - Keith-Cancel:mgca3, r=BoxyUwU 2026-01-22 13:35:42 +01:00
rustc_next_trait_solver Rollup merge of #148637 - rustc_dyn_incompatible, r=lcnr 2026-01-21 02:04:01 -05:00
rustc_parse Rollup merge of #149174 - GrigorenkoPV:const_block_item, r=me,ytmimi 2026-01-24 15:35:08 +01:00
rustc_parse_format rustc_parse_format: improve diagnostics for unsupported python numeric grouping 2026-01-11 23:42:38 +05:30
rustc_passes Rollup merge of #149174 - GrigorenkoPV:const_block_item, r=me,ytmimi 2026-01-24 15:35:08 +01:00
rustc_pattern_analysis THIR patterns: Explicitly distinguish &pin from plain &/&mut 2026-01-20 13:41:32 +11:00
rustc_privacy Unify the configuration of the compiler docs 2025-11-05 11:25:27 +00:00
rustc_proc_macro Update literal-escaper version to 0.0.7 2026-01-08 14:10:33 +01:00
rustc_public Replace #[rustc_do_not_implement_via_object] with #[rustc_dyn_incompatible_trait], which makes the marked trait dyn-incompatible. 2026-01-20 12:54:40 -06:00
rustc_public_bridge Overhaul filename handling for cross-compiler consistency 2025-12-12 07:33:09 +01:00
rustc_query_impl Rename HandleCycleError to CycleErrorHandling 2026-01-23 13:58:17 +11:00
rustc_query_system Rename HandleCycleError to CycleErrorHandling 2026-01-23 13:58:17 +11:00
rustc_resolve Rollup merge of #149174 - GrigorenkoPV:const_block_item, r=me,ytmimi 2026-01-24 15:35:08 +01:00
rustc_sanitizers Port #[cfi_encoding] to attribute parser 2025-12-21 22:11:33 +01:00
rustc_serialize Allow internal_features lint in doc tests 2025-11-05 11:25:29 +00:00
rustc_session Rollup merge of #150780 - fzakaria:fzakaria/section-threshold, r=jackh726 2026-01-23 11:07:55 +01:00
rustc_span Rollup merge of #149174 - GrigorenkoPV:const_block_item, r=me,ytmimi 2026-01-24 15:35:08 +01:00
rustc_symbol_mangling Fix v0 symbol mangling for assoc const bindings 2026-01-21 12:53:45 +01:00
rustc_target Rollup merge of #150138 - thejpster:add-armv6-bare-metal, r=madsmtm,davidtwco,wesleywiser 2026-01-24 21:04:13 +01:00
rustc_thread_pool change non-canonical clone impl to {*self}, fix some doc comments 2025-12-20 13:46:22 +00:00
rustc_trait_selection mGCA: Render traits dyn incompatible if the ty of an assoc const refs Self (barring Self projections) 2026-01-21 12:53:48 +01:00
rustc_traits implied bounds comments 2026-01-19 16:08:54 +00:00
rustc_transmute Clean up src/dst transmute mess. 2026-01-12 09:22:58 +11:00
rustc_ty_utils Temporarily re-export assert_matches! to reduce stabilization churn 2026-01-19 18:26:53 +11:00
rustc_type_ir Replace #[rustc_do_not_implement_via_object] with #[rustc_dyn_incompatible_trait], which makes the marked trait dyn-incompatible. 2026-01-20 12:54:40 -06:00
rustc_type_ir_macros Provide an extended framework for type visit, for use in rust-analyzer 2025-12-16 01:47:28 +02:00
rustc_windows_rc