diff --git a/src/libstd/rt/unwind.rs b/src/libstd/rt/unwind.rs index 6179ff1e37d..217782195e6 100644 --- a/src/libstd/rt/unwind.rs +++ b/src/libstd/rt/unwind.rs @@ -77,7 +77,7 @@ mod libunwind { use libc::{uintptr_t, uint64_t}; - #[cfg(not(target_os = "android"))] + #[cfg(not(target_arch = "arm"))] #[repr(C)] pub enum _Unwind_Action { @@ -88,7 +88,7 @@ pub enum _Unwind_Action _UA_END_OF_STACK = 16, } - #[cfg(target_os = "android")] + #[cfg(target_arch = "arm")] #[repr(C)] pub enum _Unwind_State { @@ -118,10 +118,16 @@ pub enum _Unwind_Reason_Code { pub type _Unwind_Word = uintptr_t; + #[cfg(not(target_arch = "arm"))] + pub static unwinder_private_data_size: int = 2; + + #[cfg(target_arch = "arm")] + pub static unwinder_private_data_size: int = 20; + pub struct _Unwind_Exception { exception_class: _Unwind_Exception_Class, exception_cleanup: _Unwind_Exception_Cleanup_Fn, - private: [_Unwind_Word, ..20], + private: [_Unwind_Word, ..unwinder_private_data_size], } pub enum _Unwind_Context {} @@ -202,7 +208,7 @@ fn rust_fail() -> ! { let exception = ~uw::_Unwind_Exception { exception_class: rust_exception_class(), exception_cleanup: exception_cleanup, - private: [0, ..20], + private: [0, ..uw::unwinder_private_data_size], }; let error = uw::_Unwind_RaiseException(cast::transmute(exception)); rtabort!("Could not unwind stack, error = {}", error as int) @@ -253,7 +259,7 @@ fn rust_exception_class() -> uw::_Unwind_Exception_Class { // This is achieved by overriding the return value in search phase to always // say "catch!". -#[cfg(not(target_os = "android"))] +#[cfg(not(target_arch = "arm"))] pub mod eabi { use uw = super::libunwind; use libc::c_int; @@ -310,7 +316,7 @@ pub extern "C" fn rust_eh_personality_catch( // ARM EHABI uses a slightly different personality routine signature, // but otherwise works the same. -#[cfg(target_os = "android")] +#[cfg(target_arch = "arm")] pub mod eabi { use uw = super::libunwind; use libc::c_int;