diff options
author | Steve Chamberlain <sac@cygnus> | 1995-06-21 21:47:06 +0000 |
---|---|---|
committer | Steve Chamberlain <sac@cygnus> | 1995-06-21 21:47:06 +0000 |
commit | 45993f6118fb8065ed70d448f4e741763cb8fe4d (patch) | |
tree | 5d0efb4afc2f3a4edde351181b04a8dd37a1fad4 /gdb/dcache.h | |
parent | 65b175c5e61b058aa7de9660c720371b11b95c45 (diff) | |
download | gdb-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.h | 49 |
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 */ |