target-arm: Avoid buffer overrun on UNPREDICTABLE ldrd/strd
commit3960c336ad96c2183549c8bf32bbff93ecda7ea4
authorPeter Maydell <peter.maydell@linaro.org>
Fri, 29 May 2015 10:29:00 +0000 (29 11:29 +0100)
committerPeter Maydell <peter.maydell@linaro.org>
Fri, 29 May 2015 10:29:00 +0000 (29 11:29 +0100)
tree37e24b078323daea27d996655cd7e5dd3b19ea66
parentd7c2e2db28eb7e8f2ed7467fa2f2c59026b206d1
target-arm: Avoid buffer overrun on UNPREDICTABLE ldrd/strd

A LDRD or STRD where rd is not an even number is UNPREDICTABLE.
We were letting this fall through, which is OK unless rd is 15,
in which case we would attempt to do a load_reg or store_reg
to a nonexistent r16 for the second half of the double-word.
Catch the odd-numbered-rd cases and UNDEF them instead.

To do this we rearrange the structure of the code a little
so we can put the UNDEF catches at the top before we've
allocated TCG temporaries.

Cc: qemu-stable@nongnu.org
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Message-id: 1431348973-21315-1-git-send-email-peter.maydell@linaro.org
target-arm/translate.c