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:
bors 2021-05-22 04:42:36 +00:00
commit 21e1cd9b95
27 changed files with 8 additions and 22 deletions

View File

@ -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(),

View File

@ -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(),

View File

@ -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,

View File

@ -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()

View File

@ -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,

View File

@ -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

View File

@ -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"]),

View File

@ -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()
} }
} }

View File

@ -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,

View File

@ -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,

View File

@ -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,

View File

@ -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()
} }

View File

@ -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,

View File

@ -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,

View File

@ -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.

View File

@ -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,

View File

@ -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,

View File

@ -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,

View File

@ -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(),

View File

@ -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,

View File

@ -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,

View File

@ -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,

View File

@ -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

View File

@ -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,

View File

@ -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,

View File

@ -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(),

View File

@ -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(),