public inbox for gdb-patches@sourceware.org
 help / color / mirror / Atom feed
From: Simon Marchi <simark@simark.ca>
To: John Baldwin <jhb@FreeBSD.org>, gdb-patches@sourceware.org
Subject: Re: [PATCH v4 06/13] gdb: Support XSAVE layouts for the current host in the FreeBSD x86 targets.
Date: Mon, 10 Apr 2023 22:23:26 -0400	[thread overview]
Message-ID: <198191af-c026-9e6a-767c-3418e8174959@simark.ca> (raw)
In-Reply-To: <d3080644-ff05-3ed3-2887-833936b60989@FreeBSD.org>



On 4/10/23 17:27, John Baldwin wrote:
> On 4/6/23 1:18 PM, Simon Marchi wrote:
>>> @@ -43,3 +46,51 @@ x86_fbsd_nat_target::low_new_fork (ptid_t parent, pid_t child)
>>>     child_state = x86_debug_reg_state (child);
>>>     *child_state = *parent_state;
>>>   }
>>> +
>>> +#ifdef PT_GETXSTATE_INFO
>>> +/* Implement the "xfer_partial" target_ops method.  */
>>> +
>>> +enum target_xfer_status
>>> +x86_fbsd_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)
>>> +{
>>> +  switch (object)
>>> +    {
>>> +    case TARGET_OBJECT_X86_XSAVE_LAYOUT:
>>> +      if (xsave_layout.sizeof_xsave == 0)
>>> +    return TARGET_XFER_E_IO;
>>
>> I'm wondering why you don't call probe_xsave_layout before using
>> xsave_layout here.  I guess because you assume that the child class will
>> have called probe_xsave_layout at some point before?
> 
> Yes.  Note that the default value of xsave_layout (all zeroes) will result
> in this failing to read the object if it hasn't been called (rather than
> undefined behavior).
> 
>> To make that more robust, could we access xsave_layout through a method
>> like:
>>
>>    const x86_xsave_layout &xsave_layout ();
>>
>> which would take care of the caching?  Callers wouldn't have to worry
>> about calling probe_xsave_layout before.  There could be another method
>> to access xsave_info.
> 
> Well, part of the trick here is that probe_xsave_layout takes a pid
> argument that it passes to ptrace () to fetch the layout, but at the
> point of xfer_partial I don't necessarily have a pid.  It's true that
> the only callers (the target ::read_description methods) all use
> inferior_ptid's pid, so I could perhaps use inferior_ptid directly,
> but that seems somewhat dubious.

Using inferior_ptid would probably be fine... I think?  It's how targets
know which thread's memory to read from or write to, for the
TARGET_OBJECT_MEMORY object.  The question is, will all calls to
xfer_partial with the TARGET_OBJECT_X86_XSAVE_LAYOUT object be done with
inferior_ptid set to a stopped thread that you can used to do the ptrace
query?

Ok, that made me think about an unlikely (but still possible
scenario) where the read_description target method can be called with
inferior_ptid == null_ptid:

(gdb) target native  # push the native target
(gdb) unset tdesc filename

I think the code as it is in this patch would try to call ptrace with
pid 0.

The approach of fetching the xsave layout using ptrace has this
particularity that you need a stopped thread to access it.  I'm
wondering, is there an advantage in fetching the xsave layout using
ptrace instead of the cpuid method?  The latter has the advantage of
working at any time.

>>> +
>>> +      if (offset > sizeof (xsave_layout))
>>> +    return TARGET_XFER_E_IO;
>>> +
>>> +      if (offset + len > sizeof (xsave_layout))
>>> +    len = sizeof (xsave_layout) - offset;
>>> +
>>> +      memcpy (readbuf, ((gdb_byte *) &xsave_layout) + offset, len);
>>> +      *xfered_len = len;
>>> +      return len == 0 ? TARGET_XFER_EOF : TARGET_XFER_OK;
>>> +    default:
>>> +      return fbsd_nat_target::xfer_partial (object, annex, readbuf, writebuf,
>>> +                        offset, len, xfered_len);
>>
>> Since this class inherits from x86bsd_nat_target<fbsd_nat_target>,
>> should this technically call
>> x86bsd_nat_target<fbsd_nat_target>::xfer_partial?  I don't really know,
>> I've never used this funky inheritance pattern myself.  And it won't
>> change anything in practice right now, because not target between this
>> one and fbsd_nat_target implements xfer_partial.
> 
> Oh, that is more correct, yes.

Ok, I think there was the same issue for the Linux class hierarchy too,
I don't remember if I pointed it out.

>>> diff --git a/gdb/x86-fbsd-nat.h b/gdb/x86-fbsd-nat.h
>>> index 0a1308f3584..1b5cdfc1a9b 100644
>>> --- a/gdb/x86-fbsd-nat.h
>>> +++ b/gdb/x86-fbsd-nat.h
>>> @@ -27,10 +32,32 @@
>>>     class x86_fbsd_nat_target : public x86bsd_nat_target<fbsd_nat_target>
>>>   {
>>> +  void low_new_fork (ptid_t parent, pid_t child) override;
>>> +
>>> +public:
>>>     bool supports_stopped_by_hw_breakpoint () override
>>>     { return true; }
>>
>> Is is on purpose that supports_stopped_by_hw_breakpoint is moved to the
>> public section?  I guess so, because it is public in reality
>> (inherited from target_ops).
> 
> Yes, that was an old bug, I can split that out into a separate patch though.

Bah... as you wish.  You can push an obvious patch if you'd like to keep
this one really clean.

Simon

  reply	other threads:[~2023-04-11  2:23 UTC|newest]

Thread overview: 58+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-03-18  1:08 [PATCH v4 00/13] Handle variable XSAVE layouts John Baldwin
2023-03-18  1:08 ` [PATCH v4 01/13] x86: Add an x86_xsave_layout structure to handle " John Baldwin
2023-03-28 11:35   ` George, Jini Susan
2023-04-10 19:28     ` John Baldwin
2023-04-06 19:09   ` Simon Marchi
2023-04-10 20:03     ` John Baldwin
2023-04-11  1:19       ` Simon Marchi
2023-04-11 14:23     ` Pedro Alves
2023-04-11 16:02       ` John Baldwin
2023-03-18  1:08 ` [PATCH v4 02/13] core: Support fetching TARGET_OBJECT_X86_XSAVE_LAYOUT from architectures John Baldwin
2023-04-06 19:28   ` Simon Marchi
2023-04-10 20:42     ` John Baldwin
2023-04-11  1:49       ` Simon Marchi
2023-04-11 16:06         ` John Baldwin
2023-04-11 16:21           ` Simon Marchi
2023-04-11 23:59             ` John Baldwin
2023-03-18  1:08 ` [PATCH v4 03/13] nat/x86-cpuid.h: Add x86_cpuid_count wrapper around __get_cpuid_count John Baldwin
2023-04-06 19:33   ` Simon Marchi
2023-04-10 20:49     ` John Baldwin
2023-04-11  1:49       ` Simon Marchi
2023-03-18  1:08 ` [PATCH v4 04/13] x86 nat: Add helper functions to save the XSAVE layout for the host John Baldwin
2023-04-06 19:40   ` Simon Marchi
2023-04-10 21:00     ` John Baldwin
2023-04-11  1:51       ` Simon Marchi
2023-03-18  1:08 ` [PATCH v4 05/13] gdb: Update x86 FreeBSD architectures to support XSAVE layouts John Baldwin
2023-04-06 19:54   ` Simon Marchi
2023-04-10 21:02     ` John Baldwin
2023-04-11  1:55       ` Simon Marchi
2023-03-18  1:08 ` [PATCH v4 06/13] gdb: Support XSAVE layouts for the current host in the FreeBSD x86 targets John Baldwin
2023-04-06 20:18   ` Simon Marchi
2023-04-10 21:27     ` John Baldwin
2023-04-11  2:23       ` Simon Marchi [this message]
2023-04-11 16:19         ` John Baldwin
2023-04-11 16:46           ` Simon Marchi
2023-04-11 21:37             ` John Baldwin
2023-04-11 22:35               ` John Baldwin
2023-04-12 14:35                 ` Simon Marchi
2023-03-18  1:08 ` [PATCH v4 07/13] gdb: Update x86 Linux architectures to support XSAVE layouts John Baldwin
2023-04-07  1:43   ` Simon Marchi
2023-04-10 21:29     ` John Baldwin
2023-03-18  1:09 ` [PATCH v4 08/13] gdb: Support XSAVE layouts for the current host in the Linux x86 targets John Baldwin
2023-04-07  1:54   ` Simon Marchi
2023-03-18  1:09 ` [PATCH v4 09/13] gdb: Use x86_xstate_layout to parse the XSAVE extended state area John Baldwin
2023-04-07  2:13   ` Simon Marchi
2023-04-10 21:40     ` John Baldwin
2023-03-18  1:09 ` [PATCH v4 10/13] gdbserver: Add a function to set the XSAVE mask and size John Baldwin
2023-04-12 15:08   ` Simon Marchi
2023-04-27 17:24     ` John Baldwin
2023-03-18  1:09 ` [PATCH v4 11/13] gdbserver: Refactor the legacy region within the xsave struct John Baldwin
2023-04-12 18:34   ` Simon Marchi
2023-04-27 19:51     ` John Baldwin
2023-03-18  1:09 ` [PATCH v4 12/13] gdbserver: Read offsets of the XSAVE extended region via CPUID John Baldwin
2023-04-11 14:46   ` Pedro Alves
2023-04-11 16:25     ` John Baldwin
2023-04-12 19:11   ` Simon Marchi
2023-04-12 21:07     ` John Baldwin
2023-04-13 15:07       ` Simon Marchi
2023-03-18  1:09 ` [PATCH v4 13/13] x86: Remove X86_XSTATE_SIZE and related constants John Baldwin

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=198191af-c026-9e6a-767c-3418e8174959@simark.ca \
    --to=simark@simark.ca \
    --cc=gdb-patches@sourceware.org \
    --cc=jhb@FreeBSD.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).