Skip to content

Commit 0a956c5

Browse files
committed
fixup! Implement va_arg for Hexagon Linux musl targets
1 parent d8a0f80 commit 0a956c5

File tree

5 files changed

+12
-19
lines changed

5 files changed

+12
-19
lines changed

compiler/rustc_codegen_llvm/src/va_arg.rs

Lines changed: 8 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -893,7 +893,7 @@ fn emit_hexagon_va_arg_bare_metal<'ll, 'tcx>(
893893

894894
// Calculate offset: round up type size to 4-byte boundary (minimum stack slot size)
895895
let type_size = layout.size.bytes();
896-
let offset = ((type_size + 3) / 4) * 4; // align to 4 bytes
896+
let offset = type_size.next_multiple_of(4); // align to 4 bytes
897897

898898
// Update va_list to point to next argument
899899
let next_ptr = bx.inbounds_ptradd(aligned_ptr, bx.const_usize(offset));
@@ -903,19 +903,6 @@ fn emit_hexagon_va_arg_bare_metal<'ll, 'tcx>(
903903
bx.load(layout.llvm_type(bx), aligned_ptr, layout.align.abi)
904904
}
905905

906-
fn emit_hexagon_va_arg<'ll, 'tcx>(
907-
bx: &mut Builder<'_, 'll, 'tcx>,
908-
list: OperandRef<'tcx, &'ll Value>,
909-
target_ty: Ty<'tcx>,
910-
is_musl: bool,
911-
) -> &'ll Value {
912-
if is_musl {
913-
emit_hexagon_va_arg_musl(bx, list, target_ty)
914-
} else {
915-
emit_hexagon_va_arg_bare_metal(bx, list, target_ty)
916-
}
917-
}
918-
919906
fn emit_xtensa_va_arg<'ll, 'tcx>(
920907
bx: &mut Builder<'_, 'll, 'tcx>,
921908
list: OperandRef<'tcx, &'ll Value>,
@@ -1100,7 +1087,13 @@ pub(super) fn emit_va_arg<'ll, 'tcx>(
11001087
// This includes `target.is_like_darwin`, which on x86_64 targets is like sysv64.
11011088
Arch::X86_64 => emit_x86_64_sysv64_va_arg(bx, addr, target_ty),
11021089
Arch::Xtensa => emit_xtensa_va_arg(bx, addr, target_ty),
1103-
Arch::Hexagon => emit_hexagon_va_arg(bx, addr, target_ty, target.env == Env::Musl),
1090+
Arch::Hexagon => {
1091+
if target.env == Env::Musl {
1092+
emit_hexagon_va_arg_musl(bx, addr, target_ty)
1093+
} else {
1094+
emit_hexagon_va_arg_bare_metal(bx, addr, target_ty)
1095+
}
1096+
}
11041097
// For all other architecture/OS combinations fall back to using
11051098
// the LLVM va_arg instruction.
11061099
// https://llvm.org/docs/LangRef.html#va-arg-instruction

src/doc/nomicon

src/tools/cargo

Submodule cargo updated 124 files

0 commit comments

Comments
 (0)