Auto merge of #92845 - Amanieu:std_personality, r=Mark-Simulacrum
Move EH personality functions to std These were previously in the panic_unwind crate with dummy stubs in the panic_abort crate. However it turns out that this is insufficient: we still need a proper personality function even with -C panic=abort to handle the following cases: 1) `extern "C-unwind"` still needs to catch foreign exceptions with -C panic=abort to turn them into aborts. This requires landing pads and a personality function. 2) ARM EHABI uses the personality function when creating backtraces. The dummy personality function in panic_abort was causing backtrace generation to get stuck in a loop since the personality function is responsible for advancing the unwind state to the next frame. Fixes #41004
This commit is contained in:
commit
91f128baf7
16 changed files with 379 additions and 339 deletions
|
@ -103,18 +103,14 @@ fn reachable_non_generics_provider(tcx: TyCtxt<'_>, cnum: CrateNum) -> DefIdMap<
|
|||
}
|
||||
})
|
||||
.map(|def_id| {
|
||||
let (export_level, used) = if special_runtime_crate {
|
||||
let name = tcx.symbol_name(Instance::mono(tcx, def_id.to_def_id())).name;
|
||||
// We won't link right if these symbols are stripped during LTO.
|
||||
let used = match name {
|
||||
"rust_eh_personality"
|
||||
| "rust_eh_register_frames"
|
||||
| "rust_eh_unregister_frames" => true,
|
||||
_ => false,
|
||||
};
|
||||
(SymbolExportLevel::Rust, used)
|
||||
// We won't link right if this symbol is stripped during LTO.
|
||||
let name = tcx.symbol_name(Instance::mono(tcx, def_id.to_def_id())).name;
|
||||
let used = name == "rust_eh_personality";
|
||||
|
||||
let export_level = if special_runtime_crate {
|
||||
SymbolExportLevel::Rust
|
||||
} else {
|
||||
(symbol_export_level(tcx, def_id.to_def_id()), false)
|
||||
symbol_export_level(tcx, def_id.to_def_id())
|
||||
};
|
||||
let codegen_attrs = tcx.codegen_fn_attrs(def_id.to_def_id());
|
||||
debug!(
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue