From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 14918 invoked by alias); 17 Sep 2008 21:45:38 -0000 Received: (qmail 14909 invoked by uid 22791); 17 Sep 2008 21:45:37 -0000 X-Spam-Check-By: sourceware.org Received: from smtp-out.google.com (HELO smtp-out.google.com) (216.239.33.17) by sourceware.org (qpsmtpd/0.31) with ESMTP; Wed, 17 Sep 2008 21:45:03 +0000 Received: from spaceape11.eur.corp.google.com (spaceape11.eur.corp.google.com [172.28.16.145]) by smtp-out.google.com with ESMTP id m8HLirYV005086 for ; Wed, 17 Sep 2008 22:44:53 +0100 Received: from localhost (ruffy.corp.google.com [172.18.118.116]) by spaceape11.eur.corp.google.com with ESMTP id m8HLii0p015682 for ; Wed, 17 Sep 2008 14:44:51 -0700 Received: by localhost (Postfix, from userid 67641) id 625B81C777F; Wed, 17 Sep 2008 14:44:44 -0700 (PDT) To: gdb-patches@sourceware.org Subject: [RFA] dcache.c cleanup Message-Id: <20080917214444.625B81C777F@localhost> Date: Wed, 17 Sep 2008 21:45:00 -0000 From: dje@google.com (Doug Evans) X-IsSubscribed: yes Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2008-09/txt/msg00377.txt.bz2 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 * 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