mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-28 09:44:08 +00:00
Auto merge of #85531 - luqmana:flip-gc, r=petrochenkov
Swap TargetOptions::linker_is_gnu default from false to true and update targets as appropriate. #85274 gated the `--gc-sections` flag on targets that specified `linker_is_gnu` to stop us from passing it to incompatible linkers. But that had the unintended effect of the flag no longer being passed on targets for which it is valid and hence caused a regression in binary size. Given that most `ld`-style linkers are GNU compatible, this change flips our default for `linker_is_gnu` from false to true. That also means updating the targets that relied on the previous default: * Apple * Illumos * L4Re (not sure about this one) * MSVC * NvtPtx * Solaris Fixes #85519
This commit is contained in:
commit
21e1cd9b95
@ -16,7 +16,6 @@ pub fn target() -> Target {
|
|||||||
executables: true,
|
executables: true,
|
||||||
relocation_model: RelocModel::Static,
|
relocation_model: RelocModel::Static,
|
||||||
disable_redzone: true,
|
disable_redzone: true,
|
||||||
linker_is_gnu: true,
|
|
||||||
max_atomic_width: Some(128),
|
max_atomic_width: Some(128),
|
||||||
panic_strategy: PanicStrategy::Abort,
|
panic_strategy: PanicStrategy::Abort,
|
||||||
unsupported_abis: super::arm_base::unsupported_abis(),
|
unsupported_abis: super::arm_base::unsupported_abis(),
|
||||||
|
@ -16,7 +16,6 @@ pub fn target() -> Target {
|
|||||||
executables: true,
|
executables: true,
|
||||||
relocation_model: RelocModel::Static,
|
relocation_model: RelocModel::Static,
|
||||||
disable_redzone: true,
|
disable_redzone: true,
|
||||||
linker_is_gnu: true,
|
|
||||||
max_atomic_width: Some(128),
|
max_atomic_width: Some(128),
|
||||||
panic_strategy: PanicStrategy::Abort,
|
panic_strategy: PanicStrategy::Abort,
|
||||||
unsupported_abis: super::arm_base::unsupported_abis(),
|
unsupported_abis: super::arm_base::unsupported_abis(),
|
||||||
|
@ -22,6 +22,7 @@ pub fn opts(os: &str) -> TargetOptions {
|
|||||||
// macOS has -dead_strip, which doesn't rely on function_sections
|
// macOS has -dead_strip, which doesn't rely on function_sections
|
||||||
function_sections: false,
|
function_sections: false,
|
||||||
dynamic_linking: true,
|
dynamic_linking: true,
|
||||||
|
linker_is_gnu: false,
|
||||||
executables: true,
|
executables: true,
|
||||||
families: vec!["unix".to_string()],
|
families: vec!["unix".to_string()],
|
||||||
is_like_osx: true,
|
is_like_osx: true,
|
||||||
|
@ -16,7 +16,6 @@ pub fn target(target_cpu: String) -> Target {
|
|||||||
|
|
||||||
linker: Some("avr-gcc".to_owned()),
|
linker: Some("avr-gcc".to_owned()),
|
||||||
executables: true,
|
executables: true,
|
||||||
linker_is_gnu: true,
|
|
||||||
eh_frame_header: false,
|
eh_frame_header: false,
|
||||||
pre_link_args: vec![(LinkerFlavor::Gcc, vec![format!("-mmcu={}", target_cpu)])]
|
pre_link_args: vec![(LinkerFlavor::Gcc, vec![format!("-mmcu={}", target_cpu)])]
|
||||||
.into_iter()
|
.into_iter()
|
||||||
|
@ -6,7 +6,6 @@ pub fn opts() -> TargetOptions {
|
|||||||
dynamic_linking: true,
|
dynamic_linking: true,
|
||||||
executables: true,
|
executables: true,
|
||||||
families: vec!["unix".to_string()],
|
families: vec!["unix".to_string()],
|
||||||
linker_is_gnu: true,
|
|
||||||
has_rpath: true,
|
has_rpath: true,
|
||||||
position_independent_executables: true,
|
position_independent_executables: true,
|
||||||
relro_level: RelroLevel::Full,
|
relro_level: RelroLevel::Full,
|
||||||
|
@ -6,7 +6,6 @@ pub fn opts() -> TargetOptions {
|
|||||||
dynamic_linking: true,
|
dynamic_linking: true,
|
||||||
executables: true,
|
executables: true,
|
||||||
families: vec!["unix".to_string()],
|
families: vec!["unix".to_string()],
|
||||||
linker_is_gnu: true,
|
|
||||||
has_rpath: true,
|
has_rpath: true,
|
||||||
position_independent_executables: true,
|
position_independent_executables: true,
|
||||||
eliminate_frame_pointer: false, // FIXME 43575
|
eliminate_frame_pointer: false, // FIXME 43575
|
||||||
|
@ -27,7 +27,6 @@ pub fn opts() -> TargetOptions {
|
|||||||
executables: true,
|
executables: true,
|
||||||
families: vec!["unix".to_string()],
|
families: vec!["unix".to_string()],
|
||||||
is_like_fuchsia: true,
|
is_like_fuchsia: true,
|
||||||
linker_is_gnu: true,
|
|
||||||
pre_link_args,
|
pre_link_args,
|
||||||
pre_link_objects: crt_objects::new(&[
|
pre_link_objects: crt_objects::new(&[
|
||||||
(LinkOutputKind::DynamicNoPicExe, &["Scrt1.o"]),
|
(LinkOutputKind::DynamicNoPicExe, &["Scrt1.o"]),
|
||||||
|
@ -7,7 +7,6 @@ pub fn opts() -> TargetOptions {
|
|||||||
executables: true,
|
executables: true,
|
||||||
families: vec!["unix".to_string()],
|
families: vec!["unix".to_string()],
|
||||||
relro_level: RelroLevel::Full,
|
relro_level: RelroLevel::Full,
|
||||||
linker_is_gnu: true,
|
|
||||||
..Default::default()
|
..Default::default()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -13,7 +13,6 @@ pub fn opts() -> TargetOptions {
|
|||||||
linker: Some("rust-lld".to_owned()),
|
linker: Some("rust-lld".to_owned()),
|
||||||
executables: true,
|
executables: true,
|
||||||
has_elf_tls: true,
|
has_elf_tls: true,
|
||||||
linker_is_gnu: true,
|
|
||||||
pre_link_args,
|
pre_link_args,
|
||||||
panic_strategy: PanicStrategy::Abort,
|
panic_strategy: PanicStrategy::Abort,
|
||||||
position_independent_executables: true,
|
position_independent_executables: true,
|
||||||
|
@ -14,7 +14,6 @@ pub fn opts() -> TargetOptions {
|
|||||||
linker: Some("rust-lld".to_owned()),
|
linker: Some("rust-lld".to_owned()),
|
||||||
executables: true,
|
executables: true,
|
||||||
has_elf_tls: true,
|
has_elf_tls: true,
|
||||||
linker_is_gnu: true,
|
|
||||||
pre_link_args,
|
pre_link_args,
|
||||||
panic_strategy: PanicStrategy::Abort,
|
panic_strategy: PanicStrategy::Abort,
|
||||||
position_independent_executables: true,
|
position_independent_executables: true,
|
||||||
|
@ -33,6 +33,7 @@ pub fn opts() -> TargetOptions {
|
|||||||
has_rpath: true,
|
has_rpath: true,
|
||||||
families: vec!["unix".to_string()],
|
families: vec!["unix".to_string()],
|
||||||
is_like_solaris: true,
|
is_like_solaris: true,
|
||||||
|
linker_is_gnu: false,
|
||||||
limit_rdylib_exports: false, // Linker doesn't support this
|
limit_rdylib_exports: false, // Linker doesn't support this
|
||||||
eliminate_frame_pointer: false,
|
eliminate_frame_pointer: false,
|
||||||
eh_frame_header: false,
|
eh_frame_header: false,
|
||||||
|
@ -20,6 +20,7 @@ pub fn opts() -> TargetOptions {
|
|||||||
executables: true,
|
executables: true,
|
||||||
panic_strategy: PanicStrategy::Abort,
|
panic_strategy: PanicStrategy::Abort,
|
||||||
linker: Some("ld".to_string()),
|
linker: Some("ld".to_string()),
|
||||||
|
linker_is_gnu: false,
|
||||||
families: vec!["unix".to_string()],
|
families: vec!["unix".to_string()],
|
||||||
..Default::default()
|
..Default::default()
|
||||||
}
|
}
|
||||||
|
@ -6,7 +6,6 @@ pub fn opts() -> TargetOptions {
|
|||||||
dynamic_linking: true,
|
dynamic_linking: true,
|
||||||
executables: true,
|
executables: true,
|
||||||
families: vec!["unix".to_string()],
|
families: vec!["unix".to_string()],
|
||||||
linker_is_gnu: true,
|
|
||||||
has_rpath: true,
|
has_rpath: true,
|
||||||
position_independent_executables: true,
|
position_independent_executables: true,
|
||||||
relro_level: RelroLevel::Full,
|
relro_level: RelroLevel::Full,
|
||||||
|
@ -8,7 +8,6 @@ pub fn opts() -> TargetOptions {
|
|||||||
// don't use probe-stack=inline-asm until rust#83139 and rust#84667 are resolved
|
// don't use probe-stack=inline-asm until rust#83139 and rust#84667 are resolved
|
||||||
stack_probes: StackProbeType::Call,
|
stack_probes: StackProbeType::Call,
|
||||||
eliminate_frame_pointer: false,
|
eliminate_frame_pointer: false,
|
||||||
linker_is_gnu: true,
|
|
||||||
position_independent_executables: true,
|
position_independent_executables: true,
|
||||||
needs_plt: true,
|
needs_plt: true,
|
||||||
relro_level: RelroLevel::Full,
|
relro_level: RelroLevel::Full,
|
||||||
|
@ -21,7 +21,6 @@ pub fn target() -> Target {
|
|||||||
cpu: "mips2".to_string(),
|
cpu: "mips2".to_string(),
|
||||||
executables: true,
|
executables: true,
|
||||||
linker: Some("rust-lld".to_owned()),
|
linker: Some("rust-lld".to_owned()),
|
||||||
linker_is_gnu: true,
|
|
||||||
relocation_model: RelocModel::Static,
|
relocation_model: RelocModel::Static,
|
||||||
|
|
||||||
// PSP FPU only supports single precision floats.
|
// PSP FPU only supports single precision floats.
|
||||||
|
@ -1086,7 +1086,7 @@ pub struct TargetOptions {
|
|||||||
/// Version of DWARF to use if not using the default.
|
/// Version of DWARF to use if not using the default.
|
||||||
/// Useful because some platforms (osx, bsd) only want up to DWARF2.
|
/// Useful because some platforms (osx, bsd) only want up to DWARF2.
|
||||||
pub dwarf_version: Option<u32>,
|
pub dwarf_version: Option<u32>,
|
||||||
/// Whether the linker support GNU-like arguments such as -O. Defaults to false.
|
/// Whether the linker support GNU-like arguments such as -O. Defaults to true.
|
||||||
pub linker_is_gnu: bool,
|
pub linker_is_gnu: bool,
|
||||||
/// The MinGW toolchain has a known issue that prevents it from correctly
|
/// The MinGW toolchain has a known issue that prevents it from correctly
|
||||||
/// handling COFF object files with more than 2<sup>15</sup> sections. Since each weak
|
/// handling COFF object files with more than 2<sup>15</sup> sections. Since each weak
|
||||||
@ -1307,7 +1307,7 @@ impl Default for TargetOptions {
|
|||||||
is_like_fuchsia: false,
|
is_like_fuchsia: false,
|
||||||
is_like_wasm: false,
|
is_like_wasm: false,
|
||||||
dwarf_version: None,
|
dwarf_version: None,
|
||||||
linker_is_gnu: false,
|
linker_is_gnu: true,
|
||||||
allows_weak_linkage: true,
|
allows_weak_linkage: true,
|
||||||
has_rpath: false,
|
has_rpath: false,
|
||||||
no_default_libraries: true,
|
no_default_libraries: true,
|
||||||
|
@ -16,6 +16,7 @@ pub fn opts() -> TargetOptions {
|
|||||||
is_like_windows: true,
|
is_like_windows: true,
|
||||||
is_like_msvc: true,
|
is_like_msvc: true,
|
||||||
lld_flavor: LldFlavor::Link,
|
lld_flavor: LldFlavor::Link,
|
||||||
|
linker_is_gnu: false,
|
||||||
pre_link_args,
|
pre_link_args,
|
||||||
abi_return_struct_as_int: true,
|
abi_return_struct_as_int: true,
|
||||||
emit_debug_gdb_scripts: false,
|
emit_debug_gdb_scripts: false,
|
||||||
|
@ -6,7 +6,6 @@ pub fn opts() -> TargetOptions {
|
|||||||
dynamic_linking: true,
|
dynamic_linking: true,
|
||||||
executables: true,
|
executables: true,
|
||||||
families: vec!["unix".to_string()],
|
families: vec!["unix".to_string()],
|
||||||
linker_is_gnu: true,
|
|
||||||
no_default_libraries: false,
|
no_default_libraries: false,
|
||||||
has_rpath: true,
|
has_rpath: true,
|
||||||
position_independent_executables: true,
|
position_independent_executables: true,
|
||||||
|
@ -14,6 +14,7 @@ pub fn target() -> Target {
|
|||||||
linker_flavor: LinkerFlavor::PtxLinker,
|
linker_flavor: LinkerFlavor::PtxLinker,
|
||||||
// The linker can be installed from `crates.io`.
|
// The linker can be installed from `crates.io`.
|
||||||
linker: Some("rust-ptx-linker".to_string()),
|
linker: Some("rust-ptx-linker".to_string()),
|
||||||
|
linker_is_gnu: false,
|
||||||
|
|
||||||
// With `ptx-linker` approach, it can be later overridden via link flags.
|
// With `ptx-linker` approach, it can be later overridden via link flags.
|
||||||
cpu: "sm_30".to_string(),
|
cpu: "sm_30".to_string(),
|
||||||
|
@ -6,7 +6,6 @@ pub fn opts() -> TargetOptions {
|
|||||||
dynamic_linking: true,
|
dynamic_linking: true,
|
||||||
executables: true,
|
executables: true,
|
||||||
families: vec!["unix".to_string()],
|
families: vec!["unix".to_string()],
|
||||||
linker_is_gnu: true,
|
|
||||||
has_rpath: true,
|
has_rpath: true,
|
||||||
abi_return_struct_as_int: true,
|
abi_return_struct_as_int: true,
|
||||||
position_independent_executables: true,
|
position_independent_executables: true,
|
||||||
|
@ -7,7 +7,6 @@ pub fn opts() -> TargetOptions {
|
|||||||
dynamic_linking: true,
|
dynamic_linking: true,
|
||||||
executables: true,
|
executables: true,
|
||||||
families: vec!["unix".to_string()],
|
families: vec!["unix".to_string()],
|
||||||
linker_is_gnu: true,
|
|
||||||
has_rpath: true,
|
has_rpath: true,
|
||||||
position_independent_executables: true,
|
position_independent_executables: true,
|
||||||
relro_level: RelroLevel::Full,
|
relro_level: RelroLevel::Full,
|
||||||
|
@ -8,6 +8,7 @@ pub fn opts() -> TargetOptions {
|
|||||||
has_rpath: true,
|
has_rpath: true,
|
||||||
families: vec!["unix".to_string()],
|
families: vec!["unix".to_string()],
|
||||||
is_like_solaris: true,
|
is_like_solaris: true,
|
||||||
|
linker_is_gnu: false,
|
||||||
limit_rdylib_exports: false, // Linker doesn't support this
|
limit_rdylib_exports: false, // Linker doesn't support this
|
||||||
eh_frame_header: false,
|
eh_frame_header: false,
|
||||||
|
|
||||||
|
@ -28,7 +28,6 @@ pub fn target() -> Target {
|
|||||||
options: TargetOptions {
|
options: TargetOptions {
|
||||||
linker_flavor: LinkerFlavor::Ld,
|
linker_flavor: LinkerFlavor::Ld,
|
||||||
linker: Some("arm-none-eabi-ld".to_string()),
|
linker: Some("arm-none-eabi-ld".to_string()),
|
||||||
linker_is_gnu: true,
|
|
||||||
|
|
||||||
// extra args passed to the external assembler (assuming `arm-none-eabi-as`):
|
// extra args passed to the external assembler (assuming `arm-none-eabi-as`):
|
||||||
// * activate t32/a32 interworking
|
// * activate t32/a32 interworking
|
||||||
|
@ -10,7 +10,6 @@ pub fn opts() -> TargetOptions {
|
|||||||
dynamic_linking: true,
|
dynamic_linking: true,
|
||||||
executables: true,
|
executables: true,
|
||||||
families: vec!["unix".to_string()],
|
families: vec!["unix".to_string()],
|
||||||
linker_is_gnu: true,
|
|
||||||
has_rpath: true,
|
has_rpath: true,
|
||||||
has_elf_tls: true,
|
has_elf_tls: true,
|
||||||
crt_static_default: true,
|
crt_static_default: true,
|
||||||
|
@ -34,7 +34,6 @@ pub fn target() -> Target {
|
|||||||
// functionality, and a .wasm file.
|
// functionality, and a .wasm file.
|
||||||
exe_suffix: ".js".to_string(),
|
exe_suffix: ".js".to_string(),
|
||||||
linker: None,
|
linker: None,
|
||||||
linker_is_gnu: true,
|
|
||||||
is_like_emscripten: true,
|
is_like_emscripten: true,
|
||||||
panic_strategy: PanicStrategy::Unwind,
|
panic_strategy: PanicStrategy::Unwind,
|
||||||
post_link_args,
|
post_link_args,
|
||||||
|
@ -66,7 +66,6 @@ pub fn opts() -> TargetOptions {
|
|||||||
// FIXME(#13846) this should be enabled for windows
|
// FIXME(#13846) this should be enabled for windows
|
||||||
function_sections: false,
|
function_sections: false,
|
||||||
linker: Some("gcc".to_string()),
|
linker: Some("gcc".to_string()),
|
||||||
linker_is_gnu: true,
|
|
||||||
dynamic_linking: true,
|
dynamic_linking: true,
|
||||||
executables: true,
|
executables: true,
|
||||||
dll_prefix: String::new(),
|
dll_prefix: String::new(),
|
||||||
|
@ -57,7 +57,6 @@ pub fn target() -> Target {
|
|||||||
vendor: "fortanix".into(),
|
vendor: "fortanix".into(),
|
||||||
linker_flavor: LinkerFlavor::Lld(LldFlavor::Ld),
|
linker_flavor: LinkerFlavor::Lld(LldFlavor::Ld),
|
||||||
executables: true,
|
executables: true,
|
||||||
linker_is_gnu: true,
|
|
||||||
linker: Some("rust-lld".to_owned()),
|
linker: Some("rust-lld".to_owned()),
|
||||||
max_atomic_width: Some(64),
|
max_atomic_width: Some(64),
|
||||||
cpu: "x86-64".into(),
|
cpu: "x86-64".into(),
|
||||||
|
Loading…
Reference in New Issue
Block a user