X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=gdb%2Ftarget-dcache.c;h=239522c700e9f81cb7fef4af06f1a818b5f6d4ca;hb=21002a635bf3da33367592e3a3ab3cce24fe5299;hp=76160efa96eef963c98584742ef32aa235d95a80;hpb=6b1141e3f3a7d8303f575caf66347f902f6b07ea;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/target-dcache.c b/gdb/target-dcache.c index 76160efa96..239522c700 100644 --- a/gdb/target-dcache.c +++ b/gdb/target-dcache.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1992-2013 Free Software Foundation, Inc. +/* Copyright (C) 1992-2016 Free Software Foundation, Inc. This file is part of GDB. @@ -31,7 +31,7 @@ static const struct address_space_data *target_dcache_aspace_key; static void target_dcache_cleanup (struct address_space *aspace, void *arg) { - dcache_free (arg); + dcache_free ((DCACHE *) arg); } /* Target dcache is initialized or not. */ @@ -39,8 +39,9 @@ target_dcache_cleanup (struct address_space *aspace, void *arg) int target_dcache_init_p (void) { - DCACHE *dcache = address_space_data (current_program_space->aspace, - target_dcache_aspace_key); + DCACHE *dcache + = (DCACHE *) address_space_data (current_program_space->aspace, + target_dcache_aspace_key); return (dcache != NULL); } @@ -50,8 +51,9 @@ target_dcache_init_p (void) void target_dcache_invalidate (void) { - DCACHE *dcache = address_space_data (current_program_space->aspace, - target_dcache_aspace_key); + DCACHE *dcache + = (DCACHE *) address_space_data (current_program_space->aspace, + target_dcache_aspace_key); if (dcache != NULL) dcache_invalidate (dcache); @@ -63,8 +65,9 @@ target_dcache_invalidate (void) DCACHE * target_dcache_get (void) { - DCACHE *dcache = address_space_data (current_program_space->aspace, - target_dcache_aspace_key); + DCACHE *dcache + = (DCACHE *) address_space_data (current_program_space->aspace, + target_dcache_aspace_key); return dcache; } @@ -75,8 +78,9 @@ target_dcache_get (void) DCACHE * target_dcache_get_or_init (void) { - DCACHE *dcache = address_space_data (current_program_space->aspace, - target_dcache_aspace_key); + DCACHE *dcache + = (DCACHE *) address_space_data (current_program_space->aspace, + target_dcache_aspace_key); if (dcache == NULL) { @@ -89,11 +93,11 @@ target_dcache_get_or_init (void) } /* The option sets this. */ -static int stack_cache_enabled_p_1 = 1; -/* And set_stack_cache_enabled_p updates this. +static int stack_cache_enabled_1 = 1; +/* And set_stack_cache updates this. The reason for the separation is so that we don't flush the cache for on->on transitions. */ -static int stack_cache_enabled_p = 1; +static int stack_cache_enabled = 1; /* This is called *after* the stack-cache has been set. Flush the cache for off->on and on->off transitions. @@ -101,18 +105,17 @@ static int stack_cache_enabled_p = 1; except cleanliness. */ static void -set_stack_cache_enabled_p (char *args, int from_tty, - struct cmd_list_element *c) +set_stack_cache (char *args, int from_tty, struct cmd_list_element *c) { - if (stack_cache_enabled_p != stack_cache_enabled_p_1) + if (stack_cache_enabled != stack_cache_enabled_1) target_dcache_invalidate (); - stack_cache_enabled_p = stack_cache_enabled_p_1; + stack_cache_enabled = stack_cache_enabled_1; } static void -show_stack_cache_enabled_p (struct ui_file *file, int from_tty, - struct cmd_list_element *c, const char *value) +show_stack_cache (struct ui_file *file, int from_tty, + struct cmd_list_element *c, const char *value) { fprintf_filtered (file, _("Cache use for stack accesses is %s.\n"), value); } @@ -120,9 +123,49 @@ show_stack_cache_enabled_p (struct ui_file *file, int from_tty, /* Return true if "stack cache" is enabled, otherwise, return false. */ int -stack_cache_enabled (void) +stack_cache_enabled_p (void) { - return stack_cache_enabled_p; + 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 */ @@ -132,14 +175,26 @@ void _initialize_target_dcache (void) { add_setshow_boolean_cmd ("stack-cache", class_support, - &stack_cache_enabled_p_1, _("\ + &stack_cache_enabled_1, _("\ Set cache use for stack access."), _("\ Show cache use for stack access."), _("\ -When on, use the data cache for all stack access, regardless of any\n\ +When on, use the target memory cache for all stack access, regardless of any\n\ configured memory regions. This improves remote performance significantly.\n\ By default, caching for stack access is on."), - set_stack_cache_enabled_p, - show_stack_cache_enabled_p, + set_stack_cache, + 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