From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 19522 invoked by alias); 19 Dec 2013 16:45:17 -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 19468 invoked by uid 89); 19 Dec 2013 16:45:17 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-3.4 required=5.0 tests=AWL,BAYES_00,RP_MATCHES_RCVD autolearn=ham version=3.3.2 X-HELO: mga02.intel.com Received: from mga02.intel.com (HELO mga02.intel.com) (134.134.136.20) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Thu, 19 Dec 2013 16:45:15 +0000 Received: from orsmga001.jf.intel.com ([10.7.209.18]) by orsmga101.jf.intel.com with ESMTP; 19 Dec 2013 08:45:09 -0800 X-ExtLoop1: 1 Received: from irvmail001.ir.intel.com ([163.33.26.43]) by orsmga001.jf.intel.com with ESMTP; 19 Dec 2013 08:45:02 -0800 Received: from ulvlx001.iul.intel.com (ulvlx001.iul.intel.com [172.28.207.17]) by irvmail001.ir.intel.com (8.14.3/8.13.6/MailSET/Hub) with ESMTP id rBJGj18L026047; Thu, 19 Dec 2013 16:45:01 GMT Received: from ulvlx001.iul.intel.com (localhost [127.0.0.1]) by ulvlx001.iul.intel.com with ESMTP id rBJGj1mJ029816; Thu, 19 Dec 2013 17:45:01 +0100 Received: (from mmetzger@localhost) by ulvlx001.iul.intel.com with œ id rBJGj1ps029812; Thu, 19 Dec 2013 17:45:01 +0100 From: Markus Metzger To: jan.kratochvil@redhat.com, palves@redhat.com Cc: gdb-patches@sourceware.org Subject: [PATCH v9 14/29] target: add ops parameter to to_prepare_to_store method Date: Thu, 19 Dec 2013 16:45:00 -0000 Message-Id: <1387471499-29444-15-git-send-email-markus.t.metzger@intel.com> In-Reply-To: <1387471499-29444-1-git-send-email-markus.t.metzger@intel.com> References: <1387471499-29444-1-git-send-email-markus.t.metzger@intel.com> X-IsSubscribed: yes X-SW-Source: 2013-12/txt/msg00753.txt.bz2 To allow forwarding the prepare_to_store request to the target beneath, add a target_ops * parameter. 2013-12-19 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 3db09c9..123ff14 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 2d94d42..5d2c3f3 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 9ef265d..53e0446 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 dfb033b..1710a51 100644 --- a/gdb/record-full.c +++ b/gdb/record-full.c @@ -2135,7 +2135,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 e81b2de..f560388 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 e4e5083..5b3254d 100644 --- a/gdb/remote-mips.c +++ b/gdb/remote-mips.c @@ -90,7 +90,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); @@ -2064,7 +2065,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 8472e2a..5fe1c53 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); @@ -6413,7 +6414,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 04dc063..eb2d2d0 100644 --- a/gdb/target.c +++ b/gdb/target.c @@ -83,8 +83,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 *, @@ -579,7 +577,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); @@ -713,9 +711,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 *)) @@ -3996,6 +3991,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) { @@ -4454,14 +4469,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, @@ -4913,7 +4920,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 1cbf567..f20407d 100644 --- a/gdb/target.h +++ b/gdb/target.h @@ -374,7 +374,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 @@ -1005,8 +1005,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.8.3.1