Compare commits

..

No commits in common. "978cc419f9db73a5fd115c1969809c4994869cb9" and "4adf2d434fdf7d3a9b5c976ae0f1299b36de5151" have entirely different histories.

6 changed files with 12 additions and 12 deletions

View File

@ -1,6 +1,6 @@
[package]
name = "unwinding"
version = "0.1.5"
version = "0.1.4"
authors = ["Gary Guo <gary@garyguo.net>"]
edition = "2018"
license = "MIT OR Apache-2.0"

View File

@ -137,7 +137,7 @@ binding! {
extern "C-unwind" fn _Unwind_RaiseException(
exception: &mut UnwindException,
) -> UnwindReasonCode;
extern "C-unwind" fn _Unwind_ForcedUnwind(
extern "C-unwind" fn _Unwind_ForceUnwind(
exception: &mut UnwindException,
stop: UnwindStopFn,
stop_arg: *mut c_void,

View File

@ -8,15 +8,15 @@ pub use crate::panic_handler::*;
use crate::panicking::Exception;
#[repr(transparent)]
struct RustPanic(Box<dyn Any + Send>, DropGuard);
struct RustPanic(Box<dyn Any + Send>, ForeignGuard);
struct DropGuard;
struct ForeignGuard;
impl Drop for DropGuard {
impl Drop for ForeignGuard {
fn drop(&mut self) {
#[cfg(feature = "panic-handler")]
{
drop_panic();
foreign_exception();
}
core::intrinsics::abort();
}
@ -45,7 +45,7 @@ unsafe impl Exception for RustPanic {
}
pub fn begin_panic(payload: Box<dyn Any + Send>) -> UnwindReasonCode {
crate::panicking::begin_panic(RustPanic(payload, DropGuard))
crate::panicking::begin_panic(RustPanic(payload, ForeignGuard))
}
pub fn catch_unwind<R, F: FnOnce() -> R>(f: F) -> Result<R, Box<dyn Any + Send>> {
@ -55,7 +55,7 @@ pub fn catch_unwind<R, F: FnOnce() -> R>(f: F) -> Result<R, Box<dyn Any + Send>>
None => {
#[cfg(feature = "panic-handler")]
{
foreign_exception();
drop_panic();
}
core::intrinsics::abort();
}

View File

@ -77,7 +77,7 @@ pub extern "C-unwind" fn save_context() -> Context {
mov [rax + 0x78], r15
mov rdx, [rsp]
mov [rax + 0x80], rdx
/* stmxcsr [rax + 0x88] */
stmxcsr [rax + 0x88]
fnstcw [rax + 0x90]
ret
",
@ -95,7 +95,7 @@ pub unsafe extern "C" fn restore_context(ctx: &Context) -> ! {
mov rsp, [rdi + 0x38]
/* Restore callee-saved control registers */
/* ldmxcsr [rdi + 0x88] */
ldmxcsr [rdi + 0x88]
fldcw [rdi + 0x90]
/* Restore return address */

View File

@ -27,7 +27,7 @@ const fn next_value(x: usize) -> usize {
impl<R: gimli::Reader> gimli::UnwindContextStorage<R> for StoreOnStack {
type Rules = [(Register, RegisterRule<R>); next_value(MAX_REG_RULES)];
type Stack = [UnwindTableRow<R, Self>; 2];
type Stack = [UnwindTableRow<R, Self>; 1];
}
#[cfg(feature = "dwarf-expr")]

View File

@ -217,7 +217,7 @@ fn raise_exception_phase2(
#[inline(never)]
#[no_mangle]
pub extern "C-unwind" fn _Unwind_ForcedUnwind(
pub extern "C-unwind" fn _Unwind_ForceUnwind(
exception: &mut UnwindException,
stop: UnwindStopFn,
stop_arg: *mut c_void,