diff options
-rw-r--r-- | gdb/ChangeLog | 26 | ||||
-rw-r--r-- | gdb/Makefile.in | 6 | ||||
-rw-r--r-- | gdb/dcache.c | 2 | ||||
-rw-r--r-- | gdb/memattr.c | 1 | ||||
-rw-r--r-- | gdb/target-dcache.c | 116 | ||||
-rw-r--r-- | gdb/target-dcache.h | 33 | ||||
-rw-r--r-- | gdb/target.c | 86 | ||||
-rw-r--r-- | gdb/target.h | 5 | ||||
-rw-r--r-- | gdb/top.c | 1 | ||||
-rw-r--r-- | gdb/tracepoint.c | 1 |
10 files changed, 185 insertions, 92 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 78a871f..1362295 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,31 @@ 2013-11-20 Yao Qi <yao@codesourcery.com> + * Makefile.in (SFILES):Add target-dcache.c. + (HFILES_NO_SRCDIR): Add target-dcache.h. + (COMMON_OBS): Add target-dcache.o. + * dcache.c: Remove inclusion to "target.h". Include + "target-dcache.h". + * memattr.c: Include "target-dcache.h". + * top.c: Likewise. + * tracepoint.c: Likewise. + * target.c: (stack_cache_enabled_p_1): Move to + target-dcache.c. + (stack_cache_enabled_p): Likewise. + (set_stack_cache_enabled_p): Likewise. + (show_stack_cache_enabled_p): Likewise. + (target_dcache, target_dcache_init_p): Likewise. + (target_dcache_invalidate): Likewise. + (target_dcache_get, target_dcache_get_or_init): Likewise. + (memory_xfer_partial_1): Call function stack_cache_enabled. + (initialize_target): Move code to target-dcache.c. + * target.h (target_dcache_invalidate): Move to + target-dcache.h. + (target_dcache_get): Likewise. + * target-dcache.c: New. + * target-dcache.h: New. + +2013-11-20 Yao Qi <yao@codesourcery.com> + * target.c (memory_xfer_partial_1): Update 'target_dcache' if it is initialized. diff --git a/gdb/Makefile.in b/gdb/Makefile.in index 975edbf..0591279 100644 --- a/gdb/Makefile.in +++ b/gdb/Makefile.in @@ -762,7 +762,7 @@ SFILES = ada-exp.y ada-lang.c ada-typeprint.c ada-valprint.c ada-tasks.c \ solib.c solib-target.c source.c \ stabsread.c stack.c probe.c stap-probe.c std-regs.c \ symfile.c symfile-debug.c symfile-mem.c symmisc.c symtab.c \ - target.c target-descriptions.c target-memory.c \ + target.c target-dcache.c target-descriptions.c target-memory.c \ thread.c top.c tracepoint.c \ trad-frame.c \ tramp-frame.c \ @@ -814,7 +814,7 @@ gdb_curses.h bfd-target.h memattr.h inferior.h ax.h dummy-frame.h \ inflow.h fbsd-nat.h ia64-libunwind-tdep.h completer.h inf-ttrace.h \ solib-target.h gdb_vfork.h alpha-tdep.h dwarf2expr.h \ m2-lang.h stack.h charset.h cleanups.h addrmap.h command.h solist.h source.h \ -target.h prologue-value.h cp-abi.h tui/tui-hooks.h tui/tui.h \ +target.h target-dcache.h prologue-value.h cp-abi.h tui/tui-hooks.h tui/tui.h \ tui/tui-file.h tui/tui-command.h tui/tui-disasm.h tui/tui-wingeneral.h \ tui/tui-windata.h tui/tui-data.h tui/tui-win.h tui/tui-stack.h \ tui/tui-winsource.h tui/tui-regs.h tui/tui-io.h tui/tui-layout.h \ @@ -917,7 +917,7 @@ COMMON_OBS = $(DEPFILES) $(CONFIG_OBS) $(YYOBJ) \ event-loop.o event-top.o inf-loop.o completer.o \ gdbarch.o arch-utils.o gdbtypes.o gdb_bfd.o gdb_obstack.o \ osabi.o copying.o \ - memattr.o mem-break.o target.o parse.o language.o \ + memattr.o mem-break.o target.o target-dcache.o parse.o language.o \ build-id.o buildsym.o \ findcmd.o \ std-regs.o \ diff --git a/gdb/dcache.c b/gdb/dcache.c index dd66711..ea2b732 100644 --- a/gdb/dcache.c +++ b/gdb/dcache.c @@ -22,7 +22,7 @@ #include "gdbcmd.h" #include <string.h> #include "gdbcore.h" -#include "target.h" +#include "target-dcache.h" #include "inferior.h" #include "splay-tree.h" diff --git a/gdb/memattr.c b/gdb/memattr.c index 58b800f..c31dbfe 100644 --- a/gdb/memattr.c +++ b/gdb/memattr.c @@ -22,6 +22,7 @@ #include "gdbcmd.h" #include "memattr.h" #include "target.h" +#include "target-dcache.h" #include "value.h" #include "language.h" #include "vec.h" diff --git a/gdb/target-dcache.c b/gdb/target-dcache.c new file mode 100644 index 0000000..bf04679 --- /dev/null +++ b/gdb/target-dcache.c @@ -0,0 +1,116 @@ +/* Copyright (C) 1992-2013 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include "defs.h" +#include "target-dcache.h" +#include "gdbcmd.h" + +/* Cache of memory operations, to speed up remote access. */ +static DCACHE *target_dcache; + +/* Target dcache is initialized or not. */ + +int +target_dcache_init_p (void) +{ + return (target_dcache != NULL); +} + +/* Invalidate the target dcache. */ + +void +target_dcache_invalidate (void) +{ + if (target_dcache_init_p ()) + dcache_invalidate (target_dcache); +} + +/* Return the target dcache. Return NULL if target dcache is not + initialized yet. */ + +DCACHE * +target_dcache_get (void) +{ + return target_dcache; +} + +/* Return the target dcache. If it is not initialized yet, initialize + it. */ + +DCACHE * +target_dcache_get_or_init (void) +{ + if (!target_dcache_init_p ()) + target_dcache = dcache_init (); + + return target_dcache; +} + +/* The option sets this. */ +static int stack_cache_enabled_p_1 = 1; +/* And set_stack_cache_enabled_p 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; + +/* This is called *after* the stack-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_stack_cache_enabled_p (char *args, int from_tty, + struct cmd_list_element *c) +{ + if (stack_cache_enabled_p != stack_cache_enabled_p_1) + target_dcache_invalidate (); + + stack_cache_enabled_p = stack_cache_enabled_p_1; +} + +static void +show_stack_cache_enabled_p (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); +} + +/* Return true if "stack cache" is enabled, otherwise, return false. */ + +int +stack_cache_enabled (void) +{ + return stack_cache_enabled_p; +} + +/* -Wmissing-prototypes */ +extern initialize_file_ftype _initialize_target_dcache; + +void +_initialize_target_dcache (void) +{ + add_setshow_boolean_cmd ("stack-cache", class_support, + &stack_cache_enabled_p_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\ +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, + &setlist, &showlist); +} diff --git a/gdb/target-dcache.h b/gdb/target-dcache.h new file mode 100644 index 0000000..a5e1556 --- /dev/null +++ b/gdb/target-dcache.h @@ -0,0 +1,33 @@ +/* Copyright (C) 1992-2013 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#ifndef TARGET_DCACHE_H +#define TARGET_DCACHE_H + +#include "dcache.h" + +extern void target_dcache_invalidate (void); + +extern DCACHE *target_dcache_get (void); + +extern DCACHE *target_dcache_get_or_init (void); + +extern int target_dcache_init_p (void); + +extern int stack_cache_enabled (void); + +#endif /* TARGET_DCACHE_H */ diff --git a/gdb/target.c b/gdb/target.c index 2c0096e..5001643 100644 --- a/gdb/target.c +++ b/gdb/target.c @@ -23,6 +23,7 @@ #include <errno.h> #include <string.h> #include "target.h" +#include "target-dcache.h" #include "gdbcmd.h" #include "symtab.h" #include "inferior.h" @@ -206,76 +207,6 @@ show_targetdebug (struct ui_file *file, int from_tty, static void setup_target_debug (void); -/* The option sets this. */ -static int stack_cache_enabled_p_1 = 1; -/* And set_stack_cache_enabled_p 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; - -/* This is called *after* the stack-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_stack_cache_enabled_p (char *args, int from_tty, - struct cmd_list_element *c) -{ - if (stack_cache_enabled_p != stack_cache_enabled_p_1) - target_dcache_invalidate (); - - stack_cache_enabled_p = stack_cache_enabled_p_1; -} - -static void -show_stack_cache_enabled_p (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); -} - -/* Cache of memory operations, to speed up remote access. */ -static DCACHE *target_dcache; - -/* Target dcache is initialized or not. */ - -static int -target_dcache_init_p (void) -{ - return (target_dcache != NULL); -} - -/* Invalidate the target dcache. */ - -void -target_dcache_invalidate (void) -{ - if (target_dcache_init_p ()) - dcache_invalidate (target_dcache); -} - -/* Return the target dcache. Return NULL if target dcache is not - initialized yet. */ - -DCACHE * -target_dcache_get (void) -{ - return target_dcache; -} - -/* Return the target dcache. If it is not initialized yet, initialize - it. */ - -static DCACHE * -target_dcache_get_or_init (void) -{ - if (!target_dcache_init_p ()) - target_dcache = dcache_init (); - - return target_dcache; -} - /* The user just typed 'target' without the name of a target. */ static void @@ -1616,7 +1547,7 @@ memory_xfer_partial_1 (struct target_ops *ops, enum target_object object, the collected memory range fails. */ && get_traceframe_number () == -1 && (region->attrib.cache - || (stack_cache_enabled_p && object == TARGET_OBJECT_STACK_MEMORY))) + || (stack_cache_enabled () && object == TARGET_OBJECT_STACK_MEMORY))) { DCACHE *dcache = target_dcache_get_or_init (); @@ -1669,7 +1600,7 @@ memory_xfer_partial_1 (struct target_ops *ops, enum target_object object, && writebuf != NULL && target_dcache_init_p () && !region->attrib.cache - && stack_cache_enabled_p + && stack_cache_enabled () && object != TARGET_OBJECT_STACK_MEMORY) { DCACHE *dcache = target_dcache_get (); @@ -5162,17 +5093,6 @@ Tells gdb whether to control the inferior in asynchronous mode."), &setlist, &showlist); - add_setshow_boolean_cmd ("stack-cache", class_support, - &stack_cache_enabled_p_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\ -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, - &setlist, &showlist); - add_setshow_boolean_cmd ("may-write-registers", class_support, &may_write_registers_1, _("\ Set permission to write into registers."), _("\ diff --git a/gdb/target.h b/gdb/target.h index 87366e6..646907a 100644 --- a/gdb/target.h +++ b/gdb/target.h @@ -1043,11 +1043,6 @@ int target_supports_disable_randomization (void); #define target_can_run_breakpoint_commands() \ (*current_target.to_can_run_breakpoint_commands) () -/* Invalidate all target dcaches. */ -extern void target_dcache_invalidate (void); - -extern struct dcache_struct *target_dcache_get (void); - extern int target_read_string (CORE_ADDR, char **, int, int *); extern int target_read_memory (CORE_ADDR memaddr, gdb_byte *myaddr, @@ -28,6 +28,7 @@ #include "exceptions.h" #include <signal.h> #include "target.h" +#include "target-dcache.h" #include "breakpoint.h" #include "gdbtypes.h" #include "expression.h" diff --git a/gdb/tracepoint.c b/gdb/tracepoint.c index c5bc76d..f30282b 100644 --- a/gdb/tracepoint.c +++ b/gdb/tracepoint.c @@ -26,6 +26,7 @@ #include "gdbcmd.h" #include "value.h" #include "target.h" +#include "target-dcache.h" #include "language.h" #include <string.h> #include "inferior.h" |