Pass REGISTER_RAW_SIZE to sim_{fetch,store}_register. Verify returned
authorAndrew Cagney <cagney@redhat.com>
Tue, 17 Feb 1998 04:28:00 +0000 (04:28 +0000)
committerAndrew Cagney <cagney@redhat.com>
Tue, 17 Feb 1998 04:28:00 +0000 (04:28 +0000)
register size.

gdb/ChangeLog
gdb/remote-sim.c

index c59ba9d3dee4fc7088c72840ea35a4e1d14cb7f3..80e7ec7b3fdec31aa0c947c06acfa8692197f5e1 100644 (file)
@@ -1,3 +1,9 @@
+Tue Feb 17 14:32:18 1998  Andrew Cagney  <cagney@b1.cygnus.com>
+
+       * remote-sim.c (gdbsim_fetch_register, gdbsim_store_register):
+       Pass register size to sim_{fetch,store}_register.  Check nr of
+       register bytes transfered is correct.
+
 Mon Feb 16 14:05:54 1998  Andrew Cagney  <cagney@b1.cygnus.com>
 
        * remote-d10v.c (remote_d10v_open): Call push_remote_target
index 69c474aa41c4dcd720e7206b44ae0755f75186e5..70f322151888ca4fde67332283a1bcf68f20cbc1 100644 (file)
@@ -337,7 +337,7 @@ gdb_os_error (p, va_alist)
 
 static void
 gdbsim_fetch_register (regno)
-int regno;
+     int regno;
 {
   if (regno == -1) 
     {
@@ -347,8 +347,12 @@ int regno;
   else if (reg_names[regno] != NULL && *reg_names[regno] != '\0')
     {
       char buf[MAX_REGISTER_RAW_SIZE];
-
-      sim_fetch_register (gdbsim_desc, regno, buf);
+      int nr_bytes = sim_fetch_register (gdbsim_desc, regno, buf, REGISTER_RAW_SIZE (regno));
+      if (nr_bytes == 0)
+       /* register not applicable, supply zero's */
+       memset (buf, 0, MAX_REGISTER_RAW_SIZE);
+      else if (nr_bytes > 0 && nr_bytes != REGISTER_RAW_SIZE (regno))
+       fatal ("Register size different to expected");
       supply_register (regno, buf);
       if (sr_get_debug ())
        {
@@ -362,7 +366,7 @@ int regno;
 
 static void
 gdbsim_store_register (regno)
-int regno;
+     int regno;
 {
   if (regno  == -1) 
     {
@@ -371,10 +375,12 @@ int regno;
     }
   else if (reg_names[regno] != NULL && *reg_names[regno] != '\0')
     {
-      /* FIXME: Until read_register() returns LONGEST, we have this.  */
       char tmp[MAX_REGISTER_RAW_SIZE];
+      int nr_bytes;
       read_register_gen (regno, tmp);
-      sim_store_register (gdbsim_desc, regno, tmp);
+      nr_bytes = sim_store_register (gdbsim_desc, regno, tmp, REGISTER_RAW_SIZE (regno));
+      if (nr_bytes > 0 && nr_bytes != REGISTER_RAW_SIZE (regno))
+       fatal ("Register size different to expected");
       if (sr_get_debug ())
        {
          printf_filtered ("gdbsim_store_register: %d", regno);