From e3fd3d777592fa8c7750d3ed76492fe3b0e05355 Mon Sep 17 00:00:00 2001 From: Robert Hauser Date: Sat, 16 Mar 2024 09:04:51 +0000 Subject: [PATCH] arch-arm,sim: fix argument handling for GuestAddr Change-Id: If7bc759ee752333b717b61a6c577cf2d5846f4db --- src/arch/arm/reg_abi.hh | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/src/arch/arm/reg_abi.hh b/src/arch/arm/reg_abi.hh index 6bdc8b36c1..ca349283e2 100644 --- a/src/arch/arm/reg_abi.hh +++ b/src/arch/arm/reg_abi.hh @@ -61,7 +61,7 @@ template struct Argument && - (std::is_integral_v || std::is_same::value) && + std::is_integral_v && ABI::template IsWideV>> { static Arg @@ -74,8 +74,22 @@ struct Argument(&merge); + return (Arg) ABI::mergeRegs(tc, low, high); + } +}; + +template <> +struct Argument +{ + using ABI = ArmISA::RegABI32; + + static GuestAddr + get(ThreadContext *tc, typename ABI::State &state) + { + panic_if(state + 1 >= ABI::ArgumentRegs.size(), + "Ran out of syscall argument registers."); + auto arg = bits(tc->getReg(ABI::ArgumentRegs[state++]), 31, 0); + return *reinterpret_cast(&arg); } };