]> git.lizzy.rs Git - rust.git/commitdiff
Fix va_args calling on aarch64 non-macos/ios.
authorHans Kratz <hans@appfour.com>
Tue, 3 Aug 2021 05:11:17 +0000 (05:11 +0000)
committerHans Kratz <hans@appfour.com>
Wed, 4 Aug 2021 21:51:19 +0000 (23:51 +0200)
emit_aapcs_va_arg() emits hardcoded field indexes to access the
aarch64-specific `VaListImpl` struct. Due to the removed padding
those indexes have changed.

compiler/rustc_codegen_llvm/src/va_arg.rs

index c9fb09570c35ad52b4462857adff174b322c4227..4888f7f355fa93eda51249d2ca5fafd0321bbb67 100644 (file)
@@ -110,13 +110,13 @@ fn emit_aapcs_va_arg(
 
     let gr_type = target_ty.is_any_ptr() || target_ty.is_integral();
     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;
-        (gr_offs, 3, nreg * 8)
+        (gr_offs, 1, nreg * 8)
     } 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;
-        (vr_off, 5, nreg * 16)
+        (vr_off, 2, nreg * 16)
     };
 
     // if the offset >= 0 then the value will be on the stack