aboutsummaryrefslogtreecommitdiff
path: root/gdb/dcache.h
diff options
context:
space:
mode:
authorSteve Chamberlain <sac@cygnus>1995-06-21 21:47:06 +0000
committerSteve Chamberlain <sac@cygnus>1995-06-21 21:47:06 +0000
commit45993f6118fb8065ed70d448f4e741763cb8fe4d (patch)
tree5d0efb4afc2f3a4edde351181b04a8dd37a1fad4 /gdb/dcache.h
parent65b175c5e61b058aa7de9660c720371b11b95c45 (diff)
downloadgdb-45993f6118fb8065ed70d448f4e741763cb8fe4d.zip
gdb-45993f6118fb8065ed70d448f4e741763cb8fe4d.tar.gz
gdb-45993f6118fb8065ed70d448f4e741763cb8fe4d.tar.bz2
Hmm.. The ChangeLog went in, but not the code....
* monitor.c: Turn on caching. (monitor_printf): If a ^C was sent, don't expect to see its echo. (monitor_open): Enable caching. (monitor_resume, monitor_load): Flush cache. (monitor_xfer_memory): Call cache routine. (monitor_dump_regs): New. (monitor_fetch_registers): If monitor_dump_regs available then use it. (monitor_load): Don't ref exec_bfd if it's NULL. (monitor_load_srec): Use new monitor_make_srec calling convention. (monitor_make_srec): Rewrite to cope with two, three and four byte addresses. * remote-hms.c (hms_cmds): Initialze end-of-command delim. * dcache.h, dcache.h: Rewritten. * remote.c: Reenable caching. (getpkt): Reduce MAX_TRIES to 3. (remote_xfer_memory): Use dcache_xfer_memory. * defs.h (error_hook): New. * top.c (error_hook): New definition. * utils.c (error): Use error_hook if initialized. * sparcl-tdep.c (HAVE_SOCKETS): Don't define if GO32 or WIN32. Use HAVE_SOCKETS in place of #ifndef GO32.
Diffstat (limited to 'gdb/dcache.h')
-rw-r--r--gdb/dcache.h49
1 files changed, 8 insertions, 41 deletions
diff --git a/gdb/dcache.h b/gdb/dcache.h
index bfc0dd7..2d0c321 100644
--- a/gdb/dcache.h
+++ b/gdb/dcache.h
@@ -22,50 +22,11 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
#ifndef DCACHE_H
#define DCACHE_H
-/* The data cache leads to incorrect results because it doesn't know about
- volatile variables, thus making it impossible to debug functions which
- use hardware registers. Therefore it is #if 0'd out. Effect on
- performance is some, for backtraces of functions with a few
- arguments each. For functions with many arguments, the stack
- frames don't fit in the cache blocks, which makes the cache less
- helpful. Disabling the cache is a big performance win for fetching
- large structures, because the cache code fetched data in 16-byte
- chunks. */
-
-#define LINE_SIZE_POWER (4)
-/* eg 1<<3 == 8 */
-#define LINE_SIZE (1 << LINE_SIZE_POWER)
-/* Number of cache blocks */
-#define DCACHE_SIZE (64)
-
-struct dcache_block
-{
- struct dcache_block *next, *last;
- unsigned int addr; /* Address for which data is recorded. */
- int data[LINE_SIZE / sizeof (int)];
-};
-
typedef int (*memxferfunc) PARAMS((CORE_ADDR memaddr,
unsigned char *myaddr,
int len));
-typedef struct {
- /* Function to actually read the target memory. */
- memxferfunc read_memory;
-
- /* Function to actually write the target memory */
- memxferfunc write_memory;
-
- /* free list */
- struct dcache_block dcache_free;
-
- /* in use list */
- struct dcache_block dcache_valid;
-
- /* The cache itself. */
- struct dcache_block *the_cache;
-
-} DCACHE;
+typedef struct dcache_struct DCACHE;
/* Using the data cache DCACHE return the contents of the word at
address ADDR in the remote machine. */
@@ -78,6 +39,12 @@ void dcache_flush PARAMS((DCACHE *dcache));
DCACHE *dcache_init PARAMS((memxferfunc reading, memxferfunc writing));
/* Write the word at ADDR both in the data cache and in the remote machine. */
-void dcache_poke PARAMS((DCACHE *dcache, CORE_ADDR addr, int data));
+int dcache_poke PARAMS((DCACHE *dcache, CORE_ADDR addr, int data));
+
+/* Simple to call from <remote>_xfer_memory */
+
+int dcache_xfer_memory PARAMS((DCACHE *cache, CORE_ADDR mem, char *my, int len, int should_write));
+/* Write the bytes at ADDR into the data cache and the remote machine. */
+int dcache_poke_block PARAMS((DCACHE *cache, CORE_ADDR mem, char* my, int len));
#endif /* DCACHE_H */