This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: RFC: partially available registers


On Wednesday 27 July 2011 20:08:26, Tom Tromey wrote:
> Pedro> ... but I think that we should go with 0, instead of <unavailable>,
> Pedro> meaning changing x87-tdep.c:i387_supply_xsave to supply
> Pedro> explicity zeroed buffer, instead of a NULL pointer, like
> Pedro> gdbserver does.
> 
> Tom> I will do this.
> 
> Here's the patch.

Thanks.  Why only the AVX state though?  There are
several other places in the same function that
pass NULL to regcache_raw_supply that I think
should get the same treatment.

i387_supply_xsave accepts and handles a NULL XSAVE
argument.  I suppose it's for cores that miss the
xsave section?  I can't quite tell what path ends 
up calling i387_supply_xsave with NULL.  Maybe it's
dead code (I remember this code having changed a bit
the design throughout the review iterations; this bit may
have been left behind).  If not dead, that may be a genuine
case for <unavailable>.

> 
> In absence of comment I will check it in, in a couple of days.
> 
> Built and regtested by the buildbot.
> 
> Tom
> 
> 2011-07-27  Tom Tromey  <tromey@redhat.com>
> 
> 	* i387-tdep.c (i387_supply_xsave): Supply zero for high bits of
> 	AVX registers.
> 
> diff --git a/gdb/i387-tdep.c b/gdb/i387-tdep.c
> index c4ace82..332d491 100644
> --- a/gdb/i387-tdep.c
> +++ b/gdb/i387-tdep.c
> @@ -798,17 +798,26 @@ i387_supply_xsave (struct regcache *regcache, int regnum,
>        /* Handle the upper YMM registers.  */
>        if ((tdep->xcr0 & I386_XSTATE_AVX))
>  	{
> +	  gdb_byte buf[MAX_REGISTER_SIZE];
> +
>  	  if ((clear_bv & I386_XSTATE_AVX))
> -	    p = NULL;
> +	    {
> +	      memset (buf, 0, sizeof (buf));
> +	      p = NULL;
> +	    }
>  	  else
>  	    p = regs;
>  
>  	  for (i = I387_YMM0H_REGNUM (tdep);
>  	       i < I387_YMMENDH_REGNUM (tdep); i++)
>  	    {
> +	      const void *arg;
> +
>  	      if (p != NULL)
> -		p = XSAVE_AVXH_ADDR (tdep, regs, i);
> -	      regcache_raw_supply (regcache, i, p);
> +		arg = XSAVE_AVXH_ADDR (tdep, regs, i);
> +	      else
> +		arg = buf;
> +	      regcache_raw_supply (regcache, i, arg);
>  	    }
>  	}
>  
> 

-- 
Pedro Alves


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]