Repository navigation
vexos: clear .bss from assembly - #163960
Merged
Merged
Conversation
Contributor
Author
|
marked as a draft until I get a chance to test this |
this loop was originally written for thumb-2, but since we start in ARM mode we want regular mov
Contributor
Author
|
tested in QEMU, seems to work fine |
tropicaaal
marked this pull request as ready for review
October 8, 2026 06:18
Collaborator
|
These commits modify compiler targets. |
Collaborator
|
r? @aapoalas rustbot has assigned @aapoalas. Use Why was this reviewer chosen?The reviewer was selected based on:
|
Contributor
|
I don't know anything about vexos, but this looks good to me:
r? me @bors r+ rollup |
Contributor
rust-bors Bot
pushed a commit
that referenced
this pull request
Oct 8, 2026
…uwer Rollup of 19 pull requests Successful merges: - #156112 (Distinguish `repr(C)` ZSTs from others in ABI computation) - #157941 (Deny partial `-Z stack-protector` by default in all editions) - #163462 (Fix COFF renaming of decorated (stdcall/fastcall/vectorcall) exports) - #163855 (Include enclosing item's context on const errors) - #163861 (Run LLDB debuginfo tests on `x86_64-mingw`) - #163913 ( Silence redundant failed obligations on the same statement) - #161201 (Speed up tidy again) - #163380 (Tweak "name not found" resolution error when it happens from within a derive expansion) - #163538 (Add `rustc::missing_generic_type_visitable` lint) - #163617 (mips: make `Complex<T>` ABI match GCC) - #163772 (comptime fn error: suggest wrapping in const block) - #163813 (use pre-borrowck typing env for early MIR validation) - #163924 (replace instances of NonNull::new(&mut x).expect("...") with NonNull::from_mut) - #163958 (only make `RustaceansAreAwesome` satisfy trait clauses) - #163960 (vexos: clear .bss from assembly) - #163974 (Condense AdtDef lang item checks into one match) - #163979 (Add `bf16` to arm features) - #163989 (Revert "compiletest: stream output of executor process when --no-capture is set") - #163995 (m68k-unknown-none-elf: Remove code model) Failed merges: - #163832 (reject non-async coroutine closures as async callables) - #163972 (const-eval: ICE when we hit a non-const fn)
rust-bors Bot
pushed a commit
that referenced
this pull request
Oct 8, 2026
Rollup merge of #163960 - vexide:tropicaaal/asm-bss-clear, r=hanna-kruppe vexos: clear .bss from assembly On `target_os = "vexos"`, libstd is responsible for clearing the `.bss` section during runtime initialization. This PR moves that step from Rust (previously done via `core::ptr::write_bytes`) to some assembly that runs even earlier into execution. The previous approach was sketchy at best when considering soundness, because: - Pointer provenance (probably) makes this UB since `.bss` lives inside the bounds of the abstract machine and we'd be writing to memory that will eventually hold statics. I have no idea how this plays out in practice, especially because it's a linkerscript symbol which isn't an actual value. - `core::ptr::write_bytes` gets lowered to a memclr intrinsic, which may access `.bss` depending on how its [implemented](https://github.com/rust-lang/compiler-builtins/blob/7f5edc1fc0f7b736d9beb6f817650feac7247114/compiler-builtins/src/arm.rs#L248) in `compiler-rt`. - On debug profiles, UB precondition checks might cause problems depending on what's being asserted before the runtime environment is sane. Anyways, for peace-of-mind it's much better to do this from assembly. The compiler changes here are trivial, just a change to the linkerscript to ensure that `__bss_start` gets aligned to a 4-byte boundary.
programskillforverification
pushed a commit
to programskillforverification/miri
that referenced
this pull request
Oct 9, 2026
…uwer Rollup of 19 pull requests Successful merges: - rust-lang/rust#156112 (Distinguish `repr(C)` ZSTs from others in ABI computation) - rust-lang/rust#157941 (Deny partial `-Z stack-protector` by default in all editions) - rust-lang/rust#163462 (Fix COFF renaming of decorated (stdcall/fastcall/vectorcall) exports) - rust-lang/rust#163855 (Include enclosing item's context on const errors) - rust-lang/rust#163861 (Run LLDB debuginfo tests on `x86_64-mingw`) - rust-lang/rust#163913 ( Silence redundant failed obligations on the same statement) - rust-lang/rust#161201 (Speed up tidy again) - rust-lang/rust#163380 (Tweak "name not found" resolution error when it happens from within a derive expansion) - rust-lang/rust#163538 (Add `rustc::missing_generic_type_visitable` lint) - rust-lang/rust#163617 (mips: make `Complex<T>` ABI match GCC) - rust-lang/rust#163772 (comptime fn error: suggest wrapping in const block) - rust-lang/rust#163813 (use pre-borrowck typing env for early MIR validation) - rust-lang/rust#163924 (replace instances of NonNull::new(&mut x).expect("...") with NonNull::from_mut) - rust-lang/rust#163958 (only make `RustaceansAreAwesome` satisfy trait clauses) - rust-lang/rust#163960 (vexos: clear .bss from assembly) - rust-lang/rust#163974 (Condense AdtDef lang item checks into one match) - rust-lang/rust#163979 (Add `bf16` to arm features) - rust-lang/rust#163989 (Revert "compiletest: stream output of executor process when --no-capture is set") - rust-lang/rust#163995 (m68k-unknown-none-elf: Remove code model) Failed merges: - rust-lang/rust#163832 (reject non-async coroutine closures as async callables) - rust-lang/rust#163972 (const-eval: ICE when we hit a non-const fn)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
On
target_os = "vexos", libstd is responsible for clearing the.bsssection during runtime initialization. This PR moves that step from Rust (previously done viacore::ptr::write_bytes) to some assembly that runs even earlier into execution.The previous approach was sketchy at best when considering soundness, because:
.bsslives inside the bounds of the abstract machine and we'd be writing to memory that will eventually hold statics. I have no idea how this plays out in practice, especially because it's a linkerscript symbol which isn't an actual value.core::ptr::write_bytesgets lowered to a memclr intrinsic, which may access.bssdepending on how its implemented incompiler-rt.Anyways, for peace-of-mind it's much better to do this from assembly. The compiler changes here are trivial, just a change to the linkerscript to ensure that
__bss_startgets aligned to a 4-byte boundary.