]> git.lizzy.rs Git - rust.git/blob - compiler/rustc_target/src/spec/fuchsia_base.rs
Auto merge of #97800 - pnkfelix:issue-97463-fix-aarch64-call-abi-does-not-zeroext...
[rust.git] / compiler / rustc_target / src / spec / fuchsia_base.rs
1 use crate::spec::{crt_objects, cvs, LinkOutputKind, LinkerFlavor, LldFlavor, TargetOptions};
2
3 pub fn opts() -> TargetOptions {
4     // This mirrors the linker options provided by clang. We presume lld for
5     // now. When using clang as the linker it will supply these options for us,
6     // so we only list them for ld/lld.
7     //
8     // https://github.com/llvm/llvm-project/blob/db9322b2066c55254e7691efeab863f43bfcc084/clang/lib/Driver/ToolChains/Fuchsia.cpp#L31
9     let pre_link_args = TargetOptions::link_args(
10         LinkerFlavor::Ld,
11         &[
12             "--build-id",
13             "--hash-style=gnu",
14             "-z",
15             "max-page-size=4096",
16             "-z",
17             "now",
18             "-z",
19             "rodynamic",
20             "-z",
21             "separate-loadable-segments",
22             "--pack-dyn-relocs=relr",
23         ],
24     );
25
26     TargetOptions {
27         os: "fuchsia".into(),
28         linker_flavor: LinkerFlavor::Lld(LldFlavor::Ld),
29         linker: Some("rust-lld".into()),
30         dynamic_linking: true,
31         families: cvs!["unix"],
32         pre_link_args,
33         pre_link_objects: crt_objects::new(&[
34             (LinkOutputKind::DynamicNoPicExe, &["Scrt1.o"]),
35             (LinkOutputKind::DynamicPicExe, &["Scrt1.o"]),
36             (LinkOutputKind::StaticNoPicExe, &["Scrt1.o"]),
37             (LinkOutputKind::StaticPicExe, &["Scrt1.o"]),
38         ]),
39         position_independent_executables: true,
40         has_thread_local: true,
41         ..Default::default()
42     }
43 }