From 64a18a88c9255c41f48d0f0c6593026bd719cb0b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20Mi=C4=85sko?= Date: Thu, 18 Jun 2020 00:00:00 +0000 Subject: [PATCH] Use --eh-frame-hdr on linux-musl target & ld.lld linker flavour The --eh-frame-hdr is necessary for unwinding but not enabled by default when using ld.lld linker flavour. Enable it to match existing behaviour for gcc linker flavour. --- src/librustc_target/spec/linux_musl_base.rs | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/librustc_target/spec/linux_musl_base.rs b/src/librustc_target/spec/linux_musl_base.rs index 0fdd876080677..88703205e17a2 100644 --- a/src/librustc_target/spec/linux_musl_base.rs +++ b/src/librustc_target/spec/linux_musl_base.rs @@ -1,5 +1,5 @@ use crate::spec::crt_objects::{self, CrtObjectsFallback}; -use crate::spec::{LinkerFlavor, TargetOptions}; +use crate::spec::{LinkerFlavor, LldFlavor, TargetOptions}; pub fn opts() -> TargetOptions { let mut base = super::linux_base::opts(); @@ -8,7 +8,11 @@ pub fn opts() -> TargetOptions { // `GNU_EH_FRAME` program header to executables generated, which is required // when unwinding to locate the unwinding information. I'm not sure why this // argument is *not* necessary for normal builds, but it can't hurt! - base.pre_link_args.get_mut(&LinkerFlavor::Gcc).unwrap().push("-Wl,--eh-frame-hdr".to_string()); + base.pre_link_args.entry(LinkerFlavor::Gcc).or_default().push("-Wl,--eh-frame-hdr".to_string()); + base.pre_link_args + .entry(LinkerFlavor::Lld(LldFlavor::Ld)) + .or_default() + .push("--eh-frame-hdr".to_string()); base.pre_link_objects_fallback = crt_objects::pre_musl_fallback(); base.post_link_objects_fallback = crt_objects::post_musl_fallback();