linker: Pass /NODEFAULTLIB
in a more regular way
This commit is contained in:
parent
7a4f059add
commit
cfe90ebfe3
5 changed files with 23 additions and 19 deletions
|
@ -1532,13 +1532,8 @@ fn linker_with_args<'a, B: ArchiveBuilder<'a>>(
|
|||
cmd.debuginfo();
|
||||
|
||||
// OBJECT-FILES-NO, AUDIT-ORDER
|
||||
// We want to, by default, prevent the compiler from accidentally leaking in
|
||||
// any system libraries, so we may explicitly ask linkers to not link to any
|
||||
// libraries by default. Note that this does not happen for windows because
|
||||
// windows pulls in some large number of libraries and I couldn't quite
|
||||
// figure out which subset we wanted.
|
||||
//
|
||||
// This is all naturally configurable via the standard methods as well.
|
||||
// We want to prevent the compiler from accidentally leaking in any system libraries,
|
||||
// so by default we tell linkers not to link to any default libraries.
|
||||
if !sess.opts.cg.default_linker_libraries.unwrap_or(false)
|
||||
&& sess.target.target.options.no_default_libraries
|
||||
{
|
||||
|
|
|
@ -631,15 +631,7 @@ impl<'a> Linker for MsvcLinker<'a> {
|
|||
}
|
||||
|
||||
fn no_default_libraries(&mut self) {
|
||||
// Currently we don't pass the /NODEFAULTLIB flag to the linker on MSVC
|
||||
// as there's been trouble in the past of linking the C++ standard
|
||||
// library required by LLVM. This likely needs to happen one day, but
|
||||
// in general Windows is also a more controlled environment than
|
||||
// Unix, so it's not necessarily as critical that this be implemented.
|
||||
//
|
||||
// Note that there are also some licensing worries about statically
|
||||
// linking some libraries which require a specific agreement, so it may
|
||||
// not ever be possible for us to pass this flag.
|
||||
self.cmd.arg("/NODEFAULTLIB");
|
||||
}
|
||||
|
||||
fn include_path(&mut self, path: &Path) {
|
||||
|
|
|
@ -23,9 +23,6 @@ pub fn opts() -> TargetOptions {
|
|||
// will fail if the compiler ever tries placing code on the stack (e.g., trampoline
|
||||
// constructs and alike).
|
||||
"/NXCOMPAT".to_string(),
|
||||
// There is no runtime for UEFI targets, prevent them from being linked. UEFI targets
|
||||
// must be freestanding.
|
||||
"/nodefaultlib".to_string(),
|
||||
// Non-standard subsystems have no default entry-point in PE+ files. We have to define
|
||||
// one. "efi_main" seems to be a common choice amongst other implementations and the
|
||||
// spec.
|
||||
|
|
|
@ -30,6 +30,16 @@ pub fn opts() -> TargetOptions {
|
|||
abi_return_struct_as_int: true,
|
||||
emit_debug_gdb_scripts: false,
|
||||
requires_uwtable: true,
|
||||
// Currently we don't pass the /NODEFAULTLIB flag to the linker on MSVC
|
||||
// as there's been trouble in the past of linking the C++ standard
|
||||
// library required by LLVM. This likely needs to happen one day, but
|
||||
// in general Windows is also a more controlled environment than
|
||||
// Unix, so it's not necessarily as critical that this be implemented.
|
||||
//
|
||||
// Note that there are also some licensing worries about statically
|
||||
// linking some libraries which require a specific agreement, so it may
|
||||
// not ever be possible for us to pass this flag.
|
||||
no_default_libraries: false,
|
||||
|
||||
..Default::default()
|
||||
}
|
||||
|
|
|
@ -31,6 +31,16 @@ pub fn opts() -> TargetOptions {
|
|||
emit_debug_gdb_scripts: false,
|
||||
requires_uwtable: true,
|
||||
lld_flavor: LldFlavor::Link,
|
||||
// Currently we don't pass the /NODEFAULTLIB flag to the linker on MSVC
|
||||
// as there's been trouble in the past of linking the C++ standard
|
||||
// library required by LLVM. This likely needs to happen one day, but
|
||||
// in general Windows is also a more controlled environment than
|
||||
// Unix, so it's not necessarily as critical that this be implemented.
|
||||
//
|
||||
// Note that there are also some licensing worries about statically
|
||||
// linking some libraries which require a specific agreement, so it may
|
||||
// not ever be possible for us to pass this flag.
|
||||
no_default_libraries: false,
|
||||
|
||||
..Default::default()
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue