Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: markus.t.metzger@intel.com
To: jan.kratochvil@redhat.com
Cc: gdb-patches@sourceware.org, markus.t.metzger@gmail.com,
	       Markus Metzger <markus.t.metzger@intel.com>
Subject: [rfc 4/8] record: default target methods.
Date: Thu, 14 Feb 2013 16:30:00 -0000	[thread overview]
Message-ID: <1360859352-30399-5-git-send-email-markus.t.metzger@intel.com> (raw)
In-Reply-To: <1360859352-30399-1-git-send-email-markus.t.metzger@intel.com>

From: Markus Metzger <markus.t.metzger@intel.com>

Provide default target methods for record targets that are likely to be shared
between different record targets.

2013-02-14 Markus Metzger <markus.t.metzger@intel.com>

	* record.h (record_disconnect): New.
	(record_detach): New.
	(record_mourn_inferior): New.
	(record_kill): New.
	* record-full.c (record_disconnect, record_detach,
	record_mourn_inferior, record_kill): Move to...
	* record.c: ...here.
	(DEBUG): New.
	(record_unpush): New.
	(cmd_record_stop): Use record_unpush.
	(record_disconnect, record_detach, record_mourn_inferior,
	record_kill): Use record_unpush and DEBUG.


---
 gdb/record-full.c |   58 +++---------------------------------------
 gdb/record.c      |   72 ++++++++++++++++++++++++++++++++++++++++++++++++++---
 gdb/record.h      |   12 +++++++++
 3 files changed, 84 insertions(+), 58 deletions(-)

diff --git a/gdb/record-full.c b/gdb/record-full.c
index 351b1e8..e5f7c62 100644
--- a/gdb/record-full.c
+++ b/gdb/record-full.c
@@ -1526,56 +1526,6 @@ record_full_stopped_by_watchpoint (void)
     return record_full_beneath_to_stopped_by_watchpoint ();
 }
 
-/* "to_disconnect" method for process record target.  */
-
-static void
-record_full_disconnect (struct target_ops *target, char *args, int from_tty)
-{
-  if (record_debug)
-    fprintf_unfiltered (gdb_stdlog,
-			"Process record: record_full_disconnect\n");
-
-  unpush_target (&record_full_ops);
-  target_disconnect (args, from_tty);
-}
-
-/* "to_detach" method for process record target.  */
-
-static void
-record_full_detach (struct target_ops *ops, char *args, int from_tty)
-{
-  if (record_debug)
-    fprintf_unfiltered (gdb_stdlog, "Process record: record_full_detach\n");
-
-  unpush_target (&record_full_ops);
-  target_detach (args, from_tty);
-}
-
-/* "to_mourn_inferior" method for process record target.  */
-
-static void
-record_full_mourn_inferior (struct target_ops *ops)
-{
-  if (record_debug)
-    fprintf_unfiltered (gdb_stdlog, "Process record: "
-			            "record_full_mourn_inferior\n");
-
-  unpush_target (&record_full_ops);
-  target_mourn_inferior ();
-}
-
-/* Close process record target before killing the inferior process.  */
-
-static void
-record_full_kill (struct target_ops *ops)
-{
-  if (record_debug)
-    fprintf_unfiltered (gdb_stdlog, "Process record: record_full_kill\n");
-
-  unpush_target (&record_full_ops);
-  target_kill ();
-}
-
 static int
 record_full_stopped_data_address (struct target_ops *ops, CORE_ADDR *addr_p)
 {
@@ -2120,10 +2070,10 @@ init_record_full_ops (void)
   record_full_ops.to_close = record_full_close;
   record_full_ops.to_resume = record_full_resume;
   record_full_ops.to_wait = record_full_wait;
-  record_full_ops.to_disconnect = record_full_disconnect;
-  record_full_ops.to_detach = record_full_detach;
-  record_full_ops.to_mourn_inferior = record_full_mourn_inferior;
-  record_full_ops.to_kill = record_full_kill;
+  record_full_ops.to_disconnect = record_disconnect;
+  record_full_ops.to_detach = record_detach;
+  record_full_ops.to_mourn_inferior = record_mourn_inferior;
+  record_full_ops.to_kill = record_kill;
   record_full_ops.to_create_inferior = find_default_create_inferior;
   record_full_ops.to_store_registers = record_full_store_registers;
   record_full_ops.to_xfer_partial = record_full_xfer_partial;
diff --git a/gdb/record.c b/gdb/record.c
index 8b44717..abd8216 100644
--- a/gdb/record.c
+++ b/gdb/record.c
@@ -33,6 +33,10 @@ struct cmd_list_element *set_record_cmdlist = NULL;
 struct cmd_list_element *show_record_cmdlist = NULL;
 struct cmd_list_element *info_record_cmdlist = NULL;
 
+#define DEBUG(msg, args...)						\
+  if (record_debug)							\
+    fprintf_unfiltered (gdb_stdlog, "record: " msg "\n", ##args)
+
 /* Find the record target in the target stack.  */
 
 static struct target_ops *
@@ -71,13 +75,73 @@ record_read_memory (struct gdbarch *gdbarch,
 {
   int ret = target_read_memory (memaddr, myaddr, len);
 
-  if (ret && record_debug)
-    printf_unfiltered (_("Process record: error reading memory "
-			 "at addr %s len = %ld.\n"),
-		       paddress (gdbarch, memaddr), (long) len);
+  if (ret != 0)
+    DEBUG ("error reading memory at addr %s len = %ld.\n",
+	   paddress (gdbarch, memaddr), (long) len);
+
   return ret;
 }
 
+/* Unpush the record target.  */
+
+static void
+record_unpush (void)
+{
+  struct target_ops *t;
+
+  t = find_record_target ();
+  if (t == NULL)
+    internal_error (__FILE__, __LINE__, _("Couldn't find record target."));
+
+  DEBUG ("unpush %s", t->to_shortname);
+
+  unpush_target (t);
+}
+
+/* See record.h.  */
+
+void
+record_disconnect (struct target_ops *target, char *args, int from_tty)
+{
+  DEBUG ("disconnect");
+
+  record_unpush ();
+  target_disconnect (args, from_tty);
+}
+
+/* See record.h.  */
+
+void
+record_detach (struct target_ops *ops, char *args, int from_tty)
+{
+  DEBUG ("detach");
+
+  record_unpush ();
+  target_detach (args, from_tty);
+}
+
+/* See record.h.  */
+
+void
+record_mourn_inferior (struct target_ops *ops)
+{
+  DEBUG ("mourn_inferior");
+
+  record_unpush ();
+  target_mourn_inferior ();
+}
+
+/* See record.h.  */
+
+void
+record_kill (struct target_ops *ops)
+{
+  DEBUG ("kill");
+
+  record_unpush ();
+  target_kill ();
+}
+
 /* Implement "show record debug" command.  */
 
 static void
diff --git a/gdb/record.h b/gdb/record.h
index b428eaf..04d6b4a 100644
--- a/gdb/record.h
+++ b/gdb/record.h
@@ -41,4 +41,16 @@ extern int record_read_memory (struct gdbarch *gdbarch,
 /* The "record goto" command.  */
 extern void cmd_record_goto (char *arg, int from_tty);
 
+/* The default "to_disconnect" target method for record targets.  */
+extern void record_disconnect (struct target_ops *, char *, int);
+
+/* The default "to_detach" target method for record targets.  */
+extern void record_detach (struct target_ops *, char *, int);
+
+/* The default "to_mourn_inferior" target method for record targets.  */
+extern void record_mourn_inferior (struct target_ops *);
+
+/* The default "to_kill" target method for record targets.  */
+extern void record_kill (struct target_ops *);
+
 #endif /* _RECORD_H_ */
-- 
1.7.1


  parent reply	other threads:[~2013-02-14 16:30 UTC|newest]

Thread overview: 27+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-02-14 16:31 [rfc 0/8] refactor record markus.t.metzger
2013-02-14 16:30 ` [rfc 7/8] record: add "record backtrace" command markus.t.metzger
2013-02-14 16:30 ` [rfc 6/8] record disas: omit function names by default markus.t.metzger
2013-02-15 16:11   ` Jan Kratochvil
2013-02-15 18:21     ` Eli Zaretskii
2013-02-15 18:33       ` Jan Kratochvil
2013-02-15 19:05         ` Eli Zaretskii
2013-02-15 19:10           ` Jan Kratochvil
2013-02-18  9:43             ` Metzger, Markus T
2013-02-18 13:03               ` Jan Kratochvil
2013-02-18 13:30                 ` Metzger, Markus T
2013-02-18 14:13                   ` Jan Kratochvil
2013-02-18 14:51                     ` Metzger, Markus T
2013-02-18 15:54                       ` Jan Kratochvil
2013-02-19  8:34                         ` Metzger, Markus T
2013-02-19  8:52                           ` [RFC on command names] " Jan Kratochvil
2013-02-18 16:17               ` Eli Zaretskii
2013-02-15 20:43         ` Tom Tromey
2013-02-14 16:30 ` [rfc 8/8] record: add "record list" command markus.t.metzger
2013-02-14 16:30 ` [rfc 5/8] record: add "record disassemble" command markus.t.metzger
2013-02-14 16:30 ` markus.t.metzger [this message]
2013-02-14 16:31 ` [rfc 3/8] record-full.h: rename record_ into record_full_ markus.t.metzger
2013-02-14 16:31 ` [rfc 2/8] record-full.c: rename record_ in record_full_ markus.t.metzger
2013-02-15  8:45   ` Jan Kratochvil
2013-02-14 16:32 ` [rfc 1/8] record: make it build again markus.t.metzger
2013-02-15 11:18 ` [rfc 0/8] refactor record Metzger, Markus T
2013-02-15 16:15 ` Jan Kratochvil

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1360859352-30399-5-git-send-email-markus.t.metzger@intel.com \
    --to=markus.t.metzger@intel.com \
    --cc=gdb-patches@sourceware.org \
    --cc=jan.kratochvil@redhat.com \
    --cc=markus.t.metzger@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox