Skip to content

Commit 4bef0cc

Browse files
committed
Fix misaligned loads when loading UEFI arg pointers
1 parent 9c3ad80 commit 4bef0cc

File tree

1 file changed

+6
-4
lines changed
  • compiler/rustc_codegen_ssa/src

1 file changed

+6
-4
lines changed

compiler/rustc_codegen_ssa/src/base.rs

+6-4
Original file line numberDiff line numberDiff line change
@@ -510,11 +510,13 @@ fn get_argc_argv<'a, 'tcx, Bx: BuilderMethods<'a, 'tcx>>(
510510
// Params for UEFI
511511
let param_handle = bx.get_param(0);
512512
let param_system_table = bx.get_param(1);
513+
let ptr_size = bx.tcx().data_layout.pointer_size;
514+
let ptr_align = bx.tcx().data_layout.pointer_align.abi;
513515
let arg_argc = bx.const_int(cx.type_isize(), 2);
514-
let arg_argv = bx.alloca(cx.type_array(cx.type_ptr(), 2), Align::ONE);
515-
bx.store(param_handle, arg_argv, Align::ONE);
516-
let arg_argv_el1 = bx.gep(cx.type_ptr(), arg_argv, &[bx.const_int(cx.type_int(), 1)]);
517-
bx.store(param_system_table, arg_argv_el1, Align::ONE);
516+
let arg_argv = bx.alloca(cx.type_array(cx.type_ptr(), 2), ptr_align);
517+
bx.store(param_handle, arg_argv, ptr_align);
518+
let arg_argv_el1 = bx.inbounds_ptradd(arg_argv, bx.const_usize(ptr_size.bytes()));
519+
bx.store(param_system_table, arg_argv_el1, ptr_align);
518520
(arg_argc, arg_argv)
519521
} else if cx.sess().target.main_needs_argc_argv {
520522
// Params from native `main()` used as args for rust start function

0 commit comments

Comments
 (0)