diff options
| author | Mathieu Poumeyrol <kali@zoy.org> | 2016-12-03 19:47:27 +0100 | 
|---|---|---|
| committer | Mathieu Poumeyrol <kali@zoy.org> | 2016-12-03 19:47:27 +0100 | 
| commit | a1882ca769ed82fa16a06f113f386fa48366c331 (patch) | |
| tree | 2d0e38c0779f525bb8ef8e6b94a8bcea559f20f7 /src/libstd/sys/unix/args.rs | |
| parent | 24175e8c9f9c4b0f7b45e3320b318438c8d0ad37 (diff) | |
| download | rust-a1882ca769ed82fa16a06f113f386fa48366c331.tar.gz rust-a1882ca769ed82fa16a06f113f386fa48366c331.zip | |
fix objc ABI in std::env::args
Diffstat (limited to 'src/libstd/sys/unix/args.rs')
| -rw-r--r-- | src/libstd/sys/unix/args.rs | 17 | 
1 files changed, 15 insertions, 2 deletions
| diff --git a/src/libstd/sys/unix/args.rs b/src/libstd/sys/unix/args.rs index c04fd863674..0f447ff4ec4 100644 --- a/src/libstd/sys/unix/args.rs +++ b/src/libstd/sys/unix/args.rs @@ -172,10 +172,23 @@ mod imp { 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 @@ mod imp { 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(); | 
