about summary refs log tree commit diff
path: root/library/proc_macro/src/lib.rs
diff options
context:
space:
mode:
authorMatthias Krüger <476013+matthiaskrgr@users.noreply.github.com>2025-10-04 12:31:27 +0200
committerGitHub <noreply@github.com>2025-10-04 12:31:27 +0200
commit82ccda32f48d52d1cadd0eb7826e72bf5f83bf9b (patch)
tree65a41d4ada7e6361ba2c3717435e5edf0aa30808 /library/proc_macro/src/lib.rs
parent65577da49cb7b7db1cc9b3aa8a4790d8d46349d2 (diff)
parentc721fa243825255c0f195d4282021e7c263c3e7f (diff)
downloadrust-82ccda32f48d52d1cadd0eb7826e72bf5f83bf9b.tar.gz
rust-82ccda32f48d52d1cadd0eb7826e72bf5f83bf9b.zip
Rollup merge of #147117 - iximeow:ixi/illumos-used-attr, r=Noratrieb
interpret `#[used]` as `#[used(compiler)]` on illumos

helps rust-lang/rust#146169 not be as painful: fixes the illumos regression in rust-lang/rust#140872, but `#[used(linker)]` is still erroneous on illumos generally.

illumos' `ld` does not support a flag like either SHF_GNU_RETAIN or SHF_SUNW_NODISCARD, so there is no way to communicate `#[used(linker)]` for that target. Setting `USED_LINKER` to try results in LLVM setting SHF_SUNW_NODISCARD for Solaris-like targets, which is an unknown section header flag for illumos `ld` and prevents sections from being merged that otherwise would.

As a motivating example, the `inventory` crate produces `#[used]` items to merge into `.init_array`. Because those items have an unknown section header flag they are not merged with the default `.init_array` with `frame_dummy`, and end up never executed.

Downgrading `#[used]` to `#[used(compiler)]` on illumos keeps so-attributed items as preserved as they had been before https://github.com/rust-lang/rust/pull/140872. As was the case before that change, because rustc passes `-z ignore` to illumos `ld`, it's possible that `used` sections are GC'd at link time. https://github.com/rust-lang/rust/issues/146169 describes this unfortunate circumstance.

----

as it turns out, `tests/ui/attributes/used_with_archive.rs` had broken on `x86_64-unknown-illumos`, and this patch fixes it. the trials and tribulations of tier 2 :(

r? ``@Noratrieb`` probably?
Diffstat (limited to 'library/proc_macro/src/lib.rs')
0 files changed, 0 insertions, 0 deletions