multiple of the LINE_SIZE) and a vector of bytes over the range.
There's another vector which contains the state of the bytes.
- ENTRY_BAD means that the byte is just plain wrong, and has no
+ ENTRY_INVALID means that the byte is just plain wrong, and has no
correspondence with anything else (as it would when the cache is
- turned on, but nothing has been done to it.
+ turned on, but nothing has been done to it).
ENTRY_DIRTY means that the byte has some data in it which should be
written out to the remote target one day, but contains correct
data.
- ENTRY_OK means that the data is the same in the cache as it is in
+ ENTRY_VALID means that the data is the same in the cache as it is in
remote memory.
#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_INVALID 0 /* data at this byte is wrong */
+#define ENTRY_DIRTY 1 /* data at this byte needs to be written back */
+#define ENTRY_VALID 2 /* data at this byte is same as in memory */
+/* For cache state display by "info dcache".
+ The letters I,D,V map to
+ I = ENTRY_INVALID
+ D = ENTRY_DIRTY
+ V = ENTRY_VALID */
+static const char state_chars[3] = { 'I', 'D', 'V' };
struct dcache_block
{
void _initialize_dcache (void);
static int dcache_enabled_p = 0;
+
static void
show_dcache_enabled_p (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
if (res < dirty_len)
return 0;
- memset (&db->state[XFORM(memaddr)], ENTRY_OK, res);
+ memset (&db->state[XFORM(memaddr)], ENTRY_VALID, res);
memaddr += res;
myaddr += res;
len -= res;
len -= res;
}
- memset (db->state, ENTRY_OK, sizeof (db->data));
+ memset (db->state, ENTRY_VALID, sizeof (db->data));
db->anydirty = 0;
return 1;
db->addr = MASK(addr);
db->refs = 0;
db->anydirty = 0;
- memset (db->state, ENTRY_BAD, sizeof (db->data));
+ memset (db->state, ENTRY_INVALID, sizeof (db->data));
/* append this line to end of valid list */
if (!dcache->valid_head)
return 0;
}
- if (db->state[XFORM (addr)] == ENTRY_BAD)
+ if (db->state[XFORM (addr)] == ENTRY_INVALID)
{
if (!dcache_read_line(dcache, db))
return 0;
printf_filtered (("\n"));
for (j = 0; j < LINE_SIZE; j++)
- printf_filtered ("%2x", p->state[j]);
+ printf_filtered (" %c", state_chars[p->state[j]]);
printf_filtered ("\n");
}
}
&setlist, &showlist);
add_info ("dcache", dcache_info,
- _("Print information on the dcache performance."));
-
+ _("\
+Print information on the dcache performance.\n\
+The state of each cached byte is represented by a letter:\n\
+ I = invalid\n\
+ D = dirty\n\
+ V = valid"));
}