From: "Willgerodt, Felix" <felix.willgerodt@intel.com>
To: Andrew Burgess <aburgess@redhat.com>,
"gdb-patches@sourceware.org" <gdb-patches@sourceware.org>
Cc: John Baldwin <jhb@FreeBSD.org>
Subject: RE: [PATCHv5 09/11] gdbserver: update target description creation for x86/linux
Date: Wed, 8 May 2024 07:47:14 +0000 [thread overview]
Message-ID: <MN2PR11MB4566211F1B5A049AC5CAA4F68EE52@MN2PR11MB4566.namprd11.prod.outlook.com> (raw)
In-Reply-To: <87seytu2ca.fsf@redhat.com>
> -----Original Message-----
> From: Andrew Burgess <aburgess@redhat.com>
> Sent: Dienstag, 7. Mai 2024 16:25
> To: Willgerodt, Felix <felix.willgerodt@intel.com>; gdb-patches@sourceware.org
> Cc: John Baldwin <jhb@FreeBSD.org>
> Subject: RE: [PATCHv5 09/11] gdbserver: update target description creation for
> x86/linux
>
> "Willgerodt, Felix" <felix.willgerodt@intel.com> writes:
>
> >> -----Original Message-----
> >> From: Andrew Burgess <aburgess@redhat.com>
> >> Sent: Freitag, 26. April 2024 17:02
> >> To: gdb-patches@sourceware.org
> >> Cc: Andrew Burgess <aburgess@redhat.com>; Willgerodt, Felix
> >> <felix.willgerodt@intel.com>; John Baldwin <jhb@FreeBSD.org>
> >> Subject: [PATCHv5 09/11] gdbserver: update target description creation for
> >> x86/linux
> >>
> >> This commit is part of a series which aims to share more of the target
> >> description creation between GDB and gdbserver for x86/Linux.
> >>
> >> After some refactoring earlier in this series the shared
> >> x86_linux_tdesc_for_tid function was added into nat/x86-linux-tdesc.c.
> >> However, this function still relies on amd64_linux_read_description
> >> and i386_linux_read_description which are implemented separately for
> >> both gdbserver and GDB. Given that at their core, all these functions
> >> do is:
> >>
> >> 1. take an xcr0 value as input,
> >> 2. mask out some feature bits,
> >> 3. look for a cached pre-generated target description and return it
> >> if found,
> >> 4. if no cached target description is found then call either
> >> amd64_create_target_description or
> >> i386_create_target_description to create a new target
> >> description, which is then added to the cache. Return the newly
> >> created target description.
> >>
> >> The inner functions amd64_create_target_description and
> >> i386_create_target_description are already shared between GDB and
> >> gdbserver (in the gdb/arch/ directory), so the only thing that
> >> the *_read_description functions really do is add the caching layer,
> >> and it feels like this really could be shared.
> >>
> >> However, we have a small problem.
> >>
> >> On the GDB side we create target descriptions using a different set of
> >> cpu features than on the gdbserver side! This means that for the
> >> exact same target, we might get a different target description when
> >> using native GDB vs using gdbserver. This surely feels like a
> >> mistake, I would expect to get the same target description on each.
> >>
> >> The table below shows the number of possible different target
> >> descriptions that we can create on the GDB side vs on the gdbserver
> >> side for each target type:
> >>
> >> | GDB | gdbserver
> >> ------|-----|----------
> >> i386 | 64 | 7
> >> amd64 | 32 | 7
> >> x32 | 16 | 7
> >
> > I would have somehow expected to have the highest number for 64-bit
> > CPUs. As it should include 32-bit and x32.
> > Do you know why that isn't the case and 32-bit has double?
> > Or is my problem that this is reflecting GDB code, which shares stuff
> > between amd64 and i386?
>
> The table reflects the different tdesc split by category, not the total
> number that a user might get on a particular system.
>
> So on an _actual_ i386 CPU, then sure, the user will (on the GDB side)
> only have a choice of 64 different tdesc.
>
> On an _actual_ amd64 CPU the user could run an i386 compiled binary, in
> which case GDB will return one of those same 64 tdesc. Or the user
> might run an amd64 compiled binary, in which case GDB will return one of
> the 32 amd64 tdesc.
>
> So yes, from a user's point of view on amd64 there are 96 different
> tdesc, but GDB splits these into 3 different categories (i386, amd64,
> and x32), which is what this table represents.
Thanks for explaining. Understood.
> > Maybe this is also solved with the comments I made in code below.
> >
> >
> >> So in theory, all I want to do is move the GDB version
> >> of *_read_description into the arch/ directory and have gdbserver use
> >> that, then both GDB and gdbserver would be able to create any of the
> >> possible target descriptions.
> >>
> >> Unfortunately it's a little more complex than that due to the in
> >> process agent (IPA).
> >>
> >> When the IPA is in use, gdbserver sends a target description index to
> >> the IPA, and the IPA uses this to find the correct target description
> >> to use.
> >>
> >> ** START OF AN ASIDE **
> >>
> >> Back in the day I suspect this approach made perfect sense. However
> >> since this commit:
> >>
> >> commit a8806230241d201f808d856eaae4d44088117b0c
> >> Date: Thu Dec 7 17:07:01 2017 +0000
> >>
> >> Initialize target description early in IPA
> >>
> >> I think passing the index is now more trouble than its worth.
> >>
> >> We used to pass the index, and then use that index to lookup which
> >> target description to instantiate and use. However, the above commit
> >> fixed an issue where we can't call malloc() within (certain parts of)
> >> the IPA (apparently), so instead we now pre-compute _every_ possible
> >> target description within the IPA. The index is now only used to
> >> lookup which of the (many) pre-computed target descriptions to use.
> >>
> >> It would (I think) have been easier all around if the IPA just
> >> self-inspected, figured out its own xcr0 value, and used that to
> >> create the one target description that is required. So long as the
> >> xcr0 to target description code is shared (at compile time) with
> >> gdbserver, then we can be sure that the IPA will derive the same
> >> target description as gdbserver, and we would avoid all this index
> >> passing business, which has made this commit so very, very painful.
> >>
> >> ** END OF AN ASIDE **
> >>
> >> Currently then for x86/linux, gdbserver sends a number between 0 and 7
> >> to the IPA, and the IPA uses this to create a target description.
> >>
> >> However, I am proposing that gdbserver should now create one of (up
> >> to) 64 different target descriptions for i386, so this 0 to 7 index
> >> isn't going to be good enough any more (amd64 and x32 have slightly
> >> fewer possible target descriptions, but still more than 8, so the
> >> problem is the same).
> >>
> >> For a while I wondered if I was going to have to try and find some
> >> backward compatible solution for this mess. But after seeing how
> >> lightly the IPA is actually documented, I wonder if it is not the case
> >> that there is a tight coupling between a version of gdbserver and a
> >> version of the IPA? At least I'm hoping so.
> >>
> >> In this commit I have thrown out the old IPA target description index
> >> numbering scheme, and switched to a completely new numbering scheme.
> >> Instead of the index that is passed being arbitrary, the index is
> >> instead calculated from the set of cpu features that are present on
> >> the target. Within the IPA we can then reverse this logic to recreate
> >> the xcr0 value based on the index, and from the xcr0 value we can
> >> choose the correct target description.
> >>
> >> With the gdbserver to IPA numbering scheme issue resolved I have then
> >> update the gdbserver versions of amd64_linux_read_description and
> >> i386_linux_read_description so that they create target descriptions
> >> using the same set of cpu features as GDB itself.
> >>
> >> After this gdbserver should now always come up with the same target
> >> description as GDB does on any x86/Linux target.
> >>
> >> This commit does not introduce any new code sharing between GDB and
> >> gdbserver as previous commits in this series have done. Instead this
> >> commit is all about bringing GDB and gdbserver into alignment
> >> functionally so that the next commit(s) can merge the GDB and
> >> gdbserver versions of these functions.
> >>
> >> Approved-By: John Baldwin <jhb@FreeBSD.org>
> >> ---
> >> gdbserver/linux-amd64-ipa.cc | 43 +----
> >> gdbserver/linux-i386-ipa.cc | 23 +--
> >> gdbserver/linux-x86-low.cc | 15 +-
> >> gdbserver/linux-x86-tdesc.cc | 316 +++++++++++++++++++++++++----------
> >> gdbserver/linux-x86-tdesc.h | 49 +++---
> >> 5 files changed, 278 insertions(+), 168 deletions(-)
> >>
> >> diff --git a/gdbserver/linux-amd64-ipa.cc b/gdbserver/linux-amd64-ipa.cc
> >> index df5e6aca081..0c80812cc6f 100644
> >> --- a/gdbserver/linux-amd64-ipa.cc
> >> +++ b/gdbserver/linux-amd64-ipa.cc
> >> @@ -164,47 +164,21 @@ supply_static_tracepoint_registers (struct regcache
> >> *regcache,
> >>
> >> #endif /* HAVE_UST */
> >>
> >> -#if !defined __ILP32__
> >> -/* Map the tdesc index to xcr0 mask. */
> >> -static uint64_t idx2mask[X86_TDESC_LAST] = {
> >> - X86_XSTATE_X87_MASK,
> >> - X86_XSTATE_SSE_MASK,
> >> - X86_XSTATE_AVX_MASK,
> >> - X86_XSTATE_MPX_MASK,
> >> - X86_XSTATE_AVX_MPX_MASK,
> >> - X86_XSTATE_AVX_AVX512_MASK,
> >> - X86_XSTATE_AVX_MPX_AVX512_PKU_MASK,
> >> -};
> >> -#endif
> >> -
> >> /* Return target_desc to use for IPA, given the tdesc index passed by
> >> gdbserver. */
> >>
> >> const struct target_desc *
> >> get_ipa_tdesc (int idx)
> >> {
> >> - if (idx >= X86_TDESC_LAST)
> >> - {
> >> - internal_error ("unknown ipa tdesc index: %d", idx);
> >> - }
> >> + uint64_t xcr0 = x86_linux_tdesc_idx_to_xcr0 (idx);
> >>
> >> #if defined __ILP32__
> >> - switch (idx)
> >> - {
> >> - case X86_TDESC_SSE:
> >> - return amd64_linux_read_description (X86_XSTATE_SSE_MASK, true);
> >> - case X86_TDESC_AVX:
> >> - return amd64_linux_read_description (X86_XSTATE_AVX_MASK, true);
> >> - case X86_TDESC_AVX_AVX512:
> >> - return amd64_linux_read_description (X86_XSTATE_AVX_AVX512_MASK,
> >> true);
> >> - default:
> >> - break;
> >> - }
> >> + bool is_x32 = true;
> >> #else
> >> - return amd64_linux_read_description (idx2mask[idx], false);
> >> + bool is_x32 = false;
> >> #endif
> >>
> >> - internal_error ("unknown ipa tdesc index: %d", idx);
> >> + return amd64_linux_read_description (xcr0, is_x32);
> >> }
> >>
> >> /* Allocate buffer for the jump pads. The branch instruction has a
> >> @@ -272,11 +246,10 @@ void
> >> initialize_low_tracepoint (void)
> >> {
> >> #if defined __ILP32__
> >> - amd64_linux_read_description (X86_XSTATE_SSE_MASK, true);
> >> - amd64_linux_read_description (X86_XSTATE_AVX_MASK, true);
> >> - amd64_linux_read_description (X86_XSTATE_AVX_AVX512_MASK, true);
> >> + for (auto i = 0; i < x86_linux_x32_tdesc_count (); i++)
> >> + amd64_linux_read_description (x86_linux_tdesc_idx_to_xcr0 (i), true);
> >> #else
> >> - for (auto i = 0; i < X86_TDESC_LAST; i++)
> >> - amd64_linux_read_description (idx2mask[i], false);
> >> + for (auto i = 0; i < x86_linux_amd64_tdesc_count (); i++)
> >> + amd64_linux_read_description (x86_linux_tdesc_idx_to_xcr0 (i), false);
> >
> > I know this was already here and I know there are different opinions on this.
> > But to me using auto here (and in similar locations in this patch) is just wrong.
> > So I would vote for making this a proper type.
> > But this is a bit of my personal "pet peeve" ;)
> >
> >
> >> #endif
> >> }
> >> diff --git a/gdbserver/linux-i386-ipa.cc b/gdbserver/linux-i386-ipa.cc
> >> index aa346fc9bc3..c1c3152fb04 100644
> >> --- a/gdbserver/linux-i386-ipa.cc
> >> +++ b/gdbserver/linux-i386-ipa.cc
> >> @@ -245,28 +245,15 @@ initialize_fast_tracepoint_trampoline_buffer (void)
> >> }
> >> }
> >>
> >> -/* Map the tdesc index to xcr0 mask. */
> >> -static uint64_t idx2mask[X86_TDESC_LAST] = {
> >> - X86_XSTATE_X87_MASK,
> >> - X86_XSTATE_SSE_MASK,
> >> - X86_XSTATE_AVX_MASK,
> >> - X86_XSTATE_MPX_MASK,
> >> - X86_XSTATE_AVX_MPX_MASK,
> >> - X86_XSTATE_AVX_AVX512_MASK,
> >> - X86_XSTATE_AVX_MPX_AVX512_PKU_MASK,
> >> -};
> >> -
> >> /* Return target_desc to use for IPA, given the tdesc index passed by
> >> gdbserver. */
> >>
> >> const struct target_desc *
> >> get_ipa_tdesc (int idx)
> >> {
> >> - if (idx >= X86_TDESC_LAST)
> >> - {
> >> - internal_error ("unknown ipa tdesc index: %d", idx);
> >> - }
> >> - return i386_linux_read_description (idx2mask[idx]);
> >> + uint64_t xcr0 = x86_linux_tdesc_idx_to_xcr0 (idx);
> >> +
> >> + return i386_linux_read_description (xcr0);
> >> }
> >>
> >> /* Allocate buffer for the jump pads. On i386, we can reach an arbitrary
> >> @@ -288,6 +275,6 @@ void
> >> initialize_low_tracepoint (void)
> >> {
> >> initialize_fast_tracepoint_trampoline_buffer ();
> >> - for (auto i = 0; i < X86_TDESC_LAST; i++)
> >> - i386_linux_read_description (idx2mask[i]);
> >> + for (auto i = 0; i < x86_linux_i386_tdesc_count (); i++)
> >> + i386_linux_read_description (x86_linux_tdesc_idx_to_xcr0 (i));
> >> }
> >> diff --git a/gdbserver/linux-x86-low.cc b/gdbserver/linux-x86-low.cc
> >> index 68d2f13537c..6e23a53118b 100644
> >> --- a/gdbserver/linux-x86-low.cc
> >> +++ b/gdbserver/linux-x86-low.cc
> >> @@ -2882,14 +2882,17 @@ x86_target::get_ipa_tdesc_idx ()
> >> struct regcache *regcache = get_thread_regcache (current_thread, 0);
> >> const struct target_desc *tdesc = regcache->tdesc;
> >>
> >> + if (!use_xml)
> >> + {
> >> + if (tdesc == tdesc_i386_linux_no_xml.get ()
> >> #ifdef __x86_64__
> >> - return amd64_get_ipa_tdesc_idx (tdesc);
> >> -#endif
> >> -
> >> - if (tdesc == tdesc_i386_linux_no_xml.get ())
> >> - return X86_TDESC_SSE;
> >> + || tdesc == tdesc_amd64_linux_no_xml.get ()
> >> +#endif /* __x86_64__ */
> >> + )
> >> + return x86_linux_xcr0_to_tdesc_idx (X86_XSTATE_SSE_MASK);
> >
> > What happens if neither of the two is true? Do we need to assert this?
> > Or do we need to just return the X86_XSTATE_SSE_MASK index
> > without checking, as this can't ever happen?
>
> You're right. I've changed the 'if' into 'gdb_assert', and made the
> return of an index based on X86_XSTATE_SSE_MASK unconditional (within
> the '!use_xml' block.
>
> >
> >
> >> + }
> >>
> >> - return i386_get_ipa_tdesc_idx (tdesc);
> >> + return x86_linux_xcr0_to_tdesc_idx (xcr0_storage);
> >> }
> >>
> >> /* The linux target ops object. */
> >> diff --git a/gdbserver/linux-x86-tdesc.cc b/gdbserver/linux-x86-tdesc.cc
> >> index af3735aa895..5e12526bf17 100644
> >> --- a/gdbserver/linux-x86-tdesc.cc
> >> +++ b/gdbserver/linux-x86-tdesc.cc
> >> @@ -28,96 +28,278 @@
> >> #include "x86-tdesc.h"
> >> #include "arch/i386-linux-tdesc.h"
> >>
> >> -/* Return the right x86_linux_tdesc index for a given XCR0. Return
> >> - X86_TDESC_LAST if can't find a match. */
> >> +/* A structure used to describe a single cpu feature that might, or might
> >> + not, be checked for when creating a target description for one of i386,
> >> + amd64, or x32. */
> >>
> >> -static enum x86_linux_tdesc
> >> -xcr0_to_tdesc_idx (uint64_t xcr0, bool is_x32)
> >> +struct x86_tdesc_feature {
> >> + /* The cpu feature mask. This is a mask against an xcr0 value. */
> >> + uint64_t feature;
> >
> > Can we elaborate the comment? Why do we need to mask anything?
> > Or maybe we can refer to the table below.
> >
> >
> >> + /* Is this feature checked when creating an i386 target description. */
> >> + bool is_i386;
> >> +
> >> + /* Is this feature checked when creating an amd64 target description. */
> >> + bool is_amd64;
> >> +
> >> + /* Is this feature checked when creating an x32 target description. */
> >> + bool is_x32;
> >> +};
> >> +
> >> +/* A constant table that describes all of the cpu features that are
> >> + checked when building a target description for i386, amd64, or x32. */
> >> +
> >
> > I am missing a bit of elaboration on why we can't only rely on XCR0. And
> > the table doesn't describe all CPU features that are checked. It just describes
> > all XSTATE features. There is also segments and orig_rax and in the near future
> > a new register for CET, which are independent of XSTATE.
>
> I can rename the data structures to make it clearer that this all
> relates to xstate/xcr0.
That would be good.
A side node: Over the last couple of days I remember that we will need something
aside from XCR0 also for AVX10 (basically avx512 but 256-bit registers only) and
probably AMX as well. And APX. Mostly some CPUID bits or a register in the
case of AMX. But I see that you already responded in patch 11 to my fear about
the map.
> I was aware about the segments flag that is
> passed into the tdesc creation, but even with prompting I can't see
> anything related to orig_rax -- how is that fed into the tdesc creation
> process?
Both segments and orig_rax are added unconditionally in amd64-linux-tdep.c
(or the i386 equivalent). They are controlled via the "bool segments" and
"bool is_linux" args of "*_create_target_description()". Unfortunately my
knowledge is pretty spotty on these two as well, and I didn't try to dig
out the patches that added them.
> >
> >
> >> +static constexpr x86_tdesc_feature x86_linux_all_tdesc_features[] = {
> >> + /* Feature, i386, amd64, x32. */
> >> + { X86_XSTATE_PKRU, true, true, true },
> >> + { X86_XSTATE_AVX512, true, true, true },
> >> + { X86_XSTATE_AVX, true, true, true },
> >> + { X86_XSTATE_MPX, true, true, false },
> >> + { X86_XSTATE_SSE, true, false, false },
> >> + { X86_XSTATE_X87, true, false, false }
> >> +};
> >
> > I have never looked at IPA code much. But this table looked a bit weird to me.
> > I get that MPX is not supported for x32. Though MPX is already deprecated and
> will
> > be removed once GDB 15 is branched (at least that is the plan).
>
> You must excuse my lack of up to date knowledge of different x86
> features, but is there not hardware in the wild with the MPX feature?
> Wont removing support for this mean folk will be unable to debug on that
> hardware?
Intel deprecated MPX in 2019 for various reasons:
https://en.wikipedia.org/wiki/Intel_MPX
I think that means no-one really should use MPX anymore, even if their CPU
supports it.
Since GCC, glibc and Linux don't support it anymore for a while, we also
deprecated it:
https://sourceware.org/git/?p=binutils-gdb.git;a=commit;h=7650ea38908e98a5823a334286813eca2ff5719e
Another argument for that deprecation is Intel APX, which has been announced
for future CPUs. It will re-use the MPX XSTATE area. While there is a new/different
bit for APX in the XSTATE header, which would allow us to keep support
for both types of registers, it is still a much needed deprecation in my view.
The code is already complex enough.
> > But why does amd64 not have x87 and SSE? I do see e.g. st0 and xmm0 on
> amd64.
> >
> > After digging a bit:
> > In arch/amd64.c, we call create_feature_i386_64bit_sse() without any check
> for
> > SSE in XCR0. And I see that we have st0 in the "core" registers with EAX etc.
> > But in arch/i386.c it is different, and we add SSE based on X86_XSTATE_SSE.
> > And while st0 is also in the "core" registers with EAX etc., we only add them
> based
> > on X86_XSTATE_X87. To me this looks wrong. Why would CPUs without x87
> > not add EAX? And even if it isn't for some reason, do we really want to support
> > such old CPUs? In my view we could just align the two.
> >
> > If we would do that, and deprecate MPX, the table looks unnecessary. Or did I
> miss
> > something else?
>
> That looks like a reasonable conclusion.
>
> Honestly, pretty much everything in this patch is based on the idea of
> merging gdbserver and GDB code, while keeping functionality as similar
> as possible.
Which is a really good thing. Thanks for tackling this!
> >
> > This is a complicated series. Like others I am wondering how many users IPA
> > really has and if it is worth maintaining. But I have no data. Is it in any distros?
>
> I have no idea. But I really don't want to tie this series (which fixes
> actual bugs caused by tdesc mismatch between GDB and gdbserver) to the
> removal of IPA.
>
Totally fine with me.
> As far as I can tell the IPA is tested as part of the gdb.trace/
> sub-directory, so it's not like we're removing some untested broken
> corner of GDB. We'd be removing a somewhat tested, at least minimally
> working, feature.
>
Ok by me, I was only wondering. It would for sure need a separate discussion
and series.
Thanks,
Felix
Intel Deutschland GmbH
Registered Address: Am Campeon 10, 85579 Neubiberg, Germany
Tel: +49 89 99 8853-0, www.intel.de
Managing Directors: Sean Fennelly, Jeffrey Schneiderman, Tiffany Doon Silva
Chairperson of the Supervisory Board: Nicole Lau
Registered Office: Munich
Commercial Register: Amtsgericht Muenchen HRB 186928
next prev parent reply other threads:[~2024-05-08 7:47 UTC|newest]
Thread overview: 119+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-02-01 15:28 [PATCH 0/7] x86/Linux Target Description Changes Andrew Burgess
2024-02-01 15:28 ` [PATCH 1/7] gdbserver: convert have_ptrace_getregset to a tribool Andrew Burgess
2024-02-01 15:28 ` [PATCH 2/7] gdb/x86: move reading of cs and ds state into gdb/nat directory Andrew Burgess
2024-02-01 15:28 ` [PATCH 3/7] gdbserver/x86: move no-xml code earlier in x86_linux_read_description Andrew Burgess
2024-02-01 15:28 ` [PATCH 4/7] gdb/gdbserver: share I386_LINUX_XSAVE_XCR0_OFFSET definition Andrew Burgess
2024-02-01 15:28 ` [PATCH 5/7] gdb/gdbserver: share some code relating to target description creation Andrew Burgess
2024-02-01 15:28 ` [PATCH 6/7] gdbserver: update target description creation for x86/linux Andrew Burgess
2024-02-01 15:28 ` [PATCH 7/7] gdb/gdbserver: share x86/linux tdesc caching Andrew Burgess
2024-03-05 17:00 ` [PATCHv2 0/7] x86/Linux Target Description Changes Andrew Burgess
2024-03-05 17:00 ` [PATCHv2 1/7] gdbserver: convert have_ptrace_getregset to a tribool Andrew Burgess
2024-03-05 17:00 ` [PATCHv2 2/7] gdb/x86: move reading of cs and ds state into gdb/nat directory Andrew Burgess
2024-03-05 17:00 ` [PATCHv2 3/7] gdbserver/x86: move no-xml code earlier in x86_linux_read_description Andrew Burgess
2024-03-05 17:00 ` [PATCHv2 4/7] gdb/gdbserver: share I386_LINUX_XSAVE_XCR0_OFFSET definition Andrew Burgess
2024-03-05 17:00 ` [PATCHv2 5/7] gdb/gdbserver: share some code relating to target description creation Andrew Burgess
2024-03-05 17:00 ` [PATCHv2 6/7] gdbserver: update target description creation for x86/linux Andrew Burgess
2024-03-19 16:01 ` John Baldwin
2024-03-19 18:34 ` Andrew Burgess
2024-03-21 17:28 ` John Baldwin
2024-03-26 10:01 ` Luis Machado
2024-03-26 15:31 ` Tom Tromey
2024-03-05 17:00 ` [PATCHv2 7/7] gdb/gdbserver: share x86/linux tdesc caching Andrew Burgess
2024-03-19 16:05 ` [PATCHv2 0/7] x86/Linux Target Description Changes John Baldwin
2024-03-23 16:35 ` [PATCHv3 0/8] " Andrew Burgess
2024-03-23 16:35 ` [PATCHv3 1/8] gdbserver: convert have_ptrace_getregset to a tribool Andrew Burgess
2024-03-23 16:35 ` [PATCHv3 2/8] gdb/x86: move reading of cs and ds state into gdb/nat directory Andrew Burgess
2024-03-23 16:35 ` [PATCHv3 3/8] gdbserver/x86: move no-xml code earlier in x86_linux_read_description Andrew Burgess
2024-03-23 16:35 ` [PATCHv3 4/8] gdb/gdbserver: share I386_LINUX_XSAVE_XCR0_OFFSET definition Andrew Burgess
2024-03-23 16:35 ` [PATCHv3 5/8] gdb/gdbserver: share some code relating to target description creation Andrew Burgess
2024-03-23 16:35 ` [PATCHv3 6/8] gdb/arch: assert that X86_XSTATE_MPX is not set for x32 Andrew Burgess
2024-03-23 16:35 ` [PATCHv3 7/8] gdbserver: update target description creation for x86/linux Andrew Burgess
2024-03-23 16:35 ` [PATCHv3 8/8] gdb/gdbserver: share x86/linux tdesc caching Andrew Burgess
2024-03-26 12:17 ` Andrew Burgess
2024-03-25 17:20 ` [PATCHv3 0/8] x86/Linux Target Description Changes Andrew Burgess
2024-03-25 18:26 ` Simon Marchi
2024-03-26 12:15 ` Andrew Burgess
2024-03-26 13:51 ` H.J. Lu
2024-03-26 14:16 ` H.J. Lu
2024-03-26 16:36 ` Andrew Burgess
2024-03-26 19:03 ` Andrew Burgess
2024-04-05 12:33 ` [PATCHv4 00/10] " Andrew Burgess
2024-04-05 12:33 ` [PATCHv4 01/10] gdbserver/ipa/x86: remove unneeded declarations Andrew Burgess
2024-04-05 12:33 ` [PATCHv4 02/10] gdbserver: convert have_ptrace_getregset to a tribool Andrew Burgess
2024-04-05 12:33 ` [PATCHv4 03/10] gdb/x86: move reading of cs and ds state into gdb/nat directory Andrew Burgess
2024-04-05 12:33 ` [PATCHv4 04/10] gdbserver/x86: move no-xml code earlier in x86_linux_read_description Andrew Burgess
2024-04-05 12:33 ` [PATCHv4 05/10] gdb/gdbserver: share I386_LINUX_XSAVE_XCR0_OFFSET definition Andrew Burgess
2024-04-05 12:33 ` [PATCHv4 06/10] gdb/gdbserver: share some code relating to target description creation Andrew Burgess
2024-04-05 12:33 ` [PATCHv4 07/10] gdb/arch: assert that X86_XSTATE_MPX is not set for x32 Andrew Burgess
2024-04-05 12:33 ` [PATCHv4 08/10] gdbserver: update target description creation for x86/linux Andrew Burgess
2024-04-05 12:33 ` [PATCHv4 09/10] gdb: move xcr0 == 0 check into i386_linux_core_read_description Andrew Burgess
2024-04-05 12:33 ` [PATCHv4 10/10] gdb/gdbserver: share x86/linux tdesc caching Andrew Burgess
2024-04-09 18:37 ` [PATCHv4 00/10] x86/Linux Target Description Changes John Baldwin
2024-04-25 13:35 ` Willgerodt, Felix
2024-04-25 16:06 ` Andrew Burgess
2024-04-26 15:01 ` [PATCHv5 00/11] " Andrew Burgess
2024-04-26 15:01 ` [PATCHv5 01/11] gdbserver/ipa/x86: remove unneeded declarations Andrew Burgess
2024-04-29 14:34 ` Willgerodt, Felix
2024-05-07 15:05 ` Andrew Burgess
2024-05-08 7:49 ` Willgerodt, Felix
2024-04-26 15:01 ` [PATCHv5 02/11] gdbserver: convert have_ptrace_getregset to a tribool Andrew Burgess
2024-04-29 14:34 ` Willgerodt, Felix
2024-05-07 15:28 ` Andrew Burgess
2024-04-26 15:01 ` [PATCHv5 03/11] gdb/x86: move reading of cs and ds state into gdb/nat directory Andrew Burgess
2024-04-29 14:34 ` Willgerodt, Felix
2024-04-26 15:01 ` [PATCHv5 04/11] gdb/x86: move have_ptrace_getfpxregs global " Andrew Burgess
2024-04-29 14:34 ` Willgerodt, Felix
2024-04-26 15:01 ` [PATCHv5 05/11] gdbserver/x86: move no-xml code earlier in x86_linux_read_description Andrew Burgess
2024-04-29 14:34 ` Willgerodt, Felix
2024-05-07 11:55 ` Luis Machado
2024-05-07 15:43 ` Andrew Burgess
2024-05-07 15:56 ` Luis Machado
2024-05-08 7:49 ` Willgerodt, Felix
2024-05-08 13:18 ` Andrew Burgess
2024-04-26 15:01 ` [PATCHv5 06/11] gdb/gdbserver: share I386_LINUX_XSAVE_XCR0_OFFSET definition Andrew Burgess
2024-04-29 14:34 ` Willgerodt, Felix
2024-04-26 15:01 ` [PATCHv5 07/11] gdb/gdbserver: share some code relating to target description creation Andrew Burgess
2024-04-29 14:34 ` Willgerodt, Felix
2024-05-07 11:40 ` Andrew Burgess
2024-04-26 15:01 ` [PATCHv5 08/11] gdb/arch: assert that X86_XSTATE_MPX is not set for x32 Andrew Burgess
2024-04-29 14:34 ` Willgerodt, Felix
2024-05-07 16:08 ` Andrew Burgess
2024-04-26 15:01 ` [PATCHv5 09/11] gdbserver: update target description creation for x86/linux Andrew Burgess
2024-04-29 14:35 ` Willgerodt, Felix
2024-05-07 14:24 ` Andrew Burgess
2024-05-08 7:47 ` Willgerodt, Felix [this message]
2024-05-08 13:28 ` Andrew Burgess
2024-04-26 15:01 ` [PATCHv5 10/11] gdb: move xcr0 == 0 check into i386_linux_core_read_description Andrew Burgess
2024-04-29 14:35 ` Willgerodt, Felix
2024-04-26 15:01 ` [PATCHv5 11/11] gdb/gdbserver: share x86/linux tdesc caching Andrew Burgess
2024-04-29 14:35 ` Willgerodt, Felix
2024-05-07 14:50 ` Andrew Burgess
2024-05-08 7:49 ` Willgerodt, Felix
2024-05-08 16:09 ` Andrew Burgess
2024-05-08 16:46 ` [PATCHv6 0/9] x86/Linux Target Description Changes Andrew Burgess
2024-05-08 16:46 ` [PATCHv6 1/9] gdb/gdbserver: share I386_LINUX_XSAVE_XCR0_OFFSET definition Andrew Burgess
2024-05-08 16:46 ` [PATCHv6 2/9] gdbserver/x86: move no-xml code earlier in x86_linux_read_description Andrew Burgess
2024-05-08 16:46 ` [PATCHv6 3/9] gdb/x86: move have_ptrace_getfpxregs global into gdb/nat directory Andrew Burgess
2024-05-08 22:52 ` John Baldwin
2024-05-08 16:46 ` [PATCHv6 4/9] gdb/x86: move have_ptrace_getregset " Andrew Burgess
2024-05-08 22:53 ` John Baldwin
2024-05-08 16:46 ` [PATCHv6 5/9] gdb/x86: move reading of cs and ds state " Andrew Burgess
2024-05-08 16:46 ` [PATCHv6 6/9] gdb: move xcr0 == 0 check into i386_linux_core_read_description Andrew Burgess
2024-05-08 22:54 ` John Baldwin
2024-05-08 16:46 ` [PATCHv6 7/9] gdb/gdbserver: share some code relating to target description creation Andrew Burgess
2024-05-08 22:58 ` John Baldwin
2024-05-08 16:46 ` [PATCHv6 8/9] gdbserver: update target description creation for x86/linux Andrew Burgess
2024-05-08 16:46 ` [PATCHv6 9/9] gdb/gdbserver: share x86/linux tdesc caching Andrew Burgess
2024-05-11 10:08 ` [PATCHv7 0/9] x86/Linux Target Description Changes Andrew Burgess
2024-05-11 10:08 ` [PATCHv7 1/9] gdb/gdbserver: share I386_LINUX_XSAVE_XCR0_OFFSET definition Andrew Burgess
2024-05-11 10:08 ` [PATCHv7 2/9] gdbserver/x86: move no-xml code earlier in x86_linux_read_description Andrew Burgess
2024-05-11 10:08 ` [PATCHv7 3/9] gdb/x86: move have_ptrace_getfpxregs global into gdb/nat directory Andrew Burgess
2024-05-11 10:08 ` [PATCHv7 4/9] gdb: move have_ptrace_getregset declaration " Andrew Burgess
2024-05-11 10:08 ` [PATCHv7 5/9] gdb/x86: move reading of cs and ds state " Andrew Burgess
2024-05-11 10:08 ` [PATCHv7 6/9] gdb: move xcr0 == 0 check into i386_linux_core_read_description Andrew Burgess
2024-05-11 10:08 ` [PATCHv7 7/9] gdb/gdbserver: share some code relating to target description creation Andrew Burgess
2024-05-17 11:59 ` Willgerodt, Felix
2024-05-11 10:08 ` [PATCHv7 8/9] gdbserver: update target description creation for x86/linux Andrew Burgess
2024-05-17 12:00 ` Willgerodt, Felix
2024-05-11 10:08 ` [PATCHv7 9/9] gdb/gdbserver: share x86/linux tdesc caching Andrew Burgess
2024-05-17 12:00 ` Willgerodt, Felix
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=MN2PR11MB4566211F1B5A049AC5CAA4F68EE52@MN2PR11MB4566.namprd11.prod.outlook.com \
--to=felix.willgerodt@intel.com \
--cc=aburgess@redhat.com \
--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).