Ver Fonte

Fix thumbv6m build (feature=c)

1. Avoid undefined references as:
   undefined reference to `__modsi3'
   undefined reference to `__umodsi3'

2. We can't remove assembly implementations that are not in the list
Paolo Teti há 7 anos atrás
pai
commit
280012b1df
3 ficheiros alterados com 8 adições e 8 exclusões
  1. 0 5
      build.rs
  2. 5 2
      src/int/sdiv.rs
  3. 3 1
      src/int/udiv.rs

+ 0 - 5
build.rs

@@ -423,13 +423,8 @@ mod c {
         if llvm_target[0] == "thumbv6m" {
             sources.remove(
                 &[
-                    "aeabi_cdcmp",
-                    "aeabi_cfcmp",
-                    "aeabi_dcmp",
-                    "aeabi_fcmp",
                     "clzdi2",
                     "clzsi2",
-                    "comparesf2",
                     "divmodsi4",
                     "modsi3",
                     "switch16",

+ 5 - 2
src/int/sdiv.rs

@@ -72,7 +72,9 @@ intrinsics! {
         a.div(b)
     }
 
-    #[use_c_shim_if(all(target_arch = "arm", not(target_os = "ios")))]
+    #[use_c_shim_if(all(target_arch = "arm",
+                    not(target_os = "ios")),
+                    not(thumbv6m))]
     pub extern "C" fn __modsi3(a: i32, b: i32) -> i32 {
         a.mod_(b)
     }
@@ -87,7 +89,8 @@ intrinsics! {
         a.mod_(b)
     }
 
-    #[use_c_shim_if(all(target_arch = "arm", not(target_os = "ios")))]
+    #[use_c_shim_if(all(target_arch = "arm",
+                    not(target_os = "ios"), not(thumbv6m)))]
     pub extern "C" fn __divmodsi4(a: i32, b: i32, rem: &mut i32) -> i32 {
         a.divmod(b, rem, |a, b| __divsi3(a, b))
     }

+ 3 - 1
src/int/udiv.rs

@@ -209,7 +209,9 @@ intrinsics! {
         (q << 1) | carry
     }
 
-    #[use_c_shim_if(all(target_arch = "arm", not(target_os = "ios")))]
+    #[use_c_shim_if(all(target_arch = "arm",
+                        not(target_os = "ios"),
+                        not(thumbv6m)))]
     /// Returns `n % d`
     pub extern "C" fn __umodsi3(n: u32, d: u32) -> u32 {
         let q = __udivsi3(n, d);