From: Pedro Alves Date: Fri, 7 Mar 2014 15:36:50 +0000 (+0000) Subject: Make the go32-nat.c target inherit inf-child.c. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=c1a7b7c6f83bf330bba2326cdacd2d898555494e;p=binutils-gdb.git Make the go32-nat.c target inherit inf-child.c. 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 * 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. --- diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 760dcb13f7e..fe176740119 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,17 @@ +2014-03-07 Pedro Alves + + * 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. + 2014-03-06 Joel Brobecker * sol-thread.c: #include "symtab.h", "minsym.h" and "objfiles.h". diff --git a/gdb/go32-nat.c b/gdb/go32-nat.c index 20ebee74e62..08d803c789b 100644 --- a/gdb/go32-nat.c +++ b/gdb/go32-nat.c @@ -102,6 +102,7 @@ #include #include "top.h" #include "cli/cli-utils.h" +#include "inf-child.h" #include /* might be required for __DJGPP_MINOR__ */ #include @@ -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 @@ -345,11 +344,6 @@ go32_open (char *name, int from_tty) printf_unfiltered ("Done. Use the \"run\" command to run the program.\n"); } -static void -go32_close (struct target_ops *self) -{ -} - static void go32_attach (struct target_ops *ops, char *args, int from_tty) { @@ -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."),