diff options
author | K. Richard Pixley <rich@cygnus> | 1993-08-31 22:13:29 +0000 |
---|---|---|
committer | K. Richard Pixley <rich@cygnus> | 1993-08-31 22:13:29 +0000 |
commit | 755892d6ff13e99b7cb12f349c05345da4befcb4 (patch) | |
tree | 5f8912bde3cf922710793455434f0b95b7f1ed7e /gdb/dcache.h | |
parent | bf9d25378e65e0c5b96cc0f4cbbaa485b98913ba (diff) | |
download | binutils-755892d6ff13e99b7cb12f349c05345da4befcb4.zip binutils-755892d6ff13e99b7cb12f349c05345da4befcb4.tar.gz binutils-755892d6ff13e99b7cb12f349c05345da4befcb4.tar.bz2 |
break dcache code out of remote-bug.c
Diffstat (limited to 'gdb/dcache.h')
-rw-r--r-- | gdb/dcache.h | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/gdb/dcache.h b/gdb/dcache.h new file mode 100644 index 0000000..071ac6e --- /dev/null +++ b/gdb/dcache.h @@ -0,0 +1,67 @@ +/* Declarations for caching. Typically used by remote back ends for + caching remote memory. + + Copyright 1992, 1993 Free Software Foundation, Inc. + +This file is part of GDB. + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ + +#ifndef DCACHE_H +#define DCACHE_H + +#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; + +int dcache_fetch PARAMS((DCACHE *dcache, CORE_ADDR addr)); +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)); + +#endif /* DCACHE_H */ |