[PATCH v3 03/12] target/arm: Fix function_return helper load alignment checks

William Kosasih posted 12 patches 4 months, 2 weeks ago
Maintainers: Peter Maydell <peter.maydell@linaro.org>
There is a newer version of this series
[PATCH v3 03/12] target/arm: Fix function_return helper load alignment checks
Posted by William Kosasih 4 months, 2 weeks ago
This patch adds alignment checks in the load operations (when unstacking the
return pc and psr) in the FunctionReturn pseudocode.

Resolves: https://gitlab.com/qemu-project/qemu/-/issues/1154
Signed-off-by: William Kosasih <kosasihwilliam4@gmail.com>
---
 target/arm/tcg/m_helper.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/target/arm/tcg/m_helper.c b/target/arm/tcg/m_helper.c
index f342d93489..28307b5615 100644
--- a/target/arm/tcg/m_helper.c
+++ b/target/arm/tcg/m_helper.c
@@ -1946,7 +1946,7 @@ static bool do_v7m_function_return(ARMCPU *cpu)
          * do them as secure, so work out what MMU index that is.
          */
         mmu_idx = arm_v7m_mmu_idx_for_secstate(env, true);
-        oi = make_memop_idx(MO_LEUL, arm_to_core_mmu_idx(mmu_idx));
+        oi = make_memop_idx(MO_LEUL | MO_ALIGN, arm_to_core_mmu_idx(mmu_idx));
         newpc = cpu_ldl_mmu(env, frameptr, oi, 0);
         newpsr = cpu_ldl_mmu(env, frameptr + 4, oi, 0);
 
-- 
2.48.1
Re: [PATCH v3 03/12] target/arm: Fix function_return helper load alignment checks
Posted by Richard Henderson 4 months, 2 weeks ago
On 7/2/25 05:19, William Kosasih wrote:
> This patch adds alignment checks in the load operations (when unstacking the
> return pc and psr) in the FunctionReturn pseudocode.
> 
> Resolves: https://gitlab.com/qemu-project/qemu/-/issues/1154
> Signed-off-by: William Kosasih <kosasihwilliam4@gmail.com>
> ---
>   target/arm/tcg/m_helper.c | 2 +-
>   1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/target/arm/tcg/m_helper.c b/target/arm/tcg/m_helper.c
> index f342d93489..28307b5615 100644
> --- a/target/arm/tcg/m_helper.c
> +++ b/target/arm/tcg/m_helper.c
> @@ -1946,7 +1946,7 @@ static bool do_v7m_function_return(ARMCPU *cpu)
>            * do them as secure, so work out what MMU index that is.
>            */
>           mmu_idx = arm_v7m_mmu_idx_for_secstate(env, true);
> -        oi = make_memop_idx(MO_LEUL, arm_to_core_mmu_idx(mmu_idx));
> +        oi = make_memop_idx(MO_LEUL | MO_ALIGN, arm_to_core_mmu_idx(mmu_idx));
>           newpc = cpu_ldl_mmu(env, frameptr, oi, 0);
>           newpsr = cpu_ldl_mmu(env, frameptr + 4, oi, 0);
>   

Reviewed-by: Richard Henderson <richard.henderson@linaro.org>

r~