/* Register support routines for the remote server for GDB.
- Copyright (C) 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
+ Copyright (C) 2001, 2002, 2007, 2008, 2009, 2010, 2011
+ Free Software Foundation, Inc.
This file is part of GDB.
#define REGCACHE_H
struct inferior_list_entry;
+struct thread_info;
+
+/* The data for the register cache. Note that we have one per
+ inferior; this is primarily for simplicity, as the performance
+ benefit is minimal. */
+
+struct regcache
+{
+ int registers_valid;
+ int registers_owned;
+ unsigned char *registers;
+};
+
+struct regcache *init_register_cache (struct regcache *regcache,
+ unsigned char *regbuf);
+
+void regcache_cpy (struct regcache *dst, struct regcache *src);
/* Create a new register cache for INFERIOR. */
-void *new_register_cache (void);
+struct regcache *new_register_cache (void);
+
+struct regcache *get_thread_regcache (struct thread_info *thread, int fetch);
/* Release all memory associated with the register cache for INFERIOR. */
-void free_register_cache (void *regcache);
+void free_register_cache (struct regcache *regcache);
/* Invalidate cached registers for one or all threads. */
/* Convert all registers to a string in the currently specified remote
format. */
-void registers_to_string (char *buf);
+void registers_to_string (struct regcache *regcache, char *buf);
/* Convert a string to register values and fill our register cache. */
-void registers_from_string (char *buf);
+void registers_from_string (struct regcache *regcache, char *buf);
+
+CORE_ADDR regcache_read_pc (struct regcache *regcache);
+
+void regcache_write_pc (struct regcache *regcache, CORE_ADDR pc);
/* Return a pointer to the description of register ``n''. */
int register_size (int n);
+int register_cache_size (void);
+
int find_regno (const char *name);
/* The following two variables are set by auto-generated
extern const char **gdbserver_expedite_regs;
extern const char *gdbserver_xmltarget;
-void supply_register (int n, const void *buf);
+void supply_register (struct regcache *regcache, int n, const void *buf);
+
+void supply_register_by_name (struct regcache *regcache,
+ const char *name, const void *buf);
-void supply_register_by_name (const char *name, const void *buf);
+void supply_regblock (struct regcache *regcache, const void *buf);
-void collect_register (int n, void *buf);
+void collect_register (struct regcache *regcache, int n, void *buf);
-void collect_register_as_string (int n, char *buf);
+void collect_register_as_string (struct regcache *regcache, int n, char *buf);
-void collect_register_by_name (const char *name, void *buf);
+void collect_register_by_name (struct regcache *regcache,
+ const char *name, void *buf);
#endif /* REGCACHE_H */