Skip to content

Commit

Permalink
Generate a version script for linkers on Linux.
Browse files Browse the repository at this point in the history
  • Loading branch information
michaelwoerister committed Dec 5, 2016
1 parent 133aeac commit e48160f
Showing 1 changed file with 18 additions and 21 deletions.
39 changes: 18 additions & 21 deletions src/librustc_trans/back/linker.rs
Expand Up @@ -253,46 +253,43 @@ impl<'a> Linker for GnuLinker<'a> {
let mut arg = OsString::new();
let path = tmpdir.join("list");

if self.sess.target.target.options.is_like_solaris {
if self.sess.target.target.options.is_like_osx {
// Write a plain, newline-separated list of symbols
let res = (|| -> io::Result<()> {
let mut f = BufWriter::new(File::create(&path)?);
writeln!(f, "{{\n global:")?;
for sym in self.info.exports[&crate_type].iter() {
writeln!(f, " {};", sym)?;
writeln!(f, "_{}", sym)?;
}
writeln!(f, "\n local:\n *;\n}};")?;
Ok(())
})();
if let Err(e) = res {
self.sess.fatal(&format!("failed to write version script: {}", e));
self.sess.fatal(&format!("failed to write lib.def file: {}", e));
}

arg.push("-Wl,-M,");
arg.push(&path);
} else {
let prefix = if self.sess.target.target.options.is_like_osx {
"_"
} else {
""
};
// Write an LD version script
let res = (|| -> io::Result<()> {
let mut f = BufWriter::new(File::create(&path)?);
writeln!(f, "{{\n global:")?;
for sym in self.info.exports[&crate_type].iter() {
writeln!(f, "{}{}", prefix, sym)?;
writeln!(f, " {};", sym)?;
}
writeln!(f, "\n local:\n *;\n}};")?;
Ok(())
})();
if let Err(e) = res {
self.sess.fatal(&format!("failed to write lib.def file: {}", e));
}
if self.sess.target.target.options.is_like_osx {
arg.push("-Wl,-exported_symbols_list,");
} else {
arg.push("-Wl,--retain-symbols-file=");
self.sess.fatal(&format!("failed to write version script: {}", e));
}
arg.push(&path);
}

if self.sess.target.target.options.is_like_osx {
arg.push("-Wl,-exported_symbols_list,");
} else if self.sess.target.target.options.is_like_solaris {
arg.push("-Wl,-M,");
} else {
arg.push("-Wl,--version-script=");
}

arg.push(&path);
self.cmd.arg(arg);
}

Expand Down

0 comments on commit e48160f

Please sign in to comment.