From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 18033 invoked by alias); 7 Mar 2014 15:15:01 -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 17949 invoked by uid 89); 7 Mar 2014 15:15:00 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-0.4 required=5.0 tests=AWL,BAYES_00,SPF_HELO_PASS,SPF_PASS,T_RP_MATCHES_RCVD,UNWANTED_LANGUAGE_BODY autolearn=ham version=3.3.2 X-HELO: mx1.redhat.com Received: from mx1.redhat.com (HELO mx1.redhat.com) (209.132.183.28) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Fri, 07 Mar 2014 15:14:58 +0000 Received: from int-mx09.intmail.prod.int.phx2.redhat.com (int-mx09.intmail.prod.int.phx2.redhat.com [10.5.11.22]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id s27FEvic009058 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Fri, 7 Mar 2014 10:14:57 -0500 Received: from brno.lan (ovpn01.gateway.prod.ext.ams2.redhat.com [10.39.146.11]) by int-mx09.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s27FEqVH026442 for ; Fri, 7 Mar 2014 10:14:56 -0500 From: Pedro Alves To: gdb-patches@sourceware.org Subject: [PATCH 3/3] Make the nto-procfs.c target inherit inf-child.c. Date: Fri, 07 Mar 2014 15:15:00 -0000 Message-Id: <1394205292-19784-4-git-send-email-palves@redhat.com> In-Reply-To: <1394205292-19784-1-git-send-email-palves@redhat.com> References: <1394205292-19784-1-git-send-email-palves@redhat.com> X-SW-Source: 2014-03/txt/msg00191.txt.bz2 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. Not tested. gdb/ 2014-03-07 Pedro Alves * nto-procfs.c: Include inf-child.h. (procfs_ops): Delete global. (procfs_can_run): Delete method. (procfs_detach, procfs_mourn_inferior): Unpush the passed in target pointer instead of referencing procfs_ops. (procfs_prepare_to_store): Delete. (init_procfs_ops): Delete function. (procfs_target): New function, based on init_procfs_ops, but inherit inf_child_target. (_initialize_procfs): Use procfs_target. --- gdb/nto-procfs.c | 119 +++++++++++++++++++++---------------------------------- 1 file changed, 46 insertions(+), 73 deletions(-) diff --git a/gdb/nto-procfs.c b/gdb/nto-procfs.c index bdda7ce..c552a8e 100644 --- a/gdb/nto-procfs.c +++ b/gdb/nto-procfs.c @@ -42,13 +42,12 @@ #include "command.h" #include "regcache.h" #include "solib.h" +#include "inf-child.h" #define NULL_PID 0 #define _DEBUG_FLAG_TRACE (_DEBUG_FLAG_TRACE_EXEC|_DEBUG_FLAG_TRACE_RD|\ _DEBUG_FLAG_TRACE_WR|_DEBUG_FLAG_TRACE_MODIFY) -static struct target_ops procfs_ops; - int ctl_fd; static void (*ofunc) (); @@ -57,10 +56,6 @@ static procfs_run run; static void procfs_open (char *, int); -static int procfs_can_run (struct target_ops *self); - -static void init_procfs_ops (void); - static ptid_t do_attach (ptid_t ptid); static int procfs_can_use_hw_breakpoint (struct target_ops *self, @@ -602,14 +597,6 @@ procfs_files_info (struct target_ops *ignore) target_pid_to_str (inferior_ptid), nto_procfs_path); } -/* Mark our target-struct as eligible for stray "run" and "attach" - commands. */ -static int -procfs_can_run (struct target_ops *self) -{ - return 1; -} - /* Attach to process PID, then initialize for debugging it. */ static void procfs_attach (struct target_ops *ops, char *args, int from_tty) @@ -917,7 +904,7 @@ procfs_detach (struct target_ops *ops, const char *args, int from_tty) inferior_ptid = null_ptid; detach_inferior (pid); init_thread_list (); - unpush_target (&procfs_ops); /* Pop out of handling an inferior. */ + unpush_target (ops); /* Pop out of handling an inferior. */ } static int @@ -1036,7 +1023,7 @@ procfs_mourn_inferior (struct target_ops *ops) } inferior_ptid = null_ptid; init_thread_list (); - unpush_target (&procfs_ops); + unpush_target (ops); generic_mourn_inferior (); } @@ -1240,13 +1227,6 @@ procfs_kill_inferior (struct target_ops *ops) target_mourn_inferior (); } -/* Store register REGNO, or all registers if REGNO == -1, from the contents - of REGISTERS. */ -static void -procfs_prepare_to_store (struct target_ops *self, struct regcache *regcache) -{ -} - /* Fill buf with regset and return devctl cmd to do the setting. Return -1 if we fail to get the regset. Store size of regset in regsize. */ static int @@ -1390,56 +1370,48 @@ procfs_pid_to_str (struct target_ops *ops, ptid_t ptid) return buf; } -static void -init_procfs_ops (void) +/* Create a nto-procfs target. */ + +static struct target_ops * +procfs_target (void) { - procfs_ops.to_shortname = "procfs"; - procfs_ops.to_longname = "QNX Neutrino procfs child process"; - procfs_ops.to_doc = - "QNX Neutrino procfs child process (started by the \"run\" command).\n\ + struct target_ops *t = inf_child_target (); + + t->to_shortname = "procfs"; + t->to_longname = "QNX Neutrino procfs child process"; + t->to_doc + = "QNX Neutrino procfs child process (started by the \"run\" command).\n\ target procfs "; - procfs_ops.to_open = procfs_open; - procfs_ops.to_attach = procfs_attach; - procfs_ops.to_post_attach = procfs_post_attach; - procfs_ops.to_detach = procfs_detach; - procfs_ops.to_resume = procfs_resume; - procfs_ops.to_wait = procfs_wait; - procfs_ops.to_fetch_registers = procfs_fetch_registers; - procfs_ops.to_store_registers = procfs_store_registers; - procfs_ops.to_prepare_to_store = procfs_prepare_to_store; - procfs_ops.to_xfer_partial = procfs_xfer_partial; - procfs_ops.to_files_info = procfs_files_info; - procfs_ops.to_insert_breakpoint = procfs_insert_breakpoint; - procfs_ops.to_remove_breakpoint = procfs_remove_breakpoint; - procfs_ops.to_can_use_hw_breakpoint = procfs_can_use_hw_breakpoint; - procfs_ops.to_insert_hw_breakpoint = procfs_insert_hw_breakpoint; - procfs_ops.to_remove_hw_breakpoint = procfs_remove_hw_breakpoint; - procfs_ops.to_insert_watchpoint = procfs_insert_hw_watchpoint; - procfs_ops.to_remove_watchpoint = procfs_remove_hw_watchpoint; - procfs_ops.to_stopped_by_watchpoint = procfs_stopped_by_watchpoint; - procfs_ops.to_terminal_init = terminal_init_inferior; - procfs_ops.to_terminal_inferior = terminal_inferior; - procfs_ops.to_terminal_ours_for_output = terminal_ours_for_output; - procfs_ops.to_terminal_ours = terminal_ours; - procfs_ops.to_terminal_info = child_terminal_info; - procfs_ops.to_kill = procfs_kill_inferior; - procfs_ops.to_create_inferior = procfs_create_inferior; - procfs_ops.to_mourn_inferior = procfs_mourn_inferior; - procfs_ops.to_can_run = procfs_can_run; - procfs_ops.to_pass_signals = procfs_pass_signals; - procfs_ops.to_thread_alive = procfs_thread_alive; - procfs_ops.to_find_new_threads = procfs_find_new_threads; - procfs_ops.to_pid_to_str = procfs_pid_to_str; - procfs_ops.to_stop = procfs_stop; - procfs_ops.to_stratum = process_stratum; - procfs_ops.to_has_all_memory = default_child_has_all_memory; - procfs_ops.to_has_memory = default_child_has_memory; - procfs_ops.to_has_stack = default_child_has_stack; - procfs_ops.to_has_registers = default_child_has_registers; - procfs_ops.to_has_execution = default_child_has_execution; - procfs_ops.to_magic = OPS_MAGIC; - procfs_ops.to_have_continuable_watchpoint = 1; - procfs_ops.to_extra_thread_info = nto_extra_thread_info; + t->to_open = procfs_open; + t->to_attach = procfs_attach; + t->to_post_attach = procfs_post_attach; + t->to_detach = procfs_detach; + t->to_resume = procfs_resume; + t->to_wait = procfs_wait; + t->to_fetch_registers = procfs_fetch_registers; + t->to_store_registers = procfs_store_registers; + t->to_xfer_partial = procfs_xfer_partial; + t->to_files_info = procfs_files_info; + t->to_insert_breakpoint = procfs_insert_breakpoint; + t->to_remove_breakpoint = procfs_remove_breakpoint; + t->to_can_use_hw_breakpoint = procfs_can_use_hw_breakpoint; + t->to_insert_hw_breakpoint = procfs_insert_hw_breakpoint; + t->to_remove_hw_breakpoint = procfs_remove_hw_breakpoint; + t->to_insert_watchpoint = procfs_insert_hw_watchpoint; + t->to_remove_watchpoint = procfs_remove_hw_watchpoint; + t->to_stopped_by_watchpoint = procfs_stopped_by_watchpoint; + t->to_kill = procfs_kill_inferior; + t->to_create_inferior = procfs_create_inferior; + t->to_mourn_inferior = procfs_mourn_inferior; + t->to_pass_signals = procfs_pass_signals; + t->to_thread_alive = procfs_thread_alive; + t->to_find_new_threads = procfs_find_new_threads; + t->to_pid_to_str = procfs_pid_to_str; + t->to_stop = procfs_stop; + t->to_have_continuable_watchpoint = 1; + t->to_extra_thread_info = nto_extra_thread_info; + + return t; } #define OSTYPE_NTO 1 @@ -1448,9 +1420,10 @@ void _initialize_procfs (void) { sigset_t set; + struct target_ops *t; - init_procfs_ops (); - add_target (&procfs_ops); + t = procfs_target (); + add_target (t); /* We use SIGUSR1 to gain control after we block waiting for a process. We use sigwaitevent to wait. */ -- 1.7.11.7