1
Fork 0

Fix va_args calling on aarch64 non-macos/ios.

emit_aapcs_va_arg() emits hardcoded field indexes to access the
aarch64-specific `VaListImpl` struct. Due to the removed padding
those indexes have changed.
This commit is contained in:
Hans Kratz 2021-08-03 05:11:17 +00:00
parent 4a8202c4a6
commit 7dbc568325

View file

@ -110,13 +110,13 @@ fn emit_aapcs_va_arg(
let gr_type = target_ty.is_any_ptr() || target_ty.is_integral(); let gr_type = target_ty.is_any_ptr() || target_ty.is_integral();
let (reg_off, reg_top_index, slot_size) = if gr_type { let (reg_off, reg_top_index, slot_size) = if gr_type {
let gr_offs = bx.struct_gep(va_list_ty, va_list_addr, 7); let gr_offs = bx.struct_gep(va_list_ty, va_list_addr, 3);
let nreg = (layout.size.bytes() + 7) / 8; let nreg = (layout.size.bytes() + 7) / 8;
(gr_offs, 3, nreg * 8) (gr_offs, 1, nreg * 8)
} else { } else {
let vr_off = bx.struct_gep(va_list_ty, va_list_addr, 9); let vr_off = bx.struct_gep(va_list_ty, va_list_addr, 4);
let nreg = (layout.size.bytes() + 15) / 16; let nreg = (layout.size.bytes() + 15) / 16;
(vr_off, 5, nreg * 16) (vr_off, 2, nreg * 16)
}; };
// if the offset >= 0 then the value will be on the stack // if the offset >= 0 then the value will be on the stack