From patchwork Sat Apr 14 19:09:41 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Pedro Alves X-Patchwork-Id: 26744 Received: (qmail 62312 invoked by alias); 14 Apr 2018 19:28:20 -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 62300 invoked by uid 89); 14 Apr 2018 19:28:19 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-25.6 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= 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:28:18 +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 52C214072458 for ; Sat, 14 Apr 2018 19:10:13 +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 03FE2215CDC8 for ; Sat, 14 Apr 2018 19:10:12 +0000 (UTC) From: Pedro Alves To: gdb-patches@sourceware.org Subject: [PATCH 28/40] target_ops/C++: SPU/Linux Date: Sat, 14 Apr 2018 20:09:41 +0100 Message-Id: <20180414190953.24481-29-palves@redhat.com> In-Reply-To: <20180414190953.24481-1-palves@redhat.com> References: <20180414190953.24481-1-palves@redhat.com> Straighforward conversion. --- gdb/spu-linux-nat.c | 78 ++++++++++++++++++++++++++++------------------------- 1 file changed, 42 insertions(+), 36 deletions(-) diff --git a/gdb/spu-linux-nat.c b/gdb/spu-linux-nat.c index 6c6bd026ea..8b4c643b2c 100644 --- a/gdb/spu-linux-nat.c +++ b/gdb/spu-linux-nat.c @@ -40,6 +40,28 @@ #define INSTR_SC 0x44000002 #define NR_spu_run 0x0116 +class spu_linux_nat_target final : public inf_ptrace_target +{ +public: + void fetch_registers (struct regcache *regcache, int regnum) override; + void store_registers (struct regcache *regcache, int regnum) override; + + void post_attach (int) override; + void post_startup_inferior (ptid_t) override; + + ptid_t wait (ptid_t, struct target_waitstatus *, int options) 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; + + int can_use_hw_breakpoint (enum bptype, int, int) override; +}; + +static spu_linux_nat_target the_spu_linux_nat_target; /* Fetch PPU register REGNO. */ static ULONGEST @@ -394,8 +416,8 @@ spu_symbol_file_add_from_memory (int inferior_fd) /* Override the post_startup_inferior routine to continue running the inferior until the first spu_run system call. */ -static void -spu_child_post_startup_inferior (struct target_ops *self, ptid_t ptid) +void +spu_linux_nat_target::post_startup_inferior (ptid_t ptid) { int fd; ULONGEST addr; @@ -413,8 +435,8 @@ spu_child_post_startup_inferior (struct target_ops *self, ptid_t ptid) /* Override the post_attach routine to try load the SPE executable file image from its copy inside the target process. */ -static void -spu_child_post_attach (struct target_ops *self, int pid) +void +spu_linux_nat_target::post_attach (int pid) { int fd; ULONGEST addr; @@ -436,9 +458,9 @@ spu_child_post_attach (struct target_ops *self, int pid) /* Wait for child PTID to do something. Return id of the child, minus_one_ptid in case of error; store status into *OURSTATUS. */ -static ptid_t -spu_child_wait (struct target_ops *ops, - ptid_t ptid, struct target_waitstatus *ourstatus, int options) +ptid_t +spu_linux_nat_target:::wait (ptid_t ptid, struct target_waitstatus *ourstatus, + int options) { int save_errno; int status; @@ -485,9 +507,8 @@ spu_child_wait (struct target_ops *ops, } /* Override the fetch_inferior_register routine. */ -static void -spu_fetch_inferior_registers (struct target_ops *ops, - struct regcache *regcache, int regno) +void +spu_linux_nat_target::fetch_registers (struct regcache *regcache, int regno) { int fd; ULONGEST addr; @@ -537,9 +558,8 @@ spu_fetch_inferior_registers (struct target_ops *ops, } /* Override the store_inferior_register routine. */ -static void -spu_store_inferior_registers (struct target_ops *ops, - struct regcache *regcache, int regno) +void +spu_linux_nat_target::store_registers (struct regcache *regcache, int regno) { int fd; ULONGEST addr; @@ -578,11 +598,11 @@ spu_store_inferior_registers (struct target_ops *ops, } /* Override the to_xfer_partial routine. */ -static enum target_xfer_status -spu_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 +spu_linux_nat_target::xfer_partial (enum target_object object, const char *annex, + gdb_byte *readbuf, const gdb_byte *writebuf, + ULONGEST offset, ULONGEST len, + ULONGEST *xfered_len) { if (object == TARGET_OBJECT_SPU) return spu_proc_xfer_spu (annex, readbuf, writebuf, offset, len, @@ -627,9 +647,9 @@ spu_xfer_partial (struct target_ops *ops, } /* Override the to_can_use_hw_breakpoint routine. */ -static int -spu_can_use_hw_breakpoint (struct target_ops *self, - enum bptype type, int cnt, int othertype) +int +spu_linux_nat_target::can_use_hw_breakpoint (enum bptype type, + int cnt, int othertype) { return 0; } @@ -638,19 +658,5 @@ spu_can_use_hw_breakpoint (struct target_ops *self, void _initialize_spu_nat (void) { - /* Generic ptrace methods. */ - struct target_ops *t; - t = inf_ptrace_target (); - - /* Add SPU methods. */ - t->to_post_attach = spu_child_post_attach; - t->to_post_startup_inferior = spu_child_post_startup_inferior; - t->to_wait = spu_child_wait; - t->to_fetch_registers = spu_fetch_inferior_registers; - t->to_store_registers = spu_store_inferior_registers; - t->to_xfer_partial = spu_xfer_partial; - t->to_can_use_hw_breakpoint = spu_can_use_hw_breakpoint; - - /* Register SPU target. */ - add_target (t); + add_target (&the_spu_linux_nat_target); }