This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
[RFA] dcache.c cleanup
- From: dje at google dot com (Doug Evans)
- To: gdb-patches at sourceware dot org
- Date: Wed, 17 Sep 2008 14:44:44 -0700 (PDT)
- Subject: [RFA] dcache.c cleanup
IIRC, "set remotecache" isn't being removed to avoid breaking existing
scripts. It's not used for anything, so this patch marks it as deprecated,
and hopefully in a future release we can delete it.
[If folks want I can instead submit a patch that makes it useful again -
e.g. as an escape hatch in case caching isn't working, it would globally
override the mem attribute settings.]
This patch also makes the output of "info dcache" more readable by printing
letters instead of magic numbers to indicate each byte's state.
I wanted to use something more common to cache state than "bad" and "ok"
in the output so I changed ENTRY_BAD/ENTRY_OK to INVALID/VALID.
[If folks want to go with something like Modified/Shared/Invalid, ok.]
Ok to check in?
2008-09-17 Doug Evans <dje@google.com>
* dcache.c (state_chars): New static global.
(ENTRY_INVALID,ENTRY_VALID): Renamed from ENTRY_BAD,ENTRY_OK.
All uses updated.
(dcache_info): Print cache state as mnemonically useful letters instead
of magic numbers.
(_initialize_dcache): Mark "set remotecache" as deprecated.
* doc/gdb.texinfo (info dcache): Update.
Index: dcache.c
===================================================================
RCS file: /cvs/src/src/gdb/dcache.c,v
retrieving revision 1.30
diff -u -p -u -p -r1.30 dcache.c
--- dcache.c 1 Jan 2008 22:53:09 -0000 1.30
+++ dcache.c 17 Sep 2008 21:35:51 -0000
@@ -51,15 +51,15 @@
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.
@@ -113,10 +113,16 @@
#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
{
@@ -175,6 +181,7 @@ static void dcache_info (char *exp, int
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)
@@ -305,7 +312,7 @@ dcache_write_line (DCACHE *dcache, struc
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;
@@ -365,7 +372,7 @@ dcache_read_line (DCACHE *dcache, struct
len -= res;
}
- memset (db->state, ENTRY_OK, sizeof (db->data));
+ memset (db->state, ENTRY_VALID, sizeof (db->data));
db->anydirty = 0;
return 1;
@@ -399,7 +406,7 @@ dcache_alloc (DCACHE *dcache, CORE_ADDR
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)
@@ -447,7 +454,7 @@ dcache_peek_byte (DCACHE *dcache, CORE_A
return 0;
}
- if (db->state[XFORM (addr)] == ENTRY_BAD)
+ if (db->state[XFORM (addr)] == ENTRY_INVALID)
{
if (!dcache_read_line(dcache, db))
return 0;
@@ -569,7 +576,7 @@ dcache_info (char *exp, int tty)
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");
}
}
@@ -578,20 +585,31 @@ dcache_info (char *exp, int tty)
void
_initialize_dcache (void)
{
+ int rc;
+ struct cmd_list_element *cmd = NULL;
+ char *cmd_text = "remotecache";
+
add_setshow_boolean_cmd ("remotecache", class_support,
&dcache_enabled_p, _("\
Set cache use for remote targets."), _("\
Show cache use for remote targets."), _("\
-When on, use data caching for remote targets. For many remote targets\n\
-this option can offer better throughput for reading target memory.\n\
-Unfortunately, gdb does not currently know anything about volatile\n\
-registers and thus data caching will produce incorrect results with\n\
-volatile registers are in use. By default, this option is off."),
+This option is no longer useful and is ignored.\n\
+To control cacheability of memory regions, use the `mem' command."),
NULL,
show_dcache_enabled_p,
&setlist, &showlist);
+ /* Mark the option as deprecated.
+ We don't get the cmd_list_element back from add_setshow_boolean_cmd,
+ so we have to fetch it the hard way. */
+ cmd = lookup_cmd (&cmd_text, setlist, "set", 0, 1);
+ gdb_assert (cmd != NULL);
+ deprecate_cmd (cmd, "mem");
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"));
}
Index: doc/gdb.texinfo
===================================================================
RCS file: /cvs/src/src/gdb/doc/gdb.texinfo,v
retrieving revision 1.521
diff -u -p -u -p -r1.521 gdb.texinfo
--- doc/gdb.texinfo 3 Sep 2008 23:54:19 -0000 1.521
+++ doc/gdb.texinfo 17 Sep 2008 21:35:54 -0000
@@ -7961,7 +7961,7 @@ Show the current state of data caching f
Print the information about the data cache performance. The
information displayed includes: the dcache width and depth; and for
each cache line, how many times it was referenced, and its data and
-state (dirty, bad, ok, etc.). This command is useful for debugging
+state (invalid, dirty, valid). This command is useful for debugging
the data cache operation.
@end table