Ver código fonte

Merge pull request #300 from RalfJung/panic

avoid ptr::write which might panic in debug mode
Alex Crichton 5 anos atrás
pai
commit
1ace961257
1 arquivos alterados com 3 adições e 6 exclusões
  1. 3 6
      src/arm.rs

+ 3 - 6
src/arm.rs

@@ -135,13 +135,12 @@ pub unsafe extern "aapcs" fn __aeabi_memcpy(dest: *mut u8, src: *const u8, n: us
 #[cfg_attr(not(feature = "mangled-names"), no_mangle)]
 #[cfg_attr(thumb, linkage = "weak")]
 pub unsafe extern "aapcs" fn __aeabi_memcpy4(dest: *mut u8, src: *const u8, mut n: usize) {
-    use core::ptr;
-
+    // We are guaranteed 4-alignment, so accessing at u32 is okay.
     let mut dest = dest as *mut u32;
     let mut src = src as *mut u32;
 
     while n >= 4 {
-        ptr::write(dest, ptr::read(src));
+        *dest = *src;
         dest = dest.offset(1);
         src = src.offset(1);
         n -= 4;
@@ -190,15 +189,13 @@ pub unsafe extern "aapcs" fn __aeabi_memset(dest: *mut u8, n: usize, c: i32) {
 #[cfg_attr(not(feature = "mangled-names"), no_mangle)]
 #[cfg_attr(thumb, linkage = "weak")]
 pub unsafe extern "aapcs" fn __aeabi_memset4(dest: *mut u8, mut n: usize, c: i32) {
-    use core::ptr;
-
     let mut dest = dest as *mut u32;
 
     let byte = (c as u32) & 0xff;
     let c = (byte << 24) | (byte << 16) | (byte << 8) | byte;
 
     while n >= 4 {
-        ptr::write(dest, c);
+        *dest = c;
         dest = dest.offset(1);
         n -= 4;
     }