]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blame - gdb/target-dcache.c
Add REGISTRY for struct address_space.
[thirdparty/binutils-gdb.git] / gdb / target-dcache.c
CommitLineData
68c765e2
YQ
1/* Copyright (C) 1992-2013 Free Software Foundation, Inc.
2
3 This file is part of GDB.
4
5 This program is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation; either version 3 of the License, or
8 (at your option) any later version.
9
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details.
14
15 You should have received a copy of the GNU General Public License
16 along with this program. If not, see <http://www.gnu.org/licenses/>. */
17
18#include "defs.h"
19#include "target-dcache.h"
20#include "gdbcmd.h"
21
22/* Cache of memory operations, to speed up remote access. */
23static DCACHE *target_dcache;
24
25/* Target dcache is initialized or not. */
26
27int
28target_dcache_init_p (void)
29{
30 return (target_dcache != NULL);
31}
32
33/* Invalidate the target dcache. */
34
35void
36target_dcache_invalidate (void)
37{
38 if (target_dcache_init_p ())
39 dcache_invalidate (target_dcache);
40}
41
42/* Return the target dcache. Return NULL if target dcache is not
43 initialized yet. */
44
45DCACHE *
46target_dcache_get (void)
47{
48 return target_dcache;
49}
50
51/* Return the target dcache. If it is not initialized yet, initialize
52 it. */
53
54DCACHE *
55target_dcache_get_or_init (void)
56{
57 if (!target_dcache_init_p ())
58 target_dcache = dcache_init ();
59
60 return target_dcache;
61}
62
63/* The option sets this. */
64static int stack_cache_enabled_p_1 = 1;
65/* And set_stack_cache_enabled_p updates this.
66 The reason for the separation is so that we don't flush the cache for
67 on->on transitions. */
68static int stack_cache_enabled_p = 1;
69
70/* This is called *after* the stack-cache has been set.
71 Flush the cache for off->on and on->off transitions.
72 There's no real need to flush the cache for on->off transitions,
73 except cleanliness. */
74
75static void
76set_stack_cache_enabled_p (char *args, int from_tty,
77 struct cmd_list_element *c)
78{
79 if (stack_cache_enabled_p != stack_cache_enabled_p_1)
80 target_dcache_invalidate ();
81
82 stack_cache_enabled_p = stack_cache_enabled_p_1;
83}
84
85static void
86show_stack_cache_enabled_p (struct ui_file *file, int from_tty,
87 struct cmd_list_element *c, const char *value)
88{
89 fprintf_filtered (file, _("Cache use for stack accesses is %s.\n"), value);
90}
91
92/* Return true if "stack cache" is enabled, otherwise, return false. */
93
94int
95stack_cache_enabled (void)
96{
97 return stack_cache_enabled_p;
98}
99
100/* -Wmissing-prototypes */
101extern initialize_file_ftype _initialize_target_dcache;
102
103void
104_initialize_target_dcache (void)
105{
106 add_setshow_boolean_cmd ("stack-cache", class_support,
107 &stack_cache_enabled_p_1, _("\
108Set cache use for stack access."), _("\
109Show cache use for stack access."), _("\
110When on, use the data cache for all stack access, regardless of any\n\
111configured memory regions. This improves remote performance significantly.\n\
112By default, caching for stack access is on."),
113 set_stack_cache_enabled_p,
114 show_stack_cache_enabled_p,
115 &setlist, &showlist);
116}