Skip to content

Commit a1882ca

Browse files
committed
fix objc ABI in std::env::args
1 parent 24175e8 commit a1882ca

File tree

1 file changed

+15
-2
lines changed

1 file changed

+15
-2
lines changed

src/libstd/sys/unix/args.rs

+15-2
Original file line numberDiff line numberDiff line change
@@ -172,10 +172,23 @@ mod imp {
172172

173173
extern {
174174
fn sel_registerName(name: *const libc::c_uchar) -> Sel;
175-
fn objc_msgSend(obj: NsId, sel: Sel, ...) -> NsId;
176175
fn objc_getClass(class_name: *const libc::c_uchar) -> NsId;
177176
}
178177

178+
#[cfg(target_arch="aarch64")]
179+
extern {
180+
fn objc_msgSend(obj: NsId, sel: Sel) -> NsId;
181+
#[link_name="objc_msgSend"]
182+
fn objc_msgSend_ul(obj: NsId, sel: Sel, i: libc::c_ulong) -> NsId;
183+
}
184+
185+
#[cfg(not(target_arch="aarch64"))]
186+
extern {
187+
fn objc_msgSend(obj: NsId, sel: Sel, ...) -> NsId;
188+
#[link_name="objc_msgSend"]
189+
fn objc_msgSend_ul(obj: NsId, sel: Sel, ...) -> NsId;
190+
}
191+
179192
#[link(name = "Foundation", kind = "framework")]
180193
#[link(name = "objc")]
181194
#[cfg(not(cargobuild))]
@@ -199,7 +212,7 @@ mod imp {
199212

200213
let cnt: usize = mem::transmute(objc_msgSend(args, count_sel));
201214
for i in 0..cnt {
202-
let tmp = objc_msgSend(args, object_at_sel, i);
215+
let tmp = objc_msgSend_ul(args, object_at_sel, i as libc::c_ulong);
203216
let utf_c_str: *const libc::c_char =
204217
mem::transmute(objc_msgSend(tmp, utf8_sel));
205218
let bytes = CStr::from_ptr(utf_c_str).to_bytes();

0 commit comments

Comments
 (0)