Skip to content

Commit 058e0cd

Browse files
Auto merge of #145175 - bjorn3:solaris_limit_rdylib_exports, r=<try>
Enable limit_rdylib_exports on Solaris try-job: dist-sparcv9-solaris
2 parents 350d0ef + 7678cd2 commit 058e0cd

File tree

2 files changed

+24
-9
lines changed

2 files changed

+24
-9
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

compiler/rustc_target/src/spec/base/solaris.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ pub(crate) fn opts() -> TargetOptions {
88
families: cvs!["unix"],
99
is_like_solaris: true,
1010
linker_flavor: LinkerFlavor::Unix(Cc::Yes),
11-
limit_rdylib_exports: false, // Linker doesn't support this
1211
eh_frame_header: false,
1312

1413
..Default::default()

0 commit comments

Comments
 (0)