mirror of
https://github.com/rust-lang/rust.git
synced 2025-02-25 13:24:22 +00:00
Implement eh_unwind_resume
in libstd.
This commit is contained in:
parent
1da466253c
commit
def917afeb
@ -142,6 +142,9 @@ extern "C" {
|
||||
-> _Unwind_Reason_Code;
|
||||
|
||||
pub fn _Unwind_DeleteException(exception: *mut _Unwind_Exception);
|
||||
|
||||
#[unwind]
|
||||
pub fn _Unwind_Resume(exception: *mut _Unwind_Exception) -> !;
|
||||
}
|
||||
|
||||
// ... and now we just providing access to SjLj counterspart
|
||||
|
@ -231,3 +231,10 @@ pub mod eabi {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(all(target_os="windows", target_arch = "x86", target_env="gnu", not(test)))]
|
||||
#[lang = "eh_unwind_resume"]
|
||||
#[unwind]
|
||||
unsafe extern fn rust_eh_unwind_resume(panic_ctx: *mut u8) -> ! {
|
||||
uw::_Unwind_Resume(panic_ctx as *mut uw::_Unwind_Exception);
|
||||
}
|
||||
|
@ -190,17 +190,10 @@ unsafe extern fn rust_eh_personality(
|
||||
ExceptionContinueSearch
|
||||
}
|
||||
|
||||
// The `resume` instruction, found at the end of the landing pads, and whose job
|
||||
// is to resume stack unwinding, is typically lowered by LLVM into a call to
|
||||
// `_Unwind_Resume` routine. To avoid confusion with the same symbol exported
|
||||
// from libgcc, we redirect it to `rust_eh_unwind_resume`.
|
||||
// Since resolution of this symbol is done by the linker, `rust_eh_unwind_resume`
|
||||
// must be marked `pub` + `#[no_mangle]`. (Can we make it a lang item?)
|
||||
|
||||
#[lang = "eh_unwind_resume"]
|
||||
#[cfg(not(test))]
|
||||
#[lang = "eh_unwind_resume"]
|
||||
#[unwind]
|
||||
unsafe extern fn rust_eh_unwind_resume(panic_ctx: LPVOID) {
|
||||
unsafe extern fn rust_eh_unwind_resume(panic_ctx: LPVOID) -> ! {
|
||||
let params = [panic_ctx as ULONG_PTR];
|
||||
RaiseException(RUST_PANIC,
|
||||
EXCEPTION_NONCONTINUABLE,
|
||||
|
Loading…
Reference in New Issue
Block a user