Open alon opened 1 year ago
I've moved this over to the cortex-m
repository as that's where any fix would have to go. Thanks for reporting, this is an easy thing for people to miss especially as the config file is usually hidden.
We could add a check to the cortex-m-rt build script that link-arg=-T
is present somewhere in CARGO_ENCODED_RUSTFLAGS
, for example:
let flags = env::var("CARGO_ENCODED_RUSTFLAGS").unwrap_or("".to_string());
if !flags.contains("link-arg=-T") {
println!("cargo:warning=cortex-m-rt: No linker script flag found, an empty executable may be produced");
println!("cargo:warning=cortex-m-rt: See https://github.com/rust-embedded/cortex-m-quickstart/blob/master/.cargo/config.toml#L18 for an example");
}
which gives:
$ cargo build
warning: cortex-m-rt: No linker script flag found, an empty executable may be produced
warning: cortex-m-rt: See https://github.com/rust-embedded/cortex-m-quickstart/blob/master/.cargo/config.toml#L18 for an example
Finished dev [unoptimized + debuginfo] target(s) in 0.02s
This doesn't require the linker script be named link.x
, because some people may be using a custom linker script with another name, but does check that somehow or other some linker script is set besides the default (which will never produce a useful output). However, I still worry there could be some annoying false positives. We could possibly add a second environment variable that skips the check for those users. It might also be possible to detect this by setting up something in the cortex-m-rt library that will generate a linker error without a good link script, but I'm not sure what that would look like exactly.
Edit: ah, this won't work for users setting the flag from their build.rs
. We should probably update quickstart to do that anyway, but we can't do the detection suggested above.
Is there a post process hook akin to build.rs? That qould not produce falae positives, i.e. checking for .text directly.
On February 17, 2023 6:41:39 PM GMT+02:00, Adam Greig @.***> wrote:
I've moved this over to the
cortex-m
repository as that's where any fix would have to go. Thanks for reporting, this is an easy thing for people to miss especially as the config file is usually hidden.We could add a check to the cortex-m-rt build script that
link-arg=-T
is present somewhere inCARGO_ENCODED_RUSTFLAGS
, for example:let flags = env::var("CARGO_ENCODED_RUSTFLAGS").unwrap_or("".to_string()); if !flags.contains("link-arg=-T") { println!("cargo:warning=cortex-m-rt: No linker script flag found, an empty executable may be produced"); println!("cargo:warning=cortex-m-rt: See https://github.com/rust-embedded/cortex-m-quickstart/blob/master/.cargo/config.toml#L18 for an example"); }
which gives:
$ cargo build warning: cortex-m-rt: No linker script flag found, an empty executable may be produced warning: cortex-m-rt: See https://github.com/rust-embedded/cortex-m-quickstart/blob/master/.cargo/config.toml#L18 for an example Finished dev [unoptimized + debuginfo] target(s) in 0.02s
This doesn't require the linker script be named
link.x
, because some people may be using a custom linker script with another name, but does check that somehow or other some linker script is set besides the default (which will never produce a useful output). However, I still worry there could be some annoying false positives. We could possibly add a second environment variable that skips the check for those users. It might also be possible to detect this by setting up something in the cortex-m-rt library that will generate a linker error without a good link script, but I'm not sure what that would look like exactly.-- Reply to this email directly or view it on GitHub: https://github.com/rust-embedded/cortex-m/issues/471#issuecomment-1434897403 You are receiving this because you authored the thread.
Message ID: @.***> -- Sent from my Android device with K-9 Mail. Please excuse my brevity.
Hi,
I realize this is not really a bug, I just hoped to get some feedback about where you think this should be reported. The issue is that if you take this template and remove the "-C", "link-arg=-Tlink.x" line from .cargo/config (for instance, by reading this as a reference and copying bits into another project) then everything compiles just fine but the resulting binary is useless.
Here is the output of arm-none-eabi-objdump -h (I called the project devicers):
I'm just trying to get some feedback here if this sounds to anybody like an issue worthy of fixing, the issue being that there was no complaint at any point suggesting anything was wrong, only by trying to execute the resulting binary (in my case trying to run it with the cargo-call-stack tool) do you get an error.
Thanks, Alon