From 45993f6118fb8065ed70d448f4e741763cb8fe4d Mon Sep 17 00:00:00 2001 From: Steve Chamberlain Date: Wed, 21 Jun 1995 21:47:06 +0000 Subject: 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. --- gdb/dcache.h | 49 ++++++++----------------------------------------- 1 file changed, 8 insertions(+), 41 deletions(-) (limited to 'gdb/dcache.h') 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 _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 */ -- cgit v1.1