diff --git a/compiler/rustc_target/src/spec/crt_objects.rs b/compiler/rustc_target/src/spec/crt_objects.rs index 32da16a2d8ca8..51a48147e6b62 100644 --- a/compiler/rustc_target/src/spec/crt_objects.rs +++ b/compiler/rustc_target/src/spec/crt_objects.rs @@ -64,17 +64,24 @@ pub(super) fn all(obj: &str) -> CrtObjects { pub(super) fn pre_musl_fallback() -> CrtObjects { new(&[ - (LinkOutputKind::DynamicNoPicExe, &["crt1.o", "crti.o"]), - (LinkOutputKind::DynamicPicExe, &["Scrt1.o", "crti.o"]), - (LinkOutputKind::StaticNoPicExe, &["crt1.o", "crti.o"]), - (LinkOutputKind::StaticPicExe, &["rcrt1.o", "crti.o"]), - (LinkOutputKind::DynamicDylib, &["crti.o"]), - (LinkOutputKind::StaticDylib, &["crti.o"]), + (LinkOutputKind::DynamicNoPicExe, &["crt1.o", "crti.o", "crtbegin.o"]), + (LinkOutputKind::DynamicPicExe, &["Scrt1.o", "crti.o", "crtbeginS.o"]), + (LinkOutputKind::StaticNoPicExe, &["crt1.o", "crti.o", "crtbegin.o"]), + (LinkOutputKind::StaticPicExe, &["rcrt1.o", "crti.o", "crtbeginS.o"]), + (LinkOutputKind::DynamicDylib, &["crti.o", "crtbeginS.o"]), + (LinkOutputKind::StaticDylib, &["crti.o", "crtbeginS.o"]), ]) } pub(super) fn post_musl_fallback() -> CrtObjects { - all("crtn.o") + new(&[ + (LinkOutputKind::DynamicNoPicExe, &["crtend.o", "crtn.o"]), + (LinkOutputKind::DynamicPicExe, &["crtendS.o", "crtn.o"]), + (LinkOutputKind::StaticNoPicExe, &["crtend.o", "crtn.o"]), + (LinkOutputKind::StaticPicExe, &["crtendS.o", "crtn.o"]), + (LinkOutputKind::DynamicDylib, &["crtendS.o", "crtn.o"]), + (LinkOutputKind::StaticDylib, &["crtendS.o", "crtn.o"]), + ]) } pub(super) fn pre_mingw_fallback() -> CrtObjects { diff --git a/src/bootstrap/compile.rs b/src/bootstrap/compile.rs index 7d5e3d05b11fa..859e38dc34647 100644 --- a/src/bootstrap/compile.rs +++ b/src/bootstrap/compile.rs @@ -189,6 +189,12 @@ fn copy_self_contained_objects( DependencyType::TargetSelfContained, ); } + for &obj in &["crtbegin.o", "crtbeginS.o", "crtend.o", "crtendS.o"] { + let src = compiler_file(builder, builder.cc(target), target, obj); + let target = libdir_self_contained.join(obj); + builder.copy(&src, &target); + target_deps.push((target, DependencyType::TargetSelfContained)); + } } else if target.ends_with("-wasi") { let srcdir = builder.wasi_root(target).unwrap().join("lib/wasm32-wasi"); for &obj in &["crt1.o", "crt1-reactor.o"] {