From c807ff3b449a8dafc5cef539e5e65b2fe6dab879 Mon Sep 17 00:00:00 2001 From: Vadim Chugunov Date: Sun, 18 Oct 2015 14:31:32 -0700 Subject: Create entry points for unwind frame registry in libstd. --- src/libstd/sys/common/libunwind.rs | 4 ++++ src/libstd/sys/common/unwind/gcc.rs | 21 +++++++++++++++++++++ 2 files changed, 25 insertions(+) (limited to 'src/libstd/sys') diff --git a/src/libstd/sys/common/libunwind.rs b/src/libstd/sys/common/libunwind.rs index 04f677a90c4..74d334bd062 100644 --- a/src/libstd/sys/common/libunwind.rs +++ b/src/libstd/sys/common/libunwind.rs @@ -128,6 +128,10 @@ extern {} #[link(name = "c++abi")] extern {} +#[cfg(all(target_os = "windows", target_env="gnu"))] +#[link(name = "gcc_eh")] +extern {} + extern "C" { // iOS on armv7 uses SjLj exceptions and requires to link // against corresponding routine (..._SjLj_...) diff --git a/src/libstd/sys/common/unwind/gcc.rs b/src/libstd/sys/common/unwind/gcc.rs index 5ee14d9f57a..6d82eb7dfb1 100644 --- a/src/libstd/sys/common/unwind/gcc.rs +++ b/src/libstd/sys/common/unwind/gcc.rs @@ -238,3 +238,24 @@ pub mod eabi { unsafe extern fn rust_eh_unwind_resume(panic_ctx: *mut u8) -> ! { uw::_Unwind_Resume(panic_ctx as *mut uw::_Unwind_Exception); } + +#[cfg(all(target_os="windows", target_arch = "x86", target_env="gnu"))] +pub mod eh_frame_registry { + #[link(name = "gcc_eh")] + extern { + fn __register_frame_info(eh_frame_begin: *const u8, object: *mut u8); + fn __deregister_frame_info(eh_frame_begin: *const u8, object: *mut u8); + } + #[cfg(not(test))] + #[no_mangle] + pub unsafe extern fn rust_eh_register_frames(eh_frame_begin: *const u8, + object: *mut u8) { + __register_frame_info(eh_frame_begin, object); + } + #[cfg(not(test))] + #[no_mangle] + pub unsafe extern fn rust_eh_unregister_frames(eh_frame_begin: *const u8, + object: *mut u8) { + __deregister_frame_info(eh_frame_begin, object); + } +} -- cgit 1.4.1-3-g733a5