mirror of
https://github.com/bminor/binutils-gdb.git
synced 2025-12-27 01:28:46 +00:00
Associate target_dcache to address_space.
Hi, Nowadays, 'target_dcache' is a global variable in GDB, which is not necessary. It can be a per-address-space variable. In this patch, we associate target_dcache to address_space. gdb/doc: 2013-11-20 Yao Qi <yao@codesourcery.com> * gdb.texinfo (Caching Target Data): Update doc for per-address-space dcache. gdb: 2013-11-20 Yao Qi <yao@codesourcery.com> * progspace.h (struct address_space_data): Declare. * target-dcache.c: Include "progspace.h". (target_dache): Remove. (target_dcache_aspace_key): New. (target_dcache_cleanup): New function. (target_dcache_init_p): Get data through target_dcache_aspace_key. (target_dcache_invalidate): Likewise. (target_dcache_get): Likewise. (target_dcache_get_or_init): Likewise. (_initialize_target_dcache): Initialize target_dcache_aspace_key.
This commit is contained in:
@@ -1,3 +1,18 @@
|
||||
2013-11-20 Yao Qi <yao@codesourcery.com>
|
||||
|
||||
* progspace.h (struct address_space_data): Declare.
|
||||
* target-dcache.c: Include "progspace.h".
|
||||
(target_dache): Remove.
|
||||
(target_dcache_aspace_key): New.
|
||||
(target_dcache_cleanup): New function.
|
||||
(target_dcache_init_p): Get data through
|
||||
target_dcache_aspace_key.
|
||||
(target_dcache_invalidate): Likewise.
|
||||
(target_dcache_get): Likewise.
|
||||
(target_dcache_get_or_init): Likewise.
|
||||
(_initialize_target_dcache): Initialize
|
||||
target_dcache_aspace_key.
|
||||
|
||||
2013-11-20 Yao Qi <yao@codesourcery.com>
|
||||
|
||||
* progspace.c (struct address_space): Update comments.
|
||||
|
||||
@@ -1,3 +1,8 @@
|
||||
2013-11-20 Yao Qi <yao@codesourcery.com>
|
||||
|
||||
* gdb.texinfo (Caching Target Data): Update doc for
|
||||
per-address-space dcache.
|
||||
|
||||
2013-11-20 Yao Qi <yao@codesourcery.com>
|
||||
|
||||
* gdb.texinfo (Data): Rename menu item.
|
||||
|
||||
@@ -10828,6 +10828,8 @@ character.
|
||||
@cindex caching data of targets
|
||||
|
||||
@value{GDBN} caches data exchanged between the debugger and a target.
|
||||
Each cache is associated with the address space of the inferior.
|
||||
@xref{Inferiors and Programs}, about inferior and address space.
|
||||
Such caching generally improves performance in remote debugging
|
||||
(@pxref{Remote Debugging}), because it reduces the overhead of the
|
||||
remote protocol by bundling memory reads and writes into large chunks.
|
||||
@@ -10867,11 +10869,11 @@ Show the current state of data caching for memory accesses.
|
||||
|
||||
@kindex info dcache
|
||||
@item info dcache @r{[}line@r{]}
|
||||
Print the information about the data cache performance. The
|
||||
information displayed includes the dcache width and depth, and for
|
||||
each cache line, its number, address, and how many times it was
|
||||
referenced. This command is useful for debugging the data cache
|
||||
operation.
|
||||
Print the information about the performance of data cache of the
|
||||
current inferior's address space. The information displayed
|
||||
includes the dcache width and depth, and for each cache line, its
|
||||
number, address, and how many times it was referenced. This
|
||||
command is useful for debugging the data cache operation.
|
||||
|
||||
If a line number is specified, the contents of that line will be
|
||||
printed in hex.
|
||||
|
||||
@@ -33,6 +33,7 @@ struct inferior;
|
||||
struct exec;
|
||||
struct address_space;
|
||||
struct program_space_data;
|
||||
struct address_space_data;
|
||||
|
||||
typedef struct so_list *so_list_ptr;
|
||||
DEF_VEC_P (so_list_ptr);
|
||||
|
||||
@@ -18,16 +18,31 @@
|
||||
#include "defs.h"
|
||||
#include "target-dcache.h"
|
||||
#include "gdbcmd.h"
|
||||
#include "progspace.h"
|
||||
|
||||
/* Cache of memory operations, to speed up remote access. */
|
||||
static DCACHE *target_dcache;
|
||||
/* The target dcache is kept per-address-space. This key lets us
|
||||
associate the cache with the address space. */
|
||||
|
||||
static const struct address_space_data *target_dcache_aspace_key;
|
||||
|
||||
/* Clean up dcache, represented by ARG, which is associated with
|
||||
ASPACE. */
|
||||
|
||||
static void
|
||||
target_dcache_cleanup (struct address_space *aspace, void *arg)
|
||||
{
|
||||
dcache_free (arg);
|
||||
}
|
||||
|
||||
/* Target dcache is initialized or not. */
|
||||
|
||||
int
|
||||
target_dcache_init_p (void)
|
||||
{
|
||||
return (target_dcache != NULL);
|
||||
DCACHE *dcache = address_space_data (current_program_space->aspace,
|
||||
target_dcache_aspace_key);
|
||||
|
||||
return (dcache != NULL);
|
||||
}
|
||||
|
||||
/* Invalidate the target dcache. */
|
||||
@@ -35,8 +50,11 @@ target_dcache_init_p (void)
|
||||
void
|
||||
target_dcache_invalidate (void)
|
||||
{
|
||||
if (target_dcache_init_p ())
|
||||
dcache_invalidate (target_dcache);
|
||||
DCACHE *dcache = address_space_data (current_program_space->aspace,
|
||||
target_dcache_aspace_key);
|
||||
|
||||
if (dcache != NULL)
|
||||
dcache_invalidate (dcache);
|
||||
}
|
||||
|
||||
/* Return the target dcache. Return NULL if target dcache is not
|
||||
@@ -45,7 +63,10 @@ target_dcache_invalidate (void)
|
||||
DCACHE *
|
||||
target_dcache_get (void)
|
||||
{
|
||||
return target_dcache;
|
||||
DCACHE *dcache = address_space_data (current_program_space->aspace,
|
||||
target_dcache_aspace_key);
|
||||
|
||||
return dcache;
|
||||
}
|
||||
|
||||
/* Return the target dcache. If it is not initialized yet, initialize
|
||||
@@ -54,10 +75,13 @@ target_dcache_get (void)
|
||||
DCACHE *
|
||||
target_dcache_get_or_init (void)
|
||||
{
|
||||
if (!target_dcache_init_p ())
|
||||
target_dcache = dcache_init ();
|
||||
DCACHE *dcache = address_space_data (current_program_space->aspace,
|
||||
target_dcache_aspace_key);
|
||||
|
||||
return target_dcache;
|
||||
if (dcache == NULL)
|
||||
dcache = dcache_init ();
|
||||
|
||||
return dcache;
|
||||
}
|
||||
|
||||
/* The option sets this. */
|
||||
@@ -113,4 +137,8 @@ By default, caching for stack access is on."),
|
||||
set_stack_cache_enabled_p,
|
||||
show_stack_cache_enabled_p,
|
||||
&setlist, &showlist);
|
||||
|
||||
target_dcache_aspace_key
|
||||
= register_address_space_data_with_cleanup (NULL,
|
||||
target_dcache_cleanup);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user