Skip to content

Commit e48160f

Browse files
Generate a version script for linkers on Linux.
1 parent 133aeac commit e48160f

File tree

1 file changed

+18
-21
lines changed

1 file changed

+18
-21
lines changed

src/librustc_trans/back/linker.rs

Lines changed: 18 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -253,46 +253,43 @@ impl<'a> Linker for GnuLinker<'a> {
253253
let mut arg = OsString::new();
254254
let path = tmpdir.join("list");
255255

256-
if self.sess.target.target.options.is_like_solaris {
256+
if self.sess.target.target.options.is_like_osx {
257+
// Write a plain, newline-separated list of symbols
257258
let res = (|| -> io::Result<()> {
258259
let mut f = BufWriter::new(File::create(&path)?);
259-
writeln!(f, "{{\n global:")?;
260260
for sym in self.info.exports[&crate_type].iter() {
261-
writeln!(f, " {};", sym)?;
261+
writeln!(f, "_{}", sym)?;
262262
}
263-
writeln!(f, "\n local:\n *;\n}};")?;
264263
Ok(())
265264
})();
266265
if let Err(e) = res {
267-
self.sess.fatal(&format!("failed to write version script: {}", e));
266+
self.sess.fatal(&format!("failed to write lib.def file: {}", e));
268267
}
269-
270-
arg.push("-Wl,-M,");
271-
arg.push(&path);
272268
} else {
273-
let prefix = if self.sess.target.target.options.is_like_osx {
274-
"_"
275-
} else {
276-
""
277-
};
269+
// Write an LD version script
278270
let res = (|| -> io::Result<()> {
279271
let mut f = BufWriter::new(File::create(&path)?);
272+
writeln!(f, "{{\n global:")?;
280273
for sym in self.info.exports[&crate_type].iter() {
281-
writeln!(f, "{}{}", prefix, sym)?;
274+
writeln!(f, " {};", sym)?;
282275
}
276+
writeln!(f, "\n local:\n *;\n}};")?;
283277
Ok(())
284278
})();
285279
if let Err(e) = res {
286-
self.sess.fatal(&format!("failed to write lib.def file: {}", e));
287-
}
288-
if self.sess.target.target.options.is_like_osx {
289-
arg.push("-Wl,-exported_symbols_list,");
290-
} else {
291-
arg.push("-Wl,--retain-symbols-file=");
280+
self.sess.fatal(&format!("failed to write version script: {}", e));
292281
}
293-
arg.push(&path);
294282
}
295283

284+
if self.sess.target.target.options.is_like_osx {
285+
arg.push("-Wl,-exported_symbols_list,");
286+
} else if self.sess.target.target.options.is_like_solaris {
287+
arg.push("-Wl,-M,");
288+
} else {
289+
arg.push("-Wl,--version-script=");
290+
}
291+
292+
arg.push(&path);
296293
self.cmd.arg(arg);
297294
}
298295

0 commit comments

Comments
 (0)