From patchwork Sat Apr 14 19:09:16 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Pedro Alves X-Patchwork-Id: 26710 Received: (qmail 122746 invoked by alias); 14 Apr 2018 19:10:01 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Delivered-To: mailing list gdb-patches@sourceware.org Received: (qmail 122637 invoked by uid 89); 14 Apr 2018 19:10:00 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-25.4 required=5.0 tests=AWL, BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3 autolearn=ham version=3.3.2 spammy=from_tty, Whether, Fill, closes X-HELO: mx1.redhat.com Received: from mx3-rdu2.redhat.com (HELO mx1.redhat.com) (66.187.233.73) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Sat, 14 Apr 2018 19:09:59 +0000 Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.rdu2.redhat.com [10.11.54.6]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id C207C8DC3A for ; Sat, 14 Apr 2018 19:09:57 +0000 (UTC) Received: from localhost.localdomain (ovpn04.gateway.prod.ext.ams2.redhat.com [10.39.146.4]) by smtp.corp.redhat.com (Postfix) with ESMTP id 68D68215CDC8 for ; Sat, 14 Apr 2018 19:09:57 +0000 (UTC) From: Pedro Alves To: gdb-patches@sourceware.org Subject: [PATCH 03/40] target_ops/C++: exec target Date: Sat, 14 Apr 2018 20:09:16 +0100 Message-Id: <20180414190953.24481-4-palves@redhat.com> In-Reply-To: <20180414190953.24481-1-palves@redhat.com> References: <20180414190953.24481-1-palves@redhat.com> Straighforward conversion. --- gdb/exec.c | 139 ++++++++++++++++++++++++---------------------------------- gdb/gdbcore.h | 2 - 2 files changed, 58 insertions(+), 83 deletions(-) diff --git a/gdb/exec.c b/gdb/exec.c index f94c15f1f5..14d0668591 100644 --- a/gdb/exec.c +++ b/gdb/exec.c @@ -49,15 +49,43 @@ void (*deprecated_file_changed_hook) (const char *); -/* Prototypes for local functions */ - -static void exec_files_info (struct target_ops *); - -static void init_exec_ops (void); - /* The target vector for executable files. */ -static struct target_ops exec_ops; +struct exec_target final : public target_ops +{ + exec_target () + { to_stratum = file_stratum; } + + const char *shortname () override + { return "exec"; } + + const char *longname () override + { return _("Local exec file"); } + + const char *doc () override + { + return _("\ +Use an executable file as a target.\n\ +Specify the filename of the executable file."); + } + + void open (const char *, int) override; + void close () override; + enum target_xfer_status xfer_partial (enum target_object object, + const char *annex, + gdb_byte *readbuf, + const gdb_byte *writebuf, + ULONGEST offset, ULONGEST len, + ULONGEST *xfered_len) override; + struct target_section_table *get_section_table () override; + void files_info () override; + + int has_memory () override; + char *make_corefile_notes (bfd *, int *) override; + int find_memory_regions (find_memory_region_ftype func, void *data) override; +}; + +static exec_target exec_ops; /* Whether to open exec and core files read-only or read-write. */ @@ -71,8 +99,8 @@ show_write_files (struct ui_file *file, int from_tty, } -static void -exec_open (const char *args, int from_tty) +void +exec_target::open (const char *args, int from_tty) { target_preopen (from_tty); exec_file_attach (args, from_tty); @@ -105,8 +133,8 @@ exec_close (void) /* This is the target_close implementation. Clears all target sections and closes all executable bfds from all program spaces. */ -static void -exec_close_1 (struct target_ops *self) +void +exec_target::close () { struct program_space *ss; scoped_restore_current_program_space restore_pspace; @@ -119,17 +147,7 @@ exec_close_1 (struct target_ops *self) } } -void -exec_file_clear (int from_tty) -{ - /* Remove exec file. */ - exec_close (); - - if (from_tty) - printf_unfiltered (_("No executable file now.\n")); -} - -/* See exec.h. */ +/* See gdbcore.h. */ void try_open_exec_file (const char *exec_file_host, struct inferior *inf, @@ -846,19 +864,19 @@ section_table_xfer_memory_partial (gdb_byte *readbuf, const gdb_byte *writebuf, return TARGET_XFER_EOF; /* We can't help. */ } -static struct target_section_table * -exec_get_section_table (struct target_ops *ops) +struct target_section_table * +exec_target::get_section_table () { return current_target_sections; } -static enum target_xfer_status -exec_xfer_partial (struct target_ops *ops, enum target_object object, - const char *annex, gdb_byte *readbuf, - const gdb_byte *writebuf, - ULONGEST offset, ULONGEST len, ULONGEST *xfered_len) +enum target_xfer_status +exec_target::xfer_partial (enum target_object object, + const char *annex, gdb_byte *readbuf, + const gdb_byte *writebuf, + ULONGEST offset, ULONGEST len, ULONGEST *xfered_len) { - struct target_section_table *table = target_get_section_table (ops); + struct target_section_table *table = get_section_table (); if (object == TARGET_OBJECT_MEMORY) return section_table_xfer_memory_partial (readbuf, writebuf, @@ -940,8 +958,8 @@ print_section_info (struct target_section_table *t, bfd *abfd) } } -static void -exec_files_info (struct target_ops *t) +void +exec_target::files_info () { if (exec_bfd) print_section_info (current_target_sections, exec_bfd); @@ -981,7 +999,7 @@ set_section_command (const char *args, int from_tty) p->addr += offset; p->endaddr += offset; if (from_tty) - exec_files_info (&exec_ops); + exec_ops.files_info (); return; } } @@ -1013,29 +1031,8 @@ exec_set_section_address (const char *filename, int index, CORE_ADDR address) } } -/* If mourn is being called in all the right places, this could be say - `gdb internal error' (since generic_mourn calls - breakpoint_init_inferior). */ - -static int -ignore (struct target_ops *ops, struct gdbarch *gdbarch, - struct bp_target_info *bp_tgt) -{ - return 0; -} - -/* Implement the to_remove_breakpoint method. */ - -static int -exec_remove_breakpoint (struct target_ops *ops, struct gdbarch *gdbarch, - struct bp_target_info *bp_tgt, - enum remove_bp_reason reason) -{ - return 0; -} - -static int -exec_has_memory (struct target_ops *ops) +int +exec_target::has_memory () { /* We can provide memory if we have any file/target sections to read from. */ @@ -1043,34 +1040,16 @@ exec_has_memory (struct target_ops *ops) != current_target_sections->sections_end); } -static char * -exec_make_note_section (struct target_ops *self, bfd *obfd, int *note_size) +char * +exec_target::make_corefile_notes (bfd *obfd, int *note_size) { error (_("Can't create a corefile")); } -/* Fill in the exec file target vector. Very few entries need to be - defined. */ - -static void -init_exec_ops (void) +int +exec_target::find_memory_regions (find_memory_region_ftype func, void *data) { - exec_ops.to_shortname = "exec"; - exec_ops.to_longname = "Local exec file"; - exec_ops.to_doc = "Use an executable file as a target.\n\ -Specify the filename of the executable file."; - exec_ops.to_open = exec_open; - exec_ops.to_close = exec_close_1; - exec_ops.to_xfer_partial = exec_xfer_partial; - exec_ops.to_get_section_table = exec_get_section_table; - exec_ops.to_files_info = exec_files_info; - exec_ops.to_insert_breakpoint = ignore; - exec_ops.to_remove_breakpoint = exec_remove_breakpoint; - exec_ops.to_stratum = file_stratum; - exec_ops.to_has_memory = exec_has_memory; - exec_ops.to_make_corefile_notes = exec_make_note_section; - exec_ops.to_find_memory_regions = objfile_find_memory_regions; - exec_ops.to_magic = OPS_MAGIC; + return objfile_find_memory_regions (this, func, data); } void @@ -1078,8 +1057,6 @@ _initialize_exec (void) { struct cmd_list_element *c; - init_exec_ops (); - if (!dbx_commands) { c = add_cmd ("file", class_files, file_command, _("\ diff --git a/gdb/gdbcore.h b/gdb/gdbcore.h index fef7879e99..5264eef4ee 100644 --- a/gdb/gdbcore.h +++ b/gdb/gdbcore.h @@ -153,8 +153,6 @@ extern void exec_file_attach (const char *filename, int from_tty); extern void exec_file_locate_attach (int pid, int defer_bp_reset, int from_tty); -extern void exec_file_clear (int from_tty); - extern void validate_files (void); /* The current default bfd target. */