diff options
| author | Vadim Chugunov <vadimcn@gmail.com> | 2014-01-04 16:50:57 -0800 |
|---|---|---|
| committer | Vadim Chugunov <vadimcn@gmail.com> | 2014-01-04 17:00:13 -0800 |
| commit | b01b9c9f157371fb34e51800c874dae980dfae22 (patch) | |
| tree | 78f4aa7c301aa6dcae9e10167149f0abd5f1f9d7 /src/libstd/rt | |
| parent | 19cff913f369343182b83f9d05c6c7418890fd40 (diff) | |
| download | rust-b01b9c9f157371fb34e51800c874dae980dfae22.tar.gz rust-b01b9c9f157371fb34e51800c874dae980dfae22.zip | |
Condition EH ABI on target_arch, not target_os.
More precise unwinder private data size specification.
Diffstat (limited to 'src/libstd/rt')
| -rw-r--r-- | src/libstd/rt/unwind.rs | 18 |
1 files changed, 12 insertions, 6 deletions
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 @@ mod libunwind { _UA_END_OF_STACK = 16, } - #[cfg(target_os = "android")] + #[cfg(target_arch = "arm")] #[repr(C)] pub enum _Unwind_State { @@ -118,10 +118,16 @@ mod libunwind { 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 @@ impl Unwinder { 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 mod eabi { // 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; |
