aboutsummaryrefslogtreecommitdiff
path: root/gdb/dcache.c
diff options
context:
space:
mode:
Diffstat (limited to 'gdb/dcache.c')
-rw-r--r--gdb/dcache.c146
1 files changed, 74 insertions, 72 deletions
diff --git a/gdb/dcache.c b/gdb/dcache.c
index a97a940..821eb13 100644
--- a/gdb/dcache.c
+++ b/gdb/dcache.c
@@ -17,7 +17,8 @@
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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
+ Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA. */
#include "defs.h"
#include "dcache.h"
@@ -78,7 +79,7 @@
read the cache line in the first place.
- */
+ */
/* This value regulates the number of cache blocks stored.
@@ -86,82 +87,82 @@
line, and reduce memory requirements, but increase the risk
of a line not being in memory */
-#define DCACHE_SIZE 64
+#define DCACHE_SIZE 64
/* This value regulates the size of a cache line. Smaller values
reduce the time taken to read a single byte, but reduce overall
throughput. */
-#define LINE_SIZE_POWER (5)
+#define LINE_SIZE_POWER (5)
#define LINE_SIZE (1 << LINE_SIZE_POWER)
/* Each cache block holds LINE_SIZE bytes of data
starting at a multiple-of-LINE_SIZE address. */
-#define LINE_SIZE_MASK ((LINE_SIZE - 1))
+#define LINE_SIZE_MASK ((LINE_SIZE - 1))
#define XFORM(x) ((x) & LINE_SIZE_MASK)
#define MASK(x) ((x) & ~LINE_SIZE_MASK)
-#define ENTRY_BAD 0 /* data at this byte is wrong */
-#define ENTRY_DIRTY 1 /* data at this byte needs to be written back */
-#define ENTRY_OK 2 /* data at this byte is same as in memory */
+#define ENTRY_BAD 0 /* data at this byte is wrong */
+#define ENTRY_DIRTY 1 /* data at this byte needs to be written back */
+#define ENTRY_OK 2 /* data at this byte is same as in memory */
struct dcache_block
-{
- struct dcache_block *p; /* next in list */
- CORE_ADDR addr; /* Address for which data is recorded. */
- char data[LINE_SIZE]; /* bytes at given address */
- unsigned char state[LINE_SIZE]; /* what state the data is in */
+ {
+ struct dcache_block *p; /* next in list */
+ CORE_ADDR addr; /* Address for which data is recorded. */
+ char data[LINE_SIZE]; /* bytes at given address */
+ unsigned char state[LINE_SIZE]; /* what state the data is in */
- /* whether anything in state is dirty - used to speed up the
- dirty scan. */
- int anydirty;
+ /* whether anything in state is dirty - used to speed up the
+ dirty scan. */
+ int anydirty;
- int refs;
-};
+ int refs;
+ };
-struct dcache_struct
-{
- /* Function to actually read the target memory. */
- memxferfunc read_memory;
+struct dcache_struct
+ {
+ /* Function to actually read the target memory. */
+ memxferfunc read_memory;
- /* Function to actually write the target memory */
- memxferfunc write_memory;
+ /* Function to actually write the target memory */
+ memxferfunc write_memory;
- /* free list */
- struct dcache_block *free_head;
- struct dcache_block *free_tail;
+ /* free list */
+ struct dcache_block *free_head;
+ struct dcache_block *free_tail;
- /* in use list */
- struct dcache_block *valid_head;
- struct dcache_block *valid_tail;
+ /* in use list */
+ struct dcache_block *valid_head;
+ struct dcache_block *valid_tail;
- /* The cache itself. */
- struct dcache_block *the_cache;
+ /* The cache itself. */
+ struct dcache_block *the_cache;
- /* potentially, if the cache was enabled, and then turned off, and
- then turned on again, the stuff in it could be stale, so this is
- used to mark it */
- int cache_has_stuff;
-} ;
+ /* potentially, if the cache was enabled, and then turned off, and
+ then turned on again, the stuff in it could be stale, so this is
+ used to mark it */
+ int cache_has_stuff;
+ };
-static int dcache_poke_byte PARAMS ((DCACHE *dcache, CORE_ADDR addr,
- char *ptr));
+static int dcache_poke_byte PARAMS ((DCACHE * dcache, CORE_ADDR addr,
+ char *ptr));
-static int dcache_peek_byte PARAMS ((DCACHE *dcache, CORE_ADDR addr,
- char *ptr));
+static int dcache_peek_byte PARAMS ((DCACHE * dcache, CORE_ADDR addr,
+ char *ptr));
-static struct dcache_block *dcache_hit PARAMS ((DCACHE *dcache,
- CORE_ADDR addr));
+static struct dcache_block *dcache_hit PARAMS ((DCACHE * dcache,
+ CORE_ADDR addr));
-static int dcache_write_line PARAMS ((DCACHE *dcache,struct dcache_block *db));
+static int dcache_write_line PARAMS ((DCACHE * dcache, struct dcache_block * db));
-static struct dcache_block *dcache_alloc PARAMS ((DCACHE *dcache));
+static struct dcache_block *dcache_alloc PARAMS ((DCACHE * dcache));
-static int dcache_writeback PARAMS ((DCACHE *dcache));
+static int dcache_writeback PARAMS ((DCACHE * dcache));
static void dcache_info PARAMS ((char *exp, int tty));
@@ -169,7 +170,7 @@ void _initialize_dcache PARAMS ((void));
int remote_dcache = 0;
-DCACHE *last_cache; /* Used by info dcache */
+DCACHE *last_cache; /* Used by info dcache */
/* Free all the data cache blocks, thus discarding all cached data. */
@@ -217,7 +218,7 @@ dcache_hit (dcache, addr)
while (db)
{
- if (MASK(addr) == db->addr)
+ if (MASK (addr) == db->addr)
{
db->refs++;
return db;
@@ -246,21 +247,22 @@ dcache_write_line (dcache, db)
if (db->state[s] == ENTRY_DIRTY)
{
int len = 0;
- for (e = s ; e < LINE_SIZE; e++, len++)
+ for (e = s; e < LINE_SIZE; e++, len++)
if (db->state[e] != ENTRY_DIRTY)
break;
{
/* all bytes from s..s+len-1 need to
be written out */
int done = 0;
- while (done < len) {
- int t = dcache->write_memory (db->addr + s + done,
- db->data + s + done,
- len - done);
- if (t == 0)
- return 0;
- done += t;
- }
+ while (done < len)
+ {
+ int t = dcache->write_memory (db->addr + s + done,
+ db->data + s + done,
+ len - done);
+ if (t == 0)
+ return 0;
+ done += t;
+ }
memset (db->state + s, ENTRY_OK, len);
s = e;
}
@@ -327,7 +329,7 @@ dcache_peek_byte (dcache, addr, ptr)
char *ptr;
{
register struct dcache_block *db = dcache_hit (dcache, addr);
- int ok=1;
+ int ok = 1;
int done = 0;
if (db == 0
|| db->state[XFORM (addr)] == ENTRY_BAD)
@@ -336,23 +338,23 @@ dcache_peek_byte (dcache, addr, ptr)
{
dcache_write_line (dcache, db);
}
- else
- db = dcache_alloc (dcache);
+ else
+ db = dcache_alloc (dcache);
immediate_quit++;
db->addr = MASK (addr);
- while (done < LINE_SIZE)
+ while (done < LINE_SIZE)
{
int try =
- (*dcache->read_memory)
- (db->addr + done,
- db->data + done,
- LINE_SIZE - done);
+ (*dcache->read_memory)
+ (db->addr + done,
+ db->data + done,
+ LINE_SIZE - done);
if (try == 0)
return 0;
done += try;
}
immediate_quit--;
-
+
memset (db->state, ENTRY_OK, sizeof (db->data));
db->anydirty = 0;
}
@@ -388,7 +390,7 @@ dcache_fetch (dcache, addr)
{
int res;
- if (dcache_xfer_memory (dcache, addr, (char *)&res, sizeof res, 0) != sizeof res)
+ if (dcache_xfer_memory (dcache, addr, (char *) &res, sizeof res, 0) != sizeof res)
memory_error (EIO, addr);
return res;
@@ -430,7 +432,7 @@ dcache_poke (dcache, addr, data)
CORE_ADDR addr;
int data;
{
- if (dcache_xfer_memory (dcache, addr, (char *)&data, sizeof data, 1) != sizeof data)
+ if (dcache_xfer_memory (dcache, addr, (char *) &data, sizeof data, 1) != sizeof data)
return 0;
return dcache_writeback (dcache);
@@ -477,9 +479,9 @@ dcache_xfer_memory (dcache, memaddr, myaddr, len, should_write)
{
int i;
- if (remote_dcache)
+ if (remote_dcache)
{
- int (*xfunc) PARAMS ((DCACHE *dcache, CORE_ADDR addr, char *ptr));
+ int (*xfunc) PARAMS ((DCACHE * dcache, CORE_ADDR addr, char *ptr));
xfunc = should_write ? dcache_poke_byte : dcache_peek_byte;
for (i = 0; i < len; i++)
@@ -490,7 +492,7 @@ dcache_xfer_memory (dcache, memaddr, myaddr, len, should_write)
dcache->cache_has_stuff = 1;
dcache_writeback (dcache);
}
- else
+ else
{
memxferfunc xfunc;
xfunc = should_write ? dcache->write_memory : dcache->read_memory;
@@ -503,7 +505,7 @@ dcache_xfer_memory (dcache, memaddr, myaddr, len, should_write)
return len;
}
-static void
+static void
dcache_info (exp, tty)
char *exp;
int tty;