diff options
Diffstat (limited to 'gdb/target-dcache.c')
-rw-r--r-- | gdb/target-dcache.c | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/gdb/target-dcache.c b/gdb/target-dcache.c index 6b7986a..7f68ddc 100644 --- a/gdb/target-dcache.c +++ b/gdb/target-dcache.c @@ -124,6 +124,46 @@ stack_cache_enabled_p (void) return stack_cache_enabled; } +/* The option sets this. */ + +static int code_cache_enabled_1 = 1; + +/* And set_code_cache updates this. + The reason for the separation is so that we don't flush the cache for + on->on transitions. */ +static int code_cache_enabled = 1; + +/* This is called *after* the code-cache has been set. + Flush the cache for off->on and on->off transitions. + There's no real need to flush the cache for on->off transitions, + except cleanliness. */ + +static void +set_code_cache (char *args, int from_tty, struct cmd_list_element *c) +{ + if (code_cache_enabled != code_cache_enabled_1) + target_dcache_invalidate (); + + code_cache_enabled = code_cache_enabled_1; +} + +/* Show option "code-cache". */ + +static void +show_code_cache (struct ui_file *file, int from_tty, + struct cmd_list_element *c, const char *value) +{ + fprintf_filtered (file, _("Cache use for code accesses is %s.\n"), value); +} + +/* Return true if "code cache" is enabled, otherwise, return false. */ + +int +code_cache_enabled_p (void) +{ + return code_cache_enabled; +} + /* -Wmissing-prototypes */ extern initialize_file_ftype _initialize_target_dcache; @@ -141,6 +181,18 @@ By default, caching for stack access is on."), show_stack_cache, &setlist, &showlist); + add_setshow_boolean_cmd ("code-cache", class_support, + &code_cache_enabled_1, _("\ +Set cache use for code segment access."), _("\ +Show cache use for code segment access."), _("\ +When on, use the target memory cache for all code segment accesses,\n\ +regardless of any configured memory regions. This improves remote\n\ +performance significantly. By default, caching for code segment\n\ +access is on."), + set_code_cache, + show_code_cache, + &setlist, &showlist); + target_dcache_aspace_key = register_address_space_data_with_cleanup (NULL, target_dcache_cleanup); |