From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wr1-f53.google.com (mail-wr1-f53.google.com [209.85.221.53]) by sourceware.org (Postfix) with ESMTPS id 5E16E385C40F for ; Sat, 10 Jul 2021 19:42:21 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 5E16E385C40F Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=palves.net Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmail.com Received: by mail-wr1-f53.google.com with SMTP id d2so17649604wrn.0 for ; Sat, 10 Jul 2021 12:42:21 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:from:to:references:message-id:date :user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=BN3EoJPnWHqg3RPSQgirKi+6x9tLkh20O73pVcdHFLI=; b=r4ecI0orAazhW3uIFHtHo4NFaAKcYWabH7oBM3cbbGgibG0Sn3lM/YrCIoUznV5QJJ rFeOJNa+3S9QCj2zp8WlekCIjr5Y9FGYwCVlB2ADmBJ+51OGd11wICACxsIqA9sEAfb9 rm1yzoQHk0GKmoUyoX6nhLV4JXpFnQfuLF+syV530VBPLT6Rk17gWlFkFUUy1uSHvtaF XVXewwJLxb43fN9P4zIXjDBq+CqbvMpkOnRYxvWrpI5uJOUalPzzQB3h5FtI0dCfwXMy pRyRedTSYMNuxcyUc28b7bOP7GB4DVfPGZdfFw3QEGU1xg10w+Iaby3eyzv98RI5Mxah fULQ== X-Gm-Message-State: AOAM532MGfdVHzySMU2cNwolpAkeM6QDF4CKSWl7I053licjsF4sf3tj u1JkBgMd4xuZ7jc0s7/jNUJXGV8B7i/7Gw== X-Google-Smtp-Source: ABdhPJzQZ7TqOxbe/Ssi90oqgbIFfXkke3BosmhjiBqL6VDjkc7ydcp6VW9Ike3gUnXUSaqDT5cC8w== X-Received: by 2002:adf:b60b:: with SMTP id f11mr30031283wre.203.1625946139795; Sat, 10 Jul 2021 12:42:19 -0700 (PDT) Received: from ?IPv6:2001:8a0:f932:6a00:6b6e:c7b6:c5a7:aac3? ([2001:8a0:f932:6a00:6b6e:c7b6:c5a7:aac3]) by smtp.gmail.com with ESMTPSA id p5sm9512173wrd.25.2021.07.10.12.42.18 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Sat, 10 Jul 2021 12:42:18 -0700 (PDT) Subject: Re: [PATCH 2/5] fbsd-nat: Add helper functions to fetch and store register sets. From: Pedro Alves To: John Baldwin , gdb-patches@sourceware.org References: <20210528202614.2081-1-jhb@FreeBSD.org> <20210528202614.2081-3-jhb@FreeBSD.org> Message-ID: <86b3abdb-9924-209e-e918-386b4687ea86@palves.net> Date: Sat, 10 Jul 2021 20:42:17 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.11.0 MIME-Version: 1.0 In-Reply-To: <20210528202614.2081-3-jhb@FreeBSD.org> Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit X-Spam-Status: No, score=-10.2 required=5.0 tests=BAYES_00, FREEMAIL_FORGED_FROMDOMAIN, FREEMAIL_FROM, GIT_PATCH_0, HEADER_FROM_DIFFERENT_DOMAINS, KAM_DMARC_STATUS, NICE_REPLY_A, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org 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: , X-List-Received-Date: Sat, 10 Jul 2021 19:42:26 -0000 On 2021-05-28 9:26 p.m., John Baldwin wrote: > In particular, this supports register sets described by a regcache_map > which are fetched and stored with dedicated ptrace operations. These > functions are intended to be used in architecture-specific > fetch_registers and store_registers target methods. > > gdb/ChangeLog: > > * fbsd-nat.h (fetch_register_set, store_register_set): New. > --- > gdb/ChangeLog | 4 ++++ > gdb/fbsd-nat.h | 44 ++++++++++++++++++++++++++++++++++++++++++++ > 2 files changed, 48 insertions(+) > > diff --git a/gdb/ChangeLog b/gdb/ChangeLog > index 2e61aead178..cb48a7f242d 100644 > --- a/gdb/ChangeLog > +++ b/gdb/ChangeLog > @@ -1,3 +1,7 @@ > +2021-05-28 John Baldwin > + > + * fbsd-nat.h (fetch_register_set, store_register_set): New. > + > 2021-05-28 John Baldwin > > * regcache.c (regcache_map_supplies): New. > diff --git a/gdb/fbsd-nat.h b/gdb/fbsd-nat.h > index 772655d320e..3cca361df4a 100644 > --- a/gdb/fbsd-nat.h > +++ b/gdb/fbsd-nat.h > @@ -21,6 +21,8 @@ > #define FBSD_NAT_H > > #include "inf-ptrace.h" > +#include "regcache.h" > +#include "regset.h" > #include > #include > > @@ -98,6 +100,48 @@ class fbsd_nat_target : public inf_ptrace_target > #endif > > bool supports_multi_process () override; > + > +protected: > + template > + void fetch_register_set (struct regcache *regcache, int regnum, int fetch_op, > + const struct regset *regset) > + { > + const struct regcache_map_entry *map = > + (const struct regcache_map_entry *) regset->regmap; > + pid_t pid = get_ptrace_pid (regcache->ptid ()); > + R regs; > + > + if (regnum == -1 || regcache_map_supplies (map, regnum, regcache->arch(), > + sizeof(regs))) > + { > + if (ptrace (fetch_op, pid, (PTRACE_TYPE_ARG3) ®s, 0) == -1) > + perror_with_name (_("Couldn't get registers")); > + > + regcache->supply_regset (regset, regnum, ®s, sizeof (regs)); > + } > + } BTW, AFAICT, you could de-duplicate most of this template function by splitting it in two, with the main worker part not needing doesn't need to care about R's type. Something like: private: void fetch_register_set (struct regcache *regcache, int regnum, int fetch_op, const struct regset *regset, void *regs, size_t sizeof_regs) { const struct regcache_map_entry *map = (const struct regcache_map_entry *) regset->regmap; pid_t pid = get_ptrace_pid (regcache->ptid ()); if (regnum == -1 || regcache_map_supplies (map, regnum, regcache->arch(), sizeof_regs)) { if (ptrace (fetch_op, pid, (PTRACE_TYPE_ARG3) regs, 0) == -1) perror_with_name (_("Couldn't get registers")); regcache->supply_regset (regset, regnum, regs, sizeof (regs)); } } protected: template void fetch_register_set (struct regcache *regcache, int regnum, int fetch_op, const struct regset *regset) { R regs; fetch_register_set (regcache, regnum, fetch_op, regset, ®s, sizeof (regs)); }