From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 27780 invoked by alias); 20 Sep 2013 11:30:54 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Received: (qmail 27181 invoked by uid 89); 20 Sep 2013 11:30:50 -0000 Received: from mga03.intel.com (HELO mga03.intel.com) (143.182.124.21) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Fri, 20 Sep 2013 11:30:50 +0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-4.1 required=5.0 tests=AWL,BAYES_00,KHOP_THREADED,RDNS_NONE autolearn=no version=3.3.2 X-HELO: mga03.intel.com Received: from azsmga001.ch.intel.com ([10.2.17.19]) by azsmga101.ch.intel.com with ESMTP; 20 Sep 2013 04:30:44 -0700 X-ExtLoop1: 1 Received: from irvmail001.ir.intel.com ([163.33.26.43]) by azsmga001.ch.intel.com with ESMTP; 20 Sep 2013 04:30:43 -0700 Received: from ulslx001.iul.intel.com (ulslx001.iul.intel.com [172.28.207.63]) by irvmail001.ir.intel.com (8.14.3/8.13.6/MailSET/Hub) with ESMTP id r8KBUgCX019068; Fri, 20 Sep 2013 12:30:42 +0100 Received: from ulslx001.iul.intel.com (localhost [127.0.0.1]) by ulslx001.iul.intel.com with ESMTP id r8KBUgMH032143; Fri, 20 Sep 2013 13:30:42 +0200 Received: (from mmetzger@localhost) by ulslx001.iul.intel.com with id r8KBUgD2032139; Fri, 20 Sep 2013 13:30:42 +0200 From: Markus Metzger To: jan.kratochvil@redhat.com Cc: gdb-patches@sourceware.org Subject: [patch v6 10/21] target: add ops parameter to to_prepare_to_store method Date: Fri, 20 Sep 2013 11:30:00 -0000 Message-Id: <1379676639-31802-11-git-send-email-markus.t.metzger@intel.com> In-Reply-To: <1379676639-31802-1-git-send-email-markus.t.metzger@intel.com> References: <1379676639-31802-1-git-send-email-markus.t.metzger@intel.com> X-IsSubscribed: yes X-SW-Source: 2013-09/txt/msg00741.txt.bz2 To allow forwarding the prepare_to_store request to the target beneath, add a target_ops * parameter. 2013-09-20 Markus Metzger * target.h (target_ops) : Add parameter. (target_prepare_to_store): Remove macro. New function. * target.c (update_current_target): Do not inherit/default prepare_to_store. (target_prepare_to_store): New. (debug_to_prepare_to_store): Remove. * remote.c (remote_prepare_to_store): Add parameter. * remote-mips.c (mips_prepare_to_store): Add parameter. * remote-m32r-sdi.c (m32r_prepare_to_store): Add parameter. * ravenscar-thread.c (ravenscar_prepare_to_store): Add parameter. * monitor.c (monitor_prepare_to_store): Add parameter. * inf-child.c (inf_child_prepare_to_store): Add parameter. --- gdb/inf-child.c | 2 +- gdb/monitor.c | 2 +- gdb/ravenscar-thread.c | 7 ++++--- gdb/record-full.c | 3 ++- gdb/remote-m32r-sdi.c | 2 +- gdb/remote-mips.c | 5 +++-- gdb/remote.c | 5 +++-- gdb/target.c | 36 +++++++++++++++++++++--------------- gdb/target.h | 5 ++--- 9 files changed, 38 insertions(+), 29 deletions(-) diff --git a/gdb/inf-child.c b/gdb/inf-child.c index 1878272..e32e684 100644 --- a/gdb/inf-child.c +++ b/gdb/inf-child.c @@ -100,7 +100,7 @@ inf_child_post_attach (int pid) program being debugged. */ static void -inf_child_prepare_to_store (struct regcache *regcache) +inf_child_prepare_to_store (struct target_ops *ops, struct regcache *regcache) { } diff --git a/gdb/monitor.c b/gdb/monitor.c index d0c9866..cbe4534 100644 --- a/gdb/monitor.c +++ b/gdb/monitor.c @@ -1427,7 +1427,7 @@ monitor_store_registers (struct target_ops *ops, debugged. */ static void -monitor_prepare_to_store (struct regcache *regcache) +monitor_prepare_to_store (struct target_ops *ops, struct regcache *regcache) { /* Do nothing, since we can store individual regs. */ } diff --git a/gdb/ravenscar-thread.c b/gdb/ravenscar-thread.c index 26b8171..18f7796 100644 --- a/gdb/ravenscar-thread.c +++ b/gdb/ravenscar-thread.c @@ -62,7 +62,8 @@ static void ravenscar_fetch_registers (struct target_ops *ops, struct regcache *regcache, int regnum); static void ravenscar_store_registers (struct target_ops *ops, struct regcache *regcache, int regnum); -static void ravenscar_prepare_to_store (struct regcache *regcache); +static void ravenscar_prepare_to_store (struct target_ops *ops, + struct regcache *regcache); static void ravenscar_resume (struct target_ops *ops, ptid_t ptid, int step, enum gdb_signal siggnal); static void ravenscar_mourn_inferior (struct target_ops *ops); @@ -303,14 +304,14 @@ ravenscar_store_registers (struct target_ops *ops, } static void -ravenscar_prepare_to_store (struct regcache *regcache) +ravenscar_prepare_to_store (struct target_ops *ops, struct regcache *regcache) { struct target_ops *beneath = find_target_beneath (&ravenscar_ops); if (!ravenscar_runtime_initialized () || ptid_equal (inferior_ptid, base_magic_null_ptid) || ptid_equal (inferior_ptid, ravenscar_running_thread ())) - beneath->to_prepare_to_store (regcache); + beneath->to_prepare_to_store (beneath, regcache); else { struct gdbarch *gdbarch = get_regcache_arch (regcache); diff --git a/gdb/record-full.c b/gdb/record-full.c index f9af408..19ab774 100644 --- a/gdb/record-full.c +++ b/gdb/record-full.c @@ -2148,7 +2148,8 @@ record_full_core_fetch_registers (struct target_ops *ops, /* "to_prepare_to_store" method for prec over corefile. */ static void -record_full_core_prepare_to_store (struct regcache *regcache) +record_full_core_prepare_to_store (struct target_ops *ops, + struct regcache *regcache) { } diff --git a/gdb/remote-m32r-sdi.c b/gdb/remote-m32r-sdi.c index 81fea53..9e4d238 100644 --- a/gdb/remote-m32r-sdi.c +++ b/gdb/remote-m32r-sdi.c @@ -1013,7 +1013,7 @@ m32r_store_register (struct target_ops *ops, debugged. */ static void -m32r_prepare_to_store (struct regcache *regcache) +m32r_prepare_to_store (struct target_ops *target, struct regcache *regcache) { /* Do nothing, since we can store individual regs. */ if (remote_debug) diff --git a/gdb/remote-mips.c b/gdb/remote-mips.c index bf6cce5..6880490 100644 --- a/gdb/remote-mips.c +++ b/gdb/remote-mips.c @@ -92,7 +92,8 @@ static int mips_map_regno (struct gdbarch *, int); static void mips_set_register (int regno, ULONGEST value); -static void mips_prepare_to_store (struct regcache *regcache); +static void mips_prepare_to_store (struct target_ops *ops, + struct regcache *regcache); static int mips_fetch_word (CORE_ADDR addr, unsigned int *valp); @@ -2066,7 +2067,7 @@ mips_fetch_registers (struct target_ops *ops, registers, so this function doesn't have to do anything. */ static void -mips_prepare_to_store (struct regcache *regcache) +mips_prepare_to_store (struct target_ops *ops, struct regcache *regcache) { } diff --git a/gdb/remote.c b/gdb/remote.c index 2e116d9..33ca9f3 100644 --- a/gdb/remote.c +++ b/gdb/remote.c @@ -98,7 +98,8 @@ static void async_handle_remote_sigint_twice (int); static void remote_files_info (struct target_ops *ignore); -static void remote_prepare_to_store (struct regcache *regcache); +static void remote_prepare_to_store (struct target_ops *ops, + struct regcache *regcache); static void remote_open (char *name, int from_tty); @@ -6369,7 +6370,7 @@ remote_fetch_registers (struct target_ops *ops, first. */ static void -remote_prepare_to_store (struct regcache *regcache) +remote_prepare_to_store (struct target_ops *ops, struct regcache *regcache) { struct remote_arch_state *rsa = get_remote_arch_state (); int i; diff --git a/gdb/target.c b/gdb/target.c index d55712d..24511b3 100644 --- a/gdb/target.c +++ b/gdb/target.c @@ -90,8 +90,6 @@ static struct target_ops debug_target; static void debug_to_open (char *, int); -static void debug_to_prepare_to_store (struct regcache *); - static void debug_to_files_info (struct target_ops *); static int debug_to_insert_breakpoint (struct gdbarch *, @@ -626,7 +624,7 @@ update_current_target (void) /* Do not inherit to_wait. */ /* Do not inherit to_fetch_registers. */ /* Do not inherit to_store_registers. */ - INHERIT (to_prepare_to_store, t); + /* Do not inherit to_prepare_to_store. */ INHERIT (deprecated_xfer_memory, t); INHERIT (to_files_info, t); INHERIT (to_insert_breakpoint, t); @@ -760,9 +758,6 @@ update_current_target (void) de_fault (to_post_attach, (void (*) (int)) target_ignore); - de_fault (to_prepare_to_store, - (void (*) (struct regcache *)) - noprocess); de_fault (deprecated_xfer_memory, (int (*) (CORE_ADDR, gdb_byte *, int, int, struct mem_attrib *, struct target_ops *)) @@ -3995,6 +3990,26 @@ target_store_registers (struct regcache *regcache, int regno) noprocess (); } +/* See target.h. */ + +void +target_prepare_to_store (struct regcache *regcache) +{ + struct target_ops *t; + + for (t = current_target.beneath; t != NULL; t = t->beneath) + { + if (t->to_prepare_to_store != NULL) + { + t->to_prepare_to_store (t, regcache); + if (targetdebug) + fprintf_unfiltered (gdb_stdlog, "target_prepare_to_store ()\n"); + + return; + } + } +} + int target_core_of_thread (ptid_t ptid) { @@ -4447,14 +4462,6 @@ target_call_history_range (ULONGEST begin, ULONGEST end, int flags) tcomplain (); } -static void -debug_to_prepare_to_store (struct regcache *regcache) -{ - debug_target.to_prepare_to_store (regcache); - - fprintf_unfiltered (gdb_stdlog, "target_prepare_to_store ()\n"); -} - static int deprecated_debug_xfer_memory (CORE_ADDR memaddr, bfd_byte *myaddr, int len, int write, struct mem_attrib *attrib, @@ -4906,7 +4913,6 @@ setup_target_debug (void) current_target.to_open = debug_to_open; current_target.to_post_attach = debug_to_post_attach; - current_target.to_prepare_to_store = debug_to_prepare_to_store; current_target.deprecated_xfer_memory = deprecated_debug_xfer_memory; current_target.to_files_info = debug_to_files_info; current_target.to_insert_breakpoint = debug_to_insert_breakpoint; diff --git a/gdb/target.h b/gdb/target.h index 905c387..909ddf6 100644 --- a/gdb/target.h +++ b/gdb/target.h @@ -365,7 +365,7 @@ struct target_ops ptid_t, struct target_waitstatus *, int); void (*to_fetch_registers) (struct target_ops *, struct regcache *, int); void (*to_store_registers) (struct target_ops *, struct regcache *, int); - void (*to_prepare_to_store) (struct regcache *); + void (*to_prepare_to_store) (struct target_ops *, struct regcache *); /* Transfer LEN bytes of memory between GDB address MYADDR and target address MEMADDR. If WRITE, transfer them to the target, else @@ -996,8 +996,7 @@ extern void target_store_registers (struct regcache *regcache, int regs); that REGISTERS contains all the registers from the program being debugged. */ -#define target_prepare_to_store(regcache) \ - (*current_target.to_prepare_to_store) (regcache) +extern void target_prepare_to_store (struct regcache *); /* Determine current address space of thread PTID. */ -- 1.7.1