rustc_target: Add a target spec option for disabling --eh-frame-hdr

This commit is contained in:
Vadim Petrochenkov 2020-07-22 15:49:04 +03:00
parent e22b61bff0
commit 49b9a6486a
14 changed files with 24 additions and 8 deletions

View File

@ -1598,7 +1598,9 @@ fn linker_with_args<'a, B: ArchiveBuilder<'a>>(
}
// NO-OPT-OUT, OBJECT-FILES-NO, AUDIT-ORDER
cmd.add_eh_frame_header();
if sess.target.target.options.eh_frame_header {
cmd.add_eh_frame_header();
}
// NO-OPT-OUT, OBJECT-FILES-NO
if crt_objects_fallback {

View File

@ -619,13 +619,7 @@ fn linker_plugin_lto(&mut self) {
// Some versions of `gcc` add it implicitly, some (e.g. `musl-gcc`) don't,
// so we just always add it.
fn add_eh_frame_header(&mut self) {
if !self.sess.target.target.options.is_like_osx
&& !self.sess.target.target.options.is_like_windows
&& !self.sess.target.target.options.is_like_solaris
&& self.sess.target.target.target_os != "uefi"
{
self.linker_arg("--eh-frame-hdr");
}
self.linker_arg("--eh-frame-hdr");
}
}

View File

@ -31,6 +31,7 @@ pub fn opts() -> TargetOptions {
has_elf_tls: version >= (10, 7),
abi_return_struct_as_int: true,
emit_debug_gdb_scripts: false,
eh_frame_header: false,
// This environment variable is pretty magical but is intended for
// producing deterministic builds. This was first discovered to be used

View File

@ -25,6 +25,7 @@ pub fn opts() -> TargetOptions {
has_rpath: false,
pre_link_args: args,
position_independent_executables: false,
eh_frame_header: false,
..Default::default()
}
}

View File

@ -23,6 +23,7 @@ pub fn opts() -> TargetOptions {
is_like_solaris: true,
limit_rdylib_exports: false, // Linker doesn't support this
eliminate_frame_pointer: false,
eh_frame_header: false,
late_link_args,
// While we support ELF TLS, rust requires a way to register

View File

@ -987,6 +987,11 @@ pub struct TargetOptions {
/// Whether to use legacy .ctors initialization hooks rather than .init_array. Defaults
/// to false (uses .init_array).
pub use_ctors_section: bool,
/// Whether the linker is instructed to add a `GNU_EH_FRAME` ELF header
/// used to locate unwinding information is passed
/// (only has effect if the linker is `ld`-like).
pub eh_frame_header: bool,
}
impl Default for TargetOptions {
@ -1078,6 +1083,7 @@ fn default() -> TargetOptions {
relax_elf_relocations: false,
llvm_args: vec![],
use_ctors_section: false,
eh_frame_header: true,
}
}
}
@ -1470,6 +1476,7 @@ macro_rules! key {
key!(relax_elf_relocations, bool);
key!(llvm_args, list);
key!(use_ctors_section, bool);
key!(eh_frame_header, bool);
// NB: The old name is deprecated, but support for it is retained for
// compatibility.
@ -1707,6 +1714,7 @@ macro_rules! target_option_val {
target_option_val!(relax_elf_relocations);
target_option_val!(llvm_args);
target_option_val!(use_ctors_section);
target_option_val!(eh_frame_header);
if default.unsupported_abis != self.options.unsupported_abis {
d.insert(

View File

@ -56,6 +56,8 @@ pub fn target() -> TargetResult {
// See the thumb_base.rs file for an explanation of this value
emit_debug_gdb_scripts: false,
eh_frame_header: false,
..Default::default()
},
})

View File

@ -25,6 +25,7 @@ pub fn target() -> TargetResult {
relocation_model: RelocModel::Static,
emit_debug_gdb_scripts: false,
unsupported_abis: super::riscv_base::unsupported_abis(),
eh_frame_header: false,
..Default::default()
},
})

View File

@ -25,6 +25,7 @@ pub fn target() -> TargetResult {
relocation_model: RelocModel::Static,
emit_debug_gdb_scripts: false,
unsupported_abis: super::riscv_base::unsupported_abis(),
eh_frame_header: false,
..Default::default()
},
})

View File

@ -25,6 +25,7 @@ pub fn target() -> TargetResult {
relocation_model: RelocModel::Static,
emit_debug_gdb_scripts: false,
unsupported_abis: super::riscv_base::unsupported_abis(),
eh_frame_header: false,
..Default::default()
},
})

View File

@ -26,6 +26,7 @@ pub fn target() -> TargetResult {
code_model: Some(CodeModel::Medium),
emit_debug_gdb_scripts: false,
unsupported_abis: super::riscv_base::unsupported_abis(),
eh_frame_header: false,
..Default::default()
},
})

View File

@ -26,6 +26,7 @@ pub fn target() -> TargetResult {
code_model: Some(CodeModel::Medium),
emit_debug_gdb_scripts: false,
unsupported_abis: super::riscv_base::unsupported_abis(),
eh_frame_header: false,
..Default::default()
},
})

View File

@ -8,6 +8,7 @@ pub fn opts() -> TargetOptions {
target_family: Some("unix".to_string()),
is_like_solaris: true,
limit_rdylib_exports: false, // Linker doesn't support this
eh_frame_header: false,
..Default::default()
}

View File

@ -91,6 +91,7 @@ pub fn opts() -> TargetOptions {
abi_return_struct_as_int: true,
emit_debug_gdb_scripts: false,
requires_uwtable: true,
eh_frame_header: false,
..Default::default()
}