qemu-arm
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-arm] [PATCH] target-arm: raise exception on misaligned LDREX o


From: Peter Maydell
Subject: Re: [Qemu-arm] [PATCH] target-arm: raise exception on misaligned LDREX operands
Date: Thu, 3 Dec 2015 14:36:29 +0000

On 30 November 2015 at 22:23, Andrew Baumann
<address@hidden> wrote:
> Qemu does not generally perform alignment checks. However, the ARM ARM
> requires implementation of alignment exceptions for a number of cases
> including LDREX, and Windows-on-ARM relies on this.
>
> This change adds a helper function to raise an alignment exception
> (data abort), a framework for implementing alignment checks in
> translated instructions, and adds one such check to the translation of
> LDREX instruction (for all variants except single-byte loads).
>
> Signed-off-by: Andrew Baumann <address@hidden>
> ---
> I realise this will need to wait until after 2.5, but wanted to get
> the review feedback started. If needed, I can resend this later.
>
> arm_regime_using_lpae_format() is a no-op wrapper I added to export
> regime_using_lpae_format (which is a static inline). Would it be
> preferable to simply export the existing function, and rename it? If
> so, is this still the correct name to use for the function?
>
> CONFIG_ALIGNMENT_EXCEPTIONS shows how the check can be conditionally
> enabled, but isn't presently hooked up to any configure mechanism. I
> figured that the overhead of an alignment check in LDREX is not high
> enough to warrant disabling the feature, but if it gets used more
> widely it might be.
>
> The same change is almost certainly applicable to arm64, but I am not
> in a position to test it.

TCG supports "this load/store should do an alignment check"
using the MO_ALIGN TCGMemOp flag (which results in a call to
the CPU's do_unaligned_access hook if the guest address is not
aligned). I think we should use this core-code functionality
rather than rolling our own equivalent (it is more efficient).
There are some examples in a few of the other targets (eg MIPS)
of how to do this, but basically you need to arrange that the
initial loads in gen_load_exclusive get the MO_ALIGN flag
ORed in, and then wire up the do_unaligned_access hook and
make it raise a suitable exception.

thanks
-- PMM



reply via email to

[Prev in Thread] Current Thread [Next in Thread]