about summary refs log tree commit diff
path: root/library/panic_unwind/src/seh.rs
AgeCommit message (Collapse)AuthorLines
2025-08-20Migrate `panic_unwind` to use `cfg_select!`Josh Stone-3/+4
2025-07-08Win: Use exceptions with empty data for SEH panic exception copiesGeorge Tokmaji-4/+14
instead of a new panic For unwinding with SEH, we currently construct a C++ exception with the panic data. Being a regular C++ exception, it interacts with the C++ exception handling machinery and can be retrieved via `std::current_exception`, which needs to copy the exception. We can't support that, so we panic, which throws another exception, which the C++ runtime tries to copy and store into the exception_ptr, which panics again, which causes the C++ runtime to store a `bad_exception` instance. However, this doesn't work because the panics thrown by the copy function will be dropped without being rethrown, and causes unnecessary log spam in stderr. Fix this by directly throwing an exception without data, which doesn't cause log spam and can be dropped without being rethrown.
2025-06-07intrinsics: use const generic to set atomic orderingRalf Jung-6/+6
2025-03-06library: Use size_of from the prelude instead of importedThalia Archibald-2/+2
Use `std::mem::{size_of, size_of_val, align_of, align_of_val}` from the prelude instead of importing or qualifying them. These functions were added to all preludes in Rust 1.80.
2025-02-14panic_unwind: Apply unsafe_op_in_unsafe_fnEric Huss-35/+43
2025-02-09Mark extern blocks as unsafeMichael Goulet-3/+3
2025-01-20panic_unwind: add `#![warn(unreachable_pub)]`Urgau-16/+16
2024-10-14Remove allowing static_mut_refs lintmu001999-2/+0
2024-09-25Use `&raw` in the standard libraryJosh Stone-18/+15
Since the stabilization in #127679 has reached stage0, 1.82-beta, we can start using `&raw` freely, and even the soft-deprecated `ptr::addr_of!` and `ptr::addr_of_mut!` can stop allowing the unstable feature. I intentionally did not change any documentation or tests, but the rest of those macro uses are all now using `&raw const` or `&raw mut` in the standard library.
2024-09-13Update tests for hidden references to mutable staticObei Sideg-0/+2
2024-09-05update cfgsBoxy-6/+0
2024-07-22library: vary unsafety in bootstrapping for SEHJubilee Young-0/+6
2024-04-14Replace libc::c_int with core::ffi::c_intChris Denton-1/+1
And remove the libc crate when it isn't needed
2024-04-11Refactor `panic_unwind/seh.rs` pointer use; x86 now conforms to ↵niluxv-41/+71
strict-provenance
2024-02-23Get rid of some `#[allow(static_mut_refs)]`Pavel Grigorenko-22/+17
2024-02-18Improve wording of static_mut_refObei Sideg-4/+6
Rename `static_mut_ref` lint to `static_mut_refs`.
2024-02-08Step all bootstrap cfgs forwardMark Rousskov-2/+2
This also takes care of other bootstrap-related changes.
2024-01-07Update test for `E0796` and `static_mut_ref` lintObei Sideg-0/+4
2023-04-29Partial stabilisation of `c_unwind`Gary Guo-1/+1
2022-10-23Implement Rust foreign exception protection for EMCC and SEHGary Guo-5/+15
2022-08-28Auto merge of #92845 - Amanieu:std_personality, r=Mark-Simulacrumbors-10/+0
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
2022-08-23Use renamed atomic intrinsics in panic_unwindTomasz Miąsko-6/+9
2022-08-23Move personality functions to stdAmanieu d'Antras-10/+0
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.
2022-08-23Fix comment on the SEH personality functionAmanieu d'Antras-2/+2
2021-08-03rustc: Fill out remaining parts of C-unwind ABIAlex Crichton-7/+5
This commit intends to fill out some of the remaining pieces of the C-unwind ABI. This has a number of other changes with it though to move this design space forward a bit. Notably contained within here is: * On `panic=unwind`, the `extern "C"` ABI is now considered as "may unwind". This fixes a longstanding soundness issue where if you `panic!()` in an `extern "C"` function defined in Rust that's actually UB because the LLVM representation for the function has the `nounwind` attribute, but then you unwind. * Whether or not a function unwinds now mainly considers the ABI of the function instead of first checking the panic strategy. This fixes a miscompile of `extern "C-unwind"` with `panic=abort` because that ABI can still unwind. * The aborting stub for non-unwinding ABIs with `panic=unwind` has been reimplemented. Previously this was done as a small tweak during MIR generation, but this has been moved to a separate and dedicated MIR pass. This new pass will, for appropriate functions and function calls, insert a `cleanup` landing pad for any function call that may unwind within a function that is itself not allowed to unwind. Note that this subtly changes some behavior from before where previously on an unwind which was caught-to-abort it would run active destructors in the function, and now it simply immediately aborts the process. * The `#[unwind]` attribute has been removed and all users in tests and such are now using `C-unwind` and `#![feature(c_unwind)]`. I think this is largely the last piece of the RFC to implement. Unfortunately I believe this is still not stabilizable as-is because activating the feature gate changes the behavior of the existing `extern "C"` ABI in a way that has no replacement. My thinking for how to enable this is that we add support for the `C-unwind` ABI on stable Rust first, and then after it hits stable we change the behavior of the `C` ABI. That way anyone straddling stable/beta/nightly can switch to `C-unwind` safely.
2021-06-23Use HTTPS links where possibleSmitty-2/+2
2021-05-02Change 'NULL' to 'null'Brent Kerby-1/+1
2020-09-20Correct file path after some restructures in compilerLzu Tao-1/+1
2020-08-27Abort when catch_unwind catches a foreign exceptionAmanieu d'Antras-3/+9
2020-07-27mv std libs to library/mark-0/+331