Closed jonas-schievink closed 3 years ago
This seems to have been noticed here as well: https://github.com/rust-osdev/bootloader/pull/168
Edit: Fixed link to rust-osdev
repo instead of this issue
Edit 2: This also indicates you can work-around the regression by manually passing --gc-sections
as a linker flag.
Also as a note, @japaric tested this with using arm-none-eabi-ld
as the linker instead of the default rust-lld, and this issue remained (referring to #85274). He can confirm whether he set the "linker flavor" or similar as well.
it's very likely #85274, since adding -C link-arg=--gc-sections
to rustflags fixes the bloat.
Is the linker for this target guaranteed to be gnu ld? Doesn't sound like something that we can claim, can we? It does look like we default to lld
.
We do default to LLD, which can also garbage-collect unused sections
Yeah, I was just wondering if we should expand our logic around when we specify the --gc-sections
flag or just say that the targets use a gnu-ld-like linker.
Yeah, in practice I don't think anyone uses a non-GNU-compatible linker there
It may make sense to set the default for linker_is_gnu
to true because ld
-style linkers are usually gnu, and it's easier to explicitly list exceptions than to not forget setting it to true for all random embedded targets.
If the default is not flipped then compiler\rustc_target\src\spec\thumb_base.rs
needs to add linker_is_gnu: true
+ other target specs should probably be audited as well.
There seems to be a significant regression in binary size in the most recent nightly:
nightly-2021-05-19
nightly-2021-05-20
Steps to reproduce:
thumbv6m-none-eabi
targetcargo build
size target/thumbv6m-none-eabi/debug/hello
Commits in that range: https://github.com/rust-lang/rust/compare/4e3e6db01...f94942d84
https://github.com/rust-lang/rust/pull/85274 looks suspicious (cc @luqmana)