Link crtbegin/crtend on musl to terminate .eh_frame
For some targets, rustc uses a "CRT fallback", where it links CRT object files it ships instead of letting the host compiler link them. On musl, rustc currently links crt1, crti and crtn (provided by libc), but does not link crtbegin and crtend (provided by libgcc). In particular, crtend is responsible for terminating the .eh_frame section. Lack of terminator may result in segfaults during unwinding, as reported in #47551 and encountered by the LLVM 12 update in #81451. This patch links crtbegin and crtend for musl as well, following the table at the top of crt_objects.rs.
This commit is contained in:
parent
98f8cce6db
commit
c7091f5a07
2 changed files with 20 additions and 7 deletions
|
@ -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 {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue