diff options
author | Yao Qi <yao@codesourcery.com> | 2013-10-29 21:34:20 +0800 |
---|---|---|
committer | Yao Qi <yao@codesourcery.com> | 2013-11-20 11:40:43 +0800 |
commit | 2a2f9fe4007a0135ac091878dc7000f91e75e339 (patch) | |
tree | 9ea6cec1fab0a4a2c3ef5f78af7ad693589abf39 /gdb/dcache.c | |
parent | 3e9ecad3e843a588fa610c2419f7d3117014a927 (diff) | |
download | gdb-2a2f9fe4007a0135ac091878dc7000f91e75e339.zip gdb-2a2f9fe4007a0135ac091878dc7000f91e75e339.tar.gz gdb-2a2f9fe4007a0135ac091878dc7000f91e75e339.tar.bz2 |
Remove last_cache
This patch removes global variable 'last_cache', and initialize
'target_dcache' lazily, so that 'target_dcache' can replace
'last_cache'. No functionalities should be changed after this patch.
gdb:
2013-11-20 Yao Qi <yao@codesourcery.com>
* dcache.c (last_cache): Remove.
(dcache_free, dcache_init): Update.
(dcache_update):
(dcache_print_line): Add parameter 'dcache'. Replace
'target_dcache' with 'dcache'.
(dcache_info): Move code to dcache_info_1. Call
'dcache_info_1'.
(dcache_info_1): New function.
(set_dcache_size): Call target_dcache_invalidate.
(set_dcache_line_size): Call target_dcache_invalidate.
* target.c (target_dcache_init_p): New function.
(target_dcache_invalidate): Check target_dcache_init_p first.
(target_dcache_get, target_dcache_get_or_init): New function.
(memory_xfer_partial_1): Adjust.
(initialize_target): Don't initialize 'target_dcache'.
* target.h (struct dcache_struct): Declare.
(target_dcache_get): Declare.
Diffstat (limited to 'gdb/dcache.c')
-rw-r--r-- | gdb/dcache.c | 48 |
1 files changed, 25 insertions, 23 deletions
diff --git a/gdb/dcache.c b/gdb/dcache.c index bacd629..dd66711 100644 --- a/gdb/dcache.c +++ b/gdb/dcache.c @@ -139,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: @@ -225,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); @@ -468,7 +463,6 @@ dcache_init (void) dcache->size = 0; dcache->line_size = dcache_line_size; dcache->ptid = null_ptid; - last_cache = dcache; return dcache; } @@ -557,26 +551,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) @@ -590,19 +586,21 @@ dcache_print_line (int index) printf_filtered (_("Line %d: address %s [%d hits]\n"), 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; @@ -618,27 +616,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) @@ -650,13 +648,19 @@ dcache_info (char *exp, int tty) 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) { @@ -665,8 +669,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 @@ -680,8 +683,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 |