Fix code to check for illegal element numbers when accessing AArch64 vector registers in AArch64 sim.

* cpustate.c (GET_VEC_ELEMENT): Fix off by one error checking
	for an invalid element index.
	(SET_VEC_ELEMENT): Likewise.
This commit is contained in:
Nick Clifton 2016-03-18 14:44:27 +00:00
parent 941319d151
commit 4c0ca98e58
2 changed files with 6 additions and 2 deletions

View File

@ -4,6 +4,10 @@
Print hex equivalents of floats and doubles. Print hex equivalents of floats and doubles.
Check element number against array size when accessing vector Check element number against array size when accessing vector
registers. 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. * memory.c: Trace memory reads when --trace-memory is enabled.
Remove float and double load and store functions. Remove float and double load and store functions.
* memory.h (aarch64_get_mem_float): Delete prototype. * memory.h (aarch64_get_mem_float): Delete prototype.

View File

@ -345,7 +345,7 @@ aarch64_set_FP_long_double (sim_cpu *cpu, VReg reg, FRegister a)
#define GET_VEC_ELEMENT(REG, ELEMENT, FIELD) \ #define GET_VEC_ELEMENT(REG, ELEMENT, FIELD) \
do \ do \
{ \ { \
if (element > ARRAY_SIZE (cpu->fr[0].FIELD)) \ if (element >= ARRAY_SIZE (cpu->fr[0].FIELD)) \
{ \ { \
TRACE_REGISTER (cpu, \ TRACE_REGISTER (cpu, \
"Internal SIM error: invalid element number: %d ",\ "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) \ #define SET_VEC_ELEMENT(REG, ELEMENT, VAL, FIELD, PRINTER) \
do \ do \
{ \ { \
if (ELEMENT > ARRAY_SIZE (cpu->fr[0].FIELD)) \ if (ELEMENT >= ARRAY_SIZE (cpu->fr[0].FIELD)) \
{ \ { \
TRACE_REGISTER (cpu, \ TRACE_REGISTER (cpu, \
"Internal SIM error: invalid element number: %d ",\ "Internal SIM error: invalid element number: %d ",\