Fix code to check for illegal element numbers when accessing AArch64 vector registers...
authorNick Clifton <nickc@redhat.com>
Fri, 18 Mar 2016 14:44:27 +0000 (14:44 +0000)
committerNick Clifton <nickc@redhat.com>
Fri, 18 Mar 2016 14:46:42 +0000 (14:46 +0000)
* cpustate.c (GET_VEC_ELEMENT): Fix off by one error checking
for an invalid element index.
(SET_VEC_ELEMENT): Likewise.

sim/aarch64/ChangeLog
sim/aarch64/cpustate.c

index f11eaad..e8f8b48 100644 (file)
@@ -4,6 +4,10 @@
        Print hex equivalents of floats and doubles.
        Check element number against array size when accessing vector
        registers.
+       (GET_VEC_ELEMENT): Fix off by one error checking for an invalid
+       element index.
+       (SET_VEC_ELEMENT): Likewise.
+
        * memory.c: Trace memory reads when --trace-memory is enabled.
        Remove float and double load and store functions.
        * memory.h (aarch64_get_mem_float): Delete prototype.
index 86b1b15..19f485e 100644 (file)
@@ -345,7 +345,7 @@ aarch64_set_FP_long_double (sim_cpu *cpu, VReg reg, FRegister a)
 #define GET_VEC_ELEMENT(REG, ELEMENT, FIELD)      \
   do                                              \
     {                                             \
-      if (element > ARRAY_SIZE (cpu->fr[0].FIELD)) \
+      if (element >= ARRAY_SIZE (cpu->fr[0].FIELD)) \
        {                                                               \
          TRACE_REGISTER (cpu, \
                          "Internal SIM error: invalid element number: %d ",\
@@ -421,7 +421,7 @@ aarch64_get_vec_double (sim_cpu *cpu, VReg reg, unsigned element)
 #define SET_VEC_ELEMENT(REG, ELEMENT, VAL, FIELD, PRINTER)     \
   do                                                           \
     {                                                          \
-      if (ELEMENT > ARRAY_SIZE (cpu->fr[0].FIELD))                     \
+      if (ELEMENT >= ARRAY_SIZE (cpu->fr[0].FIELD))                    \
        {                                                               \
          TRACE_REGISTER (cpu, \
                          "Internal SIM error: invalid element number: %d ",\