From: Pedro Alves <pedro@codesourcery.com>
To: "H.J. Lu" <hjl.tools@gmail.com>
Cc: gdb-patches@sourceware.org
Subject: Re: Fix solib-disc.exp regression with x86 gdbserver
Date: Mon, 12 Apr 2010 07:46:00 -0000 [thread overview]
Message-ID: <201004120845.56101.pedro@codesourcery.com> (raw)
In-Reply-To: <t2k6dc9ffc81004111412z5b9e4128k6102e036ca33d15@mail.gmail.com>
On Sunday 11 April 2010 22:12:08, H.J. Lu wrote:
> This patch breaks gdbserver on AVX. We have
>
> 1. Connect from GDB with XML support:
> gdbserver enables XML support.
> 2. Disconnect.
> 3. Reconnect from any GDB
> a. gdberver assumes GDB doesn't support XML sets to
> target to Linux without AVX.
> b. Gdbserver aborts when it tries to invalidate regcache
> since the target doesn't support AVX registers.
>
> I will try to fix it.
>
Then, this means we're invalidating the regcache too late.
We're flushing the old regcache contents to the threads, that were
created using the previous gdb's register layout, but we're flushing
the data using the _new_ register cache layout and low target
methods. That sounds wrong indeed.
I think this would help. Or is this still too late?
--
Pedro Alves
2010-04-12 Pedro Alves <pedro@codesourcery.com>
gdb/gdbserver/
* regcache.c (set_register_cache): Invalidate regcaches before
changing the register cache layout.
(regcache_invalidate_one): Allow a NULL regcache.
* linux-x86-low.c (x86_linux_update_xmltarget): Invalidate
regcaches before changing the register cache layout or the target
regsets.
---
gdb/gdbserver/linux-x86-low.c | 5 +++++
gdb/gdbserver/regcache.c | 7 +++++++
2 files changed, 12 insertions(+)
Index: src/gdb/gdbserver/regcache.c
===================================================================
--- src.orig/gdb/gdbserver/regcache.c 2010-04-12 08:03:43.000000000 +0100
+++ src/gdb/gdbserver/regcache.c 2010-04-12 08:20:23.000000000 +0100
@@ -61,6 +61,9 @@ regcache_invalidate_one (struct inferior
regcache = (struct regcache *) inferior_regcache_data (thread);
+ if (regcache == NULL)
+ return;
+
if (regcache->registers_valid)
{
struct thread_info *saved_inferior = current_inferior;
@@ -149,6 +152,10 @@ set_register_cache (struct reg *regs, in
{
int offset, i;
+ /* Before changing the register cache internal layout, flush the
+ contents of valid caches back to the threads. */
+ regcache_invalidate ();
+
reg_defs = regs;
num_registers = n;
Index: src/gdb/gdbserver/linux-x86-low.c
===================================================================
--- src.orig/gdb/gdbserver/linux-x86-low.c 2010-04-12 08:23:08.000000000 +0100
+++ src/gdb/gdbserver/linux-x86-low.c 2010-04-12 08:37:57.000000000 +0100
@@ -841,6 +841,11 @@ x86_linux_update_xmltarget (void)
if (!current_inferior)
return;
+ /* Before changing the register cache internal layout or the target
+ regsets, flush the contents of the current valid caches back to
+ the threads. */
+ regcache_invalidate ();
+
pid = pid_of (get_thread_lwp (current_inferior));
#ifdef __x86_64__
if (num_xmm_registers == 8)
next prev parent reply other threads:[~2010-04-12 7:46 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-04-11 1:52 Pedro Alves
2010-04-11 14:04 ` H.J. Lu
2010-04-11 14:18 ` Pedro Alves
2010-04-11 15:43 ` H.J. Lu
2010-04-11 16:17 ` Pedro Alves
2010-04-11 16:22 ` H.J. Lu
2010-04-11 16:59 ` H.J. Lu
2010-04-11 16:04 ` H.J. Lu
2010-04-11 16:13 ` Pedro Alves
2010-04-11 16:18 ` H.J. Lu
2010-04-11 21:12 ` H.J. Lu
2010-04-11 21:18 ` H.J. Lu
2010-04-12 7:46 ` Pedro Alves [this message]
2010-04-12 13:05 ` H.J. Lu
2010-04-12 13:26 ` Pedro Alves
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=201004120845.56101.pedro@codesourcery.com \
--to=pedro@codesourcery.com \
--cc=gdb-patches@sourceware.org \
--cc=hjl.tools@gmail.com \
/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