]> git.lizzy.rs Git - rust.git/commitdiff
fix objc ABI in std::env::args
authorMathieu Poumeyrol <kali@zoy.org>
Sat, 3 Dec 2016 18:47:27 +0000 (19:47 +0100)
committerMathieu Poumeyrol <kali@zoy.org>
Sat, 3 Dec 2016 18:47:27 +0000 (19:47 +0100)
src/libstd/sys/unix/args.rs

index c04fd863674d4b9128604579308ef685ce170a1d..0f447ff4ec452c96b5df9a356e42882f2755fdf0 100644 (file)
@@ -172,10 +172,23 @@ pub fn args() -> Args {
 
         extern {
             fn sel_registerName(name: *const libc::c_uchar) -> Sel;
-            fn objc_msgSend(obj: NsId, sel: Sel, ...) -> NsId;
             fn objc_getClass(class_name: *const libc::c_uchar) -> NsId;
         }
 
+        #[cfg(target_arch="aarch64")]
+        extern {
+            fn objc_msgSend(obj: NsId, sel: Sel) -> NsId;
+            #[link_name="objc_msgSend"]
+            fn objc_msgSend_ul(obj: NsId, sel: Sel, i: libc::c_ulong) -> NsId;
+        }
+
+        #[cfg(not(target_arch="aarch64"))]
+        extern {
+            fn objc_msgSend(obj: NsId, sel: Sel, ...) -> NsId;
+            #[link_name="objc_msgSend"]
+            fn objc_msgSend_ul(obj: NsId, sel: Sel, ...) -> NsId;
+        }
+
         #[link(name = "Foundation", kind = "framework")]
         #[link(name = "objc")]
         #[cfg(not(cargobuild))]
@@ -199,7 +212,7 @@ pub fn args() -> Args {
 
             let cnt: usize = mem::transmute(objc_msgSend(args, count_sel));
             for i in 0..cnt {
-                let tmp = objc_msgSend(args, object_at_sel, i);
+                let tmp = objc_msgSend_ul(args, object_at_sel, i as libc::c_ulong);
                 let utf_c_str: *const libc::c_char =
                     mem::transmute(objc_msgSend(tmp, utf8_sel));
                 let bytes = CStr::from_ptr(utf_c_str).to_bytes();