Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Pedro Alves <palves@redhat.com>
To: gdb-patches@sourceware.org
Subject: [PATCH 1/3] Make the go32-nat.c target inherit inf-child.c.
Date: Fri, 07 Mar 2014 15:15:00 -0000	[thread overview]
Message-ID: <1394205292-19784-2-git-send-email-palves@redhat.com> (raw)
In-Reply-To: <1394205292-19784-1-git-send-email-palves@redhat.com>

So that all native targets inherit a single "superclass".

Target methods that are set to or do the same as inf-child.c's are
removed.

Tested by cross building on Fedora 17.

gdb/
2014-03-07  Pedro Alves  <palves@redhat.com>

	* go32-nat.c: Include inf-child.h.
	(go32_ops): Delete global.
	(go32_close, go32_detach, go32_prepare_to_store, go32_can_run):
	Delete methods.
	(go32_create_inferior): Push the passed in target pointer instead
	of referencing go32_ops.
	(init_go32_ops): Delete function.  Moved parts to _initialize_go32_nat.
	(go32_target): New function, based on init_go32_ops, but inherit
	inf_child_target.
	(_initialize_go32_nat): Use go32_target.  Move parts of
	init_go32_ops here.
---
 gdb/go32-nat.c | 146 ++++++++++++++++++++++-----------------------------------
 1 file changed, 57 insertions(+), 89 deletions(-)

diff --git a/gdb/go32-nat.c b/gdb/go32-nat.c
index 20ebee7..08d803c 100644
--- a/gdb/go32-nat.c
+++ b/gdb/go32-nat.c
@@ -102,6 +102,7 @@
 #include <string.h>
 #include "top.h"
 #include "cli/cli-utils.h"
+#include "inf-child.h"
 
 #include <stdio.h>		/* might be required for __DJGPP_MINOR__ */
 #include <stdlib.h>
@@ -236,8 +237,6 @@ static int dr_ref_count[4];
 static int prog_has_started = 0;
 static void go32_mourn_inferior (struct target_ops *ops);
 
-static struct target_ops go32_ops;
-
 #define r_ofs(x) (offsetof(TSS,x))
 
 static struct
@@ -346,11 +345,6 @@ go32_open (char *name, int from_tty)
 }
 
 static void
-go32_close (struct target_ops *self)
-{
-}
-
-static void
 go32_attach (struct target_ops *ops, char *args, int from_tty)
 {
   error (_("\
@@ -358,11 +352,6 @@ You cannot attach to a running program on this platform.\n\
 Use the `run' command to run DJGPP programs."));
 }
 
-static void
-go32_detach (struct target_ops *ops, const char *args, int from_tty)
-{
-}
-
 static int resume_is_step;
 static int resume_signal = -1;
 
@@ -572,12 +561,6 @@ go32_store_registers (struct target_ops *ops,
     }
 }
 
-static void
-go32_prepare_to_store (struct target_ops *self, struct regcache *regcache)
-{
-}
-
-
 /* Const-correct version of DJGPP's write_child, which unfortunately
    takes a non-const buffer pointer.  */
 
@@ -733,7 +716,7 @@ go32_create_inferior (struct target_ops *ops, char *exec_file,
   inf = current_inferior ();
   inferior_appeared (inf, SOME_PID);
 
-  push_target (&go32_ops);
+  push_target (ops);
 
   add_thread_silent (inferior_ptid);
 
@@ -771,12 +754,6 @@ go32_mourn_inferior (struct target_ops *ops)
   generic_mourn_inferior ();
 }
 
-static int
-go32_can_run (struct target_ops *self)
-{
-  return 1;
-}
-
 /* Hardware watchpoint support.  */
 
 #define D_REGS edi.dr
@@ -976,68 +953,37 @@ go32_pid_to_str (struct target_ops *ops, ptid_t ptid)
   return normal_pid_to_str (ptid);
 }
 
-static void
-init_go32_ops (void)
-{
-  go32_ops.to_shortname = "djgpp";
-  go32_ops.to_longname = "djgpp target process";
-  go32_ops.to_doc =
-    "Program loaded by djgpp, when gdb is used as an external debugger";
-  go32_ops.to_open = go32_open;
-  go32_ops.to_close = go32_close;
-  go32_ops.to_attach = go32_attach;
-  go32_ops.to_detach = go32_detach;
-  go32_ops.to_resume = go32_resume;
-  go32_ops.to_wait = go32_wait;
-  go32_ops.to_fetch_registers = go32_fetch_registers;
-  go32_ops.to_store_registers = go32_store_registers;
-  go32_ops.to_prepare_to_store = go32_prepare_to_store;
-  go32_ops.to_xfer_partial = go32_xfer_partial;
-  go32_ops.to_files_info = go32_files_info;
-  go32_ops.to_insert_breakpoint = memory_insert_breakpoint;
-  go32_ops.to_remove_breakpoint = memory_remove_breakpoint;
-  go32_ops.to_terminal_init = go32_terminal_init;
-  go32_ops.to_terminal_inferior = go32_terminal_inferior;
-  go32_ops.to_terminal_ours_for_output = go32_terminal_ours;
-  go32_ops.to_terminal_ours = go32_terminal_ours;
-  go32_ops.to_terminal_info = go32_terminal_info;
-  go32_ops.to_kill = go32_kill_inferior;
-  go32_ops.to_create_inferior = go32_create_inferior;
-  go32_ops.to_mourn_inferior = go32_mourn_inferior;
-  go32_ops.to_can_run = go32_can_run;
-  go32_ops.to_thread_alive = go32_thread_alive;
-  go32_ops.to_pid_to_str = go32_pid_to_str;
-  go32_ops.to_stratum = process_stratum;
-  go32_ops.to_has_all_memory = default_child_has_all_memory;
-  go32_ops.to_has_memory = default_child_has_memory;
-  go32_ops.to_has_stack = default_child_has_stack;
-  go32_ops.to_has_registers = default_child_has_registers;
-  go32_ops.to_has_execution = default_child_has_execution;
-
-  i386_use_watchpoints (&go32_ops);
-
-
-  i386_dr_low.set_control = go32_set_dr7;
-  i386_dr_low.set_addr = go32_set_dr;
-  i386_dr_low.get_status = go32_get_dr6;
-  i386_dr_low.get_control = go32_get_dr7;
-  i386_dr_low.get_addr = go32_get_dr;
-  i386_set_debug_register_length (4);
-
-  go32_ops.to_magic = OPS_MAGIC;
-
-  /* Initialize child's cwd as empty to be initialized when starting
-     the child.  */
-  *child_cwd = 0;
-
-  /* Initialize child's command line storage.  */
-  if (redir_debug_init (&child_cmd) == -1)
-    internal_error (__FILE__, __LINE__,
-		    _("Cannot allocate redirection storage: "
-		      "not enough memory.\n"));
-
-  /* We are always processing GCC-compiled programs.  */
-  processing_gcc_compilation = 2;
+/* Create a go32 target.  */
+
+static struct target_ops *
+go32_target (void)
+{
+  struct target_ops *t = inf_child_target ();
+
+  t->to_shortname = "djgpp";
+  t->to_longname = "djgpp target process";
+  t->to_doc
+    = "Program loaded by djgpp, when gdb is used as an external debugger";
+  t->to_open = go32_open;
+  t->to_attach = go32_attach;
+  t->to_resume = go32_resume;
+  t->to_wait = go32_wait;
+  t->to_fetch_registers = go32_fetch_registers;
+  t->to_store_registers = go32_store_registers;
+  t->to_xfer_partial = go32_xfer_partial;
+  t->to_files_info = go32_files_info;
+  t->to_terminal_init = go32_terminal_init;
+  t->to_terminal_inferior = go32_terminal_inferior;
+  t->to_terminal_ours_for_output = go32_terminal_ours;
+  t->to_terminal_ours = go32_terminal_ours;
+  t->to_terminal_info = go32_terminal_info;
+  t->to_kill = go32_kill_inferior;
+  t->to_create_inferior = go32_create_inferior;
+  t->to_mourn_inferior = go32_mourn_inferior;
+  t->to_thread_alive = go32_thread_alive;
+  t->to_pid_to_str = go32_pid_to_str;
+
+  return t;
 }
 
 /* Return the current DOS codepage number.  */
@@ -2127,8 +2073,30 @@ extern initialize_file_ftype _initialize_go32_nat;
 void
 _initialize_go32_nat (void)
 {
-  init_go32_ops ();
-  add_target (&go32_ops);
+  struct target_ops *t = go32_target ();
+
+  i386_dr_low.set_control = go32_set_dr7;
+  i386_dr_low.set_addr = go32_set_dr;
+  i386_dr_low.get_status = go32_get_dr6;
+  i386_dr_low.get_control = go32_get_dr7;
+  i386_dr_low.get_addr = go32_get_dr;
+  i386_set_debug_register_length (4);
+
+  i386_use_watchpoints (t);
+  add_target (t);
+
+  /* Initialize child's cwd as empty to be initialized when starting
+     the child.  */
+  *child_cwd = 0;
+
+  /* Initialize child's command line storage.  */
+  if (redir_debug_init (&child_cmd) == -1)
+    internal_error (__FILE__, __LINE__,
+		    _("Cannot allocate redirection storage: "
+		      "not enough memory.\n"));
+
+  /* We are always processing GCC-compiled programs.  */
+  processing_gcc_compilation = 2;
 
   add_prefix_cmd ("dos", class_info, go32_info_dos_command, _("\
 Print information specific to DJGPP (aka MS-DOS) debugging."),
-- 
1.7.11.7


  parent reply	other threads:[~2014-03-07 15:14 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-03-07 15:14 [PATCH 0/3] Make all native targets " Pedro Alves
2014-03-07 15:14 ` [PATCH 2/3] Make the windows-nat.c target " Pedro Alves
2014-03-11 16:42   ` Pedro Alves
2014-03-12  9:07     ` Joel Brobecker
2014-03-12 11:29       ` Pedro Alves
2014-03-07 15:15 ` Pedro Alves [this message]
2014-03-07 15:32   ` [PATCH 1/3] Make the go32-nat.c " Eli Zaretskii
2014-03-07 15:38     ` Pedro Alves
2014-03-07 15:15 ` [PATCH 3/3] Make the nto-procfs.c " Pedro Alves

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=1394205292-19784-2-git-send-email-palves@redhat.com \
    --to=palves@redhat.com \
    --cc=gdb-patches@sourceware.org \
    /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