Skip to content

Commit 7678cd2

Browse files
committed
Create a proper mapfile on Solaris for limiting symbol visibility
1 parent 6de338b commit 7678cd2

File tree

1 file changed

+24
-8
lines changed

1 file changed

+24
-8
lines changed

compiler/rustc_codegen_ssa/src/back/linker.rs

Lines changed: 24 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -828,7 +828,27 @@ impl<'a> Linker for GccLinker<'a> {
828828
self.sess.dcx().emit_fatal(errors::LibDefWriteFailure { error });
829829
}
830830
self.link_arg(path);
831-
} else if crate_type == CrateType::Executable && !self.sess.target.is_like_solaris {
831+
} else if self.sess.target.is_like_solaris {
832+
// Write a Solaris LD mapfile
833+
// Documented at https://docs.oracle.com/cd/E53394_01/html/E54813/gjpky.html#OSLLGman-scsvd
834+
let res: io::Result<()> = try {
835+
let mut f = File::create_buffered(&path)?;
836+
writeln!(f, "$mapfile_version 2")?;
837+
writeln!(f, "SYMBOL_SCOPE {{")?;
838+
if !symbols.is_empty() {
839+
writeln!(f, " global:")?;
840+
for (sym, _) in symbols {
841+
debug!(" {sym};");
842+
writeln!(f, " {sym};")?;
843+
}
844+
}
845+
writeln!(f, "\n local:\n *;\n}};")?;
846+
};
847+
if let Err(error) = res {
848+
self.sess.dcx().emit_fatal(errors::VersionScriptWriteFailure { error });
849+
}
850+
self.link_arg("-M").link_arg(path);
851+
} else if crate_type == CrateType::Executable {
832852
let res: io::Result<()> = try {
833853
let mut f = File::create_buffered(&path)?;
834854
writeln!(f, "{{")?;
@@ -859,13 +879,9 @@ impl<'a> Linker for GccLinker<'a> {
859879
if let Err(error) = res {
860880
self.sess.dcx().emit_fatal(errors::VersionScriptWriteFailure { error });
861881
}
862-
if self.sess.target.is_like_solaris {
863-
self.link_arg("-M").link_arg(path);
864-
} else {
865-
let mut arg = OsString::from("--version-script=");
866-
arg.push(path);
867-
self.link_arg(arg).link_arg("--no-undefined-version");
868-
}
882+
let mut arg = OsString::from("--version-script=");
883+
arg.push(path);
884+
self.link_arg(arg).link_arg("--no-undefined-version");
869885
}
870886
}
871887

0 commit comments

Comments
 (0)