From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from simark.ca by simark.ca with LMTP id BHvgMHnOal83MgAAWB0awg (envelope-from ) for ; Wed, 23 Sep 2020 00:26:33 -0400 Received: by simark.ca (Postfix, from userid 112) id D90AB1E790; Wed, 23 Sep 2020 00:26:32 -0400 (EDT) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on simark.ca X-Spam-Level: X-Spam-Status: No, score=-0.9 required=5.0 tests=DKIM_SIGNED,FREEMAIL_FROM, MAILING_LIST_MULTI,T_DKIM_INVALID,URIBL_BLOCKED autolearn=unavailable autolearn_force=no version=3.4.2 Received: from sourceware.org (server2.sourceware.org [8.43.85.97]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by simark.ca (Postfix) with ESMTPS id EB5BD1EF4D for ; Wed, 23 Sep 2020 00:26:08 -0400 (EDT) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id B33B7398D037; Wed, 23 Sep 2020 04:26:04 +0000 (GMT) Received: from mout.gmx.net (mout.gmx.net [212.227.15.19]) by sourceware.org (Postfix) with ESMTPS id DEF1A398D012 for ; Wed, 23 Sep 2020 04:25:59 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org DEF1A398D012 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=gmx.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=n54@gmx.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.net; s=badeba3b8450; t=1600835156; bh=dVwE286Al7VvDK6T2zPNrCBIEgYVNu/ew2B/L8Rj7tU=; h=X-UI-Sender-Class:From:To:Cc:Subject:Date:In-Reply-To:References; b=Wd+RbJdNfbsUT3w8y57EXsUzAxnTdg51mx34x+TaOmv9kvw7u4z8sI6GmxX5pzLS/ P9CbFhaEK6c5P8nfh/GJnw21aXVgPewQ1E/ahJ1dNmHEPrAmBGXuvMoOJL48mKd1BF EVunlweP8HSqVXOn8nja+N81Yeee1u44Nn3VEkDA= X-UI-Sender-Class: 01bb95c1-4bf8-414a-932a-4f6e2808ef9c Received: from localhost.localdomain ([89.79.191.25]) by mail.gmx.com (mrgmx004 [212.227.17.184]) with ESMTPSA (Nemesis) id 1MoO2E-1knRcK0jbE-00ooPm; Wed, 23 Sep 2020 06:25:56 +0200 From: Kamil Rytarowski To: gdb-patches@sourceware.org Subject: [PATCH 3/5] Refactor the NetBSD amd64 gdbserver support Date: Wed, 23 Sep 2020 06:25:13 +0200 Message-Id: <20200923042515.28245-4-n54@gmx.com> X-Mailer: git-send-email 2.28.0 In-Reply-To: <20200923042515.28245-1-n54@gmx.com> References: <20200923042515.28245-1-n54@gmx.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Provags-ID: V03:K1:KeJfJcefsGQqxxUL8K2xWa/9FiD70cXf8tapLNAhdoQha7jDyLj ftxCjAHQnu1UhENV7kTgOrwh6RwJmNlrJhecn4bWtDt/ORfMZbVwrA5a4w2Y8urv64TST7x kthscieC7G1e3P7KRtPe0ZSw8IhJu3FxkU8R6FVEmxrOaSrPzQYcVOVzLs6zT4uoXMKsxZd q1hTtTLLhTp0tB1pocUOg== X-UI-Out-Filterresults: notjunk:1;V03:K0:BljLYrLQLxU=:BGjhe22tnLBXMm+OBX0q+8 SyfYWmyjO4kzmPrRev1Zn8Tl2UoR4vKfDbWNUkRXs5VoMvdgbZj5BagVthkHYfUjigcs6EPn0 PHLIIUU9ySIupPlIrYXcEmxqmHojhPPnzQpdnAIElKKRtNiz2WDfEHJqI1hnHNvQwhsIZaer1 eEY5TJdmA8YnB3cEUNsSQbk9iYxyg/HgLR+gqrce/eOftJgs0VbJG2UT9y2Qec31luntGjXtJ uBxAQZhZlKSNuzauz601DmlSD0S4DrOlr8r086hPy3AEoLcs6TPMquQLl2tH443dUSg/+v3uP +tiHJb8cfExPk5bMfNMY+CD/UYcaIJlCnVVIRuojIq1rIo+qgTIIvZz+QIBQiga303lxOfqzy fMSE33OSafJ1F/tbozGdPvGMCULKu4RkTXwglmxJkFUswJ47fWHqZdCHFqxeBvlituPXgYaA1 UXNb7Tx383tj22NlNKQIn/Qwmvvouxk7GCRipAEmbnL8/BSUtvjAoMokaRYO7PdOfrZdHxTks 1+5SBeb6IDx+MLn2CRHTUKP/sgszXYBUcMmIuywpRyA/eiApvQInjXBV2iB1yVfjJS0fTtnWB 38IjxtZvbQ6eDy9kOdFyC/4sXFubShUGi1NmWJzeS5z5h19MmuysI1qLAPlCBoqgFbSp1GM8H e3/f28M+VFZ+G6wklmU/sFIvbyf2L82mje6wS0b2s43QvkxToGLh5hqBT5YY0AdAVQouEGWgJ hSN5hTNqYCCyrNZ0Ne2Nqjj6r8VAbiVCeZ6Q82TnuKHWynOhbekYB+tfY23wJNJHi+Lni08UC 4XfERakqmldtIvMKDybeNJYP85taDB33lORbwC6G4xExG/9ywzVQv2ColPqdeA0R1Er18cdsv /WHl7sPexl4VmlbpfxfVzWIKRLYbVq70L5PkyTiEgndRmkydvnuJz9ZznQENAVgrj514R2cJb dUmRCsDVhvauizCG500OtPvBtjKYX1U089fLaKvtjiwRKS5VgFPW/L50Cehv1VeYQSHYWv48f MsugO4fUssUaxG+Dn2RtcOsttaGvJpIcaXFeGf+U9uk++RDg6mME16U0INHeMZfLQf4pPILUH bCdsFWEwA+vqUMaJjvXX0TU/yypSPslKvJjQ75IMtXTtKUNhkGuEE9VQIDmKU0nIfGcb5tErA MJnTzZVxyVu3n6WJKyQcF0aKPm7IUNltHTszwn7VFbsa1RLynh/9JQ3j+V/fTJP8S/5LKjing UiKWJ1nGdN8RQ09Q4 X-BeenThere: gdb-patches@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: gdb-patches-bounces@sourceware.org Sender: "Gdb-patches" Replace the pre-C++ construct of netbsd_target_ops, netbsd_regset_info and netbsd_tdesc with C++ inheritance approach found in the Linux gdbserver code. Add netbsd_amd64_target, that inherits from the netbsd_process_target class and add proper singleton object for the_netbsd_target, initialized from netbsd_amd64_target. Call low_arch_setup () on post process creation, which sets machine specific properties of the traced process. Remove global singleton the_netbsd_target object from the generic gdbserver code. This refactoring introduces no functional change from the end-user point of view. gdbserver/ChangeLog: * netbsd-amd64-low.cc (netbsd_x86_64_arch_setup): Remove. (netbsd_target_regsets): Now const. (the_low_target): Remove. (class netbsd_amd64_target, the_netbsd_amd64_target) (the_netbsd_target): Add. * netbsd-low.cc (netbsd_process_target::post_create_inferior): Call low_arch_setup (). (netbsd_process_target::fetch_registers) (netbsd_process_target::store_registers, initialize_low): Update. (the_netbsd_target): Remove. * netbsd-low.h (netbsd_target_regsets, netbsd_target_ops) (the_low_target, netbsd_tdesc): Remove. (netbsd_process_target::get_regs_info) (netbsd_process_target::low_arch_setup): Add. =2D-- gdbserver/ChangeLog | 17 +++++++++++ gdbserver/netbsd-amd64-low.cc | 53 ++++++++++++++++++++++++----------- gdbserver/netbsd-low.cc | 13 ++++----- gdbserver/netbsd-low.h | 30 ++++++-------------- 4 files changed, 67 insertions(+), 46 deletions(-) diff --git a/gdbserver/ChangeLog b/gdbserver/ChangeLog index d47fcfd300a..5eb0eef82b2 100644 =2D-- a/gdbserver/ChangeLog +++ b/gdbserver/ChangeLog @@ -1,3 +1,20 @@ +2020-09-22 Kamil Rytarowski + + * netbsd-amd64-low.cc (netbsd_x86_64_arch_setup): Remove. + (netbsd_target_regsets): Now const. + (the_low_target): Remove. + (class netbsd_amd64_target, the_netbsd_amd64_target) + (the_netbsd_target): Add. + * netbsd-low.cc (netbsd_process_target::post_create_inferior): Call + low_arch_setup (). + (netbsd_process_target::fetch_registers) + (netbsd_process_target::store_registers, initialize_low): Update. + (the_netbsd_target): Remove. + * netbsd-low.h (netbsd_target_regsets, netbsd_target_ops) + (the_low_target, netbsd_tdesc): Remove. + (netbsd_process_target::get_regs_info) + (netbsd_process_target::low_arch_setup): Add. + 2020-09-18 Tom Tromey * netbsd-low.h (class netbsd_process_target) : Update. diff --git a/gdbserver/netbsd-amd64-low.cc b/gdbserver/netbsd-amd64-low.cc index 9b8ea9b8aa6..2324bdbbfea 100644 =2D-- a/gdbserver/netbsd-amd64-low.cc +++ b/gdbserver/netbsd-amd64-low.cc @@ -155,22 +155,9 @@ netbsd_x86_64_store_gregset (struct regcache *regcach= e, const char *buf) netbsd_x86_64_supply_gp (AMD64_GS_REGNUM, GS); } -/* Implements the netbsd_target_ops.arch_setup routine. */ - -static void -netbsd_x86_64_arch_setup (void) -{ - struct target_desc *tdesc - =3D amd64_create_target_description (X86_XSTATE_SSE_MASK, false, fals= e, false); - - init_target_desc (tdesc, amd64_expedite_regs); - - netbsd_tdesc =3D tdesc; -} - /* Description of all the x86-netbsd register sets. */ -struct netbsd_regset_info netbsd_target_regsets[] =3D +const static struct netbsd_regset_info netbsd_target_regsets[] =3D { /* General Purpose Registers. */ {PT_GETREGS, PT_SETREGS, sizeof (struct reg), @@ -179,9 +166,41 @@ struct netbsd_regset_info netbsd_target_regsets[] =3D {0, 0, -1, NULL, NULL } }; -/* The netbsd_target_ops vector for x86-netbsd. */ +/* NetBSD target op definitions for the amd64 architecture. */ -struct netbsd_target_ops the_low_target =3D +class netbsd_amd64_target : public netbsd_process_target { - netbsd_x86_64_arch_setup, +protected: + const netbsd_regset_info *get_regs_info () override; + + void low_arch_setup () override; }; + +/* Return the information to access registers. */ + +const netbsd_regset_info * +netbsd_amd64_target::get_regs_info () +{ + return netbsd_target_regsets; +} + +/* Architecture-specific setup for the current process. */ + +void +netbsd_amd64_target::low_arch_setup () +{ + target_desc *tdesc + =3D amd64_create_target_description (X86_XSTATE_SSE_MASK, false, fals= e, false); + + init_target_desc (tdesc, amd64_expedite_regs); + + current_process ()->tdesc =3D tdesc; +} + +/* The singleton target ops object. */ + +static netbsd_amd64_target the_netbsd_amd64_target; + +/* The NetBSD target ops object. */ + +netbsd_process_target *the_netbsd_target =3D &the_netbsd_amd64_target; diff --git a/gdbserver/netbsd-low.cc b/gdbserver/netbsd-low.cc index 3eb2c0f25f6..58bfcad4fd9 100644 =2D-- a/gdbserver/netbsd-low.cc +++ b/gdbserver/netbsd-low.cc @@ -114,6 +114,8 @@ netbsd_process_target::post_create_inferior () { pid_t pid =3D current_process ()->pid; netbsd_nat::enable_proc_events (pid); + + low_arch_setup (); } /* Implement the attach target_ops method. */ @@ -504,7 +506,7 @@ netbsd_process_target::thread_alive (ptid_t ptid) void netbsd_process_target::fetch_registers (struct regcache *regcache, int re= gno) { - struct netbsd_regset_info *regset =3D netbsd_target_regsets; + const netbsd_regset_info *regset =3D get_regs_info(); ptid_t inferior_ptid =3D ptid_of (current_thread); while (regset->size >=3D 0) @@ -525,7 +527,7 @@ netbsd_process_target::fetch_registers (struct regcach= e *regcache, int regno) void netbsd_process_target::store_registers (struct regcache *regcache, int re= gno) { - struct netbsd_regset_info *regset =3D netbsd_target_regsets; + const netbsd_regset_info *regset =3D get_regs_info(); ptid_t inferior_ptid =3D ptid_of (current_thread); while (regset->size >=3D 0) @@ -1317,13 +1319,8 @@ netbsd_process_target::supports_read_auxv () return true; } -/* The NetBSD target ops object. */ - -static netbsd_process_target the_netbsd_target; - void initialize_low () { - set_target_ops (&the_netbsd_target); - the_low_target.arch_setup (); + set_target_ops (the_netbsd_target); } diff --git a/gdbserver/netbsd-low.h b/gdbserver/netbsd-low.h index 96ad6d92474..c229a0f9f61 100644 =2D-- a/gdbserver/netbsd-low.h +++ b/gdbserver/netbsd-low.h @@ -35,21 +35,6 @@ struct netbsd_regset_info void (*store_function) (struct regcache *regcache, const char *buf); }; -/* A list of regsets for the target being debugged, terminated by an entr= y - where the size is negative. - - This list should be created by the target-specific code. */ - -extern struct netbsd_regset_info netbsd_target_regsets[]; - -/* The target-specific operations for NetBSD support. */ - -struct netbsd_target_ops -{ - /* Architecture-specific setup. */ - void (*arch_setup) (); -}; - /* Target ops definitions for a NetBSD target. */ class netbsd_process_target : public process_stratum_target @@ -141,14 +126,17 @@ class netbsd_process_target : public process_stratum= _target const char *thread_name (ptid_t thread) override; bool supports_catch_syscall () override; -}; -/* The inferior's target description. This is a global because the - NetBSD ports support neither bi-arch nor multi-process. */ +protected: + /* The architecture-specific "low" methods are listed below. */ -extern struct netbsd_target_ops the_low_target; + /* Return the information to access registers. */ + virtual const netbsd_regset_info *get_regs_info () =3D 0; + + /* Architecture-specific setup for the current process. */ + virtual void low_arch_setup () =3D 0; +}; -/* XXX: multilib */ -extern const struct target_desc *netbsd_tdesc; +extern netbsd_process_target *the_netbsd_target; #endif /* GDBSERVER_NETBSD_LOW_H */ =2D- 2.28.0