]> git.lizzy.rs Git - rust.git/commitdiff
Condition EH ABI on target_arch, not target_os.
authorVadim Chugunov <vadimcn@gmail.com>
Sun, 5 Jan 2014 00:50:57 +0000 (16:50 -0800)
committerVadim Chugunov <vadimcn@gmail.com>
Sun, 5 Jan 2014 01:00:13 +0000 (17:00 -0800)
More precise unwinder private data size specification.

src/libstd/rt/unwind.rs

index 6179ff1e37da5b7de069accdd4b9f1c78a74f409..217782195e6cfe7c9e7e02b9ef59ba99e73a5885 100644 (file)
@@ -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;