This is the mail archive of the gdb-patches@sources.redhat.com mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[patch] Add regcache cooked read/write


Hello,

The attached adds the long awaited cooked register read/write functions.

committed,
Andrew
2002-08-02  Andrew Cagney  <ac131313@redhat.com>

	* regcache.c (regcache_cooked_read): New function.
	(regcache_cooked_write): New function.
	(read_register_gen): Rewrite using regcache_cooked_read.
	(write_register_gen): Rewrite using regcache_cooked_write.

	* regcache.h (regcache_cooked_read, regcache_cooked_write):
	Declare.

Index: gdb/regcache.c
===================================================================
RCS file: /cvs/src/src/gdb/regcache.c,v
retrieving revision 1.44
diff -c -r1.44 regcache.c
*** gdb/regcache.c	2 Aug 2002 14:48:19 -0000	1.44
--- gdb/regcache.c	2 Aug 2002 14:56:58 -0000
***************
*** 719,734 ****
        legacy_read_register_gen (regnum, buf);
        return;
      }
    gdb_assert (regnum >= 0);
!   gdb_assert (regnum < current_regcache->descr->nr_cooked_registers);
!   if (regnum < current_regcache->descr->nr_raw_registers)
!     regcache_raw_read (current_regcache, regnum, buf);
    else
!     gdbarch_pseudo_register_read (current_gdbarch, current_regcache,
! 			          regnum, buf);
  }
  
- 
  /* Write register REGNUM at MYADDR to the target.  MYADDR points at
     REGISTER_RAW_BYTES(REGNUM), which must be in target byte-order.  */
  
--- 719,739 ----
        legacy_read_register_gen (regnum, buf);
        return;
      }
+   regcache_cooked_read (current_regcache, regnum, buf);
+ }
+ 
+ void
+ regcache_cooked_read (struct regcache *regcache, int rawnum, void *buf)
+ {
    gdb_assert (regnum >= 0);
!   gdb_assert (regnum < regcache->descr->nr_cooked_registers);
!   if (regnum < regcache->descr->nr_raw_registers)
!     regcache_raw_read (regcache, regnum, buf);
    else
!     gdbarch_pseudo_register_read (regcache->descr->gdbarch, regcache,
! 				  regnum, buf);
  }
  
  /* Write register REGNUM at MYADDR to the target.  MYADDR points at
     REGISTER_RAW_BYTES(REGNUM), which must be in target byte-order.  */
  
***************
*** 834,845 ****
        legacy_write_register_gen (regnum, buf);
        return;
      }
    gdb_assert (regnum >= 0);
!   gdb_assert (regnum < current_regcache->descr->nr_cooked_registers);
!   if (regnum < current_regcache->descr->nr_raw_registers)
!     regcache_raw_write (current_regcache, regnum, buf);
    else
!     gdbarch_pseudo_register_write (current_gdbarch, current_regcache,
  				   regnum, buf);
  }
  
--- 839,857 ----
        legacy_write_register_gen (regnum, buf);
        return;
      }
+   regcache_cooked_write (current_regcache, regnum, buf);
+ }
+ 
+ void
+ regcache_cooked_write (struct regcache *regcache, int rawnum,
+ 		       const void *buf)
+ {
    gdb_assert (regnum >= 0);
!   gdb_assert (regnum < regcache->descr->nr_cooked_registers);
!   if (regnum < regcache->descr->nr_raw_registers)
!     regcache_raw_write (regcache, regnum, buf);
    else
!     gdbarch_pseudo_register_write (regcache->descr->gdbarch, regcache,
  				   regnum, buf);
  }
  
Index: gdb/regcache.h
===================================================================
RCS file: /cvs/src/src/gdb/regcache.h,v
retrieving revision 1.11
diff -c -r1.11 regcache.h
*** gdb/regcache.h	24 Jul 2002 19:43:43 -0000	1.11
--- gdb/regcache.h	2 Aug 2002 14:56:58 -0000
***************
*** 41,46 ****
--- 41,51 ----
  int regcache_valid_p (struct regcache *regcache, int regnum);
  CORE_ADDR regcache_raw_read_as_address (struct regcache *regcache, int rawnum);
  
+ /* Transfer a cooked register [0..NUM_REGS+NUM_PSEUDO_REGS).  */
+ void regcache_cooked_read (struct regcache *regcache, int rawnum, void *buf);
+ void regcache_cooked_write (struct regcache *regcache, int rawnum,
+ 			    const void *buf);
+ 
  /* Transfer a raw register [0..NUM_REGS) between the regcache and the
     target.  These functions are called by the target in response to a
     target_fetch_registers() or target_store_registers().  */

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]