Index: gdb/dcache.c |
diff --git a/gdb/dcache.c b/gdb/dcache.c |
index 652cfab9e091e86723e2beef7f797bd4d908641e..804d567d1f8a24d9243c0abe4e515095a242e937 100644 |
--- a/gdb/dcache.c |
+++ b/gdb/dcache.c |
@@ -1,7 +1,6 @@ |
/* Caching code for GDB, the GNU debugger. |
- Copyright (C) 1992-1993, 1995-1996, 1998-2001, 2003, 2007-2012 Free |
- Software Foundation, Inc. |
+ Copyright (C) 1992-2013 Free Software Foundation, Inc. |
This file is part of GDB. |
@@ -21,9 +20,9 @@ |
#include "defs.h" |
#include "dcache.h" |
#include "gdbcmd.h" |
-#include "gdb_string.h" |
+#include <string.h> |
#include "gdbcore.h" |
-#include "target.h" |
+#include "target-dcache.h" |
#include "inferior.h" |
#include "splay-tree.h" |
@@ -140,8 +139,6 @@ show_dcache_enabled_p (struct ui_file *file, int from_tty, |
fprintf_filtered (file, _("Deprecated remotecache flag is %s.\n"), value); |
} |
-static DCACHE *last_cache; /* Used by info dcache. */ |
- |
/* Add BLOCK to circular block list BLIST, behind the block at *BLIST. |
*BLIST is not updated (unless it was previously NULL of course). |
This is for the least-recently-allocated list's sake: |
@@ -226,9 +223,6 @@ free_block (struct dcache_block *block, void *param) |
void |
dcache_free (DCACHE *dcache) |
{ |
- if (last_cache == dcache) |
- last_cache = NULL; |
- |
splay_tree_delete (dcache->tree); |
for_each_block (&dcache->oldest, free_block, NULL); |
for_each_block (&dcache->freelist, free_block, NULL); |
@@ -342,15 +336,14 @@ dcache_read_line (DCACHE *dcache, struct dcache_block *db) |
len -= reg_len; |
continue; |
} |
- |
- res = target_read (¤t_target, TARGET_OBJECT_RAW_MEMORY, |
- NULL, myaddr, memaddr, reg_len); |
- if (res < reg_len) |
+ |
+ res = target_read_raw_memory (memaddr, myaddr, reg_len); |
+ if (res != 0) |
return 0; |
- memaddr += res; |
- myaddr += res; |
- len -= res; |
+ memaddr += reg_len; |
+ myaddr += reg_len; |
+ len -= reg_len; |
} |
return 1; |
@@ -469,7 +462,6 @@ dcache_init (void) |
dcache->size = 0; |
dcache->line_size = dcache_line_size; |
dcache->ptid = null_ptid; |
- last_cache = dcache; |
return dcache; |
} |
@@ -558,26 +550,28 @@ dcache_update (DCACHE *dcache, CORE_ADDR memaddr, gdb_byte *myaddr, int len) |
dcache_poke_byte (dcache, memaddr + i, myaddr + i); |
} |
+/* Print DCACHE line INDEX. */ |
+ |
static void |
-dcache_print_line (int index) |
+dcache_print_line (DCACHE *dcache, int index) |
{ |
splay_tree_node n; |
struct dcache_block *db; |
int i, j; |
- if (!last_cache) |
+ if (dcache == NULL) |
{ |
printf_filtered (_("No data cache available.\n")); |
return; |
} |
- n = splay_tree_min (last_cache->tree); |
+ n = splay_tree_min (dcache->tree); |
for (i = index; i > 0; --i) |
{ |
if (!n) |
break; |
- n = splay_tree_successor (last_cache->tree, n->key); |
+ n = splay_tree_successor (dcache->tree, n->key); |
} |
if (!n) |
@@ -589,21 +583,23 @@ dcache_print_line (int index) |
db = (struct dcache_block *) n->value; |
printf_filtered (_("Line %d: address %s [%d hits]\n"), |
- index, paddress (target_gdbarch, db->addr), db->refs); |
+ index, paddress (target_gdbarch (), db->addr), db->refs); |
- for (j = 0; j < last_cache->line_size; j++) |
+ for (j = 0; j < dcache->line_size; j++) |
{ |
printf_filtered ("%02x ", db->data[j]); |
/* Print a newline every 16 bytes (48 characters). */ |
- if ((j % 16 == 15) && (j != last_cache->line_size - 1)) |
+ if ((j % 16 == 15) && (j != dcache->line_size - 1)) |
printf_filtered ("\n"); |
} |
printf_filtered ("\n"); |
} |
+/* Parse EXP and show the info about DCACHE. */ |
+ |
static void |
-dcache_info (char *exp, int tty) |
+dcache_info_1 (DCACHE *dcache, char *exp) |
{ |
splay_tree_node n; |
int i, refcount; |
@@ -619,27 +615,27 @@ dcache_info (char *exp, int tty) |
return; |
} |
- dcache_print_line (i); |
+ dcache_print_line (dcache, i); |
return; |
} |
printf_filtered (_("Dcache %u lines of %u bytes each.\n"), |
dcache_size, |
- last_cache ? (unsigned) last_cache->line_size |
+ dcache ? (unsigned) dcache->line_size |
: dcache_line_size); |
- if (!last_cache || ptid_equal (last_cache->ptid, null_ptid)) |
+ if (dcache == NULL || ptid_equal (dcache->ptid, null_ptid)) |
{ |
printf_filtered (_("No data cache available.\n")); |
return; |
} |
printf_filtered (_("Contains data for %s\n"), |
- target_pid_to_str (last_cache->ptid)); |
+ target_pid_to_str (dcache->ptid)); |
refcount = 0; |
- n = splay_tree_min (last_cache->tree); |
+ n = splay_tree_min (dcache->tree); |
i = 0; |
while (n) |
@@ -647,17 +643,23 @@ dcache_info (char *exp, int tty) |
struct dcache_block *db = (struct dcache_block *) n->value; |
printf_filtered (_("Line %d: address %s [%d hits]\n"), |
- i, paddress (target_gdbarch, db->addr), db->refs); |
+ i, paddress (target_gdbarch (), db->addr), db->refs); |
i++; |
refcount += db->refs; |
- n = splay_tree_successor (last_cache->tree, n->key); |
+ n = splay_tree_successor (dcache->tree, n->key); |
} |
printf_filtered (_("Cache state: %d active lines, %d hits\n"), i, refcount); |
} |
static void |
+dcache_info (char *exp, int tty) |
+{ |
+ dcache_info_1 (target_dcache_get (), exp); |
+} |
+ |
+static void |
set_dcache_size (char *args, int from_tty, |
struct cmd_list_element *c) |
{ |
@@ -666,8 +668,7 @@ set_dcache_size (char *args, int from_tty, |
dcache_size = DCACHE_DEFAULT_SIZE; |
error (_("Dcache size must be greater than 0.")); |
} |
- if (last_cache) |
- dcache_invalidate (last_cache); |
+ target_dcache_invalidate (); |
} |
static void |
@@ -681,8 +682,7 @@ set_dcache_line_size (char *args, int from_tty, |
dcache_line_size = DCACHE_DEFAULT_LINE_SIZE; |
error (_("Invalid dcache line size: %u (must be power of 2)."), d); |
} |
- if (last_cache) |
- dcache_invalidate (last_cache); |
+ target_dcache_invalidate (); |
} |
static void |
@@ -728,20 +728,20 @@ Use this command to set number of lines in dcache and line-size."), |
Show dcachesettings."), |
&dcache_show_list, "show dcache ", /*allow_unknown*/0, &showlist); |
- add_setshow_uinteger_cmd ("line-size", class_obscure, |
- &dcache_line_size, _("\ |
+ add_setshow_zuinteger_cmd ("line-size", class_obscure, |
+ &dcache_line_size, _("\ |
Set dcache line size in bytes (must be power of 2)."), _("\ |
Show dcache line size."), |
- NULL, |
- set_dcache_line_size, |
- NULL, |
- &dcache_set_list, &dcache_show_list); |
- add_setshow_uinteger_cmd ("size", class_obscure, |
- &dcache_size, _("\ |
+ NULL, |
+ set_dcache_line_size, |
+ NULL, |
+ &dcache_set_list, &dcache_show_list); |
+ add_setshow_zuinteger_cmd ("size", class_obscure, |
+ &dcache_size, _("\ |
Set number of dcache lines."), _("\ |
Show number of dcache lines."), |
- NULL, |
- set_dcache_size, |
- NULL, |
- &dcache_set_list, &dcache_show_list); |
+ NULL, |
+ set_dcache_size, |
+ NULL, |
+ &dcache_set_list, &dcache_show_list); |
} |