| use crate::spec::{ |
| Cc, FramePointer, LinkerFlavor, Lld, PanicStrategy, StackProbeType, TargetOptions, |
| }; |
| |
| pub(crate) fn opts() -> TargetOptions { |
| let pre_link_args = TargetOptions::link_args( |
| LinkerFlavor::Gnu(Cc::No, Lld::No), |
| &[ |
| "-e", |
| "motor_start", |
| "--no-undefined", |
| "--error-unresolved-symbols", |
| "--no-undefined-version", |
| "-u", |
| "__rust_abort", |
| ], |
| ); |
| TargetOptions { |
| os: "motor".into(), |
| executables: true, |
| // TLS is false below because if true, the compiler assumes |
| // we handle TLS at the ELF loading level, which we don't. |
| // We use "OS level" TLS (see thread/local.rs in stdlib). |
| has_thread_local: false, |
| frame_pointer: FramePointer::NonLeaf, |
| linker_flavor: LinkerFlavor::Gnu(Cc::No, Lld::No), |
| main_needs_argc_argv: true, |
| panic_strategy: PanicStrategy::Abort, |
| pre_link_args, |
| stack_probes: StackProbeType::Inline, |
| supports_stack_protector: true, |
| ..Default::default() |
| } |
| } |