sim/m32r: return register sizes after fetch and store

The m32r simulator currently always returns -1 for the register size
after both a fetch and a store.  In the fetch case GDB is forgiving of
this, but in the store case GDB treats a return value of -1 as an
error.

This commit updates the m32r simulator to return a valid register size
when fetching or storing a register.  This fixes any GDB test that
writes to a register, which will include any GDB test that makes an
inferior call, for example gdb.base/break.exp.

sim/m32r/ChangeLog:

	* m32r.c (m32rbf_register_size): New function.
	(m32rbf_fetch_register): Use new function.
	(m32rbf_store_register): Likewise.
This commit is contained in:
Andrew Burgess
2020-09-13 21:48:31 +01:00
parent d3483b43ff
commit e163628395
2 changed files with 24 additions and 2 deletions

View File

@@ -24,6 +24,14 @@
#include "cgen-mem.h"
#include "cgen-ops.h"
/* Return the size of REGNO in bytes. */
static int
m32rbf_register_size (int regno)
{
return 4;
}
/* Decode gdb ctrl register number. */
int
@@ -48,6 +56,10 @@ m32r_decode_gdb_ctrl_regnum (int gdb_regnum)
int
m32rbf_fetch_register (SIM_CPU *current_cpu, int rn, unsigned char *buf, int len)
{
int size = m32rbf_register_size (rn);
if (len != size)
return -1;
if (rn < 16)
SETTWI (buf, m32rbf_h_gr_get (current_cpu, rn));
else
@@ -76,7 +88,7 @@ m32rbf_fetch_register (SIM_CPU *current_cpu, int rn, unsigned char *buf, int len
return 0;
}
return -1; /*FIXME*/
return size;
}
/* The contents of BUF are in target byte order. */
@@ -84,6 +96,10 @@ m32rbf_fetch_register (SIM_CPU *current_cpu, int rn, unsigned char *buf, int len
int
m32rbf_store_register (SIM_CPU *current_cpu, int rn, unsigned char *buf, int len)
{
int size = m32rbf_register_size (rn);
if (len != size)
return -1;
if (rn < 16)
m32rbf_h_gr_set (current_cpu, rn, GETTWI (buf));
else
@@ -121,7 +137,7 @@ m32rbf_store_register (SIM_CPU *current_cpu, int rn, unsigned char *buf, int len
return 0;
}
return -1; /*FIXME*/
return size;
}
USI