use super::rpath;
use metadata::METADATA_FILENAME;
use rustc::session::config::{self, DebugInfo, OutputFilenames, OutputType, PrintRequest};
-use rustc::session::config::{RUST_CGU_EXT, Lto};
+use rustc::session::config::{RUST_CGU_EXT, Lto, Sanitizer};
use rustc::session::filesearch;
use rustc::session::search_paths::PathKind;
use rustc::session::Session;
}
cmd.args(&sess.opts.debugging_opts.pre_link_arg);
+ if sess.target.target.options.is_like_fuchsia {
+ let prefix = match sess.opts.debugging_opts.sanitizer {
+ Some(Sanitizer::Address) => "asan/",
+ _ => "",
+ };
+ cmd.arg(format!("--dynamic-linker={}ld.so.1", prefix));
+ }
+
let pre_link_objects = if crate_type == config::CrateType::Executable {
&sess.target.target.options.pre_link_objects_exe
} else {
use std::default::Default;
pub fn opts() -> TargetOptions {
- let mut args = LinkArgs::new();
- args.insert(LinkerFlavor::Lld(LldFlavor::Ld), vec![
- "--build-id".to_string(), "--hash-style=gnu".to_string(),
+ let mut pre_link_args = LinkArgs::new();
+ pre_link_args.insert(LinkerFlavor::Lld(LldFlavor::Ld), vec![
+ "--build-id".to_string(),
+ "--eh-frame-hdr".to_string(),
+ "--hash-style=gnu".to_string(),
"-z".to_string(), "rodynamic".to_string(),
]);
dynamic_linking: true,
executables: true,
target_family: Some("unix".to_string()),
+ is_like_fuchsia: true,
linker_is_gnu: true,
has_rpath: false,
- pre_link_args: args,
+ pre_link_args: pre_link_args,
+ pre_link_objects_exe: vec![
+ "Scrt1.o".to_string()
+ ],
position_independent_executables: true,
has_elf_tls: true,
.. Default::default()
/// Emscripten toolchain.
/// Defaults to false.
pub is_like_emscripten: bool,
+ /// Whether the target toolchain is like Fuchsia's.
+ pub is_like_fuchsia: bool,
/// Whether the linker support GNU-like arguments such as -O. Defaults to false.
pub linker_is_gnu: bool,
/// The MinGW toolchain has a known issue that prevents it from correctly
is_like_android: false,
is_like_emscripten: false,
is_like_msvc: false,
+ is_like_fuchsia: false,
linker_is_gnu: false,
allows_weak_linkage: true,
has_rpath: false,
key!(is_like_msvc, bool);
key!(is_like_emscripten, bool);
key!(is_like_android, bool);
+ key!(is_like_fuchsia, bool);
key!(linker_is_gnu, bool);
key!(allows_weak_linkage, bool);
key!(has_rpath, bool);
target_option_val!(is_like_msvc);
target_option_val!(is_like_emscripten);
target_option_val!(is_like_android);
+ target_option_val!(is_like_fuchsia);
target_option_val!(linker_is_gnu);
target_option_val!(allows_weak_linkage);
target_option_val!(has_rpath);