diff options
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 */ |